Lightning talks¶
Improving our description for lightning talks¶
Thomas Aglassinger
With our recent invitation to this event, was lacking some information that raised questions, in particular:
- Is the event in German or English?
- How can one propose talks?
- When does the event start?
Together, we improved the template for future meetups with lightning talks:
Lightning talks are very short presentations lasting only a few minutes. They are a great opportunity to share your knowledge with others and learn about multiple topics at once.
Did you find a helpful Python package? Did you encounter Python at a place you never expected? Did you see an interesting talk at a Python conference? Did you learn about a nifty tool that simplifies Python development? Did you automate a boring chore using Python?
Make a short presentation about it, typically 5 to 10 minutes, though it's perfectly fine to be quicker. If needed, use slides, show a related website - or just talk.
Of course, everyone is welcome to just watch and listen, even without giving a talk.
There is no need to propose a talk beforehand. Just drop by and we arrange the agenda together.
The event will be held in English unless everyone on site speaks German. For slides, English is recommended so the information can be accessed afterward by a large audience.
PyCon Austria 2026¶
Horst Jens
Website for pycon.at
The PyCon Austria 2026 will take place on 2026-04-19 and 2026-04-20 in Eisenstadt.
Attendance is free of charge, though it is highly appreciated if you register to help with planning.
You can actively support the event by helping out on site or while preparing for it. In particular, the organizers are always looking for volunteers to:
- host sessions
- help with the registration process
- help with the logistics
If you are interested in helping out, please contact them.
If you want to support the event financially or present your product, various sponsor packages are available.
For Python-related user groups or open source projects there also is the option to have a stand at the venue free of charge where you can inform people about your project or service.
Linuxtage 2026¶
Thomas Aglassinger
Website for Grazer Linuxtage
This year the Grazer Linuxtage will take place on 2025-04-10 and 2025-04-11. For more information, see Linuxtage 2026.
The call for papers is already open and will run until 2026-01-31.
Jupyter environments¶
Dorian Santner
A look into the updates in the juypter environment. Time was to short for some; so I mainly demoed Jupyter-AI. Still the other extensions are are interesting to look into too ..
- Jupyter GIS
- Jupyter AI
- Jupyter Text and Quarto
- yFiles for Jupyter - interactive Graphs - not mentioned in talk
- Jupyter Rise - Slides in Jupyter - not mentioned in talk
Variational Autoencorders: the cognitive scientist’s favorite deep learning tool¶
Alberto Barradas
VAEs-in-CogSci
Variational autoencoders (VAEs) are a type of generative model that can be used to learn latent representations of data.
For instance, VAEs have been used to model how humans learn and represent facial expressions of emotions. By training VAEs on datasets of facial images, researchers have shown that the latent space can capture meaningful variations in facial features corresponding to different emotional states.
This is part of an ongoing series of talks about variational autoencoders. You can find the dates of these talks on the r3 calendar.
Bejeweled bot¶
Suchita Kulkarni
TODO
TODO@Suchita: Add short description.
Also of possible interest: Music map of related artists
Adding an MCP server to an existing FastAPI application¶
Christoph Reiter
Adding a simple MCP server to an existing FastAPI application and calling the MCP provided tools via LibreChat.
Tools used:
- https://github.com/modelcontextprotocol/inspector - tool for inspecting the MCP server locally.
- https://github.com/modelcontextprotocol/python-sdk - package for implementing the MCP server.
- https://www.librechat.ai/docs/configuration/librechat_yaml/object_structure/mcp_servers - for integrating the MCP server into LibreChat.
The existing FastAPI application with MCP support is available at https://github.com/msys2/msys2-web/blob/main/app/mcp.py and running at https://packages.msys2.org/mcp/mcp if you want to give it a try.
FastAPI with Multiple Event Loops with Free-Threaded Python¶
Christoph Reiter
Instead of using Gunicorn, which spawns multiple processes, each with its own event loop, we can use Granian, which supports multiple event loops and threads within the same process. To do so, we need to use free-threaded Python so that all event loops and threads can take advantage of all CPU cores. This lowers memory consumption and makes it easier to share data between workers.
- https://blog.baro.dev/p/the-future-of-python-web-services-looks-gil-free - blog post by the author of granian about free-threaded Python web services including benchmarks.
- https://github.com/emmett-framework/grania - granian web server
Example program:
import os
import threading
import asyncio
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def root():
pid = os.getpid()
tid = threading.get_native_id()
loop = asyncio.get_running_loop()
print(f"Process ID: {pid}, Native Thread ID: {tid}, Event Loop ID: {id(loop)}")
for i in range(10000000):
pass
return {"message": "Hello World"}
uv add granian- to install granianuv run --python 3.14t granian --interface asgi --workers 2 main:app --port 9000- to run the FastAPI application with granian using free-threaded Python 3.14ab -c5 -n20 http://127.0.0.1:9000/- to benchmark the application with ApacheBench
ijson¶
Thomas Aglassinger
ijson on PyPI
The Python library includes a json module to parse and render data in JSON format. It works find for many use cases, but it is not optimized for large JSON files because it loads the entire file into memory.
I recently had a requirement to be able to process a 2 GB JSON file on a Raspberry Pi with 2 GB RAM, so the standard module was no option.
Enter ijson, which can iteratively parse selected portions of large JSON files by specifying the path in the objects tree. To iterate over lists, add item to the path.
Example, based on the documentation:
import ijson
# Create an iterater for all items in a JSON file available from a website.
item_stream = urlopen('http://.../')
items = ijson.items(item_stream, 'earth.europe.item')
# Create a generator to iterate over all items of type 'city'.
cities = (item for item in items if item['type'] == 'city')
# Process each city.
for city in cities:
do_something_with(city)
For even more control, an event based parser is available the works similarly to xml.parser.expat from the standard library.
Time and location¶
Tuesday, November 4th 2025, 19:00 - 21:00
Realraum, Brockmanngasse 15, 8020 Graz