| 17 d |
Advanced markdown processing in Go
Home
|
| 18 d |
Simplest C++ callback, from SumatraPDF
Home
|
|
Better unique id generation than UUID
Home
|
|
Generating good unique IDs in Go
Home / Go Cookbook
|
|
Implementation of optimized vector of strings in C++ in SumatraPDF
Home
|
| 19 d |
Optimizing memory use in a Markdown parser
Home
|
| 82 d |
Letting AI agents drive a GUI app with -dbg-control
Home
|
| 84 d |
Finding active GitHub forks from the command line
Home
|
| 165 d |
Speeding up JavaScript function with AI help
Home
|
| 237 d |
How to run msvc cl.exe from command-line (powershell)
Home
|
| 262 d |
Novel login system for web apps
Home
|
| 269 d |
Benchmarking JSON vs TOON in Go
Home
|
|
From JSON to TOON
Home
|
| 415 d |
Ideas for faster web dev cycle
Home
|
|
Fixing Zed's debugger keybindings
Home
|
| 416 d |
AltTab for Mac OS
Home
|
|
Stage manager in Mac OS
Home
|
|
Zed debug setup for go server / Svelte web app
Home
|
| 417 d |
Using await in Svelte 5 components
Home
|
|
lazy import of JavaScript modules
Home
|
| 418 d |
vite /rollup manualChunks
Home
|
| 419 d |
Increase software sales by 50% or more
Home
|
| 420 d |
File sync is very slow
Home
|
| 428 d |
Evolving Edna Ask AI UI
Home
|
|
Desktop UI frameworks written by a single person
Home
|
| 429 d |
Implementing UI translation in SumatraPDF, a C++ Windows application
Home
|
|
Calling Grok, OpenAI, Anthropic, Google, OpenRouter API from the browser
Home
|
| 430 d |
Case study of over-engineered C++ code
Home
|
|
Increase open file limit on Ubuntu Linux
Home
|
| 431 d |
Explaining nil interface{} gotcha in Go
Home
|
| 432 d |
Size textarea to content
Home
|
| 434 d |
All about Svelte 5 snippets
Home
|
| 435 d |
C++ engineering decision in SumatraPDF code
Home
|
| 436 d |
Bugs I fixed in SumatraPDF
Home
|
| 438 d |
Custom search UI in CodeMirror 6 and Svelte 5
Home
|
| 440 d |
Notion-like compact table of contents in JavaScript
Home
|
| 441 d |
Go is 80/20 language
Home
|
| 442 d |
Automatic Chrome Dev Tools workspace setup
Home
|
| 443 d |
How I made SumatraPDF crash less
Home
|
| 445 d |
Compressing for the browser in Go
Home
|
|
Ban std::string
Home
|
| 446 d |
Thoughts on C/C++ killer
Home
|
| 447 d |
Idea for code editors
Home
|
|
Implementing nested context menu in Svelte 5
Home
|
| 449 d |
Optimizing calling Windows DLL functions in Go
Home
|
| 455 d |
Why Go iterators are ugly, clever and elegant
Home
|
| 456 d |
Showing UI on mouse move, in Svelte 5
Home
|
| 742 d |
Man vs. AI: optimizing JavaScript (Claude, Cursor)
Home
|
|
Modern C++
Home
|
| 743 d |
Software
Home
|
| 747 d |
Implementing Notion-like table of contents in JavaScript
Home
|
| 805 d |
Porting a medium-sized Vue application to Svelte 5
Home
|
| 883 d |
Changing font size in Windows dialog in C++
Home
|
| 1269 d |
How I implemented wc in the browser in 3 days
Home
|
| 1281 d |
Persisted Svelte store using IndexedDB
Home
|
| 1299 d |
I’m a Go freelancer for hire
Home / About me
|
|
About me
Home
|
| 1300 d |
Thoughts on Go after writing 3 websites
Home
|
| 1302 d |
Writings
Home
|
|
Hiding duplicate content from your site via robots.txt
Home
|
| 1304 d |
Logging HTTP requests in Go
Home
|
| 1305 d |
Where do bugs come from?
Home
|
|
Writing to sell
Home
|
|
Value your time
Home
|
|
On the difference between amateur and professional shareware
Home
|
|
Startup management lessons from “The Social Network”
Home
|
|
Marketing lessons from WebP launch
Home
|
|
Summary of talk on continuous deployment
Home
|
|
Document your software
Home
|
|
You have to implement to understand
Home
|
|
Summary of David Ditzel talk on binary translation
Home / Where do bugs come from?
|
|
Designing web forums software
Home
|
|
Paradox of bad comments
Home
|
|
How I improved SumatraPDF performance by ~60%
Home
|
|
Using Fabric for deploying server software
Home
|
|
gflags - a debugging story
Home
|
| 1306 d |
SumatraPDF 1.5 released
Home
|
|
List of MOBI format readers and viewers for Windows
Home
|
|
Buying a certificate for signing Windows applications
Home
|
|
SumatraPDF 2.1 released
Home
|
|
Websites with free ePub and mobi ebooks
Home
|
|
How I sped up Go by 20% (or is Go really slower than Java?)
Home
|
|
A list of chm readers/viewers for Windows
Home
|
|
Speeding up Go with custom allocators
Home / Go Cookbook
|
|
Design and implementation of a translation system for desktop software
Home
|
|
SumatraPDF 2.2 released
Home
|
|
Showing HTML from memory in an embedded web control on Windows
Home
|
|
How I ported pigz from Unix to Windows
Home
|
|
SumatraPDF 2.4 released
Home
|
|
SumatraPDF 1.9 released
Home
|
|
SumatraPDF 2.5.2 released
Home
|
|
SumatraPDF 3.0 released
Home
|
|
Tip for per-test verbose logging in Go
Home
|
|
Improving speed of SMAZ compressor by 2.6x/1.5x
Home / Go Cookbook
|
|
Accessing GitHub API from Go
Home / Go Cookbook
|
|
SumatraPDF 1.8 released
Home
|
|
Extracting files from .7z archives in Go
Home / Go Cookbook
|
|
Optimizing JavaScript by using arrays instead of objects
Home
|
|
Analyzing browserify bundles to minimize JavaScript bundle size
Home
|
|
SumatraPDF 0.9 released
Home
|
|
SumatraPDF 1.7 released
Home
|
|
What I've learned from "After the Gold Rush"
Home
|
|
Engineering school (summary of Rick Catell talk)
Home
|
|
Bugs and eyeballs
Home
|
|
Principle of good design: discoverability
Home
|
|
The future is here, it’s just not evenly distributed
Home
|
|
Good programming practices
Home
|
|
Review of “Hot text - web writing that works”
Home
|
|
Accurate timers on Windows
Home
|
|
High-resolution timer for timing code fragments
Home
|
|
Guide to predefined macros in C++ compilers (GCC, Clang, MSVC, etc.)
Home
|
|
SumatraPDF 0.9.1 released
Home
|
|
SumatraPDF 0.9.3 released
Home
|
|
ssh tips
Home
|
|
Sumatra 0.9.4 release
Home
|
|
SumatraPDF 1.0 released
Home
|
|
57 MicroConf videos for self-funded software businesses
Home
|
|
The best CAPTCHA is an exotic CAPTCHA
Home
|
|
Basics of writing DOS .bat batch files
Home
|
|
E-books economics
Home
|
|
Experience porting 4k lines of C code to Go
Home
|
|
Productivity ideas
Home
|
|
Compile-time asserts in C
Home
|
|
uISV stories
Home
|
|
SumatraPDF 1.1 release
Home
|
|
SumatraPDF 1.6 released
Home
|
|
Go vs. Python for a simple web server
Home
|
|
Tools that find bugs in C and C++ code via static code analysis
Home
|
|
SEO is harder than you think
Home
|
|
Powering a blog with Notion and Netlify
Home
|
|
Preventing duplicate posts in forum or blog-commenting software
Home
|
|
8 habits for becoming a better programmer
Home
|
|
Trade-offs in designing a versatile log format
Home
|
|
Easy vs. probable or how to make money with software
Home
|
|
Lessons learned porting 50k loc from Java to Go
Home
|
|
The things we do to ship desktop software
Home
|
|
List of CBR and CBZ comic book readers for Windows
Home
|
|
List of CHM readers and viewers for Windows
Home
|
|
List of ePub format readers and viewers for Windows
Home
|
|
realloc() on Windows vs. Linux
Home
|
|
List of websites with free eBooks in EPUB and MOBI formats
Home
|
|
Embedding binary resources on Windows
Home
|
|
The Silver Searcher windows port
Home / Software
|
|
How I use Roam Research
Home
|
|
Lessons learned from 15 years of SumatraPDF
Home
|
|
Sumatra PDF is born
Home
|
|
Using averages - a common performance measurement mistake
Home
|
|
SumatraPDF 1.2 released
Home
|
|
90% of success is showing up - a proof
Home
|
|
Sumatra PDF 0.2 released
Home
|
|
Comparison of executable compressors: UPX 3.07w vs. MPRESS 2.17
Home
|
|
Performance optimization story
Home
|
|
Writing a custom installer for Windows software
Home
|
|
SumatraPDF 1.3 released
Home
|
|
My social marketing failure
Home
|
|
Sumatra PDF 0.3 released
Home
|
|
SumatraPDF 0.4 released
Home
|
|
@levelsio and survivorship bias
Home
|
|
Extreme #include discipline for C++ code
Home
|
|
XML is really, really slow
Home
|
|
SumatraPDF 1.4 released
Home
|
|
SumatraPDF 0.5 released
Home
|
|
Few things I’ve learned when writing Sumatra PDF
Home
|
|
A debugging story
Home
|
|
SumatraPDF 0.6 released
Home
|
|
Sane #include hierarchy for C and C++
Home
|
|
Sumatra PDF 0.7 released
Home
|
|
Sumatra 0.8 released
Home
|
|
Find programming work by increasing luck surface area
Home
|
|
Variadic Macros (C++)
Home
|
|
SumatraPDF 0.8.1 release
Home
|
|
SumatraPDF 2.0 released
Home
|
|
Engineering and Computer Science in the Real World
Home
|
|
Business articles
Home
|
|
Go programming articles
Home
|
| 1314 d |
filerotate - Go library for rotating files
Home / Software
|
| 1335 d |
Hide header on scroll in Svelte
Home
|
|
How I reverse engineered Notion API
Home
|
| 1336 d |
Summary of "The Mom Test," a book about validating business ideas
Home
|
|
Summary of Founders Battle Talk #7 about SEO
Home
|
|
Using GitHub Actions with Go
Home
|
|
TypeScript basics
Home
|
|
Sending emails with Mailgun in Go
Home
|
|
Small business stories
Home
|
|
Diary of a solo dev building a web app
Home
|
|
Social media image sizes
Home
|
|
Basics of freelancing
Home
|
|
Big projects written in Go
Home
|
|
Summary of “Sell to Strangers” video about content marketing
Home
|
|
Using Go instead of bash for scripts
Home
|
|
Portable Executable File Format
Home
|
|
Programming articles
Home
|
|
Advanced web spidering with Puppeteer
Home
|
|
Finding freelancers
Home
|
|
Essentials of starting an indie business
Home
|
|
A short guide to marketing for developers
Home
|
|
Using MySQL in Docker for local testing in Python
Home
|
|
Rewritten - tales of rewriting software from X to Go
Home
|
|
Companies using Go
Home
|
| 1517 d |
Tech note: speed of iteration in programming
Home / Diary of a solo dev building a web app
|
| 1518 d |
Day 35: fixed OneDrive and Google Drive token refresh
Home / Diary of a solo dev building a web app
|
| 1519 d |
Tech note: JavaScript debugging helpers
Home / Diary of a solo dev building a web app
|
|
Tech note: Dropbox login
Home / Diary of a solo dev building a web app
|
|
Day 34: more Backblaze and refactoring
Home / Diary of a solo dev building a web app
|
| 1521 d |
Day 33: more Backblaze
Home / Diary of a solo dev building a web app
|
| 1523 d |
Day 22: file properties
Home / Diary of a solo dev building a web app
|
|
Day 12: S3 upload and directory deletion
Home / Diary of a solo dev building a web app
|
|
Day 24: dialog refactoring
Home / Diary of a solo dev building a web app
|
|
Day 0: the idea
Home / Diary of a solo dev building a web app
|
|
Day 25: Google Drive support
Home / Diary of a solo dev building a web app
|
|
Day 30: better dialogs
Home / Diary of a solo dev building a web app
|
|
Day 1: tech stack, creating a project from scratch
Home / Diary of a solo dev building a web app
|
|
Day 2: displaying a list of files
Home / Diary of a solo dev building a web app
|
|
Day 3: Dropbox
Home / Diary of a solo dev building a web app
|
|
Day 4: S3, sorting, and remembering credentials
Home / Diary of a solo dev building a web app
|
|
Day 5: setting up a website
Home / Diary of a solo dev building a web app
|
|
Day 6: Dropbox fix, bug fixes and small improvements
Home / Diary of a solo dev building a web app
|
|
Day 7: context menu, file delete
Home / Diary of a solo dev building a web app
|
|
Day 8: more file deletion and file upload
Home / Diary of a solo dev building a web app
|
|
Day 9: Dropbox upload
Home / Diary of a solo dev building a web app
|
|
Day 10: S3 file deletion and UI tweaks
Home / Diary of a solo dev building a web app
|
|
Day 11: upload a file to the local filesystem
Home / Diary of a solo dev building a web app
|
|
Day 31: tweaking bookmarks list
Home / Diary of a solo dev building a web app
|
|
Day 13: local filesystem fixes
Home / Diary of a solo dev building a web app
|
|
Day 14: image preview, file rename
Home / Diary of a solo dev building a web app
|
|
Day 15: text preview
Home / Diary of a solo dev building a web app
|
|
Day 16: bookmarks
Home / Diary of a solo dev building a web app
|
|
Day 17: file download
Home / Diary of a solo dev building a web app
|
|
Day 18: improving S3 upload
Home / Diary of a solo dev building a web app
|
|
Day 19: analytics, context menu
Home / Diary of a solo dev building a web app
|
|
Day 20: filesystem refactoring
Home / Diary of a solo dev building a web app
|
|
Day 21: creating S3 directories and tracking modification times
Home / Diary of a solo dev building a web app
|
|
Day 29: optimizing file representation and S3
Home / Diary of a solo dev building a web app
|
|
Day 23: file copy
Home / Diary of a solo dev building a web app
|
|
JavaScript optimization story
Home / Diary of a solo dev building a web app
|
|
Day 32: optimizations and Backblaze
Home / Diary of a solo dev building a web app
|
|
Day 26: more Google Drive support
Home / Diary of a solo dev building a web app
|
|
Day 27: better Google Drive login and OneDrive support
Home / Diary of a solo dev building a web app
|
|
Day 28: OneDrive support, more file properties
Home / Diary of a solo dev building a web app
|
| 1524 d |
Programmer productivity: lines of code edition
Home / Diary of a solo dev building a web app
|
| 1532 d |
Filerion marketing
Home / Diary of a solo dev building a web app
|
| 1535 d |
Filerion tech stack
Home / Diary of a solo dev building a web app
|
|
Thoughts on getting user feedback
Home / Diary of a solo dev building a web app
|
|
Using Roam Research for productivity
Home / Diary of a solo dev building a web app
|
|
Thoughts on developer productivity
Home / Diary of a solo dev building a web app
|
|
Thoughts on documentation
Home / Diary of a solo dev building a web app
|
| 1542 d |
Upload files from your computer
Home / Software / Filerion documentation
|
|
S3 and directories
Home / Software / Filerion documentation
|
| 1850 d |
Pure Bash Bible
Home
|
| 1851 d |
atomicfile - robustly writing to a file in Go
Home / Software
|
|
siser
Home / Software
|
|
Using Notion API Go client
Home / Software
|
|
Vim Reference
Home
|
| 2583 d |
Fuzzing a Markdown parser written in Go
Home / Go Cookbook
|
| 2601 d |
Pigz Windows port
Home / Software
|
| 2883 d |
Go Cookbook
Home
|
| 3326 d |
Experience porting 4.5k loc of C to Go (Facebook's CSS flexbox implementation Yoga)
Home / Go Cookbook
|
| 3349 d |
3 ways to iterate in Go
Home / Go Cookbook
|
| 3350 d |
Using MySQL in Docker for local testing in Go
Home / Go Cookbook
|
|
Rotate log files daily in Go
Home / Go Cookbook
|
|
Simple serialization format for logging and analytics in Go
Home / Go Cookbook
|
|
Embedding a build number in a Go executable
Home / Go Cookbook
|
|
HTTPS for free in Go, with a little help from Let's Encrypt
Home / Go Cookbook
|
|
Advanced command execution in Go with os/exec
Home / Go Cookbook
|
| 3356 d |
Solo founders with profitable businesses, collected stories
Home
|