Python
๐๐จ๐๐ ๐ ๐จ๐ฅ๐ for a Python interpreter
When I was young, I enjoyed writing small, #cryptic code. Always happy to know some language quirk (in Turbo Pascal, Java, C, C++, #Python ..) which could save some characters. Small code is better code, like we all know ๐ Or not (common sense: smaller code is mostly unreadable and therefore harder to maintain.) And that game of writing minimal code is called Code golf.
A post byย Austin Henley last week triggered me again. (Thank you.) He aimed to write a ๐ฆ๐ข๐ง๐ข๐ฆ๐๐ฅ ๐๐ฒ๐ญ๐ก๐จ๐ง ๐ข๐ง๐ญ๐๐ซ๐ฉ๐ซ๐๐ญ๐๐ซ in initially 512 bytes, then figured out that at least 1024 are needed. So one kilobyte for an interpreter which can run a ๐ ๐ข๐ณ๐ณ-๐๐ฎ๐ณ๐ณ program. An interpreter is a program whose job is: read the program code and execute it. And a Fizz-Buzz is a really simple coding test, similar to a Hello World. But Austin might be able to explain this better, since he is an ex-professor from Carnegie Mellon.
Anyway: so I tried to build my own version from scratch with an LLM as working partner and armed my C skills. Thirteen versions later I came down to 959 bytes, which can still handle real Python programs (of course, limited subset, just like the original 1024-byte version did). When I dropped some primitives I came down to 622 bytes, but then it was really only possible to execute the control version of that Fizz-Buzz test.
Shrinking gains came from:
* collapsing variable names to one letter
* deleting everything that is written for humans
* cleaning the input once
* swapping instructions for a shorter version (heavy testing and iteration on that)
* order of the sections โ sometimes a better arrangement can save a repetition
As always: you can check the versions of the code yourself at https://github.com/marcelpetrick/codingWithGPT/tree/master/pythonInterpreterCodeGolf
And if now someone expected a clever outcome or clue or underlying message: there is none. ๐๐ฎ๐ซ๐ ๐ก๐จ๐๐๐ฒ.
Containerized ๐๐๐ซ๐ฆ๐๐ง๐๐ฎ๐๐ ๐ฆ
Some of you might remember I released GermanDubI this week โ a tool with a neat UI/UX to replace the English audio track of YouTube videos with a German one. Works quite well and has already served its purpose several times. The kids could watch some interesting historical videos.
So, a release does not mean my work stops. Software engineering as a craft means you maintain the product after its release. #SDLC โ maybe some have heard about it ๐
Using products also reveals some sporadic issues (dubbing could lead, in 5% of the runs, to a 100% CPU spin for ffmpeg, because of some overlapping tracks) โ all known ones are fixed now. I bumped all dependencies.
And I did one thing I forgot: I containerized the whole app. So the Docker image is now available on #ghcr.
$ ๐๐จ๐๐ค๐๐ซ ๐ฉ๐ฎ๐ฅ๐ฅ ๐ ๐ก๐๐ซ.๐ข๐จ/๐ฆ๐๐ซ๐๐๐ฅ๐ฉ๐๐ญ๐ซ๐ข๐๐ค/๐ ๐๐ซ๐ฆ๐๐ง๐๐ฎ๐๐ข:๐ฅ๐๐ญ๐๐ฌ๐ญ
And after that, it is a one- or two-liner copy-pasted to get it running. For ๐ฑ๐๐ and ๐๐๐ platforms.
I’ve already seen 16 downloads (๐ฅน), so definitely not “no one” is using it. On the other hand: ๐ ๐๐ฅ๐ฐ๐๐ฒ๐ฌ ๐ฐ๐จ๐ง๐๐๐ซ ๐ข๐ ๐ข๐ญ ๐ฆ๐๐ค๐๐ฌ ๐ฌ๐๐ง๐ฌ๐ ๐ญ๐จ ๐ ๐จ ๐ญ๐ก๐ ๐ฅ๐๐ฌ๐ญ ๐ฆ๐ข๐ฅ๐ ๐๐ง๐ ๐๐จ๐ง๐ญ๐๐ข๐ง๐๐ซ๐ข๐ณ๐ ๐๐ฉ๐ฉ๐ฌ. What is your view?
ps. the release version 0.4.2 is just a random match, not forced
My new image compression algorithm achieves rates of up to 632:1
๐ญ๐ฅ;๐๐ซ ๐ฅ๐ฅ๐ฆ๐๐๐ ๐๐จ๐ฆ๐ฉ๐ซ๐๐ฌ๐ฌ๐๐ฌ ๐ข๐ฆ๐๐ ๐๐ฌ ๐ข๐ง๐ญ๐จ ๐ฅ๐๐ง๐ ๐ฎ๐๐ ๐, ๐ง๐จ๐ญ ๐ฉ๐ข๐ฑ๐๐ฅ๐ฌ. ๐ ๐ฏ๐ข๐ฌ๐ข๐จ๐ง ๐ฆ๐จ๐๐๐ฅ ๐ญ๐ฎ๐ซ๐ง๐ฌ ๐ญ๐ก๐ ๐ข๐ฆ๐๐ ๐ ๐ข๐ง๐ญ๐จ ๐ ๐๐จ๐ฆ๐ฉ๐๐๐ญ ๐๐๐๐ ๐๐๐ฌ๐๐ซ๐ข๐ฉ๐ญ๐ข๐จ๐ง.
This week, a meme made the rounds about a young prodigy inventing a new way to compress photos. The idea behind it: derive the content of the image with a multimodal #vision-language model, then store this instead of the image. And when you want to view it, an #image-generation model recreates the content.
Simple. ๐๐ง๐ ๐ญ๐จ๐ญ๐๐ฅ๐ฅ๐ฒ ๐๐๐๐๐.
Running #JPEG with a quality setting 10 looks like archival preservation in comparison.
I saw the meme several times in my stream. Instead of laughing and getting back to work, I did the obvious thing: I built it.
Meet #llmPEG.
You get a tool for compression (driven by #Qwen-VL inside #ollama) and decompression (either #ComfyUI or the image-gen skill from #codex).
After the initial prototype was working, I did some refinement of the prompts with a GAN-ish style of loop: until we had – with the given metric – a sufficiently fitting reproduction.
Please don’t ask about wall-clock performance.
Compression: ~20 seconds.
Decompression: ~30 seconds.
But the compression rate! Always at least 100:1, if not better: check this page with examples: https://marcelpetrick.github.io/llmPEG/expanded.html
๐๐ญ ๐๐ข๐ซ๐ฌ๐ญ ๐ข๐ญ ๐ฐ๐๐ฌ ๐ ๐ฆ๐๐ฆ๐, ๐ง๐จ๐ฐ ๐ข๐ญ ๐ข๐ฌ ๐ ๐ญ๐จ๐จ๐ฅ ๐
Source code, if you want to run it yourself and/or contribute: https://github.com/marcelpetrick/llmPEG/
Video:
๐๐จ๐ฐ ๐ก๐จ๐ฆ๐จ๐ ๐๐ง๐๐จ๐ฎ๐ฌ ๐๐ซ๐ ๐ฆ๐ฒ ๐๐ฅ๐๐ฎ๐๐.๐ฆ๐/๐๐ ๐๐ง๐ญ๐ฌ.๐ฆ๐?
Out of curiosity I spent some time gathering and evaluating data, because during a discussion I was highly suspicious that a single agent instruction markdown (I prefer ๐ข๐จ๐ฆ๐ฏ๐ต๐ด.๐ฎ๐ฅ, just so you know) can cover all the custom aspects of a project. After all: if a generic agents.md can cover the needs of several projects, then we are in the domain of line work. And not of pushing the frontier.
Anyway: looks like I was handling 30 projects with #agenticAI in the past half year (arbitrary cut-off). The almighty collection git-repo “๐๐จ๐๐ข๐ง๐ ๐๐ข๐ญ๐ก๐๐๐” is still alive and kicking, therefore we had the case of one repo with SEVERAL agent.mds. Even with different naming (see where this goes?)
๐๐จ ๐ก๐๐ซ๐ ๐๐ซ๐ ๐ญ๐ก๐ ๐ซ๐๐ฌ๐ฎ๐ฅ๐ญ๐ฌ:
* 19 times I let them be named agents.md, only 11 times claude.md
* the language style was only 24% binding (must/never/always) – 42% advisory (should/prefer) and the rest unmarked
* the sections contained 73% rules; 13% project description guides, 6% command sheets and 7% reference material
* the heaviest context budget was/is paid for the one in “๐ค๐ญ๐ฐ๐ต๐ฉ๐ฆ๐ด๐๐ฆ๐ข๐ณ๐ค๐ฉ” – almost 7k tokens with 45 rules – yes, I spent a lot of time automating my shopping. This agents.md is more than double the size of any other in my analyzed projects!
* “๐ฏ๐๐ซ๐ข๐๐ฒ ๐๐๐๐จ๐ซ๐ ๐๐ฅ๐๐ข๐ฆ๐ข๐ง๐ ๐ฌ๐ฎ๐๐๐๐ฌ๐ฌ” is the most prominent instruction – appeared in 60% of my agent guides
* “one concern per commit” appeared only in 20% – which is weird. Everybody who works with me knows that ๐ ๐๐๐๐ ๐๐ญ๐จ๐ฆ๐ข๐ ๐๐จ๐ฆ๐ฆ๐ข๐ญ๐ฌ โข๏ธ
* only two agents.md files had not changed over the past 90 days – a sign that this guidance is a living object; ๐๐ฆ๐๐ซ๐๐๐ ๐๐ก๐๐ง๐ ๐!
* ๐จ๐ง๐ฅ๐ฒ ๐ญ๐ก๐ซ๐๐ ๐ซ๐๐ฉ๐จ๐ฌ๐ข๐ญ๐จ๐ซ๐ข๐๐ฌ ๐๐๐ซ๐ซ๐ข๐๐ ๐๐ฒ๐ญ๐-๐ข๐๐๐ง๐ญ๐ข๐๐๐ฅ ๐๐ ๐๐ง๐ญ๐ฌ.๐ฆ๐: why? It was my early phase, when I did really work with files while doing agentic software engineering, silly me ๐ถ๐ป
Ok, if you want to see more, check the images.
Else: ๐ก๐จ๐ฐ ๐๐จ ๐ฒ๐จ๐ฎ ๐ก๐๐ง๐๐ฅ๐ ๐ฒ๐จ๐ฎ๐ซ ๐๐ ๐๐ง๐ญ ๐ก๐๐ซ๐ง๐๐ฌ๐ฌ๐๐ฌ? ๐๐ฎ๐ข๐๐ ๐จ๐ซ ๐ฅ๐๐ญ ๐ญ๐ก๐๐ฆ ๐ซ๐จ๐๐ฆ ๐ฐ๐ข๐ฅ๐?
If someone else has done a review, post your results as well in the comments. I am interested. If someone needs the code for running this automatically – ping me, I’ll guide you to the repo.
#harness #claude #codex #anthropic #openai #ai
Videos automatisch รผbersetzen: ๐๐๐ซ๐ฆ๐๐ง๐๐ฎ๐๐
Eine clevere technische Lรถsung zu bauen ist meistens gar nicht das eigentliche Problem. Viel interessanter ist doch: Wie baut man etwas, das Leute wirklich benutzen wollen?
Ich wollte den Kindern ein richtig gutes Video รผber die rรถmische Armee zeigen. Nicht irgendein trockenes Erklรคrvideo, sondern eins, wo man denkt: Okay, das ist cool, da lernt man was. Problem war nur: die guten Videos waren auf Englisch.
Klar kann man sagen: Ist doch super, dann lernen die Kinder gleich noch Englisch. Stimmt. Aber wenn man zu viele Sachen gleichzeitig machen mรถchte, wird halt alles ein bisschen schlechter. Manchmal sollen sie einfach ein cooles Video schauen und dabei was lernen.
Also dachte ich: ๐๐ค๐ฉ, ๐ฅ๐ข๐ด ๐ฌ๐ข๐ฏ๐ฏ ๐ฅ๐ฐ๐ค๐ฉ ๐ฏ๐ช๐ค๐ฉ๐ต ๐ด๐ฐ ๐ด๐ค๐ฉ๐ธ๐ฆ๐ณ ๐ด๐ฆ๐ช๐ฏ. Video transkribieren, รผbersetzen, neue Tonspur drรผber und fertig.
Lass uns das mal schnell bauen.
Aus zwei Stunden wurden dann halt ๐ณ๐ฐ๐๐ข ๐๐๐ ๐.
Die erste Version war ein Command Line Tool. Hat funktioniert. Aber wenn ich das so verรถffentliche, benutzt das halt kaum jemand. Man sieht keinen Fortschritt, Fehler sind unรผbersichtlich, mehrere Videos parallel zu verarbeiten ist mรผhsam und wenn irgendwo etwas schieflรคuft, will man nicht jedes Mal den kompletten Workflow neu starten.
Also habe ich gedacht: ๐๐๐ง๐ง ๐ก๐๐ฅ๐ญ ๐ซ๐ข๐๐ก๐ญ๐ข๐ .
Schรถnes UI und Benutzerfรผhrung, mehrere Sprachen, parallele Verarbeitung, Fortschritt, Statistiken, Fehler direkt sichtbar, einzelne Schritte neu starten, Transkriptionen bearbeiten und gezielt neu generieren.
Und genau da merkt man halt den Unterschied zwischen einer technischen Lรถsung und einem Produkt.
Zeigst du jemandem ein Terminal und sagst: Damit kann ich Videos automatisch รผbersetzen, kommt meistens ein โAh, coolโ.
Zeigst du dieselbe Funktionalitรคt in einer Oberflรคche, wo sofort klar ist, was passiert und wo man einfach eingreifen kann, kommt plรถtzlich: โKann ich das ausprobieren?โ
Genau das wird meiner Meinung nach bei Software oft unterschรคtzt. Es reicht nicht, dass etwas clever ist und funktioniert. Es muss auch komfortabel sein. Leicht verstรคndlich. Leicht benutzbar. Und wenn etwas schieflรคuft, muss man trotzdem weiterkommen.
Das gilt รผbrigens auch fรผrs Setup. Wer ๐๐๐ซ๐ฆ๐๐ง๐๐ฎ๐๐ ausprobieren mรถchte, klont einfach das GitHub Repo (https://github.com/marcelpetrick/GermanDubI), kopiert drei Befehle aus der Anleitung ins Terminal und das Ding lรคuft.
Die technischen Details spare ich mir hier. Python, TypeScript, Uvicorn, Parallelverarbeitung, 95% Testcoverage, Pipelines und der ganze Kram. Darรผber kรถnnte ich noch stundenlang reden, weil mir das halt Spaร macht, aber am Ende interessiert das sowieso kaum jemanden.
Fรผr mich ist der interessantere Teil: ๐๐ฎ๐ฌ ๐๐ข๐ง๐๐ซ ๐ค๐ฅ๐๐ข๐ง๐๐ง ๐๐๐๐ ๐๐ข๐ง๐ ๐รถ๐ฌ๐ฎ๐ง๐ ๐ณ๐ฎ ๐๐๐ฎ๐๐ง, ๐๐ข๐ ๐ง๐ข๐๐ก๐ญ ๐ง๐ฎ๐ซ ๐ญ๐๐๐ก๐ง๐ข๐ฌ๐๐ก ๐๐ฎ๐ง๐ค๐ญ๐ข๐จ๐ง๐ข๐๐ซ๐ญ, ๐ฌ๐จ๐ง๐๐๐ซ๐ง ๐ฌ๐ข๐๐ก ๐๐ฎ๐๐ก ๐ฐ๐ข๐ ๐๐ข๐ง ๐๐ซ๐จ๐๐ฎ๐ค๐ญ ๐๐ง๐รผ๐ก๐ฅ๐ญ.
ESE 2026-Kongress-Selektor – ๐๐ฌ๐-๐๐๐ฌ๐ ๐รผ๐ซ ๐๐ฎ๐ฌ๐ญ๐จ๐ฆ ๐๐-๐๐๐ฌ๐ข๐ ๐ง
Zu Beginn die Klรคrung, dass ich weder mit dem Embedded Software Kongress verbandelt bin, noch bezahlt wurde etc.
Ich wรผrde gern dieses Jahr nach Sindelfingen reisen, also war es Zeit, die Agenda zu studieren. Die Webseiten bieten einen guten รberblick.
ABER: Sie kรถnnten etwas komfortabler in der Bedienung sein. Denn fรผr eine fundierte Entscheidung brauche ich die Info, was der Vortrag neben der spannenden Headline wirklich aufzeigen mรถchte. Jeden Vortrag im neuen Tab รถffnen und laden lassen? Nee, bitte nicht. Ebenfalls: eine Vorselektion fรผr die fรผr mich relevanten Bereiche: ๐๐ซ๐จ๐ฃ๐๐ค๐ญ- ๐ฎ๐ง๐ ๐๐๐๐ฆ-๐๐๐ง๐๐ ๐๐ฆ๐๐ง๐ญ, ๐๐ ๐๐ง๐ญ๐ข๐ ๐๐, ๐๐ค๐๐ฅ๐ข๐๐ซ๐ฎ๐ง๐ .
Also schnell den ๐๐๐_๐๐จ๐ง๐ ๐ซ๐๐ฌ๐ฌ_๐๐๐ฅ๐๐ค๐ญ๐จ๐ซ (https://github.com/marcelpetrick/ESE_Kongress_Selektor) in #Python implementiert.
Was brauchen wir hierfรผr? Einen #Scraper und eine statische Webseite. Der Export der Selektionen erfolgt via JSON. Die Struktur der Seiten wird mehr oder weniger รผbernommen.
Rasend schnell, Details zum Vortrag werden via Tooltip (statt auf einer neuen Seite) angezeigt, Filterung ist mรถglich.
Repo klonen und die ๐ฑ๐บ๐ต๐ฉ๐ฐ๐ฏ3 ๐ณ๐ถ๐ฏ.๐ฑ๐บ ausfรผhren, kurz warten und los geht’s.
๐๐๐ซ ๐ฉ๐ฅ๐๐ง๐ญ ๐ณ๐ฎ๐ฆ ๐๐๐ ๐ณ๐ฎ ๐๐๐ก๐ซ๐๐ง? ๐๐ง ๐ฐ๐๐ฅ๐๐ก๐๐ง ๐๐๐ ๐๐ง?
An die Organisatoren des @ESE: Falls ihr etwas vom Design รผbernehmen wollt โ gern, die GPLv3 macht es mรถglich.
Video (nicht sichtbar in Vorschau)
Good news: ๐๐๐๐ YAML translations with ๐๐ฎ๐ญ๐๐๐ข๐ง๐ ๐จ๐๐ฑ๐ฉ๐ซ๐๐ฌ๐ฌ ๐.๐.๐
Since #Qt is not the only champion in the embedded domain, I’ve expanded the supported frameworks by making it possible to run it on the #i18n files from #LVGL as well. Maybe it is handy for someone else too ๐
The new mode is invoked with --lvgl-yaml, and you have to do it explicitly. The existing usage for TS files remains unchanged.
The source YAML files also stay untouched, so the result is written to a file named for each output language.
In the background, I also did some other plumbing, which had been on the list for a while: GitHub Actions now also cover the dependency graph, neat badges showing the pipeline states in the README.md, updated dependencies, and some quality hardening. So we have 58 automated tests now, 100% statement coverage, and Pylint reports 10/10.
That polishing and the above-mentioned feature are the result of continuous market review and constant adaptation. New competitors and technical standards emerge; as developers, we should be ready to embrace change and adapt.
Give me feedback if some other translation files need coverage as well.
Link to to the repo:ย https://github.com/marcelpetrick/CuteLingoExpress
๐๐ง๐ฅ๐ฒ ๐% of my ๐ฉ๐ซ๐จ๐ฆ๐ฉ๐ญ๐ฌ contain ๐ฉ๐ซ๐จ๐๐๐ง๐ข๐ญ๐ฒ
Testing Muse Glimmer lead to some frustration, so I started the next prompt with something I wouldn’t write professionally.
And this led to the question: how often do I do this? I would have guessed that 10% of my machine-human interactions contain some swear words.
But why guess when you can evaluate the data and produce hard facts?
Therefore I prepared ๐ซ ๐๐ ๐๐ง๐ญ๐ข๐ ๐๐ฐ๐๐๐ซ ๐๐๐ซ as project on GitHub, which evaluates both your ๐๐จ๐๐๐ฑ and ๐๐ฅ๐๐ฎ๐๐ ๐๐จ๐๐ logs and gives you on the CLI a short two liner. And additionally you receive an HTML page in nice green IBM 3279-style. All locally, no AI or models involved, just some Python and HTML.
It will reveal to you how many swearwords were used, their frequency, streaks without swearing, which hour of the day the tension rises high, etc ..
What do you think? Anyone has a higher score to offer? Leave me a comment.
GitHub: https://github.com/marcelpetrick/AgenticSwearJar
PDF with full feature view:
Screenshot:
๐๐ฅ๐จ๐ฎ๐ ๐๐๐๐ฌ ๐๐ซ๐ ๐๐ฑ๐ฉ๐๐ง๐ฌ๐ข๐ฏ๐. ๐๐๐ญ๐๐ซ๐ฆ๐๐ฅ๐จ๐ง ๐ข๐ฌ ๐ง๐จ๐ญ. ๐
Vision models grow in their capabilities while the execution demands way fewer resources.
Means: my sales slip scanner-project from two years ago needed an upgrade. Before I was using GPT-4 Vision via the @OpenAI API, which costs you control over your data and a few cents for every analysis.
Now, after intensive benchmarking across a range of 15 models (with ๐๐ฅ๐ฅ๐๐ฆ๐) and some surprising regressions (newer harness doesn’t mean the models execute faster; it can also mean they suddenly run into model load errors…), I put my money on ๐๐ฐ๐๐ง๐.๐:๐๐. A casual language model with a ๐ฏ๐ข๐ฌ๐ข๐จ๐ง ๐๐ง๐๐จ๐๐๐ซ. My own benchmark over the selected models against the huge sample size of three receipts: all three were successfully evaluated. ๐
Then I built a ๐ก๐จ๐ญ-๐๐จ๐ฅ๐๐๐ซ-๐๐จ๐ง๐๐๐ฉ๐ญ around the script, and it works (thank you @Mr Zahorsky โ without whom I would have never come across that idea). For instance: in less than ten seconds, 13 samples were processed, and you get the result sum plus a fancy HTML overview for comparison.
๐๐๐ญ๐ ๐๐ง๐ญ๐ซ๐ฒ can be done for cheap: give the kids the smartphone, snap all receipts, throw out some watermelon slices ๐๐
If you want to run the tool as well, check my GitHub: https://github.com/marcelpetrick/sales-slip-scanner-ng. As said: a local GPU is the only thing you need; ๐ง๐จ ๐๐ฅ๐จ๐ฎ๐, ๐ง๐จ ๐๐๐ ๐ค๐๐ฒ๐ฌ, ๐ง๐จ ๐๐ซ๐๐๐ข๐ญ ๐๐๐ซ๐. Everything is now self-hosted. You’ll also find the benchmark of the vision models there, including the results.
๐๐ก๐ ๐๐ข๐ ๐ช๐ฎ๐๐ฌ๐ญ๐ข๐จ๐ง ๐ข๐ฌ: ๐ฐ๐ก๐๐ญ ๐ฌ๐ก๐จ๐ฎ๐ฅ๐ ๐ ๐๐ฎ๐ญ๐จ๐ฆ๐๐ญ๐ ๐ง๐๐ฑ๐ญ ๐ฐ๐ข๐ญ๐ก ๐ ๐ฅ๐จ๐๐๐ฅ ๐ฏ๐ข๐ฌ๐ข๐จ๐ง ๐ฆ๐จ๐๐๐ฅ? ๐๐ก๐๐ญ ๐ฐ๐จ๐ฎ๐ฅ๐ ๐ฒ๐จ๐ฎ ๐๐จ?
๐๐ฒ ๐๐ฉ๐ฉ๐ฌ ๐๐ซ๐ ๐ง๐จ๐ญ ๐๐๐๐ง๐๐จ๐ง๐ฐ๐๐ซ๐!
Yesterday, #RitterRadar got some updates: first, all dependencies were refreshed (no more CVEs); then I fixed some bugs I had noticed over the past few weeks; and finally, the best news: a new feature that gives you a copyable list of the events matching your current filter.
So, for instance, if you live near Potsdam and want to see all medieval events within 50 km over the next two months – you get this:
——-
04. Juli 2026 | Kinder- und Sommerfest in Gannahall 2026 | 14641 Nauen (26 km)
04. Juli 2026 – 05. Juli 2026 | Mythologie und Handwerk des Mittelalters 2026 | 15569 Woltersdorf (47 km)
22. Aug. 2026 – 23. Aug. 2026 | Sommerfest Lรผbarser Hofkulturdiverse Konzerte | 13469 Berlin (30 km)
29. Aug. 2026 | Mittelalterliches zum Ackerbรผrgerfest | 14641 Nauen (26 km)
——-
#FastAPI #WebScraping #OpenStreetMap #Geocoding #OpenSource #EventDiscovery
URL to the GitHub-project: https://github.com/marcelpetrick/RitterRadarย if you haven’t given it a try yet โ๏ธ๐





















