Home
•
Software
•
TIL
•
Contact Me
Search
Increase software sales by 50% or more
New Edna feature: multiple notes
Evolving Edna Ask AI UI
Desktop UI frameworks written by a single person
Implementing UI translation in SumatraPDF, a C++ Windows application
Case study of over-engineered C++ code
Explaining nil interface{} gotcha in Go
All about Svelte 5 snippets
C++ engineering decision in SumatraPDF code
Bugs I fixed in SumatraPDF
Implementation of optimized vector of strings in C++ in SumatraPDF
Custom search UI in CodeMirror 6 and Svelte 5
try my software
Edna
note taking app for developers and power users, in browser
SumatraPDF
small, fast, free PDF / ePub / comic book reader for Windows
Notion-like compact table of contents in JavaScript
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
Implementing nested context menu in Svelte 5
Idea for code editors
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)
Modern C++
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
I’m a Go freelancer for hire
Go programming articles
Business articles
Programming articles
Tech note: speed of iteration in programming
Day 35: fixed onedrive, gdrive token refresh
Tech note: JavaScript debugging helpers
Day 34: more backblaze, refactorings
Day 33: more backblaze
Day 32: optimizations, backblaze
JavaScript optimization story
Programmer productivity: lines of code edition
Day 31: tweaking bookmarks list
Day 30: better dialogs
Day 29: optimizing file representation and s3
Day 28: OneDrive support, more file properties
Day 27: better Google Drive login, One Drive support
Day 26: more google drive support
Day 25: Google Drive support
Day 24: dialog refactoring
Day 23: file copy
Day 22: file properties
Day 21: s3 create new dir, last modification time
Day 20: fs refactoring
Find programming work by increasing luck surface area
Day 19: analytics, context menu
Day 18: improving s3 upload
Day 17: file download
Day 16: bookmarks
Day 15: text preview
Filerion tech stack
Day 14: image preview, file rename
Filerion marketing
Day 13: local fs fixes
Upload files from your computer
S3 and directories
Using Roam Research for productivity
Day 12: s3 upload and delete directories
Day 11: upload file to local fs
Day 10: s3 file delete, ui tweaks
Day 9: Dropbox upload
Thoughts on documentation
Day 8: more file delete, file upload
Day 7: context menu, file delete
Day 6: Dropbox fix, bug fixes and small improvements
Tech note: Dropbox login
Day 5: setting up a website
Thoughts on getting user feedback
Day 4: s3, sorting, remembering credentials
Thoughts on developer productivity
Day 2: displaying list of files
Day 3: Dropbox
Day 1: tech stack, creating project from scratch
Diary of a solo dev building a web app
Day 0: the idea
Extreme #include discipline for C++ code
@levelsio and survivorship bias
Hide header on scroll in Svelte
Sending emails with Mailgun in Go
Using Notion API Go client
Using Go instead of bash for scripts
Using GitHub Actions with Go
Typescript basics
siser
atomicfile - robustly writing to a file in Go
Pure Bash Bible
Logging HTTP requests in Go
Vim Reference
filerotate - Go library for rotating files
Lessons learned from 15 years of SumatraPDF
How I use Roam Research
List of website with free eBooks in EPUB and MOBI formats
Pigz windows port
The Silver Searcher windows port
List of mobi format readers and viewers for Windows
List of ePub format readers and viewers for Windows
List of CHM readers and viewers for Window
List of CBR, CBZ comic book readers for windows
The things we do to ship desktop software
Lessons learned porting 50k loc from Java to Go
About me
Trade offs in designing versatile log format
Social media image sizes
Basics of freelancing
Powering a blog with Notion and Netlify
Summary Of "The Mom test" book about validating business ideas
Summary of “Sell to Strangers” video about content marketing
Summary of Founders Battle Talk #7 about SEO
Software
Portable Executable File Format
How I reverse engineered Notion API
Go Cookbook
Advanced web spidering with Puppeteer
Writings
Finding freelancers
Fuzzing Markdown parser written in Go
Essentials of Starting Indie Business
57 MicroConf videos for self-funded software businesses
A short guide to marketing for developers
Using MySQL in Docker for local testing in Python
Rewritten - tales of rewriting software from X to Go
Companies using go
Big projects written in Go
Guide to predefined macros in C++ compilers (gcc, clang, msvc etc.)
Tutorial for CLSS flexbox library for Go
Experience porting 4.5k loc of C to Go (Facebook's CSS flexbox implementation Yoga)
Using MySQL in Docker for local testing In Go
Rotate log files daily in Go
Simple serialization format for logging and analytics in Go
Embedding build number in Go executable
3 ways to iterate in Go
HTTPS for free in Go, with little help of Let's Encrypt
Solo founders with profitable businesses, collected stories
Advanced command execution in Go with os/exec
Generating good unique ids in Go
Small business stories
Analyzing browserify bundles to minimize JavaScript bundle size
Optimizing JavaScript by using arrays instead of objects
Extracting files from .7z archives in Go
Go package for better guid generation
Accessing GitHub API from Go
Improving speed of SMAZ compressor by 2.6x/1.5x
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
Speeding up Go with custom allocators
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"
Engineering and Computer Science in the Real World
247 articles
changelog...
try my software
Edna
note taking app for developers and power users
optimized for speed
cross between Obsidian and Notational Velocity
SumatraPDF
small, fast, free PDF / ePub / comic book reader for Windows
Home
•
Software
•
TIL
•
Contact Me