56,966 blogs · [ { "id": "01a08c67-3d9b-7229-8c2e-3d09749083f3", "title": "Let's make the worst htmx ever!", "url": "https://zserge.com/posts/worst-htmx-ever/", "published_at": "2026-07-27T00:00:00+00:00" }, { "id": "01a08c67-3d9b-7229-8c2e-3d09757a969c", "title": "Tensor is the might", "url": "https://zserge.com/posts/tensor/", "published_at": "2026-07-14T00:00:00+00:00" }, { "id": "01a08c67-3d9b-7229-8c2e-3d0975c75ff0", "title": "A non-coding coding agent", "url": "https://zserge.com/posts/socreates/", "published_at": "2026-05-25T00:00:00+00:00" }, { "id": "01a08c67-3d9b-7229-8c2e-3d09760d923c", "title": "VisiCalc reconstructed", "url": "https://zserge.com/posts/visicalc/", "published_at": "2026-03-15T00:00:00+00:00" }, { "id": "01a08c67-3d9b-7229-8c2e-3d09761072c4", "title": "By the power of grayscale!", "url": "https://zserge.com/posts/grayskull/", "published_at": "2025-10-26T00:00:00+00:00" }, { "id": "01a08c67-3d9b-7229-8c2e-3d097657c419", "title": "Pennybase: a Pound-Shop BaaS", "url": "https://zserge.com/posts/pennybase/", "published_at": "2025-06-17T00:00:00+00:00" }, { "id": "01a08c67-3d9b-7229-8c2e-3d097678e007", "title": "Emulating 6502", "url": "https://zserge.com/posts/6502/", "published_at": "2024-12-28T00:00:00+00:00" }, { "id": "01a08c67-3d9b-7229-8c2e-3d0976e97b67", "title": "On Music Tabs", "url": "https://zserge.com/posts/tab/", "published_at": "2024-11-22T00:00:00+00:00" }, { "id": "01a08c67-3d9b-7229-8c2e-3d0977aee329", "title": "On Poetry", "url": "https://zserge.com/posts/poetry/", "published_at": "2024-09-18T00:00:00+00:00" }, { "id": "01a08c67-3d9b-7229-8c2e-3d09785fccd2", "title": "Tiny Great Languages: PL/0", "url": "https://zserge.com/posts/langs-pl0/", "published_at": "2024-09-17T00:00:00+00:00" }, { "id": "01a08c67-3d9b-7229-8c2e-3d0978a3d343", "title": "Tiny Great Languages: APL", "url": "https://zserge.com/posts/langs-apl/", "published_at": "2024-09-13T00:00:00+00:00" }, { "id": "01a08c67-3d9b-7229-8c2e-3d09790df3cf", "title": "Tiny Great Languages: Lisp", "url": "https://zserge.com/posts/langs-lisp/", "published_at": "2024-09-12T00:00:00+00:00" }, { "id": "01a08c67-3d9b-7229-8c2e-3d0979bb6f34", "title": "Tiny Great Languages: MOUSE", "url": "https://zserge.com/posts/langs-mouse/", "published_at": "2024-09-11T00:00:00+00:00" }, { "id": "01a08c67-3d9b-7229-8c2e-3d097ab4ed4a", "title": "Tiny Great Languages: BASIC", "url": "https://zserge.com/posts/langs-basic/", "published_at": "2024-09-10T00:00:00+00:00" }, { "id": "01a08c67-3d9b-7229-8c2e-3d097b1498e6", "title": "Tiny Great Languages: Assembly", "url": "https://zserge.com/posts/langs-asm/", "published_at": "2024-09-08T00:00:00+00:00" }, { "id": "01a08c67-3d9b-7229-8c2e-3d097b183bfb", "title": "AI or ain't: LLMs", "url": "https://zserge.com/posts/ai-llm/", "published_at": "2024-01-04T00:00:00+00:00" }, { "id": "01a08c67-3d9b-7229-8c2e-3d097b44f627", "title": "AI or ain't: Neural Networks", "url": "https://zserge.com/posts/ai-nn/", "published_at": "2024-01-03T00:00:00+00:00" }, { "id": "01a08c67-3d9c-7358-ba23-4c879a493fe3", "title": "AI or ain't: Markov Chains", "url": "https://zserge.com/posts/ai-markov/", "published_at": "2024-01-02T00:00:00+00:00" }, { "id": "01a08c67-3d9c-7358-ba23-4c879ac0d4a7", "title": "AI or ain't: Eliza", "url": "https://zserge.com/posts/ai-eliza/", "published_at": "2024-01-01T00:00:00+00:00" }, { "id": "01a08c67-3d9c-7358-ba23-4c879b5ee7b0", "title": "Minimal cross-platform graphics", "url": "https://zserge.com/posts/fenster/", "published_at": "2023-01-15T00:00:00+00:00" }, { "id": "01a08c67-3d9c-7358-ba23-4c879c25728d", "title": "What is Git made of?", "url": "https://zserge.com/posts/git/", "published_at": "2022-12-04T00:00:00+00:00" }, { "id": "01a08c67-3d9c-7358-ba23-4c879cfd5f98", "title": "Post-apocalyptic programming", "url": "https://zserge.com/posts/post-apocalyptic-programming/", "published_at": "2022-08-04T00:00:00+00:00" }, { "id": "01a08c67-3d9c-7358-ba23-4c879dd0ceef", "title": "On Transpilers", "url": "https://zserge.com/posts/transpilers/", "published_at": "2022-07-06T00:00:00+00:00" }, { "id": "01a08c67-3d9c-7358-ba23-4c879e50ac8a", "title": "Learn a language by writing too many Forths", "url": "https://zserge.com/posts/too-many-forths/", "published_at": "2022-07-05T00:00:00+00:00" }, { "id": "01a08c67-3d9c-7358-ba23-4c879f112432", "title": "Zig, the small language", "url": "https://zserge.com/posts/zig-the-small-language/", "published_at": "2022-06-01T00:00:00+00:00" }, { "id": "01a08c67-3d9c-7358-ba23-4c879f9d4460", "title": "How do One-Time passwords work?", "url": "https://zserge.com/posts/one-time-passwords/", "published_at": "2021-04-28T00:00:00+00:00" }, { "id": "01a08c67-3d9c-7358-ba23-4c879fdad977", "title": "Poor Man's Web", "url": "https://zserge.com/posts/small-web/", "published_at": "2021-04-27T00:00:00+00:00" }, { "id": "01a08c67-3d9c-7358-ba23-4c87a0a44b90", "title": "Ray tracer for those who skipped the math class", "url": "https://zserge.com/posts/raytracer/", "published_at": "2021-04-22T00:00:00+00:00" }, { "id": "01a08c67-3d9c-7358-ba23-4c87a137af98", "title": "Scalable, Resilient Brainf∗ck", "url": "https://zserge.com/posts/bfaas/", "published_at": "2021-04-01T00:00:00+00:00" }, { "id": "01a08c67-3d9c-7358-ba23-4c87a20381f3", "title": "A \"Better C\" Benchmark", "url": "https://zserge.com/posts/better-c-benchmark/", "published_at": "2021-03-18T00:00:00+00:00" }, { "id": "01a08c67-3d9c-7358-ba23-4c87a2628e48", "title": "How do ones and zeros sound?", "url": "https://zserge.com/posts/1-bit-music/", "published_at": "2021-03-14T00:00:00+00:00" }, { "id": "01a08c67-3d9c-7358-ba23-4c87a35c7b32", "title": "CSS-in-JS in 200 bytes", "url": "https://zserge.com/posts/css-in-js/", "published_at": "2021-02-08T00:00:00+00:00" }, { "id": "01a08c67-3d9c-7358-ba23-4c87a3cb1c60", "title": "Let's make the worst VueJS ever!", "url": "https://zserge.com/posts/worst-vuejs-ever/", "published_at": "2021-02-07T00:00:00+00:00" }, { "id": "01a08c67-3d9c-7358-ba23-4c87a468b423", "title": "The old way to the modern web services", "url": "https://zserge.com/posts/go-web-services/", "published_at": "2021-01-20T00:00:00+00:00" }, { "id": "01a08c67-3d9c-7358-ba23-4c87a555255c", "title": "Beep, beep, I'm a sheep", "url": "https://zserge.com/posts/beep/", "published_at": "2020-12-13T00:00:00+00:00" }, { "id": "01a08c67-3d9c-7358-ba23-4c87a5aa70c2", "title": "Étude in C minor", "url": "https://zserge.com/posts/etude-in-c/", "published_at": "2020-10-15T00:00:00+00:00" }, { "id": "01a08c67-3d9c-7358-ba23-4c87a5c4c461", "title": "Nokia Composer in 512 bytes", "url": "https://zserge.com/posts/nokia/", "published_at": "2020-10-13T00:00:00+00:00" }, { "id": "01a08c67-3d9c-7358-ba23-4c87a6624043", "title": "World smallest office suite", "url": "https://zserge.com/posts/awfice/", "published_at": "2020-10-11T00:00:00+00:00" }, { "id": "01a08c67-3d9c-7358-ba23-4c87a6bdcad6", "title": "Minimal code editor in JavaScript", "url": "https://zserge.com/posts/js-editor/", "published_at": "2020-08-24T00:00:00+00:00" }, { "id": "01a08c67-3d9c-7358-ba23-4c87a702180c", "title": "Making a tiny 2x3 bitmap font", "url": "https://zserge.com/posts/tiny-font/", "published_at": "2020-07-26T00:00:00+00:00" }, { "id": "01a08c67-3d9c-7358-ba23-4c87a775542f", "title": "Java agent - Bond or Smith?", "url": "https://zserge.com/posts/javaagent/", "published_at": "2020-06-06T00:00:00+00:00" }, { "id": "01a08c67-3d9c-7358-ba23-4c87a83dbe18", "title": "How to write a (toy) JVM", "url": "https://zserge.com/posts/jvm/", "published_at": "2020-06-01T00:00:00+00:00" }, { "id": "01a08c67-3d9c-7358-ba23-4c87a8fe2433", "title": "KVM host in a few lines of code", "url": "https://zserge.com/posts/kvm/", "published_at": "2020-05-10T00:00:00+00:00" }, { "id": "01a08c67-3d9c-7358-ba23-4c87a9186b25", "title": "Linux containers in a few lines of code", "url": "https://zserge.com/posts/containers/", "published_at": "2020-05-10T00:00:00+00:00" }, { "id": "01a08c67-3d9c-7358-ba23-4c87a9acf885", "title": "Tmux for mere mortals", "url": "https://zserge.com/posts/tmux/", "published_at": "2020-04-25T00:00:00+00:00" }, { "id": "01a08c67-3d9c-7358-ba23-4c87aa5a9075", "title": "Ode to J", "url": "https://zserge.com/posts/j/", "published_at": "2020-03-31T00:00:00+00:00" }, { "id": "01a08c67-3d9c-7358-ba23-4c87aada82f1", "title": "RSS is dead", "url": "https://zserge.com/posts/rss/", "published_at": "2020-03-30T00:00:00+00:00" }, { "id": "01a08c67-3d9c-7358-ba23-4c87ab073937", "title": "Let's write a tiny chess engine in Go", "url": "https://zserge.com/posts/carnatus/", "published_at": "2020-03-21T00:00:00+00:00" }, { "id": "01a08c67-3d9c-7358-ba23-4c87ab7e888c", "title": "Let's make the worst React ever!", "url": "https://zserge.com/posts/worst-react-ever/", "published_at": "2019-11-01T00:00:00+00:00" }, { "id": "01a08c67-3d9c-7358-ba23-4c87ac195e6c", "title": "Distraction free writing in Vim", "url": "https://zserge.com/posts/vim-distraction-free/", "published_at": "2019-10-10T00:00:00+00:00" }, { "id": "01a08c67-3d9c-7358-ba23-4c87ac471b74", "title": "Implementing metrics in Go", "url": "https://zserge.com/posts/metrics/", "published_at": "2018-06-10T00:00:00+00:00" }, { "id": "01a08c67-3d9c-7358-ba23-4c87ad22a833", "title": "How to configure zsh", "url": "https://zserge.com/posts/terminal/", "published_at": "2018-05-07T00:00:00+00:00" }, { "id": "01a08c67-3d9c-7358-ba23-4c87ad96624b", "title": "Cross-platform web UI for C and Go", "url": "https://zserge.com/posts/webview/", "published_at": "2017-08-20T00:00:00+00:00" }, { "id": "01a08c67-3d9c-7358-ba23-4c87ae512798", "title": "Syntactic sugar in C - (ab)using \"for\" loops", "url": "https://zserge.com/posts/c-for-loop-tricks/", "published_at": "2017-07-17T00:00:00+00:00" }, { "id": "01a08c67-3d9c-7358-ba23-4c87aef673d1", "title": "Partcl - a tiny command language", "url": "https://zserge.com/posts/tcl-interpreter/", "published_at": "2016-08-11T00:00:00+00:00" }, { "id": "01a08c67-3d9c-7358-ba23-4c87afbbd46b", "title": "My experience with asm.js", "url": "https://zserge.com/posts/my-experience-with-asmjs/", "published_at": "2016-07-18T00:00:00+00:00" }, { "id": "01a08c67-3d9c-7358-ba23-4c87b0af03b8", "title": "Anvil 0.4.0 + support libraries", "url": "https://zserge.com/posts/anvil-support-libraries/", "published_at": "2016-05-11T00:00:00+00:00" }, { "id": "01a08c67-3d9c-7358-ba23-4c87b11ce1a9", "title": "How to architect Anvil apps", "url": "https://zserge.com/posts/anvil-app-architecture/", "published_at": "2016-03-29T00:00:00+00:00" }, { "id": "01a08c67-3d9c-7358-ba23-4c87b1682595", "title": "The Stockholm syndrome of Android XML", "url": "https://zserge.com/posts/anvil-xml-support/", "published_at": "2016-03-29T00:00:00+00:00" }, { "id": "01a08c67-3d9c-7358-ba23-4c87b1d54a7a", "title": "Anvil howto: view styling", "url": "https://zserge.com/posts/anvil-howto-style-views/", "published_at": "2016-03-28T00:00:00+00:00" }, { "id": "01a08c67-3d9c-7358-ba23-4c87b27d0a27", "title": "The evolution of Android architecture", "url": "https://zserge.com/posts/android-mvp-mvvm-redux-history/", "published_at": "2016-03-28T00:00:00+00:00" }, { "id": "01a08c67-3d9c-7358-ba23-4c87b2aee03a", "title": "Two way data bindings in Anvil", "url": "https://zserge.com/posts/anvil-two-way-bindings/", "published_at": "2016-03-15T00:00:00+00:00" }, { "id": "01a08c67-3d9c-7358-ba23-4c87b2d3437b", "title": "painless publishing of android libraries", "url": "https://zserge.com/posts/jitpack/", "published_at": "2015-12-11T00:00:00+00:00" }, { "id": "01a08c67-3d9c-7358-ba23-4c87b300419f", "title": "Anvil: time for a change", "url": "https://zserge.com/posts/anvil-forge-merged/", "published_at": "2015-10-01T00:00:00+00:00" }, { "id": "01a08c67-3d9c-7358-ba23-4c87b3c13a5c", "title": "Anvil: move fast and break things", "url": "https://zserge.com/posts/anvil-breaking-changes/", "published_at": "2015-09-13T00:00:00+00:00" }, { "id": "01a08c67-3d9c-7358-ba23-4c87b491e146", "title": "Benchmarking Go in the cloud", "url": "https://zserge.com/posts/go-cloud-benchmark/", "published_at": "2015-09-04T00:00:00+00:00" }, { "id": "01a08c67-3d9c-7358-ba23-4c87b4c29f59", "title": "lua-sh: calling shell commands as functions", "url": "https://zserge.com/posts/luash/", "published_at": "2015-09-03T00:00:00+00:00" }, { "id": "01a08c67-3d9c-7358-ba23-4c87b522c62a", "title": "How to sign release apk with gradle", "url": "https://zserge.com/posts/android-signing/", "published_at": "2015-08-09T00:00:00+00:00" }, { "id": "01a08c67-3d9c-7358-ba23-4c87b5afe370", "title": "How Palette was made", "url": "https://zserge.com/posts/palette/", "published_at": "2015-08-06T00:00:00+00:00" }, { "id": "01a08c67-3d9c-7358-ba23-4c87b5d884f8", "title": "Anvil: Double O Seven", "url": "https://zserge.com/posts/anvil-0.0.7/", "published_at": "2015-06-25T00:00:00+00:00" }, { "id": "01a08c67-3d9c-7358-ba23-4c87b6d6c03f", "title": "log - a drop-in replacement for android Log class", "url": "https://zserge.com/posts/log/", "published_at": "2015-06-14T00:00:00+00:00" }, { "id": "01a08c67-3d9c-7358-ba23-4c87b717c847", "title": "Buck - life is too short to spend a minute for each build", "url": "https://zserge.com/posts/buck-build-system/", "published_at": "2015-05-27T00:00:00+00:00" }, { "id": "01a08c67-3d9c-7358-ba23-4c87b7697c39", "title": "Anvil: big progress for a small library", "url": "https://zserge.com/posts/anvil-2/", "published_at": "2015-04-16T00:00:00+00:00" }, { "id": "01a08c67-3d9c-7358-ba23-4c87b799e90d", "title": "Where Anvil meets Kotlin", "url": "https://zserge.com/posts/anvil-kotlin/", "published_at": "2015-04-16T00:00:00+00:00" }, { "id": "01a08c67-3d9c-7358-ba23-4c87b7c92856", "title": "Anvil: the story of automatic rendering", "url": "https://zserge.com/posts/anvil-1/", "published_at": "2015-01-22T00:00:00+00:00" }, { "id": "01a08c67-3d9c-7358-ba23-4c87b8638c3c", "title": "android UI development made easy", "url": "https://zserge.com/posts/android-mvx/", "published_at": "2015-01-14T00:00:00+00:00" }, { "id": "01a08c67-3d9c-7358-ba23-4c87b88a6b5f", "title": "moved to new static site generator (again)", "url": "https://zserge.com/posts/new-site-generator2/", "published_at": "2014-12-20T00:00:00+00:00" }, { "id": "01a08c67-3d9c-7358-ba23-4c87b8d7d2d8", "title": "ultimately minimal unit testing", "url": "https://zserge.com/posts/minimal-testing/", "published_at": "2014-12-16T00:00:00+00:00" }, { "id": "01a08c67-3d9c-7358-ba23-4c87b96105df", "title": "simple library publishing with Gradle", "url": "https://zserge.com/posts/gradle-maven-publish/", "published_at": "2014-08-10T00:00:00+00:00" }, { "id": "01a08c67-3d9c-7358-ba23-4c87ba18dc0c", "title": "mucks: now with the dvtm flavor!", "url": "https://zserge.com/posts/mucks2/", "published_at": "2014-06-07T00:00:00+00:00" }, { "id": "01a08c67-3d9c-7358-ba23-4c87ba6a023f", "title": "mucks: automating screen and tmux", "url": "https://zserge.com/posts/mucks/", "published_at": "2014-04-25T00:00:00+00:00" }, { "id": "01a08c67-3d9c-7358-ba23-4c87ba864879", "title": "lambda support for Android", "url": "https://zserge.com/posts/android-lambda/", "published_at": "2014-01-09T00:00:00+00:00" }, { "id": "01a08c67-3d9c-7358-ba23-4c87bb7d99cb", "title": "kotlin - a new hope", "url": "https://zserge.com/posts/kotlin/", "published_at": "2013-11-28T00:00:00+00:00" }, { "id": "01a08c67-3d9c-7358-ba23-4c87bb9c8ec2", "title": "moved to new static site generator", "url": "https://zserge.com/posts/new-site-generator/", "published_at": "2013-07-18T00:00:00+00:00" }, { "id": "01a08c67-3d9c-7358-ba23-4c87bbca1626", "title": "logdog - a colorized Android logcat", "url": "https://zserge.com/posts/logdog/", "published_at": "2013-05-20T00:00:00+00:00" }, { "id": "01a08c67-3d9c-7358-ba23-4c87bc36da8e", "title": "AAML - another android markup language", "url": "https://zserge.com/posts/aaml/", "published_at": "2013-04-02T00:00:00+00:00" }, { "id": "01a08c67-3d9c-7358-ba23-4c87bcc1642f", "title": "new project: jknav", "url": "https://zserge.com/posts/update-jknav/", "published_at": "2012-11-30T00:00:00+00:00" }, { "id": "01a08c67-3d9c-7358-ba23-4c87bd6f9675", "title": "cucu: a compiler you can understand (3/3)", "url": "https://zserge.com/posts/cucu-part3/", "published_at": "2012-10-25T00:00:00+00:00" }, { "id": "01a08c67-3d9c-7358-ba23-4c87bd9c309e", "title": "cucu: a compiler you can understand (2/3)", "url": "https://zserge.com/posts/cucu-part2/", "published_at": "2012-10-24T00:00:00+00:00" }, { "id": "01a08c67-3d9c-7358-ba23-4c87be45ed75", "title": "cucu: a compiler you can understand (1/3)", "url": "https://zserge.com/posts/cucu-part1/", "published_at": "2012-10-23T00:00:00+00:00" }, { "id": "01a08c67-3d9c-7358-ba23-4c87be93ebf1", "title": "textizer: hack your android widgets", "url": "https://zserge.com/posts/android-widget-for-geeks/", "published_at": "2012-08-25T00:00:00+00:00" }, { "id": "01a08c67-3d9c-7358-ba23-4c87bf178696", "title": "my minimalistic agile issue tracker", "url": "https://zserge.com/posts/agile-issue-tracker/", "published_at": "2012-08-02T00:00:00+00:00" }, { "id": "01a08c67-3d9c-7358-ba23-4c87bf8ae1a5", "title": "the first post", "url": "https://zserge.com/posts/hello/", "published_at": "2012-08-01T00:00:00+00:00" } ] posts Claim your blog
Back to zserge
Blog · corpus.blog/blogs/zserge.com/posts

zserge

zserge.com

2026

2025

2024

2023

2022

2021

2020

2019

2018

2017

2016

2015

2014

2013

2012