54,302 blogs · [ { "id": "01a0bdc7-d5b3-7172-aaee-6f811cc21797", "title": "What's been going on in w64devkit the past year", "url": "https://nullprogram.com/blog/2026/09/20/", "published_at": "2026-09-20T01:49:36+00:00" }, { "id": "01a0bdc7-d5b3-7172-aaee-6f811cea3628", "title": "A custom virtual machine for the Stars! 4X game", "url": "https://nullprogram.com/blog/2026/09/17/", "published_at": "2026-09-17T02:00:00+00:00" }, { "id": "01a07d5d-910b-7129-8d01-97aa405c5d27", "title": "Concurrent, atomic MSI hash tables", "url": "https://nullprogram.com/blog/2026/05/06/", "published_at": "2026-05-06T02:01:17+00:00" }, { "id": "01a07d5d-910b-7129-8d01-97aa40adb6b7", "title": "I have officially retired from Emacs", "url": "https://nullprogram.com/blog/2026/04/26/", "published_at": "2026-04-26T00:00:00+00:00" }, { "id": "01a07d5d-910b-7129-8d01-97aa4195ce85", "title": "My brave new code-signing world", "url": "https://nullprogram.com/blog/2026/04/25/", "published_at": "2026-04-25T18:12:29+00:00" }, { "id": "01a07d5d-910b-7129-8d01-97aa4257e5f4", "title": "dcmake: a new CMake debugger UI", "url": "https://nullprogram.com/blog/2026/04/07/", "published_at": "2026-04-07T03:04:02+00:00" }, { "id": "01a07d5d-910b-7129-8d01-97aa43364502", "title": "2026 has been the most pivotal year in my career… and it's only March", "url": "https://nullprogram.com/blog/2026/03/29/", "published_at": "2026-03-29T21:38:22+00:00" }, { "id": "01a07d5d-910b-7129-8d01-97aa4385a05b", "title": "Frankenwine: Multiple personas in a Wine process", "url": "https://nullprogram.com/blog/2026/01/19/", "published_at": "2026-01-19T21:51:38+00:00" }, { "id": "01a07d5d-910b-7129-8d01-97aa442867d5", "title": "WebAssembly as a Python extension platform", "url": "https://nullprogram.com/blog/2026/01/01/", "published_at": "2026-01-01T21:21:19+00:00" }, { "id": "01a07d5d-910b-7129-8d01-97aa448e455f", "title": "Freestyle linked lists tricks", "url": "https://nullprogram.com/blog/2025/12/31/", "published_at": "2025-12-31T11:59:59+00:00" }, { "id": "01a08218-2124-7120-a13c-7eda251019e9", "title": "A Makefile for Emacs Packages", "url": "https://nullprogram.com/blog/2020/01/22/", "published_at": "2020-01-22T02:54:41+00:00" }, { "id": "01a08218-2124-7120-a13c-7eda252c2b81", "title": "Efficient Alias of a Built-In Emacs Lisp Function", "url": "https://nullprogram.com/blog/2019/12/10/", "published_at": "2019-12-10T02:32:04+00:00" }, { "id": "01a08218-2124-7120-a13c-7eda25d4cc44", "title": "On-the-fly Linear Congruential Generator Using Emacs Calc", "url": "https://nullprogram.com/blog/2019/11/19/", "published_at": "2019-11-19T01:17:50+00:00" }, { "id": "01a08218-2124-7120-a13c-7eda25eedd90", "title": "UTF-8 String Indexing Strategies", "url": "https://nullprogram.com/blog/2019/05/29/", "published_at": "2019-05-29T21:52:06+00:00" }, { "id": "01a08218-2124-7120-a13c-7eda266d71d4", "title": "An Async / Await Library for Emacs Lisp", "url": "https://nullprogram.com/blog/2019/03/10/", "published_at": "2019-03-10T20:57:03+00:00" }, { "id": "01a08218-2124-7120-a13c-7eda27091951", "title": "Emacs 26 Brings Generators and Threads", "url": "https://nullprogram.com/blog/2018/05/31/", "published_at": "2018-05-31T17:45:16+00:00" }, { "id": "01a08218-2124-7120-a13c-7eda275fd617", "title": "Emacs Lisp Lambda Expressions Are Not Self-Evaluating", "url": "https://nullprogram.com/blog/2018/02/22/", "published_at": "2018-02-22T21:30:57+00:00" }, { "id": "01a08218-2124-7120-a13c-7eda285aa910", "title": "Options for Structured Data in Emacs Lisp", "url": "https://nullprogram.com/blog/2018/02/14/", "published_at": "2018-02-14T17:43:34+00:00" }, { "id": "01a08218-2124-7120-a13c-7eda28f057bd", "title": "Debugging Emacs or: How I Learned to Stop Worrying and Love DTrace", "url": "https://nullprogram.com/blog/2018/01/17/", "published_at": "2018-01-17T23:59:49+00:00" }, { "id": "01a08218-2124-7120-a13c-7eda29ddb0eb", "title": "What's in an Emacs Lambda", "url": "https://nullprogram.com/blog/2017/12/14/", "published_at": "2017-12-14T18:18:57+00:00" }, { "id": "01a08218-2124-7120-a13c-7eda2a6af392", "title": "Make Flet Great Again", "url": "https://nullprogram.com/blog/2017/10/27/", "published_at": "2017-10-27T21:02:58+00:00" }, { "id": "01a08218-2124-7120-a13c-7eda2b310ae9", "title": "Gap Buffers Are Not Optimized for Multiple Cursors", "url": "https://nullprogram.com/blog/2017/09/07/", "published_at": "2017-09-07T01:34:04+00:00" }, { "id": "01a08218-2124-7120-a13c-7eda2b7af49a", "title": "Vim vs. Emacs: the Working Directory", "url": "https://nullprogram.com/blog/2017/08/22/", "published_at": "2017-08-22T04:51:36+00:00" }, { "id": "01a08218-2124-7120-a13c-7eda2bc33461", "title": "My Journey with Touch Typing and Vim", "url": "https://nullprogram.com/blog/2017/04/01/", "published_at": "2017-04-01T04:02:08+00:00" }, { "id": "01a08218-2124-7120-a13c-7eda2c5fc6fe", "title": "Asynchronous Requests from Emacs Dynamic Modules", "url": "https://nullprogram.com/blog/2017/02/14/", "published_at": "2017-02-14T02:30:00+00:00" }, { "id": "01a08218-2124-7120-a13c-7eda2d0660b8", "title": "How to Write Fast(er) Emacs Lisp", "url": "https://nullprogram.com/blog/2017/01/30/", "published_at": "2017-01-30T21:08:19+00:00" }, { "id": "01a08218-2124-7120-a13c-7eda2d0f8cf7", "title": "Domain-Specific Language Compilation in Elfeed", "url": "https://nullprogram.com/blog/2016/12/27/", "published_at": "2016-12-27T21:46:30+00:00" }, { "id": "01a08218-2124-7120-a13c-7eda2dd50d4a", "title": "Some Performance Advantages of Lexical Scope", "url": "https://nullprogram.com/blog/2016/12/22/", "published_at": "2016-12-22T02:33:36+00:00" }, { "id": "01a08218-2124-7120-a13c-7eda2ea9a7f1", "title": "Faster Elfeed Search Through JIT Byte-code Compilation", "url": "https://nullprogram.com/blog/2016/12/11/", "published_at": "2016-12-11T23:16:42+00:00" }, { "id": "01a08218-2124-7120-a13c-7eda2eadbf49", "title": "A Showerthoughts Fortune File", "url": "https://nullprogram.com/blog/2016/12/01/", "published_at": "2016-12-01T23:58:15+00:00" }, { "id": "01a08218-2124-7120-a13c-7eda2f557c21", "title": "Emacs, Dynamic Modules, and Joysticks", "url": "https://nullprogram.com/blog/2016/11/05/", "published_at": "2016-11-05T04:01:51+00:00" }, { "id": "01a08218-2124-7120-a13c-7eda2f6b9ab9", "title": "An Elfeed Database Analysis", "url": "https://nullprogram.com/blog/2016/08/12/", "published_at": "2016-08-12T03:20:16+00:00" }, { "id": "01a08218-2124-7120-a13c-7eda3065e4e3", "title": "Elfeed, cURL, and You", "url": "https://nullprogram.com/blog/2016/06/16/", "published_at": "2016-06-16T18:22:16+00:00" }, { "id": "01a08218-2124-7120-a13c-7eda30a87322", "title": "9 Elfeed Features You Might Not Know", "url": "https://nullprogram.com/blog/2015/12/03/", "published_at": "2015-12-03T22:33:17+00:00" }, { "id": "01a08218-2124-7120-a13c-7eda30cf0ca2", "title": "Quickly Access x86 Documentation in Emacs", "url": "https://nullprogram.com/blog/2015/11/21/", "published_at": "2015-11-21T05:42:17+00:00" }, { "id": "01a08218-2124-7120-a13c-7eda3157e27a", "title": "RSA Signatures in Emacs Lisp", "url": "https://nullprogram.com/blog/2015/10/30/", "published_at": "2015-10-30T22:35:13+00:00" }, { "id": "01a08218-2124-7120-a13c-7eda32097407", "title": "Counting Processor Cores in Emacs", "url": "https://nullprogram.com/blog/2015/10/14/", "published_at": "2015-10-14T03:17:16+00:00" }, { "id": "01a08218-2124-7120-a13c-7eda32611522", "title": "NASM x86 Assembly Major Mode for Emacs", "url": "https://nullprogram.com/blog/2015/04/19/", "published_at": "2015-04-19T02:38:23+00:00" }, { "id": "01a08218-2124-7120-a13c-7eda32681c1d", "title": "Emacs Autotetris Mode", "url": "https://nullprogram.com/blog/2014/10/19/", "published_at": "2014-10-19T21:45:53+00:00" }, { "id": "01a08218-2124-7120-a13c-7eda3317efcd", "title": "Emacs Unicode Pitfalls", "url": "https://nullprogram.com/blog/2014/06/13/", "published_at": "2014-06-13T05:58:34+00:00" }, { "id": "01a08218-2124-7120-a13c-7eda33ddc7e4", "title": "An Emacs Foreign Function Interface", "url": "https://nullprogram.com/blog/2014/04/26/", "published_at": "2014-04-26T16:25:51+00:00" }, { "id": "01a08218-2124-7120-a13c-7eda34929427", "title": "Emacs Lisp Defstruct Namespace Convention", "url": "https://nullprogram.com/blog/2014/03/19/", "published_at": "2014-03-19T01:41:52+00:00" }, { "id": "01a08218-2124-7120-a13c-7eda34c0a51e", "title": "Introducing EmacSQL", "url": "https://nullprogram.com/blog/2014/02/06/", "published_at": "2014-02-06T05:52:37+00:00" }, { "id": "01a08218-2124-7120-a13c-7eda35affc29", "title": "Emacs Lisp Object Finalizers", "url": "https://nullprogram.com/blog/2014/01/27/", "published_at": "2014-01-27T05:24:16+00:00" }, { "id": "01a08218-2124-7120-a13c-7eda36a356b8", "title": "Measure Elisp Object Memory Usage with Calipers", "url": "https://nullprogram.com/blog/2014/01/26/", "published_at": "2014-01-26T01:15:02+00:00" }, { "id": "01a08218-2124-7120-a13c-7eda37263ef0", "title": "Emacs Byte-code Internals", "url": "https://nullprogram.com/blog/2014/01/04/", "published_at": "2014-01-04T05:07:26+00:00" }, { "id": "01a08218-2124-7120-a13c-7eda37886d0b", "title": "Emacs Lisp Readable Closures", "url": "https://nullprogram.com/blog/2013/12/30/", "published_at": "2013-12-30T23:52:38+00:00" }, { "id": "01a08218-2124-7120-a13c-7eda382d62ec", "title": "Clojure-style Multimethods in Emacs Lisp", "url": "https://nullprogram.com/blog/2013/12/18/", "published_at": "2013-12-18T23:06:15+00:00" }, { "id": "01a08218-2124-7120-a13c-7eda38322243", "title": "Emacs Lisp Reddit API Wrapper", "url": "https://nullprogram.com/blog/2013/12/16/", "published_at": "2013-12-16T23:27:23+00:00" }, { "id": "01a08218-2124-7120-a13c-7eda38b84e59", "title": "Emacs, Thanksgiving, and Hanukkah", "url": "https://nullprogram.com/blog/2013/11/28/", "published_at": "2013-11-28T22:25:36+00:00" }, { "id": "01a08218-2124-7120-a13c-7eda38c98239", "title": "Elfeed Tips and Tricks", "url": "https://nullprogram.com/blog/2013/11/26/", "published_at": "2013-11-26T00:38:20+00:00" }, { "id": "01a08218-2124-7120-a13c-7eda394d30e6", "title": "The Elfeed Database", "url": "https://nullprogram.com/blog/2013/09/09/", "published_at": "2013-09-09T05:53:41+00:00" }, { "id": "01a08218-2124-7120-a13c-7eda39a2187f", "title": "Introducing Elfeed, an Emacs Web Feed Reader", "url": "https://nullprogram.com/blog/2013/09/04/", "published_at": "2013-09-04T05:33:10+00:00" }, { "id": "01a08218-2124-7120-a13c-7eda3a364a0d", "title": "Leaving Gmail Behind", "url": "https://nullprogram.com/blog/2013/09/03/", "published_at": "2013-09-03T03:45:58+00:00" }, { "id": "01a08218-2124-7120-a13c-7eda3a670c47", "title": "Personal OS Configuration Live System", "url": "https://nullprogram.com/blog/2013/06/17/", "published_at": "2013-06-17T00:00:00+00:00" }, { "id": "01a08218-2124-7120-a13c-7eda3ae231ec", "title": "Emacs Mouse Slider Mode for Numbers", "url": "https://nullprogram.com/blog/2013/06/07/", "published_at": "2013-06-07T00:00:00+00:00" }, { "id": "01a08218-2124-7120-a13c-7eda3b69360c", "title": "A Handy Emacs Package Configuration Macro", "url": "https://nullprogram.com/blog/2013/06/02/", "published_at": "2013-06-02T00:00:00+00:00" }, { "id": "01a08218-2124-7120-a13c-7eda3c2584da", "title": "Skewer Gets HTML Interaction", "url": "https://nullprogram.com/blog/2013/06/01/", "published_at": "2013-06-01T00:00:00+00:00" }, { "id": "01a08218-2124-7120-a13c-7eda3d17c907", "title": "Should Emacs Packages Self Configure?", "url": "https://nullprogram.com/blog/2013/05/23/", "published_at": "2013-05-23T00:00:00+00:00" }, { "id": "01a08218-2124-7120-a13c-7eda3d9eb6a7", "title": "Load Libraries in Skewer with Bower", "url": "https://nullprogram.com/blog/2013/05/18/", "published_at": "2013-05-18T00:00:00+00:00" }, { "id": "01a08218-2124-7120-a13c-7eda3e638109", "title": "Tracking Mobile Device Orientation with Emacs", "url": "https://nullprogram.com/blog/2013/04/27/", "published_at": "2013-04-27T00:00:00+00:00" }, { "id": "01a08218-2124-7120-a13c-7eda3ecbba9d", "title": "Prototype-based Elisp Objects with @", "url": "https://nullprogram.com/blog/2013/04/07/", "published_at": "2013-04-07T00:00:00+00:00" }, { "id": "01a08218-2124-7120-a13c-7eda3f416f97", "title": "Fast Monte Carlo Method with JavaScript", "url": "https://nullprogram.com/blog/2013/02/25/", "published_at": "2013-02-25T00:00:00+00:00" }, { "id": "01a08218-2124-7120-a13c-7eda3fea44d1", "title": "How to Make an Emacs Minor Mode", "url": "https://nullprogram.com/blog/2013/02/06/", "published_at": "2013-02-06T00:00:00+00:00" }, { "id": "01a08218-2124-7120-a13c-7eda4077d904", "title": "Emacs Javadoc Lookups Get a Facelift", "url": "https://nullprogram.com/blog/2013/01/30/", "published_at": "2013-01-30T00:00:00+00:00" }, { "id": "01a08218-2124-7120-a13c-7eda40dea544", "title": "Live CSS Interaction with Skewer", "url": "https://nullprogram.com/blog/2013/01/24/", "published_at": "2013-01-24T00:00:00+00:00" }, { "id": "01a08218-2124-7120-a13c-7eda41be4471", "title": "The Limits of Emacs Advice", "url": "https://nullprogram.com/blog/2013/01/22/", "published_at": "2013-01-22T00:00:00+00:00" }, { "id": "01a08218-2124-7120-a13c-7eda41f2e62d", "title": "Turning Asynchronous into Synchronous in Elisp", "url": "https://nullprogram.com/blog/2013/01/14/", "published_at": "2013-01-14T00:00:00+00:00" }, { "id": "01a08218-2124-7120-a13c-7eda42cfdfb3", "title": "Clojure and Emacs for Lispers", "url": "https://nullprogram.com/blog/2013/01/07/", "published_at": "2013-01-07T00:00:00+00:00" }, { "id": "01a08218-2124-7120-a13c-7eda434102f6", "title": "An Emacs Pastebin", "url": "https://nullprogram.com/blog/2012/12/29/", "published_at": "2012-12-29T00:00:00+00:00" }, { "id": "01a08218-2124-7120-a13c-7eda441e31a8", "title": "Skewer: Emacs Live Browser Interaction", "url": "https://nullprogram.com/blog/2012/10/31/", "published_at": "2012-10-31T00:00:00+00:00" }, { "id": "01a08218-2124-7120-a13c-7eda4455c31d", "title": "Emacs visual-indentation-mode", "url": "https://nullprogram.com/blog/2012/09/29/", "published_at": "2012-09-29T00:00:00+00:00" }, { "id": "01a08218-2124-7120-a13c-7eda44aa3ea8", "title": "Emacs Abnormal Termination", "url": "https://nullprogram.com/blog/2012/09/28/", "published_at": "2012-09-28T00:00:00+00:00" }, { "id": "01a08218-2124-7120-a13c-7eda450156d8", "title": "Programs as Elisp Macros", "url": "https://nullprogram.com/blog/2012/09/21/", "published_at": "2012-09-21T00:00:00+00:00" }, { "id": "01a08218-2124-7120-a13c-7eda4518b997", "title": "Elisp Recursive Descent Parser (rdp)", "url": "https://nullprogram.com/blog/2012/09/20/", "published_at": "2012-09-20T00:00:00+00:00" }, { "id": "01a08218-2124-7120-a13c-7eda45581117", "title": "Fractal Rendering in Emacs", "url": "https://nullprogram.com/blog/2012/09/14/", "published_at": "2012-09-14T00:00:00+00:00" }, { "id": "01a08218-2124-7120-a13c-7eda45d09d98", "title": "Markov Chain Text Generation", "url": "https://nullprogram.com/blog/2012/09/05/", "published_at": "2012-09-05T00:00:00+00:00" }, { "id": "01a08218-2124-7120-a13c-7eda467a9897", "title": "Implemented Is Simple Data Compression", "url": "https://nullprogram.com/blog/2012/09/04/", "published_at": "2012-09-04T00:00:00+00:00" }, { "id": "01a08218-2124-7120-a13c-7eda4739a6e0", "title": "simple-httpd and impatient-mode", "url": "https://nullprogram.com/blog/2012/08/20/", "published_at": "2012-08-20T00:00:00+00:00" }, { "id": "01a08218-2124-7120-a13c-7eda473d8ad8", "title": "Elisp Unit Testing with ERT", "url": "https://nullprogram.com/blog/2012/08/15/", "published_at": "2012-08-15T00:00:00+00:00" }, { "id": "01a08218-2124-7120-a13c-7eda480677bf", "title": "Switching to the Emacs Lisp Package Archive", "url": "https://nullprogram.com/blog/2012/08/12/", "published_at": "2012-08-12T00:00:00+00:00" }, { "id": "01a08218-2124-7120-a13c-7eda4813ba06", "title": "Programmatically Setting Lisp Docstrings", "url": "https://nullprogram.com/blog/2012/08/02/", "published_at": "2012-08-02T00:00:00+00:00" }, { "id": "01a08218-2124-7120-a13c-7eda48b412ed", "title": "Viewing Java Class Files in Emacs", "url": "https://nullprogram.com/blog/2012/08/01/", "published_at": "2012-08-01T00:00:00+00:00" }, { "id": "01a08218-2124-7120-a13c-7eda48c029ed", "title": "Presentations with Jekyll and deck.js", "url": "https://nullprogram.com/blog/2012/04/30/", "published_at": "2012-04-30T00:00:00+00:00" }, { "id": "01a08218-2124-7120-a13c-7eda49969565", "title": "Why Do Developers Prefer Certain Kinds of Tools?", "url": "https://nullprogram.com/blog/2012/04/29/", "published_at": "2012-04-29T00:00:00+00:00" }, { "id": "01a08218-2124-7120-a13c-7eda4a55ab8e", "title": "Try Out My Java With Emacs Workflow Within Minutes", "url": "https://nullprogram.com/blog/2011/11/19/", "published_at": "2011-11-19T00:00:00+00:00" }, { "id": "01a08218-2124-7120-a13c-7eda4a9e26e9", "title": "Emacs Configuration Repository", "url": "https://nullprogram.com/blog/2011/10/19/", "published_at": "2011-10-19T00:00:00+00:00" }, { "id": "01a08218-2124-7120-a13c-7eda4aa2a065", "title": "Fake Emacs Namespaces", "url": "https://nullprogram.com/blog/2011/08/18/", "published_at": "2011-08-18T00:00:00+00:00" }, { "id": "01a08218-2124-7120-a13c-7eda4ab81ce1", "title": "Elisp Function Composition", "url": "https://nullprogram.com/blog/2010/11/15/", "published_at": "2010-11-15T00:00:00+00:00" }, { "id": "01a08218-2124-7120-a13c-7eda4b247244", "title": "Introducing Java Mode Plus", "url": "https://nullprogram.com/blog/2010/10/15/", "published_at": "2010-10-15T00:00:00+00:00" }, { "id": "01a08218-2124-7120-a13c-7eda4b6cc252", "title": "Jump to Java Documentation from Emacs", "url": "https://nullprogram.com/blog/2010/10/14/", "published_at": "2010-10-14T00:00:00+00:00" }, { "id": "01a08218-2124-7120-a13c-7eda4b973c76", "title": "Emacs Set Window to 80 Columns", "url": "https://nullprogram.com/blog/2010/10/06/", "published_at": "2010-10-06T00:00:00+00:00" }, { "id": "01a08218-2124-7120-a13c-7eda4c432ff8", "title": "Emacs Find All Files", "url": "https://nullprogram.com/blog/2010/09/30/", "published_at": "2010-09-30T00:00:00+00:00" }, { "id": "01a08218-2124-7120-a13c-7eda4d0dd4a8", "title": "Elisp Higher-order Conversion to Interactive", "url": "https://nullprogram.com/blog/2010/09/29/", "published_at": "2010-09-29T00:00:00+00:00" }, { "id": "01a08218-2124-7120-a13c-7eda4db0bee2", "title": "Distributed Computing with Emacs", "url": "https://nullprogram.com/blog/2010/08/07/", "published_at": "2010-08-07T00:00:00+00:00" }, { "id": "01a08218-2124-7120-a13c-7eda4e775880", "title": "Elisp Memoize", "url": "https://nullprogram.com/blog/2010/07/26/", "published_at": "2010-07-26T00:00:00+00:00" }, { "id": "01a08218-2124-7120-a13c-7eda4ed073e6", "title": "Emacs Byte Compilation", "url": "https://nullprogram.com/blog/2010/07/01/", "published_at": "2010-07-01T00:00:00+00:00" }, { "id": "01a08218-2124-7120-a13c-7eda4f422527", "title": "Emacs ParEdit and IELM", "url": "https://nullprogram.com/blog/2010/06/10/", "published_at": "2010-06-10T00:00:00+00:00" }, { "id": "01a08218-2124-7120-a13c-7eda4f4701b2", "title": "Elisp Printed Hash Tables", "url": "https://nullprogram.com/blog/2010/06/07/", "published_at": "2010-06-07T00:00:00+00:00" }, { "id": "01a08218-2124-7120-a13c-7eda50412bbe", "title": "Emacs cat-safe", "url": "https://nullprogram.com/blog/2010/03/31/", "published_at": "2010-03-31T00:00:00+00:00" } ] posts Claim your blog
Back to Chris Wellons
Blog · corpus.blog/blogs/nullprogram.com/posts

Chris Wellons

nullprogram.com

2026

2025

2020

2019

2018

2017

2016

2015

2014

2013

2012

2011

2010