๐๐ก๐ ๐๐ข๐ซ๐ฌ๐ญ ๐ ๐๐ฆ๐ ๐ฆ๐ฒ ๐ค๐ข๐๐ฌ ๐๐ฉ๐ฉ๐ซ๐จ๐ฏ๐๐
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 โ๏ธ๐
๐๐ญ ๐๐ซ๐๐๐ญ๐จ๐ซ ๐ฌ๐ฉ๐๐ฅ๐ฅ๐๐ก๐๐๐ค โ ๐ง๐จ๐ฐ ๐ฐ๐ข๐ญ๐ก ๐๐๐ ๐ฌ๐ฎ๐ฉ๐ฉ๐จ๐ซ๐ญ
I never wrote a #QtCreator #plugin before. Somehow I always avoided that, because first you have to set up your environment, then build a husk, make it build, yada yada.
But the spellchecker plugin from Carel Combrink was missing support for QML-type files for years now. C++ parsing existed, #QML did not.
๐ฆ๐ผ ๐ ๐ฒ๐ ๐ฝ๐ฎ๐ป๐ฑ๐ฒ๐ฑ ๐ถ๐.
New QML parser added next to the existing C++ parser. As you know: QML is different from C++ ๐
It now scans QML comments and user-visible string literals:
* // line comments
* /* block comments */
* double-quoted strings
* single-quoted strings
* template literals
It also tries hard to not be annoying. It ignores QML/JavaScript code tokens like imports, ids, property names, bindings, and component names. URLs, emails, pure numbers, color values, and all-caps words are filtered out as well.
Source positions are preserved, so underlines and replacements land where they should. It works for current-file and project-wide checks, with background processing, reparsing, and settings for comments and string literals.
Lots of #testing. Unit tests, yes. But also manual testing, because certain aspects were not part of my initial implementation plan. As always.
So now you can use any Hunspell dictionary to check your QML files for typos and get them fixed.
Typos in code and comments are a real concentration breaker while reading code.
๐ ๐ถ๐๐๐ถ๐ผ๐ป ๐ฑ๐ผ๐ป๐ฒ. ๐๐ป๐ผ๐๐ต๐ฒ๐ฟ ๐๐ต๐ถ๐ป๐ด ๐น๐ฒ๐ฎ๐ฟ๐ป๐ฒ๐ฑ. ๐๐ป๐ฑ ๐บ๐ฎ๐๐ฏ๐ฒ ๐๐ต๐ฒ ๐ฝ๐ฎ๐๐ฐ๐ต ๐ถ๐ ๐ฎ๐ฐ๐ฐ๐ฒ๐ฝ๐๐ฒ๐ฑ.
If someone really wants to check the patch themselves on GitHub:
https://github.com/CJCombrink/SpellChecker-Plugin/pull/197
Thanks to Carel Combrink and the other contributors for the existing work this builds on.
๐๐ญ๐๐ง๐๐ข๐ง๐ ๐จ๐ง ๐ญ๐ก๐ ๐ฌ๐ก๐จ๐ฎ๐ฅ๐๐๐ซ๐ฌ ๐จ๐ ๐ ๐ข๐๐ง๐ญ๐ฌ.
#Spellchecking











