Feed digilinux.ru [copy] http://digilinux.ru/feed/ has loading error: cURL error 22: The requested URL returned error: 403 Forbidden
Feed freepost [copy] https://freepo.st/rss/new has loading error: cURL error 6: Could not resolve host: freepo.st
Feed justine.lol [copy] https://justinetunney.com/rss.xml has loading error: cURL error 60: SSL certificate problem: certificate has expired
Back to UIKit for fluid scrolling
I’ve spent the last couple of days optimizing the iPhone companion app for CANcorder (forthcoming), my CAN bus logger and analyzer. The original iOS frontend was written in SwiftUI, which made it wonderfully quick to build and iterate on. For modest amounts of data, it was fine. But “modest” isn’t …
A eulogy for Vim

Vim is important to me. I’m using it to write the words you’re reading right now. In fact, almost every word I have ever committed to posterity, through this blog, in my code, all of the docs I’ve written, emails I’ve sent, and more, almost all of it has passed through Vim.
My relationship with the software is intimate, almost as if it were an extra limb. I don’t think about what I’m doing when I use it. All of Vim’s modes and keybindings are deeply ingrained in my muscle memory. Using it just feels like my thoughts flowing from my...
From Lektor to Zola — migrating 26 years of content
This website has been running on Lektor, a Python-based static site generator created by Armin Ronacher (of Flask fame), since I moved away from WordPress back in 2019. Lektor served me well: its file-based content model, Jinja2 templates, and simple admin UI were a good fit for a personal site that…
A small Linux toolbox for CAN work
For the last couple of months I have been spending more time on the Linux side of my automotive setup again. Back in 2017 I wrote that I’d love to work on Linux-based infrastructure again — well, it took a while, and it’s CAN buses instead of phones, but here we are. CANcorder is still the place whe…
Видеорежимы в восьмибитных компьютерах. Coolsystem — Часть 2
В данной статье кратко рассмотрены видеоконтроллеры для следующих ретро-компьютеров: ZX Spectrum, Вектор 06Ц, Commodore 64, Commodore PET, Микроша, Радио-86РК, БК-0010, Агат (модели 7 и 9) и Апогей БК-01Ц.
Поскольку мой будущий самодельный компьютер их косвенно поддерживает, необходимо собрать информацию в одном месте.
Читать далееBuild a highly customizable mobile friendly HTML5 level selection screen controllable by tap, swipe and mouse wheel, written in TypeScript and powered by Phaser
A clean, fully paginated level selection system built in Phaser 4 with TypeScript, featuring horizontal drag, direction-aware snap, mouse wheel navigation and event-driven thumbnails. The UI components are fully decoupled from scene logic and designed with clear state separation. Complete source code available for download, ready to use and extend.
Simulating rotating gravity and perimeter based movement like in “Be Brave, Barb” game with Phaser, without any physics engine
HTML5 platformer engine inspired by Be Brave, Barb, built without physics. Hero walks along a dynamically generated perimeter, switches between four gravity directions, and reattaches to surfaces using continuous collision detection. Everything is driven by pure geometry, vector math, and segment intersection.
From Dense Grids to Clean Perimeters: Extracting Shapes with Greedy Geometry – Tiled and JavaScript example
A dense grid hides simple shapes. This example uses a greedy algorithm to extract the true external perimeter from binary grid data, removing all internal edges and collapsing hundreds of cells into a clean geometric outline. Everything that follows, such as rendering, collision and movement, becomes simpler once the grid turns into a shape.