| 2025 |
|
|
Fixing Zed's debugger keybindings
|
|
Ideas for faster web dev cycle
|
|
Zed debug setup for go server / Svelte web app
|
|
AltTab for Mac OS
|
|
Stage manager in Mac OS
|
|
lazy import of JavaScript modules
|
|
Using await in Svelte 5 components
|
|
vite /rollup manualChunks
|
|
Increase software sales by 50% or more
|
|
File sync is very slow
|
|
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
|
|
Calling Grok, OpenAI, Anthropic, Google, OpenRouter API from the browser
|
|
Case study of over-engineered C++ code
|
|
Increase open file limit on Ubuntu Linux
|
|
Explaining nil interface{} gotcha in Go
|
|
Size textarea to content
|
|
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
|
|
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
|
| 2024 |
|
|
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++
|
| 2023 |
|
|
How I implemented wc in the browser in 3 days
|
|
Advanced markdown processing in Go
|
|
Persisted Svelte store using IndexedDB
|
|
Programming articles
|
|
I’m a Go freelancer for hire
|
|
Go programming articles
|
|
Business articles
|
| 2022 |
|
|
Tech note: speed of iteration in programming
|
|
Day 35: fixed onedrive, gdrive token refresh
|
|
Day 34: more backblaze, refactorings
|
|
Tech note: JavaScript debugging helpers
|
|
Day 33: more backblaze
|
|
Day 32: optimizations, backblaze
|
|
JavaScript optimization story
|
|
Day 31: tweaking bookmarks list
|
|
Day 30: better dialogs
|
|
Day 29: optimizing file representation and s3
|
|
Programmer productivity: lines of code edition
|
|
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
|
|
Filerion tech stack
|
|
Day 15: text preview
|
|
Filerion marketing
|
|
Day 14: image preview, file rename
|
|
S3 and directories
|
|
Upload files from your computer
|
|
Day 13: local fs fixes
|
|
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
|
|
Day 8: more file delete, file upload
|
|
Thoughts on documentation
|
|
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 3: Dropbox
|
|
Day 2: displaying list of files
|
|
Day 1: tech stack, creating project from scratch
|
|
Day 0: the idea
|
|
Diary of a solo dev building a web app
|
|
Extreme #include discipline for C++ code
|
| 2021 |
|
|
@levelsio and survivorship bias
|
|
Typescript basics
|
|
Vim Reference
|
|
Using Notion API Go client
|
|
Using Go instead of bash for scripts
|
|
Using GitHub Actions with Go
|
|
atomicfile - robustly writing to a file in Go
|
|
siser
|
|
Sending emails with Mailgun in Go
|
|
Pure Bash Bible
|
|
Logging HTTP requests in Go
|
|
Hide header on scroll in Svelte
|
|
filerotate - Go library for rotating files
|
|
Lessons learned from 15 years of SumatraPDF
|
|
How I use Roam Research
|
| 2019 |
|
|
List of ePub format readers and viewers for Windows
|
|
List of CHM readers and viewers for Window
|
|
Pigz windows port
|
|
List of website with free eBooks in EPUB and MOBI formats
|
|
List of mobi format readers and viewers for Windows
|
|
The Silver Searcher windows port
|
|
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
|
| 2018 |
|
|
Powering a blog with Notion and Netlify
|
|
Summary of “Sell to Strangers” video about content marketing
|
|
Summary Of "The Mom test" book about validating business ideas
|
|
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
|
| 2017 |
|
|
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
|
| 2016 |
|
|
Optimizing JavaScript by using arrays instead of objects
|
| 2015 |
|
|
Extracting files from .7z archives in Go
|
|
Go package for better guid generation
|
|
Accessing GitHub API from Go
|
| 2014 |
|
|
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
|
| 2013 |
|
|
Using Fabric for deploying server software
|
|
SumatraPDF 2.4 released
|
|
How I ported pigz from Unix to Windows
|
| 2012 |
|
|
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
|
| 2011 |
|
|
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
|
| 2010 |
|
|
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
|
| 2009 |
|
|
SumatraPDF 1.0 released
|
|
Sumatra 0.9.4 release
|
|
Where do bugs come from?
|
|
ssh tips
|
|
Summary of David Ditzel talk on binary translation
|
| 2008 |
|
|
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
|
| 2007 |
|
|
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
|
| 2006 |
|
|
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
|
| 2005 |
|
|
High-resolution timer for timing code fragments
|
|
Accurate timers on Windows
|
| 2004 |
|
|
Review of “Hot text - web writing that works”
|
| 2003 |
|
|
Writing to sell
|
|
On difference between amateur and professional shareware
|
| 2002 |
|
|
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"
|
| 2001 |
|
|
Engineering and Computer Science in the Real World
|