marcelpetrick
๐๐ง๐ฅ๐ฒ ๐% 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:
3/x: ๐๐ซ๐จ๐๐ข๐ง๐ ๐จ: pipelines
In a feature-driven world, support-software rarely gets the stage it deserves. Ask a stakeholder what a pipeline is and get ๐ .. which is sad. Because how else do you want to verify it you built it correctly?
Anyway: automated testing and linting is always part of my process. From day one – not in the final stages. Of course, you should have at least a tiny build-able fragment of your project, but the earlier you add #automation, the better. I usually run with local and continuous integration pipelines.
This project is hosted on GitHub, so I went with GitHub actions for the CI. We have 20 named pipeline stages which form a single commit gate. “Cheap” ones like linting and format checks run before the more “expensive” ones, which need a build. 129 automated tests are done, which cover 98% of the code. Together with the 30 unit and widget tests and a real-target integration suite we have fitting coverage. The local version runs as pre-commit hook, the GitHub one is also capable of doing the releases. And so far I made six public releases.
Also, Dependabot is integrated, so if I would miss the release of any dependency, then this neat little bot would create an automatic PR (pull-request) for me. ๐ฆโโฌ
The pipeline turns engineering expectations into executable policy. ๐๐ญ ๐ฐ๐จ๐ง’๐ญ ๐๐ฎ๐ข๐ฅ๐ ๐จ๐ซ ๐ฉ๐๐ฌ๐ฌ, ๐ฒ๐จ๐ฎ ๐๐๐ง’๐ญ ๐ซ๐๐ฅ๐๐๐ฌ๐. ๐๐ข๐ฆ๐ฉ๐ฅ๐ ๐๐ฌ ๐ญ๐ก๐๐ญ.
If you want to give this Croatian-German-language learning app a try, download the package from https://github.com/marcelpetrick/CroLingo/releases/tag/v0.0.63 and run it on your Android phone.
Have fun and enjoy learning!
I’ll keep you updated on what comes next. ๐ญ๐ท โค๏ธ ๐ฉ๐ช
#continuousIntegration #continuousDeployment #pipelines #automation
2/x: ๐๐ซ๐จ๐๐ข๐ง๐ ๐จ
As written, I had started to gather all ideas and document what we want. Of course, there exist magic tools which transform unstructured input into well-defined #requirements and which help you to make them conflict-free, unambiguous, atomic, feasible and verifiable. Yada yada, you know the drill.
Then the development started, and we have a first #MVP (minimum viable product) now, as an Android release package and Linux Desktop build. The first content has been added, so the first user feedback could be gathered today. I have to admit, offering an app with well-known competitors yields a lot of “oh, but here it should behave like this” … anyway, input from the target audience is really dear to me. So we now have plenty more things to implement and some to adjust. But we did not experience a single crash or logic deadlock.
โจ ๐๐ง๐ ๐ฌ๐จ๐ฆ๐ ๐ฎ๐ฌ๐๐ซ๐ฌ ๐๐จ๐ฎ๐ฅ๐ ๐๐ฅ๐ซ๐๐๐๐ฒ ๐ฅ๐๐๐ซ๐ง ๐ฌ๐จ๐ฆ๐ ๐ง๐๐ฐ ๐ฐ๐จ๐ซ๐๐ฌ. โจ
I’ve added on-device screenshots from one of the recent builds. If you want the hands-on experience, go to https://github.com/marcelpetrick/CroLingo/releases/tag/v0.0.40
I’ll keep you updated on what comes next. ๐ญ๐ท โค๏ธ ๐ฉ๐ช
๐ฆ Release: ๐๐ฅ๐ฅ๐๐ฆ๐๐ ๐๐ซ๐ฆ โจ
Recently I had the need to monitor all the locally available #Ollama instances. Of course, you can ๐ค๐ถ๐ณ๐ญ yourself, but why not have a tool in the history of btop/abtop ..
Only one ๐ด๐ฉ๐ฆ๐ญ๐ญ script utilizing ๐ค๐ถ๐ณ๐ญ, ๐ข๐ธ๐ฌ and ๐ซ๐ฒ. The name is the architecture: one llama is a pet, several across machines is a farm.
Tons of hotkeys to change update frequency, re-discovery of servers, probing their VRAM, cycling color themes. GitHub Actions ensure high quality code.
So give it a try and/or write a better version, #GPLv3 allows it: https://github.com/marcelpetrick/ollamaFarm/
Ollama Farmer out ๐ง๐ปโ๐พ๐ฆ
New project: ๐๐ซ๐จ๐๐ข๐ง๐ ๐จ ๐ญ๐ท๐ฉ๐ช
Just wanted to share that I started the design and implementation of an app for learning Croatian.
The market for language-learning apps does not offer the combination I need, so it is time to roll our own custom software.
Also a playground for #Flutter and #Dart, since I have so far only used Kotlin for Android apps. And it will run on x86_64 Linux desktops as well. Maybe I’ll do an iOS version too.
Most of the preliminary work was spent on the design and concept. #Ideation is quite important in the age of agentic AI.
Of course, I will avoid writing code and keep you updated ๐
Final evaluation
The World Cup is over โ actually for quite a while, but I never had the time to do the final evaluation. Outcome was fifth place (yes, from second to fifth), because those two missing entries really made me leave 7-9 points on the table (on average), which could have yielded a second or third place.
I will re-invest the gained 18โฌ into pizza for the team and use it for some discussions about morality (is agentic resolution allowed for such games?).
And I won: my initial goal of fetching back my investment of the starter fee was met. Good.
And I learnt how to orchestrate agents to solve non-SW-development tasks.
#agenticAI
๐๐ก๐ ๐๐ข๐ซ๐ฌ๐ญ ๐ ๐๐ฆ๐ ๐ฆ๐ฒ ๐ค๐ข๐๐ฌ ๐๐ฉ๐ฉ๐ซ๐จ๐ฏ๐๐
I like good turn-based offline games. Recently, the kids brought home one that I won’t name here because my GitHub Pagesโbacked browser game is a shameless copy.
If you want to play it (free and safe): https://marcelpetrick.github.io/recognizer/
๐ง๐ต๐ฒ ๐ฟ๐๐น๐ฒ๐ ๐๐ฎ๐ธ๐ฒ ๐๐ฒ๐ป ๐๐ฒ๐ฐ๐ผ๐ป๐ฑ๐ ๐๐ผ ๐ฒ๐ ๐ฝ๐น๐ฎ๐ถ๐ป: ๐๐ธ๐ฐ ๐ค๐ข๐ณ๐ฅ๐ด. ๐๐ช๐จ๐ฉ๐ต ๐ด๐บ๐ฎ๐ฃ๐ฐ๐ญ๐ด ๐ฆ๐ข๐ค๐ฉ. ๐๐น๐ข๐ค๐ต๐ญ๐บ ๐ฐ๐ฏ๐ฆ ๐ฎ๐ข๐ต๐ค๐ฉ. ๐๐ถ๐ป๐ฑ ๐๐ต๐ฒ ๐บ๐ฎ๐๐ฐ๐ต ๐ณ๐ฎ๐๐๐ฒ๐ฟ ๐๐ต๐ฎ๐ป ๐๐ผ๐๐ฟ ๐บ๐ฎ๐๐ฒ๐.
It is super simple, but pattern matching requires concentration, and you have to be quick. ๐๐’๐ ๐ด๐ฟ๐ฒ๐ฎ๐ ๐ณ๐๐ป ๐ฒ๐๐ฒ๐ป ๐ฎ๐ ๐ฎ ๐๐ถ๐ป๐ด๐น๐ฒ ๐ฝ๐น๐ฎ๐๐ฒ๐ฟ with a local high-score list.
Building it raised three useful questions:
* ๐๐ผ๐ ๐ฑ๐ผ ๐๐ผ๐ ๐ด๐๐ฎ๐ฟ๐ฎ๐ป๐๐ฒ๐ฒ that rule across all ๐,๐๐๐ possible card pairs?
* ๐๐ผ๐ ๐ฑ๐ผ ๐๐ผ๐ ๐๐๐ฟ๐ป a shared game into a good single-player challenge?
* ๐๐ผ๐ ๐บ๐๐ฐ๐ต ๐ถ๐ป๐ณ๐ฟ๐ฎ๐๐๐ฟ๐๐ฐ๐๐๐ฟ๐ฒ does a small browser game actually need?
The mathematical part uses a finite projective plane. ๐ง๐ต๐ฒ ๐๐ฒ๐๐ ๐๐๐ถ๐๐ฒ ๐๐ฒ๐ฟ๐ถ๐ณ๐ถ๐ฒ๐ ๐ฒ๐๐ฒ๐ฟ๐ ๐ฝ๐ผ๐๐๐ถ๐ฏ๐น๐ฒ ๐ฐ๐ฎ๐ฟ๐ฑ ๐ฝ๐ฎ๐ถ๐ฟ.
The product stays deliberately small: 10, 20, or 50 cards, a timer, and local high scores. ๐๐ฐ ๐ข๐ค๐ค๐ฐ๐ถ๐ฏ๐ต๐ด. ๐๐ฐ ๐จ๐ญ๐ฐ๐ฃ๐ข๐ญ ๐ณ๐ข๐ฏ๐ฌ๐ช๐ฏ๐จ๐ด. ๐๐ฐ ๐ฃ๐ข๐ค๐ฌ๐ฆ๐ฏ๐ฅ.
๐ ๐๐ถ๐ฑ๐ฒ ๐ป๐ผ๐๐ฒ ๐ณ๐ผ๐ฟ ๐๐ต๐ผ๐๐ฒ ๐ถ๐ป๐๐ฒ๐ฟ๐ฒ๐๐๐ฒ๐ฑ ๐ถ๐ป ๐๐ผ๐ณ๐๐๐ฎ๐ฟ๐ฒ ๐ฑ๐ฒ๐น๐ถ๐๐ฒ๐ฟ๐
I also used the project as a compact, end-to-end SDLC example: written requirements, scope, and acceptance criteria; separated and testable domain logic; versioned storage with migration handling; unit, component, browser, mobile, and accessibility tests; formatting, linting, type checking, and build gates; locked dependencies with automated updates; and repeatable PWA deployment through GitHub Actions and GitHub Pages.
๐๐ ๐ฒ๐จ๐ฎ ๐ญ๐ก๐ข๐ง๐ค ๐ฒ๐จ๐ฎ ๐๐ซ๐ ๐ช๐ฎ๐ข๐๐ค๐๐ซ: ๐ฉ๐ฅ๐๐ฒ ๐๐ง๐ ๐ฉ๐จ๐ฌ๐ญ ๐ฒ๐จ๐ฎ๐ซ ๐ฌ๐๐จ๐ซ๐ ๐ค
๐๐ฅ๐จ๐ฎ๐ ๐๐๐๐ฌ ๐๐ซ๐ ๐๐ฑ๐ฉ๐๐ง๐ฌ๐ข๐ฏ๐. ๐๐๐ญ๐๐ซ๐ฆ๐๐ฅ๐จ๐ง ๐ข๐ฌ ๐ง๐จ๐ญ. ๐
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.
๐๐ก๐ ๐๐ข๐ ๐ช๐ฎ๐๐ฌ๐ญ๐ข๐จ๐ง ๐ข๐ฌ: ๐ฐ๐ก๐๐ญ ๐ฌ๐ก๐จ๐ฎ๐ฅ๐ ๐ ๐๐ฎ๐ญ๐จ๐ฆ๐๐ญ๐ ๐ง๐๐ฑ๐ญ ๐ฐ๐ข๐ญ๐ก ๐ ๐ฅ๐จ๐๐๐ฅ ๐ฏ๐ข๐ฌ๐ข๐จ๐ง ๐ฆ๐จ๐๐๐ฅ? ๐๐ก๐๐ญ ๐ฐ๐จ๐ฎ๐ฅ๐ ๐ฒ๐จ๐ฎ ๐๐จ?
๐ ๐ฅ๐ฎ๐ป ๐ฎ ๐ฎ๐ณ๐ ๐ ๐ผ๐ฑ๐ฒ๐น ๐ผ๐ป ๐ฎ๐ป ๐ด๐๐ ๐๐ฃ๐จ.
๐ฐ๐ฌ ๐บ๐ถ๐ป๐๐๐ฒ๐. That’s all it took me to get Bonsai 27B running locally on an RTX A2000 Laptop GPU with just 8GB of VRAM.
Bonsai 27B is based on Qwen 3.6, but uses PrismML’s custom native ๐-๐๐ข๐ญ ๐๐จ๐ง๐ฌ๐๐ข format, reducing the model to just 3.9GB. A specialized ๐ฅ๐ฅ๐๐ฆ๐.๐๐ฉ๐ฉ fork implements custom CUDA kernels for the 1-bit inference path, making it possible to run the model directly on an 8GB GPU. The runtime exposes an OpenAI-compatible API, so existing tools and agents work without modification.
Performance is a different topic: 15 down to 9 tokens/s.
If you want to give it a try: find my notes and setup-scripts at GitHub: https://github.com/marcelpetrick/codingWithGPT/tree/master/bonsaiTestrun
๐๐ฒ ๐๐ฉ๐ฉ๐ฌ ๐๐ซ๐ ๐ง๐จ๐ญ ๐๐๐๐ง๐๐จ๐ง๐ฐ๐๐ซ๐!
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 โ๏ธ๐


















