All blogs / Lisp / Clojure / Scheme
(iterate think thoughts)
Dmitri's blog about programming, Clojure, and software development
Lisp / Clojure / SchemeAI / MLSoftware / engineering practiceGraphics
- Posts
- 126 from 3 May 2012 to 7 Oct 2026
- Posting
- monthly (19 in the last year)
- Kind
- personal blog
- Feed
- https://yogthos.net/feed.xml
2026 18
- Clojure in the Age of Language Models
- Introducing Lev
- Managing Complex Application State with Reactive Data Flows
- Wrapping GTK4 in 800 lines of Clojure with Jolt
- A practical workflow for LLM-assisted development
- The Model Proposes, the Engines Dispose
- Fibers in Jolt: green threads that fit core.async
- Program images and portable Scheme backends for Jolt
- Painting with Gaussians
- Jolt: running Clojure on Chez Scheme
- The Hidden Elegance of Gradient Noise
- Making budget models punch above their weight with a smart Rust harness
- Putting Code Under a Microscope: Wavelet-Based Context for LLMs
- libwce: the entropy layer of a wavelet codec, on its own
- Giving LLMs a Formal Reasoning Engine for Code Analysis
- Managing Complexity with Mycelium
- Stop Round-Tripping Your Codebase: How to Cut LLM Token Usage by 80% Using Recursive Document Analysis
- Grounding LLMs with Recursive Code Execution
2025 1
2023 2
2022 3
2020 1
2019 1
2018 1
2017 2
2016 17
- Using Chrome DevTools with Macchiato
- Macchiato Modules
- Frameworks, Foundations, and Macchiato
- Macchiato: ClojureScript Arrives on the Server
- PostgreSQL Async Notifications in Luminus
- Configuring Atom for Luminus
- Reusable Components
- Static Typing vs WebSockets
- Web Development with Clojure, Second Edition
- Working around the Java SSL trust store
- Consider Hoplon
- Writing an expandable widget with Reagent
- Luminus Workflow
- The State of Clojure Web Development
- Luminus embraces HugSQL
- Contrasting Component and Mount
- Web Development with Clojure 2nd Edition
2015 16
- Trouble with AOT
- Managing State in Luminus
- The Sky Is not Falling
- Rendering Reagent on the Server using Hiccup
- Evaluating ClojureScript in the Browser
- Troubleshooting With JConsole
- Building services with Duct and compojure-api
- Luminus is Moving -> HTTP Kit -> Immutant
- Data Focused
- Luminus is Migrating to Migratus
- Using Pulsar
- ClojureScript REPL with Figwheel
- Websockets with HTTP Kit
- Web Development with Clojure 2
- Announcing Luminus 2.0
- A simple plugin system in Clojure
2014 12
- The State of Reagent
- Moving to Cryogen
- Cryogen: static site generation made easy
- Clojure Cup Results
- Parsing and rendering templates in Clojure & Haskell
- Yet Another Clojure Intro Guide
- Using ClojureScript REPL from Light Table
- Introducing reagent-forms
- File Snooping
- Routing With Secretary
- Building Single Page Apps with Reagent
- No Free Lunch
2013 16
- Clojure High Performance Programming Review
- Making Selmer User Friendly
- Web Development With Clojure Beta
- Why I'm Productive in Clojure
- Introducing Selmer
- lib-noir access rule madness
- what's new in lib-noir
- Packaging a Clojure+ClojureScript jar
- Clojure Data Analysis Cookbook Review
- Introducing cljs-ajax
- a book is coming
- New Templating Engine in Luminus
- New kid on the templating block
- lib-noir updates
- One Ring to rule them all
- Luminus progress report
2012 36
- Luminus progress updates
- Luminus: a web framework for Clojure
- Creating Leiningen Templates
- Moving to Compojure
- ClojureScript Adventures
- making reporting easy
- Making services with Liberator
- Noir tutorial - part 7
- Noir tutorial - part 6
- Noir tutorial - part 5
- Noir tutorial - part 4
- Noir tutorial - part 3
- Reflecting on performance
- Noir tutorial - part 2
- Noir tutorial - part 1
- Easy PDF reports with clj-pdf
- Blogging with Noir
- Why be conservative
- Setting up Eclipse for Clojure
- Serving RSS with Clojure
- Noir tricks
- open access
- a look at macros
- perfection
- less is more
- all things being equal
- limits of mutation
- we'll do it live!
- lost in patterns
- living in a structured world
- Temporally oblivious
- why all the parens
- popularity contests
- why you shouldn't jump through loops
- I don't need a method to function
- subject to change