<?xml version='1.0' encoding='UTF-8'?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><atom:link href="https://b12n.net/" rel="self" type="application/rss+xml"/><title>Lisp's Revenge</title><link>https://b12n.net/</link><description>Why I do what I do. Why Lisp/Clojure?</description><lastBuildDate>Thu, 27 Aug 2026 12:45:57 +1000</lastBuildDate><generator>clj-rss</generator><item><guid>https://b12n.net/posts-output/2026-08-27-three-clojures-one-c-library/</guid><link>https://b12n.net/posts-output/2026-08-27-three-clojures-one-c-library/</link><title>Three Clojures, One C Library: 422 raylib Examples</title><description>Three suites of raylib examples, written in three different Clojures, calling the same C game library. 97 examples in Jolt on Chez Scheme, 212 in jank through C++/LLVM, and 113 in JVM Clojure over Project Panama. That is 422 programs doing roughly the same kinds of things, and the interesting part is where each one puts the boundary between Lisp and C.raylib is a good library to pick a fight with here. It is plain C, it is small enough to read, and it passes structs by value almost everywhere. That last habit is comfortable in C and awkward in most foreign-function interfaces, so the three suites end up disagreeing in ways that show you exactly what each runtime is doing underneath.</description><pubDate>Thu, 27 Aug 2026 00:00:00 +1000</pubDate></item><item><guid>https://b12n.net/posts-output/2026-08-01-the-review-that-caught-what-the-reviews-missed/</guid><link>https://b12n.net/posts-output/2026-08-01-the-review-that-caught-what-the-reviews-missed/</link><title>The Review That Caught What the Reviews Missed</title><description>Three tasks, each with its own tests, each individually reviewed and approved. Then one more review looked at the whole thing at once and found two bugs that none of the three approvals had caught. The review that checked the fix turned up a smaller fourth thing.b12n-publish is the pipeline behind this blog. It watches a handful of repos for activity worth writing about, gets a draft out of a model call, and publishes nothing until a human has read and substantially revised it. Building the pipeline itself follows a fixed shape. A plan breaks a feature into a handful of independently testable tasks, and each task goes to a fresh implementer with no memory of the tasks before it, carrying only the plan and the one piece it owns. Every task gets its own reviewer before the next one starts. A narrow, well-defined job should catch what accumulated context and creeping scope would let slide. That is the bet, anyway. Once every task is done and approved, one more review reads the finished result as a single whole change.</description><pubDate>Sat, 01 Aug 2026 00:00:00 +1000</pubDate></item><item><guid>https://b12n.net/posts-output/2026-07-31-174-commits-in-a-math-education-tool/</guid><link>https://b12n.net/posts-output/2026-07-31-174-commits-in-a-math-education-tool/</link><title>174 Commits In: Building an Interactive Math Education Tool with ClojureScript and KaTeX</title><description>Most side projects never get past the scaffold. This one has 174 commits and counting: a curriculum API, a web SPA, a native mobile app built with ClojureDart/Flutter, gated authentication with three login paths, a SQLite-backed store, and a production deployment behind nginx. It has been lived in.I want to zoom into the part of the system that's easiest to relate to if you've ever tried to teach or learn math on a screen: getting the content to render correctly. Turns out that "just typeset the math" is a much longer road than it sounds.</description><pubDate>Fri, 31 Jul 2026 00:00:00 +1000</pubDate></item><item><guid>https://b12n.net/posts-output/2026-07-31-mermaid-diagrams-in-cryogen/</guid><link>https://b12n.net/posts-output/2026-07-31-mermaid-diagrams-in-cryogen/</link><title>Mermaid Diagrams in Cryogen</title><description>This blog now renders Mermaid diagrams from ordinary
fenced code blocks. Write a ```mermaid fence and you get a diagram:</description><pubDate>Fri, 31 Jul 2026 00:00:00 +1000</pubDate></item><item><guid>https://b12n.net/posts-output/2023-03-11-print-source-code-with-vim/</guid><link>https://b12n.net/posts-output/2023-03-11-print-source-code-with-vim/</link><title>How to print any source code with Vim</title><description>ProblemsYou want to print source code from your project for quick review.</description><pubDate>Sat, 11 Mar 2023 00:00:00 +1100</pubDate></item><item><guid>https://b12n.net/posts-output/2019-09-02-useful-function-for-inspect-java-methods-from-clojure/</guid><link>https://b12n.net/posts-output/2019-09-02-useful-function-for-inspect-java-methods-from-clojure/</link><title>Useful function for inspect Java methods from Clojure</title><description>ProblemsWhile working on Clojure project, you want to inspect the function from Java library and work with it effectively.</description><pubDate>Mon, 02 Sep 2019 00:00:00 +1000</pubDate></item><item><guid>https://b12n.net/posts-output/2019-09-01-remove-ansi-escape-sequences-in-clojure/</guid><link>https://b12n.net/posts-output/2019-09-01-remove-ansi-escape-sequences-in-clojure/</link><title>How to remove ANSI escape sequences in Clojure</title><description>ProblemYou run command remotely using the library like clj-ssh which allow you to run command against
remote server and get the result back as string.</description><pubDate>Sun, 01 Sep 2019 00:00:00 +1000</pubDate></item><item><guid>https://b12n.net/posts-output/2019-08-30-add-new-dependency-at-runtime-to-clojure-project/</guid><link>https://b12n.net/posts-output/2019-08-30-add-new-dependency-at-runtime-to-clojure-project/</link><title>How to add new dependency at runtime to Clojure project</title><description>If you are working with Clojure for a while you may come across the following situation.While you working on some project you have your REPL session up and working with the code base
and realized that you need to add some external dependency to the project.</description><pubDate>Fri, 30 Aug 2019 00:00:00 +1000</pubDate></item><item><guid>https://b12n.net/posts-output/2019-08-29-spacemacs-setup-for-clojure-development/</guid><link>https://b12n.net/posts-output/2019-08-29-spacemacs-setup-for-clojure-development/</link><title>Basic Emacs Setup for Clojure Development.</title><description>This is my basic setup for working with Emacs and Clojure.
The setup is intended for user of Emacs that uses Spacemacs the awesome Emacs distribution intended for both Vim and traditional Emacs user.Pre-requisite:</description><pubDate>Thu, 29 Aug 2019 00:00:00 +1000</pubDate></item><item><guid>https://b12n.net/posts-output/2018-10-11-how-to-enable-Klipse-integration/</guid><link>https://b12n.net/posts-output/2018-10-11-how-to-enable-Klipse-integration/</link><title>How to enable Klipse integration with Cryogen</title><description>Sample Klipse setting to use with CryogenSample Configuration config.edn for your Cryogen project</description><pubDate>Thu, 11 Oct 2018 00:00:00 +1100</pubDate></item><item><guid>https://b12n.net/posts-output/2018-08-16-create-new-github-repo-no-mouse-required/</guid><link>https://b12n.net/posts-output/2018-08-16-create-new-github-repo-no-mouse-required/</link><title>Create new Github repository, no mouse required.</title><description>How to quickly create new Github project from your command line.Use gh-utils</description><pubDate>Thu, 16 Aug 2018 00:00:00 +1000</pubDate></item><item><guid>https://b12n.net/posts-output/2018-08-15-running-cryogen-site-locally/</guid><link>https://b12n.net/posts-output/2018-08-15-running-cryogen-site-locally/</link><title>Running Cryogen site locally</title><description>To quickly create your post try following the following steps:</description><pubDate>Wed, 15 Aug 2018 00:00:00 +1000</pubDate></item><item><guid>https://b12n.net/posts-output/2017-01-03-how-to-create-alias-that-work-across-unix-systems/</guid><link>https://b12n.net/posts-output/2017-01-03-how-to-create-alias-that-work-across-unix-systems/</link><title>How to create alias that work across Unix machines</title><description>I love shortcuts and like to do thing quickly. When I have to switch between
two *nix machines (Mac or my other Linux based machine), I like to use the same shortcuts
(or aliases) regardless of where I am.One way to a chieve this is to write the alias/script that determine the type of
environment it is currently running on.</description><pubDate>Tue, 03 Jan 2017 00:00:00 +1100</pubDate></item></channel></rss>