The Curious Engineer

All blogs / C

null program

nullprogram.com

CC++Dev tools / editors / IDEsEngineering blogs

Posts
466 from 1 Sep 2007 to 31 Oct 2026
Posting
monthly (15 in the last year)
Kind
personal blog
Feed
https://nullprogram.com/feed/

2026 12

  1. Prospero: a new coding harness for a more civilized age
  2. tugz: a new deflate library with three applications
  3. A new, bespoke static site generator to replace Jekyll
  4. What's been going on in w64devkit the past year
  5. A custom virtual machine for the Stars! 4X game
  6. Concurrent, atomic MSI hash tables
  7. I have officially retired from Emacs
  8. My brave new code-signing world
  9. dcmake: a new CMake debugger UI
  10. 2026 has been the most pivotal year in my career… and it's only March
  11. Frankenwine: Multiple personas in a Wine process
  12. WebAssembly as a Python extension platform

2025 15

  1. Freestyle linked lists tricks
  2. Unix "find" expressions compiled to bytecode
  3. Closures as Win32 window procedures
  4. Speculations on arenas and non-trivial destructors
  5. More speculations on arenas in C++
  6. Hierarchical field sort with string interning
  7. Assemblers in w64devkit, and other updates
  8. Parameterized types in C using the new tag compatibility rule
  9. WebAssembly: How to allocate your allocator
  10. Lessons learned from my first dive into WebAssembly
  11. A more robust raw OpenBSD syscall demo
  12. Robust Wavefront OBJ model parsing in C
  13. Meet the new xxd for w64devkit: rexxd
  14. Tips for more effective fuzz testing with AFL++
  15. Examples of quick hash tables and dynamic arrays in C

2024 13

  1. Rules to avoid common extended inline assembly mistakes
  2. Everything I've learned so far about running local LLMs
  3. Windows dynamic linking depends on the active code page
  4. Slim Reader/Writer Locks are neato
  5. Giving C++ std::regex a C makeover
  6. Deep list copy: More than meets the eye
  7. Symbol inspection tools for w64devkit: vc++filt and peports
  8. Arenas and the almighty concatenation operator
  9. Guidelines for computing sizes and subscripts
  10. Speculations on arenas and custom strings in C++
  11. Protecting paths in macro expansions by extending UTF-8
  12. An improved chkstk function on Windows
  13. Two handy GDB breakpoint tricks

2023 19

  1. So you want custom allocator support in your C library
  2. My personal C coding style as of late 2023
  3. A simple, arena-backed, generic dynamic array for C
  4. An easy-to-implement, arena-friendly hash map
  5. Arena allocator tips and tricks
  6. How to link identical function names from different DLLs
  7. Everything you never wanted to know about Win32 environment blocks
  8. "Once" one-time concurrent initialization with an integer
  9. Solving "Two Sum" in C with a tiny hash table
  10. My ranking of every Shakespeare play
  11. Hand-written Windows API prototypes: fast, flexible, and tedious
  12. My favorite C compiler flags during development
  13. Practical libc-free threading on Linux
  14. CRT-free in 2023: tips and tricks
  15. Let's implement buffered, formatted output
  16. Let's write a setjmp
  17. My review of the C standard library in practice
  18. u-config: a new, lean pkg-config clone
  19. SDL2 common mistakes and how to avoid them

2022 13

  1. QOI is now my favorite asset format
  2. I solved the Dandelions paper-and-pencil game
  3. How to build a WaitGroup from a 32-bit integer
  4. Illuminating synchronization edges for ThreadSanitizer
  5. The quick and practical "MSI" hash table
  6. My new debugbreak command
  7. Assertions should be more debugger-oriented
  8. My take on "where's all the code"
  9. A lock-free, concurrent, generic queue in 32 bits
  10. Luhn algorithm using SWAR and SIMD
  11. A flexible, lightweight, spin-lock barrier
  12. Compressing and embedding a Wordle word list
  13. The wild west of Windows command line parsing

2021 14

  1. A new protocol and tool for PNG file attachments
  2. Some sanity for C and C++ development on Windows
  3. Fast CSV processing with SIMD
  4. OpenBSD's pledge and unveil from Python
  5. Billions of Code Name Permutations in 32 bits
  6. Test cross-architecture without leaving home
  7. strcpy: a niche function you don't need
  8. More DLL fun with w64devkit: Go, assembly, and Python
  9. How to build and use DLLs on Windows
  10. The cost of Java's EnumSet
  11. Effects of Fortuna
  12. A guide to Windows application development using w64devkit
  13. Well-behaved alias commands on Windows
  14. Single-primitive authenticated encryption for fun

2020 16

  1. State machines are wonderful tools
  2. You might not need machine learning
  3. Improving on QBasic's Random Number Generator
  4. I Solved British Square
  5. w64devkit: (Almost) Everything You Need
  6. Asynchronously Opening and Closing Files in Asyncio
  7. Conventions for Command Line Options
  8. Exactly-Once Initialization in Asynchronous Python
  9. Netpbm Animation Showcase
  10. Latency in Asynchronous Python
  11. w64devkit: a Portable C and C++ Development Kit for Windows
  12. How to Read UTF-8 Passwords on the Windows Console
  13. When Parallel: Pull, Don't Push
  14. A Go Module Testbed
  15. A Makefile for Emacs Packages
  16. Go's Tooling is an Undervalued Technology

2019 22

  1. Purgeable Memory Allocations for Linux
  2. Unintuitive JSON Parsing
  3. Efficient Alias of a Built-In Emacs Lisp Function
  4. Chunking Optimizations: Let the Knife Do the Work
  5. On-the-fly Linear Congruential Generator Using Emacs Calc
  6. Infectious Executable Stacks
  7. Legitimate-ish Use of alloca()
  8. Legitimate Use of Variable Length Arrays
  9. No, PHP Doesn't Have Closures
  10. Keyringless GnuPG
  11. The Long Key ID Collider
  12. Predictable, Passphrase-Derived PGP Keys
  13. Go Slices are Fat Pointers
  14. UTF-8 String Indexing Strategies
  15. Looking for Entropy in All the Wrong Places
  16. Fibers: the Most Elegant Windows API
  17. Endlessh: an SSH Tarpit
  18. An Async / Await Library for Emacs Lisp
  19. Python Decorators: Syntactic Artificial Sweetener
  20. The CPython Bytecode Compiler is Dumb
  21. The Day I Fell in Love with Fuzzing
  22. A JavaScript Typed Array Gotcha

2018 20

  1. A Survey of $RANDOM
  2. Why Aren't There C Conferences?
  3. A JIT Compiler Skirmish with SELinux
  4. The Missing Computer Skills of High School Students
  5. From Vimperator to Tridactyl
  6. Brute Force Incognito Browsing
  7. Prospecting for Hash Functions
  8. The Value of Undefined Behavior
  9. Intercepting and Emulating Linux System Calls with Ptrace
  10. Minimalist C Libraries
  11. Emacs 26 Brings Generators and Threads
  12. When FFI Function Calls Beat Native C
  13. When the Compiler Bites
  14. Blast from the Past: Borland C++ on Windows 98
  15. A Crude Personal Package Manager
  16. Emacs Lisp Lambda Expressions Are Not Self-Evaluating
  17. Two Chaotic Motion Demos
  18. Options for Structured Data in Emacs Lisp
  19. Inspiration from Data-dependent Rotations
  20. Debugging Emacs or: How I Learned to Stop Worrying and Love DTrace

2017 28

  1. What's in an Emacs Lambda
  2. Initial Evaluation of the Windows Subsystem for Linux
  3. Render Multimedia in Pure C
  4. Make Flet Great Again
  5. A Branchless UTF-8 Decoder
  6. Finding the Best 64-bit Simulation PRNG
  7. Blowpipe: a Blowfish-encrypted, Authenticated Pipe
  8. Gap Buffers Are Not Optimized for Multiple Cursors
  9. Ten Years of Blogging
  10. Vim vs. Emacs: the Working Directory
  11. A Tutorial on Portable Makefiles
  12. Introducing the Pokerware Secure Passphrase Generator
  13. Integer Overflow into Information Disclosure
  14. Rolling Shutter Simulation in C
  15. Stack Clashing for Fun and Profit
  16. Building and Installing Software in $HOME
  17. Switching to the Mutt Email Client
  18. Web Scraping into an E-book with BeautifulSoup and Pandoc
  19. The Adversarial Implementation
  20. Two Games with Monte Carlo Tree Search
  21. My Journey with Touch Typing and Vim
  22. How to Write Portable C Without Complicating Your Build
  23. Why I've Retired My PGP Keys and What's Replaced It
  24. OpenMP and pwrite()
  25. Asynchronous Requests from Emacs Dynamic Modules
  26. How to Write Fast(er) Emacs Lisp
  27. Manual Control Flow Guard in C
  28. C Closures as a Library

2016 32

  1. Domain-Specific Language Compilation in Elfeed
  2. Relocatable Global Data on x86
  3. Some Performance Advantages of Lexical Scope
  4. Faster Elfeed Search Through JIT Byte-code Compilation
  5. A Showerthoughts Fortune File
  6. Portable Structure Access with Member Offset Constants
  7. A Magnetized Needle and a Steady Hand
  8. Baking Data with Serialization
  9. Zero-allocation Trie Traversal
  10. Emacs, Dynamic Modules, and Joysticks
  11. An Array of Pointers vs. a Multidimensional Array
  12. Small-Size Optimization in C
  13. The Vulgarness of Abbreviated Function Templates
  14. Linux System Calls, Error Numbers, and In-Band Signaling
  15. Render the Mandelbrot Set with jq
  16. Modifying the Middle of a zlib Stream
  17. Inspecting C's qsort Through Animation
  18. How to Read and Write Other Process Memory
  19. Two Years as a High School Mentor
  20. An Elfeed Database Analysis
  21. Automatic Deletion of Incomplete Output Files
  22. Appending to a File from Multiple Processes
  23. Const and Optimization in C
  24. Stealing Session Cookies with Tcpdump
  25. Elfeed, cURL, and You
  26. Four Ways to Compile C for Windows
  27. You Can't Always Hash Pointers in C
  28. Makefile Assignments are Turing-Complete
  29. Mapping Multiple Memory Views in User Space
  30. Hotpatching a C Function on x86
  31. Calling the Native API While Freestanding
  32. Small, Freestanding Windows Executables

2015 14

  1. 9 Elfeed Features You Might Not Know
  2. Quickly Access x86 Documentation in Emacs
  3. RSA Signatures in Emacs Lisp
  4. Counting Processor Cores in Emacs
  5. Web Tips For Webcomic Authors
  6. Recovering Live Data with GDB
  7. Shamus Young's Twenty-Sided Tale E-book
  8. Mandelbrot Set with SIMD Intrinsics
  9. Minimal OpenGL 3.3 Core Profile Demo
  10. Raw Linux Threads via System Calls
  11. NASM x86 Assembly Major Mode for Emacs
  12. A Basic Just-In-Time Compiler
  13. Goblin-COM 7DRL 2015
  14. Generic C Reference Counting

2014 31

  1. Interactive Programming in C
  2. How to build DOS COM files with GCC
  3. LZSS Quine Puzzle
  4. C Object Oriented Programming
  5. Emacs Autotetris Mode
  6. Global State: a Tale of Two Bad C APIs
  7. The Billion Pi Challenge
  8. C11 Lock-free Stack
  9. Stabilizing C's Quicksort
  10. A GPU Approach to Particle Physics
  11. A GPU Approach to Path Finding
  12. Feedback Applet Ported to WebGL
  13. Emacs Unicode Pitfalls
  14. A GPU Approach to Conway's Game of Life
  15. Tag Feeds for null program
  16. Per Loop vs. Per Iteration Bindings
  17. Emacs Chat with Sacha Chua
  18. A GPU Approach to Voronoi Diagrams
  19. Emacs Lisp Buffer Passing Style
  20. Digispark and Debian
  21. An Emacs Foreign Function Interface
  22. Three Dimensions of Type Systems
  23. Duck Typing vs. Type Erasure
  24. Northbound 7DRL 2014
  25. Emacs Lisp Defstruct Namespace Convention
  26. The Julia Programming Language
  27. Reimaging a VM from the inside with Debian
  28. Introducing EmacSQL
  29. Emacs Lisp Object Finalizers
  30. Measure Elisp Object Memory Usage with Calipers
  31. Emacs Byte-code Internals

2013 46

  1. Emacs Lisp Readable Closures
  2. Clojure-style Multimethods in Emacs Lisp
  3. Emacs Lisp Reddit API Wrapper
  4. Emacs, Thanksgiving, and Hanukkah
  5. Elfeed Tips and Tricks
  6. My Grading Process
  7. Atom vs. RSS
  8. The Elfeed Database
  9. Introducing Elfeed, an Emacs Web Feed Reader
  10. Leaving Gmail Behind
  11. JavaScript Function Metaprogramming
  12. Coining Autoism
  13. Live Systems are Handy
  14. Liquid Simulation in WebGL
  15. Personal OS Configuration Live System
  16. An HTML5 Canvas Design Pattern
  17. Life Beyond Google Reader
  18. Long Live WebGL
  19. Emacs Mouse Slider Mode for Numbers
  20. A Handy Emacs Package Configuration Macro
  21. Skewer Gets HTML Interaction
  22. Should Emacs Packages Self Configure?
  23. Load Libraries in Skewer with Bower
  24. JavaScript Function Statements vs. Expressions
  25. Inventing a Datetime Web Service
  26. Disc RL in the Media
  27. Userspace Threading in JavaScript
  28. Tracking Mobile Device Orientation with Emacs
  29. Prototype-based Elisp Objects with @
  30. Precise JavaScript Serialization with ResurrectJS
  31. JavaScript Fantasy Name Generator
  32. A Seedable JavaScript PRNG
  33. Applying Constructors in JavaScript
  34. 7DRL 2013 Complete
  35. Serializing JavaScript Objects
  36. Fast Monte Carlo Method with JavaScript
  37. JavaScript "Map With This"
  38. How to Make an Emacs Minor Mode
  39. Emacs Javadoc Lookups Get a Facelift
  40. Web Distributed Computing Revisited
  41. Live CSS Interaction with Skewer
  42. The Limits of Emacs Advice
  43. Parameter Lists in Common Lisp and Clojure
  44. Turning Asynchronous into Synchronous in Elisp
  45. Flu Trends Timeline
  46. Clojure and Emacs for Lispers

2012 41

  1. An Emacs Pastebin
  2. How a simple-httpd Vulnerability Slipped In
  3. Elisp Weak References
  4. A Use For Macrolet
  5. JavaScript Truthiness Quiz
  6. Raising the Dead with JavaScript
  7. JavaScript Debugging Challenge
  8. JavaScript Strings as Arrays
  9. JavaScript's Quirky eval
  10. Skewer: Emacs Live Browser Interaction
  11. Debian Bugtracker Data
  12. Emacs visual-indentation-mode
  13. Emacs Abnormal Termination
  14. Programs as Elisp Macros
  15. Elisp Recursive Descent Parser (rdp)
  16. Revisiting an N-body Simulator
  17. Fractal Rendering in Emacs
  18. Markov Chain Text Generation
  19. Implemented Is Simple Data Compression
  20. simple-httpd and impatient-mode
  21. Elisp Unit Testing with ERT
  22. Switching to the Emacs Lisp Package Archive
  23. The Physical Analog for Encryption is the Hyperdrive
  24. Programmatically Setting Lisp Docstrings
  25. Viewing Java Class Files in Emacs
  26. A Few Tricky C Questions
  27. Literal Arrays and Vectors in Lisp
  28. Moving to Openbox
  29. Publishing My Private Keys
  30. Versioning Personal Configuration Dotfiles
  31. SSH and GPG Agents
  32. Perlin Noise With Octave, Java, and OpenCL
  33. SSH Honeypots
  34. Presentations with Jekyll and deck.js
  35. Why Do Developers Prefer Certain Kinds of Tools?
  36. Pseudo-terminals
  37. Making Your Own GIF Image Macros
  38. Rumor Simulation
  39. Lisp Let in GNU Octave
  40. Cartoon Liquid Simulation
  41. Silky Smooth Perlin Noise Surface

2011 21

  1. CSS Variables with Jekyll and Liquid
  2. Poor Man's Video Editing
  3. Try Out My Java With Emacs Workflow Within Minutes
  4. Introducing NativeGuide
  5. Some Cool Shell Aliases
  6. Emacs Configuration Repository
  7. Halftone
  8. Java Hot Code Replacement
  9. October Chess Engine Updates
  10. Fake Emacs Namespaces
  11. Moved To New Hosting
  12. Pendulum Waves
  13. Infinite Parallax Starfield
  14. Feedback Loop Applet
  15. October's Chess Engine Gets Some Attention
  16. Movie Montage Comparison
  17. Torrent File Strip
  18. BrianScheme Update: Bootstrapping and Images
  19. The Great Tab Mistake
  20. BrianScheme
  21. Flip Foolflim the Dragon Traitor

2010 33

  1. Pth and ncurses
  2. Elisp Function Composition
  3. Sudoku Applet
  4. Java Applets Demo Page
  5. A Modest Chess Engine
  6. Lorenz Chaotic Water Wheel Applet
  7. Introducing Java Mode Plus
  8. Jump to Java Documentation from Emacs
  9. Emacs Set Window to 80 Columns
  10. Sample Java Project
  11. Emacs Find All Files
  12. Elisp Higher-order Conversion to Interactive
  13. Throw Up a Quick HTTP Server
  14. Middleman Parallelization
  15. Java is Death By A Thousand Paper Cuts
  16. Distributed Computing with Emacs
  17. Elisp Memoize
  18. GIMP Painting
  19. Pen and Paper RPG Wishlist
  20. GIMP Space Elevator Drawing
  21. Emacs Byte Compilation
  22. Emacs ParEdit and IELM
  23. Elisp Printed Hash Tables
  24. Identifying Files
  25. Neat Random Inn Generator
  26. The Problem with String Stored Regex
  27. Scheme Live Coding
  28. Emacs cat-safe
  29. A Fractran Short Story
  30. Common Lisp Quick Reference
  31. Wisp Screencasts
  32. Wisp Lisp
  33. Setting up a Common Lisp Environment

2009 43

  1. Magick Thumbnails
  2. Game of Life in Java
  3. Tweaking Emacs for Ant and Java
  4. Emacs Web Servlets
  5. Your BitTorrent Client is Probably Defective by Design
  6. Comments Upgrade with Avatars
  7. Unorderable Sets
  8. SumoBots Programming Game
  9. null program Turns Two Years Old
  10. Lossless Optimizers
  11. Web Pages Are Liquids
  12. Ad-blocking and the Regrettable URL Format
  13. Television Commercials
  14. Lisp Fantasy Name Generator
  15. Converted to HTML 5
  16. The Emacs Calculator
  17. United States Hamiltonian Paths
  18. JavaScript Distributed Computing
  19. E-mail Obfuscater Perl One-liner
  20. Elisp Wishlist
  21. Elisp Running Time Macro
  22. Unquoted Let
  23. Getting Lisp
  24. Another Perl One-liner: Byte Order
  25. Emacs Web Server
  26. I Finally Have Comments
  27. Greasemonkey User Scripts
  28. Wikipedia Flu Time-lapse
  29. Clay Klein Bottle
  30. A Not So Stupid C Mistake
  31. SWF Decompression Perl One-liner
  32. URL Shortening
  33. Brainfuck Halting Problem
  34. The Lazy Fibonacci List
  35. Apartment Balcony Gardening
  36. Vimperator Firefox Add-on
  37. Avoid Zip Archives
  38. LZMA Tarballs Are Coming
  39. GNU Screen
  40. Readline Wrap
  41. Distributed Issue Tracking
  42. Git is Better
  43. Fantasy Name Generator: Request for Patterns

2008 15

  1. Don't Write Your Own E-mail Validator
  2. The Fire Gem
  3. Controlling a Minefield
  4. Play NetHack
  5. A GNU Octave Feature
  6. Two-Man Double Blind Coke vs. Pepsi Taste Test
  7. Sudoku Solver
  8. Variable Declarations and the C Call Stack
  9. Up is Down
  10. Memoization
  11. Lisp Number Representations
  12. Linear Spatial Filters with GNU Octave
  13. My Team Won the Robot Competition
  14. The 3n + 1 Conjecture
  15. Optimizing, Multi-threading Brainfuck to C Converter

2007 18

  1. Movie Montage Poster
  2. A Faster Montage
  3. Unsharp Masking
  4. Movie DNA
  5. Traveling Salesman Problem by Genetic Algorithm
  6. Noise Fractals and Clouds
  7. Neural Network Blackjack Game
  8. Iterated Prisoner's Dilemma
  9. Chess AI Idea
  10. Robot Version 1
  11. Java Animated Maze Generator and Solver
  12. Mandelbrot Set on a Cluster
  13. Proposal for a Free Musical
  14. BCCD Clusters
  15. PNG Archiver - Share Files Within Images
  16. YouTube with Free Software
  17. Mandelbrot with GNU Octave
  18. null program is Alive