Archives There are 452 articles. 2024-03-05 Protecting paths in macro expansions by extending UTF-8 2024-02-05 An improved chkstk function on Windows 2024-01-28 Two handy GDB breakpoint tricks 2023-12-17 So you want custom allocator support in your C library 2023-10-08 My personal C coding style as of late 2023 2023-10-05 A simple, arena-backed, generic dynamic array for C 2023-09-30 An easy-to-implement, arena-friendly hash map 2023-09-27 Arena allocator tips and tricks 2023-08-27 How to link identical function names from different DLLs 2023-08-23 Everything you never wanted to know about Win32 environment blocks 2023-07-31 "Once" one-time concurrent initialization with an integer 2023-06-26 Solving "Two Sum" in C with a tiny hash table 2023-06-22 My ranking of every Shakespeare play 2023-05-31 Hand-written Windows API prototypes: fast, flexible, and tedious 2023-04-29 My favorite C compiler flags during development 2023-03-23 Practical libc-free threading on Linux 2023-02-15 CRT-free in 2023: tips and tricks 2023-02-13 Let's implement buffered, formatted output 2023-02-12 Let's write a setjmp 2023-02-11 My review of the C standard library in practice 2023-01-18 u-config: a new, lean pkg-config clone 2023-01-08 SDL2 common mistakes and how to avoid them 2022-12-18 QOI is now my favorite asset format 2022-10-12 I solved the Dandelions paper-and-pencil game 2022-10-05 How to build a WaitGroup from a 32-bit integer 2022-10-03 Illuminating synchronization edges for ThreadSanitizer 2022-08-08 The quick and practical "MSI" hash table 2022-07-31 My new debugbreak command 2022-06-26 Assertions should be more debugger-oriented 2022-05-22 My take on "where's all the code" 2022-05-14 A lock-free, concurrent, generic queue in 32 bits 2022-04-30 Luhn algorithm using SWAR and SIMD 2022-03-13 A flexible, lightweight, spin-lock barrier 2022-03-07 Compressing and embedding a Wordle word list 2022-02-18 The wild west of Windows command line parsing 2021-12-31 A new protocol and tool for PNG file attachments 2021-12-30 Some sanity for C and C++ development on Windows 2021-12-04 Fast CSV processing with SIMD 2021-09-15 OpenBSD's pledge and unveil from Python 2021-09-14 Billions of Code Name Permutations in 32 bits 2021-08-21 Test cross-architecture without leaving home 2021-07-30 strcpy: a niche function you don't need 2021-06-29 More DLL fun with w64devkit: Go, assembly, and Python 2021-05-31 How to build and use DLLs on Windows 2021-04-23 The cost of Java's EnumSet 2021-04-14 Effects of Fortuna 2021-03-11 A guide to Windows application development using w64devkit 2021-02-08 Well-behaved alias commands on Windows 2021-01-30 Single-primitive authenticated encryption for fun 2020-12-31 State machines are wonderful tools 2020-11-24 You might not need machine learning 2020-11-17 Improving on QBasic's Random Number Generator 2020-10-19 I Solved British Square 2020-09-25 w64devkit: (Almost) Everything You Need 2020-09-04 Asynchronously Opening and Closing Files in Asyncio 2020-08-01 Conventions for Command Line Options 2020-07-30 Exactly-Once Initialization in Asynchronous Python 2020-06-29 Netpbm Animation Showcase 2020-05-24 Latency in Asynchronous Python 2020-05-15 w64devkit: a Portable C and C++ Development Kit for Windows 2020-05-04 How to Read UTF-8 Passwords on the Windows Console 2020-04-30 When Parallel: Pull, Don't Push 2020-02-13 A Go Module Testbed 2020-01-22 A Makefile for Emacs Packages 2020-01-21 Go's Tooling is an Undervalued Technology 2019-12-29 Purgeable Memory Allocations for Linux 2019-12-28 Unintuitive JSON Parsing 2019-12-10 Efficient Alias of a Built-In Emacs Lisp Function 2019-12-09 Chunking Optimizations: Let the Knife Do the Work 2019-11-19 On-the-fly Linear Congruential Generator Using Emacs Calc 2019-11-15 Infectious Executable Stacks 2019-10-28 Legitimate-ish Use of alloca() 2019-10-27 Legitimate Use of Variable Length Arrays 2019-09-25 No, PHP Doesn't Have Closures 2019-08-09 Keyringless GnuPG 2019-07-22 The Long Key ID Collider 2019-07-10 Predictable, Passphrase-Derived PGP Keys 2019-06-30 Go Slices are Fat Pointers 2019-05-29 UTF-8 String Indexing Strategies 2019-04-30 Looking for Entropy in All the Wrong Places 2019-03-28 Fibers: the Most Elegant Windows API 2019-03-22 Endlessh: an SSH Tarpit 2019-03-10 An Async / Await Library for Emacs Lisp 2019-03-08 Python Decorators: Syntactic Artificial Sweetener 2019-02-24 The CPython Bytecode Compiler is Dumb 2019-01-25 The Day I Fell in Love with Fuzzing 2019-01-23 A JavaScript Typed Array Gotcha 2018-12-25 A Survey of $RANDOM 2018-11-21 Why Aren't There C Conferences? 2018-11-15 A JIT Compiler Skirmish with SELinux 2018-10-31 The Missing Computer Skills of High School Students 2018-09-20 From Vimperator to Tridactyl 2018-09-06 Brute Force Incognito Browsing 2018-07-31 Prospecting for Hash Functions 2018-07-20 The Value of Undefined Behavior 2018-06-23 Intercepting and Emulating Linux System Calls with Ptrace 2018-06-10 Minimalist C Libraries 2018-05-31 Emacs 26 Brings Generators and Threads 2018-05-27 When FFI Function Calls Beat Native C 2018-05-01 When the Compiler Bites 2018-04-13 Blast from the Past: Borland C++ on Windows 98 2018-03-27 A Crude Personal Package Manager 2018-02-22 Emacs Lisp Lambda Expressions Are Not Self-Evaluating 2018-02-15 Two Chaotic Motion Demos 2018-02-14 Options for Structured Data in Emacs Lisp 2018-02-07 Inspiration from Data-dependent Rotations 2018-01-17 Debugging Emacs or: How I Learned to Stop Worrying and Love DTrace 2017-12-14 What's in an Emacs Lambda 2017-11-30 Initial Evaluation of the Windows Subsystem for Linux 2017-11-03 Render Multimedia in Pure C 2017-10-27 Make Flet Great Again 2017-10-06 A Branchless UTF-8 Decoder 2017-09-21 Finding the Best 64-bit Simulation PRNG 2017-09-15 Blowpipe: a Blowfish-encrypted, Authenticated Pipe 2017-09-07 Gap Buffers Are Not Optimized for Multiple Cursors 2017-09-01 Ten Years of Blogging 2017-08-22 Vim vs. Emacs: the Working Directory 2017-08-20 A Tutorial on Portable Makefiles 2017-07-27 Introducing the Pokerware Secure Passphrase Generator 2017-07-19 Integer Overflow into Information Disclosure 2017-07-02 Rolling Shutter Simulation in C 2017-06-21 Stack Clashing for Fun and Profit 2017-06-19 Building and Installing Software in $HOME 2017-06-15 Switching to the Mutt Email Client 2017-05-15 Web Scraping into an E-book with BeautifulSoup and Pandoc 2017-05-03 The Adversarial Implementation 2017-04-27 Two Games with Monte Carlo Tree Search 2017-04-01 My Journey with Touch Typing and Vim 2017-03-30 How to Write Portable C Without Complicating Your Build 2017-03-12 Why I've Retired My PGP Keys and What's Replaced It 2017-03-01 OpenMP and pwrite() 2017-02-14 Asynchronous Requests from Emacs Dynamic Modules 2017-01-30 How to Write Fast(er) Emacs Lisp 2017-01-21 Manual Control Flow Guard in C 2017-01-08 C Closures as a Library 2016-12-27 Domain-Specific Language Compilation in Elfeed 2016-12-23 Relocatable Global Data on x86 2016-12-22 Some Performance Advantages of Lexical Scope 2016-12-11 Faster Elfeed Search Through JIT Byte-code Compilation 2016-12-01 A Showerthoughts Fortune File 2016-11-22 Portable Structure Access with Member Offset Constants 2016-11-17 A Magnetized Needle and a Steady Hand 2016-11-15 Baking Data with Serialization 2016-11-13 Zero-allocation Trie Traversal 2016-11-05 Emacs, Dynamic Modules, and Joysticks 2016-10-27 An Array of Pointers vs. a Multidimensional Array 2016-10-07 Small-Size Optimization in C 2016-10-02 The Vulgarness of Abbreviated Function Templates 2016-09-23 Linux System Calls, Error Numbers, and In-Band Signaling 2016-09-15 Render the Mandelbrot Set with jq 2016-09-09 Modifying the Middle of a zlib Stream 2016-09-05 Inspecting C's qsort Through Animation 2016-09-03 How to Read and Write Other Process Memory 2016-09-02 Two Years as a High School Mentor 2016-08-12 An Elfeed Database Analysis 2016-08-07 Automatic Deletion of Incomplete Output Files 2016-08-03 Appending to a File from Multiple Processes 2016-07-25 Const and Optimization in C 2016-06-23 Stealing Session Cookies with Tcpdump 2016-06-16 Elfeed, cURL, and You 2016-06-13 Four Ways to Compile C for Windows 2016-05-30 You Can't Always Hash Pointers in C 2016-04-30 Makefile Assignments are Turing-Complete 2016-04-10 Mapping Multiple Memory Views in User Space 2016-03-31 Hotpatching a C Function on x86 2016-02-28 Calling the Native API While Freestanding 2016-01-31 Small, Freestanding Windows Executables 2015-12-03 9 Elfeed Features You Might Not Know 2015-11-21 Quickly Access x86 Documentation in Emacs 2015-10-30 RSA Signatures in Emacs Lisp 2015-10-14 Counting Processor Cores in Emacs 2015-09-26 Web Tips For Webcomic Authors 2015-09-15 Recovering Live Data with GDB 2015-09-03 Shamus Young's Twenty-Sided Tale E-book 2015-07-10 Mandelbrot Set with SIMD Intrinsics 2015-06-06 Minimal OpenGL 3.3 Core Profile Demo 2015-05-15 Raw Linux Threads via System Calls 2015-04-19 NASM x86 Assembly Major Mode for Emacs 2015-03-19 A Basic Just-In-Time Compiler 2015-03-15 Goblin-COM 7DRL 2015 2015-02-17 Generic C Reference Counting 2014-12-23 Interactive Programming in C 2014-12-09 How to build DOS COM files with GCC 2014-11-22 LZSS Quine Puzzle 2014-10-21 C Object Oriented Programming 2014-10-19 Emacs Autotetris Mode 2014-10-12 Global State: a Tale of Two Bad C APIs 2014-09-18 The Billion Pi Challenge 2014-09-02 C11 Lock-free Stack 2014-08-29 Stabilizing C's Quicksort 2014-07-23 An RC4 Password Hashing Function 2014-06-29 A GPU Approach to Particle Physics 2014-06-22 A GPU Approach to Path Finding 2014-06-21 Feedback Applet Ported to WebGL 2014-06-13 Emacs Unicode Pitfalls 2014-06-10 A GPU Approach to Conway's Game of Life 2014-06-08 Tag Feeds for null program 2014-06-06 Per Loop vs. Per Iteration Bindings 2014-06-04 Emacs Chat with Sacha Chua 2014-06-01 A GPU Approach to Voronoi Diagrams 2014-05-27 Emacs Lisp Buffer Passing Style 2014-05-14 Digispark and Debian 2014-04-26 An Emacs Foreign Function Interface 2014-04-25 Three Dimensions of Type Systems 2014-04-01 Duck Typing vs. Type Erasure 2014-03-31 Northbound 7DRL 2014 2014-03-19 Emacs Lisp Defstruct Namespace Convention 2014-03-06 The Julia Programming Language 2014-02-15 Reimaging a VM from the inside with Debian 2014-02-06 Introducing EmacSQL 2014-01-27 Emacs Lisp Object Finalizers 2014-01-26 Measure Elisp Object Memory Usage with Calipers 2014-01-04 Emacs Byte-code Internals 2013-12-30 Emacs Lisp Readable Closures 2013-12-18 Clojure-style Multimethods in Emacs Lisp 2013-12-16 Emacs Lisp Reddit API Wrapper 2013-11-28 Emacs, Thanksgiving, and Hanukkah 2013-11-26 Elfeed Tips and Tricks 2013-10-13 My Grading Process 2013-09-23 Atom vs. RSS 2013-09-09 The Elfeed Database 2013-09-04 Introducing Elfeed, an Emacs Web Feed Reader 2013-09-03 Leaving Gmail Behind 2013-08-17 JavaScript Function Metaprogramming 2013-08-16 Coining Autoism 2013-07-31 Live Systems are Handy 2013-06-26 Liquid Simulation in WebGL 2013-06-17 Personal OS Configuration Live System 2013-06-16 An HTML5 Canvas Design Pattern 2013-06-13 Life Beyond Google Reader 2013-06-10 Long Live WebGL 2013-06-07 Emacs Mouse Slider Mode for Numbers 2013-06-02 A Handy Emacs Package Configuration Macro 2013-06-01 Skewer Gets HTML Interaction 2013-05-23 Should Emacs Packages Self Configure? 2013-05-18 Load Libraries in Skewer with Bower 2013-05-14 JavaScript Function Statements vs. Expressions 2013-05-11 Inventing a Datetime Web Service 2013-05-01 Disc RL in the Media 2013-04-28 Userspace Threading in JavaScript 2013-04-27 Tracking Mobile Device Orientation with Emacs 2013-04-07 Prototype-based Elisp Objects with @ 2013-03-28 Precise JavaScript Serialization with ResurrectJS 2013-03-27 JavaScript Fantasy Name Generator 2013-03-25 A Seedable JavaScript PRNG 2013-03-24 Applying Constructors in JavaScript 2013-03-17 7DRL 2013 Complete 2013-03-11 Serializing JavaScript Objects 2013-02-25 Fast Monte Carlo Method with JavaScript 2013-02-08 Memory Leaks with XMLHttpRequest Objects 2013-02-07 JavaScript "Map With This" 2013-02-06 How to Make an Emacs Minor Mode 2013-01-30 Emacs Javadoc Lookups Get a Facelift 2013-01-26 Web Distributed Computing Revisited 2013-01-24 Live CSS Interaction with Skewer 2013-01-22 The Limits of Emacs Advice 2013-01-20 Parameter Lists in Common Lisp and Clojure 2013-01-14 Turning Asynchronous into Synchronous in Elisp 2013-01-13 Flu Trends Timeline 2013-01-07 Clojure and Emacs for Lispers 2012-12-29 An Emacs Pastebin 2012-12-18 How a simple-httpd Vulnerability Slipped In 2012-12-17 Elisp Weak References 2012-12-06 A Use For Macrolet 2012-11-28 JavaScript Truthiness Quiz 2012-11-20 Raising the Dead with JavaScript 2012-11-19 JavaScript Debugging Challenge 2012-11-15 JavaScript Strings as Arrays 2012-11-14 JavaScript's Quirky eval 2012-10-31 Skewer: Emacs Live Browser Interaction 2012-10-15 Debian Bugtracker Data 2012-09-29 Emacs visual-indentation-mode 2012-09-28 Emacs Abnormal Termination 2012-09-21 Programs as Elisp Macros 2012-09-20 Elisp Recursive Descent Parser (rdp) 2012-09-19 Revisiting an N-body Simulator 2012-09-14 Fractal Rendering in Emacs 2012-09-05 Markov Chain Text Generation 2012-09-04 Implemented Is Simple Data Compression 2012-08-20 simple-httpd and impatient-mode 2012-08-15 Elisp Unit Testing with ERT 2012-08-12 Switching to the Emacs Lisp Package Archive 2012-08-06 The Physical Analog for Encryption is the Hyperdrive 2012-08-02 Programmatically Setting Lisp Docstrings 2012-08-01 Viewing Java Class Files in Emacs 2012-07-30 A Few Tricky C Questions 2012-07-17 Literal Arrays and Vectors in Lisp 2012-06-25 Moving to Openbox 2012-06-24 Publishing My Private Keys 2012-06-23 Versioning Personal Configuration Dotfiles 2012-06-08 SSH and GPG Agents 2012-06-03 Perlin Noise With Octave, Java, and OpenCL 2012-05-19 SSH Honeypots 2012-04-30 Presentations with Jekyll and deck.js 2012-04-29 Why Do Developers Prefer Certain Kinds of Tools? 2012-04-23 Pseudo-terminals 2012-04-10 Making Your Own GIF Image Macros 2012-03-09 Rumor Simulation 2012-02-08 Lisp Let in GNU Octave 2012-02-03 Cartoon Liquid Simulation 2012-01-19 Silky Smooth Perlin Noise Surface 2011-12-16 CSS Variables with Jekyll and Liquid 2011-11-28 Poor Man's Video Editing 2011-11-19 Try Out My Java With Emacs Workflow Within Minutes 2011-11-06 Introducing NativeGuide 2011-11-03 Some Cool Shell Aliases 2011-10-19 Emacs Configuration Repository 2011-10-13 Halftone 2011-08-30 Java Hot Code Replacement 2011-08-24 October Chess Engine Updates 2011-08-18 Fake Emacs Namespaces 2011-08-05 Moved To New Hosting 2011-07-09 Pendulum Waves 2011-06-13 Infinite Parallax Starfield 2011-05-01 Feedback Loop Applet 2011-04-09 October's Chess Engine Gets Some Attention 2011-03-06 Movie Montage Comparison 2011-02-19 Torrent File Strip 2011-01-30 BrianScheme Update: Bootstrapping and Images 2011-01-12 The Great Tab Mistake 2011-01-11 BrianScheme 2011-01-10 Flip Foolflim the Dragon Traitor 2010-12-21 Pth and ncurses 2010-11-16 Software Serial Codes 2010-11-15 Elisp Function Composition 2010-10-20 Sudoku Applet 2010-10-18 Java Applets Demo Page 2010-10-17 A Modest Chess Engine 2010-10-16 Lorenz Chaotic Water Wheel Applet 2010-10-15 Introducing Java Mode Plus 2010-10-14 Jump to Java Documentation from Emacs 2010-10-06 Emacs Set Window to 80 Columns 2010-10-04 Sample Java Project 2010-09-30 Emacs Find All Files 2010-09-29 Elisp Higher-order Conversion to Interactive 2010-09-21 Throw Up a Quick HTTP Server 2010-09-08 Middleman Parallelization 2010-08-13 Java is Death By A Thousand Paper Cuts 2010-08-07 Distributed Computing with Emacs 2010-07-26 Elisp Memoize 2010-07-21 GIMP Painting 2010-07-20 Pen and Paper RPG Wishlist 2010-07-19 GIMP Space Elevator Drawing 2010-07-01 Emacs Byte Compilation 2010-06-10 Emacs ParEdit and IELM 2010-06-07 Elisp Printed Hash Tables 2010-05-20 Identifying Files 2010-05-13 Neat Random Inn Generator 2010-05-11 Emacs UUIDs 2010-04-23 The Problem with String Stored Regex 2010-04-13 Scheme Live Coding 2010-03-31 Emacs cat-safe 2010-03-09 A Fractran Short Story 2010-02-18 Function Pointers are Special 2010-02-06 Common Lisp Quick Reference 2010-02-04 Wisp Screencasts 2010-01-24 Wisp Lisp 2010-01-15 Setting up a Common Lisp Environment 2009-12-21 Magick Thumbnails 2009-12-13 Game of Life in Java 2009-12-06 Tweaking Emacs for Ant and Java 2009-11-03 Emacs Web Servlets 2009-10-26 Your BitTorrent Client is Probably Defective by Design 2009-10-10 Comments Upgrade with Avatars 2009-09-27 Unorderable Sets 2009-09-02 SumoBots Programming Game 2009-09-01 null program Turns Two Years Old 2009-08-28 An Entropy-Efficient Virtual Dice Rolling Algorithm 2009-08-23 Lossless Optimizers 2009-08-11 IRC Random Number Generator 2009-08-05 Web Pages Are Liquids 2009-08-02 Ad-blocking and the Regrettable URL Format 2009-07-28 Television Commercials 2009-07-20 Dry Ice Potato Gun 2009-07-03 Lisp Fantasy Name Generator 2009-06-30 Converted to HTML 5 2009-06-28 Browser URL Mangling 2009-06-23 The Emacs Calculator 2009-06-21 United States Hamiltonian Paths 2009-06-09 JavaScript Distributed Computing 2009-06-02 E-mail Obfuscater Perl One-liner 2009-05-29 Elisp Wishlist 2009-05-28 Elisp Running Time Macro 2009-05-25 Doing Comment Previews the Right Way 2009-05-24 Unquoted Let 2009-05-23 Getting Lisp 2009-05-20 Another Perl One-liner: Byte Order 2009-05-17 Emacs Web Server 2009-05-12 I Finally Have Comments 2009-05-05 Greasemonkey User Scripts 2009-05-01 Wikipedia Flu Time-lapse 2009-04-28 Clay Klein Bottle 2009-04-26 Arcfour and CipherSaber in Emacs Lisp 2009-04-24 CipherSaber 2009-04-20 A Not So Stupid C Mistake 2009-04-18 SWF Decompression Perl One-liner 2009-04-16 URL Shortening 2009-04-14 Hashapass Password Management 2009-04-12 Brainfuck Halting Problem 2009-04-10 The Lazy Fibonacci List 2009-04-08 Apartment Balcony Gardening 2009-04-03 Vimperator Firefox Add-on 2009-03-22 Avoid Zip Archives 2009-03-16 LZMA Tarballs Are Coming 2009-03-05 GNU Screen 2009-02-20 Readline Wrap 2009-02-14 Distributed Issue Tracking 2009-02-12 Git is Better 2009-02-10 Creating Simple Dice with GIMP 2009-02-07 Diceware Passphrases 2009-01-04 Fantasy Name Generator: Request for Patterns 2008-12-24 Don't Write Your Own E-mail Validator 2008-12-22 The Fire Gem 2008-12-16 Controlling a Minefield 2008-09-17 Play NetHack 2008-08-29 A GNU Octave Feature 2008-08-09 The Arcfour Stream Cipher 2008-07-25 Two-Man Double Blind Coke vs. Pepsi Taste Test 2008-07-20 Sudoku Solver 2008-07-18 Variable Declarations and the C Call Stack 2008-07-15 A One-Time Pad Mistake 2008-07-11 One-Time Pads and Plausible Deniability 2008-07-08 One-Time Pads 2008-06-26 Up is Down 2008-03-25 Memoization 2008-03-15 Lisp Number Representations 2008-02-22 Linear Spatial Filters with GNU Octave 2008-02-04 My Team Won the Robot Competition 2008-01-29 The 3n + 1 Conjecture 2008-01-20 Optimizing, Multi-threading Brainfuck to C Converter 2007-12-30 Movie Montage Poster 2007-12-26 A Faster Montage 2007-12-19 Unsharp Masking 2007-12-11 Movie DNA 2007-11-30 Traveling Salesman Problem by Genetic Algorithm 2007-11-20 Noise Fractals and Clouds 2007-11-13 Neural Network Blackjack Game 2007-11-06 Iterated Prisoner's Dilemma 2007-10-30 Polynomial Interpolation 2007-10-24 Chess AI Idea 2007-10-16 Robot Version 1 2007-10-08 Java Animated Maze Generator and Solver 2007-10-01 Mandelbrot Set on a Cluster 2007-09-25 Walk Text Adventure Game 2007-09-23 Converting MediaWiki Markup to LaTeX 2007-09-19 Proposal for a Free Musical 2007-09-17 BCCD Clusters 2007-09-14 Memory Allocation Pool 2007-09-08 PNG Archiver - Share Files Within Images 2007-09-05 YouTube with Free Software 2007-09-02 Mandelbrot with GNU Octave 2007-09-01 null program is Alive