Software
Writings
Contact Me

Go is 80/20 language
Automatic Chrome Dev Tools workspace setup
How I made SumatraPDF crash less
Ban std::string
Compressing for the browser in Go
Thoughts on C/C++ killer
Idea for code editors
Implementing nested context menu in Svelte 5
Optimizing calling Windows DLL functions in Go
Simplest C++ callback, from SumatraPDF
Why Go iterators are ugly, clever and elegant
Showing UI on mouse move, in Svelte 5
Man vs. AI: optimizing JavaScript (Claude, Cursor)
Implementing Notion-like table of contents in JavaScript
Porting a medium-sized Vue application to Svelte 5
Changing font size in Windows dialog in C++
How I implemented wc in the browser in 3 days
Advanced markdown processing in Go
Persisted Svelte store using IndexedDB
Find programming work by increasing luck surface area
Extreme #include discipline for C++ code
@levelsio and survivorship bias
Lessons learned from 15 years of SumatraPDF
How I use Roam Research
The things we do to ship desktop software
Lessons learned porting 50k loc from Java to Go
Trade offs in designing versatile log format
Powering a blog with Notion and Netlify
How I reverse engineered Notion API
Advanced web spidering with Puppeteer
57 MicroConf videos for self-funded software businesses
Guide to predefined macros in C++ compilers (gcc, clang, msvc etc.)
Tutorial for CLSS flexbox library for Go
Solo founders with profitable businesses, collected stories
Analyzing browserify bundles to minimize JavaScript bundle size
Optimizing JavaScript by using arrays instead of objects
Go package for better guid generation
Tip for per-test verbose logging in Go
SumatraPDF 3.0 released
SumatraPDF 2.5.2 released
Using Fabric for deploying server software
SumatraPDF 2.4 released
How I ported pigz from Unix to Windows
Thoughts on Go after writing 3 websites
SumatraPDF 2.2 released
Design and implementation of translation system for desktop software
Hiding duplicate content from your site via robots.txt
How I sped up Go by 20% (or is Go really slower than Java?)
Websites with free ePub and mobi ebooks
SumatraPDF 2.1 released
Buying a certificate for signing windows applications
SumatraPDF 2.0 released
A list of chm readers/viewers for Windows
Showing html from memory in embedded web control on windows
SumatraPDF 1.9 released
SumatraPDF 1.8 released
SumatraPDF 1.7 released
Experience porting 4k lines of C code to go
SumatraPDF 1.6 released
Easy vs. probable or how to make money with software
90% of success is showing up - a proof
SumatraPDF 1.5 released
SumatraPDF 1.4 released
XML is really, really slow
My social marketing failure
SumatraPDF 1.3 released
Writing a custom installer for Windows software
Executable compressors comparisons: upx 3.07w vs. mpress 2.17
SumatraPDF 1.2 released
Using averages - a common performance measurement mistake
8 habits for becoming a better programmer
Preventing duplicate posts in forum or blog commenting software
Value your time
Startup management lessons from “The Social Network”
Marketing lessons from WebP launch
SEO is harder than you think
Tools that find bugs in c and c++ code via static code analysis
Go vs. Python for a simple web server
SumatraPDF 1.1 release
Summary of talk on continuous deployment
uISV stories
Productivity ideas
E-books economics
You have to implement to understand
Best captcha is exotic captcha
SumatraPDF 1.0 released
Sumatra 0.9.4 release
Where do bugs come from?
ssh tips
Summary of David Ditzel talk on binary translation
SumatraPDF 0.9.3 released
SumatraPDF 0.9.1 released
SumatraPDF 0.9 released
realloc() on Windows vs. Linux
SumatraPDF 0.8.1 release
gflags - a debugging story
Variadic Macros (C++)
Sumatra 0.8 released
Sumatra PDF 0.7 released
Sane #include hierarchy for C and C++
SumatraPDF 0.6 released
A debugging story
Few things I’ve learned when writing Sumatra PDF
SumatraPDF 0.5 released
SumatraPDF 0.4 released
Sumatra PDF 0.3 released
How I improved SumatraPDF performance by ~60%
Paradox of bad comments
Performance optimization story
Sumatra PDF 0.2 released
Sumatra PDF is born
Designing web forums software
Document your software
Embedding binary resources on Windows
Compile-time asserts in C
Basics of writing DOS .bat batch files
High-resolution timer for timing code fragments
Accurate timers on Windows
Review of “Hot text - web writing that works”
Writing to sell
On difference between amateur and professional shareware
Good programming practices
The future is here, it’s just not evenly distributed
Principle of good design: discoverability
Bugs and eyeballs
Engineering school (summary of Rick Catell talk)
What I've learned from "After the Gold Rush"
Things I Learned the Hard Way: Engineering and Computer Science in the Real World
128 articles
changelog...