123 d |
Modern C++ Home / Writings |
|
Man vs. AI: optimizing JavaScript (Claude, Cursor) Home |
124 d |
Software Home |
128 d |
Implementing Notion-like table of contents in JavaScript Home |
186 d |
Porting a medium-sized Vue application to Svelte 5 Home |
264 d |
Changing font size in Windows dialog in C++ Home |
650 d |
How I implemented wc in the browser in 3 days Home |
660 d |
Advanced markdown processing in Go Home |
662 d |
Persisted Svelte store using IndexedDB Home |
680 d |
About me Home |
|
I’m a Go freelancer for hire Home / About me |
681 d |
Thoughts on Go after writing 3 websites Home |
683 d |
Writings Home |
|
Hiding duplicate content from your site via robots.txt Home |
|
Website Home |
685 d |
Logging HTTP requests in Go Home / Writings / Go programming articles |
686 d |
Using Fabric for deploying server software Home |
|
gflags - a debugging story Home |
|
Designing web forums software Home |
|
Document your software Home |
|
How I improved Sumatra performance by ~60% Home |
|
On difference between amateur and professional shareware Home / My future is so bright that I’ll need to wear sunglasses |
|
Writing to sell Home |
|
Paradox of bad comments Home |
|
Value your time Home |
|
Startup management lessons from “The Social Network” Home |
|
Marketing lessons from WebP launch Home |
|
Summary of talk on continuous deployment Home |
|
You have to implement to understand Home |
|
Where do bugs come from? Home |
|
Summary of David Ditzel talk on binary translation Home / Where do bugs come from? |
687 d |
realloc() on Windows vs. Linux Home |
|
Design and implementation of translation system for desktop software Home |
|
SumatraPDF 0.8.1 release Home |
|
Lessons learned porting 50k loc from Java to Go Home |
|
SumatraPDF 0.9 released Home |
|
SumatraPDF 0.9.1 released Home |
|
SumatraPDF 0.9.3 released Home |
|
Sumatra 0.8 released Home |
|
ssh tips Home |
|
Sumatra PDF 0.7 released Home |
|
Sumatra 0.9.4 release Home |
|
SumatraPDF 1.0 released Home |
|
Best captcha is exotic captcha Home |
|
Sane #include hierarchy for C and C++ Home |
|
E-books economics Home |
|
Productivity ideas Home |
|
uISV stories Home |
|
SumatraPDF 0.6 released Home |
|
SumatraPDF 1.1 release 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 |
|
A debugging story Home |
|
Few things I’ve learned when writing Sumatra PDF Home |
|
SumatraPDF 0.5 released Home |
|
Simple duplicate post detection for your blog, forum or commenting software Home |
|
8 habits for becoming a better programmer Home |
|
Using averages - a common performance measurement mistake Home |
|
SumatraPDF 1.2 released Home |
|
Executable compressors comparisons: upx 3.07w vs. mpress 2.17 Home |
|
Writing a custom installer for Windows software Home |
|
SumatraPDF 1.3 released Home |
|
My social marketing failure Home |
|
XML is really, really slow Home |
|
SumatraPDF 1.4 released Home |
|
SumatraPDF 1.5 released Home |
|
90% of success is showing up - a proof Home |
|
Easy vs. probable or how to make money with software Home |
|
SumatraPDF 1.6 released Home |
|
Experience porting 4k lines of C code to go Home |
|
How to make software crash less Home |
|
SumatraPDF 1.7 released Home |
|
SumatraPDF 1.8 released Home |
|
SumatraPDF 1.9 released Home |
|
Showing html from memory in embedded web control on windows Home |
|
A list of chm readers/viewers for Windows Home |
|
SumatraPDF 2.0 released 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 |
|
SumatraPDF 0.4 released Home |
|
Speeding up Go with custom allocators Home / Go Cookbook |
|
Variadic Macros (C++) Home |
|
SumatraPDF 2.2 released Home |
|
Sumatra PDF 0.3 released Home |
|
How I ported pigz from Unix to Windows Home |
|
SumatraPDF 2.4 released Home |
|
Performance optimization story 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 |
|
Go package for better guid generation 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 |
|
Sumatra PDF 0.2 released Home |
|
Sumatra PDF is born Home |
|
Embedding binary resources on Windows Home |
|
Compile-time asserts in C Home |
|
Basics of writing DOS .bat batch files Home |
|
High-resolution timer for timing code fragments Home |
|
Accurate timers on Windows Home |
|
Review of “Hot text - web writing that works” Home |
|
Good programming practices Home |
|
Go programming articles Home / Writings |
|
Business articles Home / Writings |
|
Tutorial for github.com/kjk/flex Go package (implementation of CSS flexbox algorithm) Home |
|
Guide to predefined macros in C++ compilers (gcc, clang, msvc etc.) Home |
|
The future is here, it’s just not evenly distributed Home |
|
Find programming work by increasing luck surface area Home |
|
Extreme #include discipline for C++ code Home |
|
@levelsio and survivorship bias Home |
|
Principle of good design: discoverability Home |
|
57 MicroConf videos for self-funded software businesses Home |
|
Things I Learned the Hard Way: Engineering and Computer Science in the Real World Home / Writings |
|
Trade offs in designing versatile log format Home |
|
Lessons learned from 15 years of SumatraPDF, an open source Windows app Home |
|
Bugs and eyeballs Home |
|
Engineering school (summary of Rick Catell talk) Home / Writings |
|
How I use Roam Research Home |
|
The Silver Searcher windows port Home / Software |
|
The things we do to ship desktop software Home |
|
List of website with free eBooks in EPUB and MOBI formats Home / Writings |
|
What I've learned from "After the Gold Rush" Home / Writings |
|
List of mobi format readers and viewers for Windows Home / Writings |
|
List of ePub format readers and viewers for Windows Home / Writings |
|
List of CHM readers and viewers for Window Home / Writings |
|
Powering a blog with Notion and Netlify Home |
|
List of CBR, CBZ comic book readers for windows Home / Writings |
695 d |
filerotate - Go library for rotating files Home / Software |
716 d |
How I reverse engineered Notion API Home / Writings / Programming articles |
|
Hide header on scroll in Svelte Home / Writings / Programming articles |
717 d |
Big projects written in Go Home / Writings / Go programming articles |
|
Essentials of Starting Indie Business Home / Writings / Business articles |
|
Basics of freelancing Home / Writings / Business articles |
|
Summary Of "The Mom test" book about validating business ideas Home / Writings / Business articles |
|
Summary of “Sell to Strangers” video about content marketing Home / Writings / Business articles |
|
Summary of Founders Battle Talk #7 about SEO Home / Writings / Business articles |
|
Portable Executable File Format Home / Writings |
|
Small business stories Home / Writings / Business articles |
|
Programming articles Home / Writings |
|
Advanced web spidering with Puppeteer Home / Writings / Programming articles |
|
Finding freelancers Home / Writings / Business articles |
|
Diary of a solo dev building a web app Home / Writings |
|
Companies using go Home / Writings / Go programming articles |
|
Rewritten - tales of rewriting software from X to Go Home / Writings / Go programming articles |
|
A short guide to marketing for developers Home / Writings / Business articles |
|
Using MySQL in Docker for local testing in Python Home / Writings / Programming articles |
|
Sending emails with Mailgun in Go Home / Writings / Go programming articles |
|
Social media image sizes Home / Writings / Programming articles |
|
Typescript basics Home / Writings / Programming articles |
|
Using GitHub Actions with Go Home / Writings / Go programming articles |
|
Using Go instead of bash for scripts Home / Writings / Go programming articles |
898 d |
Tech note: speed of iteration in programming Home / Writings / Diary of a solo dev building a web app |
899 d |
Day 35: fixed onedrive, gdrive token refresh Home / Writings / Diary of a solo dev building a web app |
900 d |
Day 34: more backblaze, refactorings Home / Writings / Diary of a solo dev building a web app |
|
Tech note: JavaScript debugging helpers Home / Writings / Diary of a solo dev building a web app |
|
Tech note: Dropbox login Home / Writings / Diary of a solo dev building a web app |
902 d |
Day 33: more backblaze Home / Writings / Diary of a solo dev building a web app |
904 d |
Day 28: OneDrive support, more file properties Home / Writings / Diary of a solo dev building a web app |
|
Day 22: file properties Home / Writings / Diary of a solo dev building a web app |
|
Day 3: Dropbox Home / Writings / Diary of a solo dev building a web app |
|
Day 32: optimizations, backblaze Home / Writings / Diary of a solo dev building a web app |
|
Day 4: s3, sorting, remembering credentials Home / Writings / Diary of a solo dev building a web app |
|
Day 5: setting up a website Home / Writings / Diary of a solo dev building a web app |
|
JavaScript optimization story Home / Writings / Diary of a solo dev building a web app |
|
Day 6: Dropbox fix, bug fixes and small improvements Home / Writings / Diary of a solo dev building a web app |
|
Day 1: tech stack, creating project from scratch Home / Writings / Diary of a solo dev building a web app |
|
Day 7: context menu, file delete Home / Writings / Diary of a solo dev building a web app |
|
Day 8: more file delete, file upload Home / Writings / Diary of a solo dev building a web app |
|
Day 31: tweaking bookmarks list Home / Writings / Diary of a solo dev building a web app |
|
Day 9: Dropbox upload Home / Writings / Diary of a solo dev building a web app |
|
Day 10: s3 file delete, ui tweaks Home / Writings / Diary of a solo dev building a web app |
|
Day 11: upload file to local fs Home / Writings / Diary of a solo dev building a web app |
|
Day 12: s3 upload and delete directories Home / Writings / Diary of a solo dev building a web app |
|
Day 30: better dialogs Home / Writings / Diary of a solo dev building a web app |
|
Day 13: local fs fixes Home / Writings / Diary of a solo dev building a web app |
|
Day 29: optimizing file representation and s3 Home / Writings / Diary of a solo dev building a web app |
|
Day 27: better Google Drive login, One Drive support Home / Writings / Diary of a solo dev building a web app |
|
Day 14: image preview, file rename Home / Writings / Diary of a solo dev building a web app |
|
Day 26: more google drive support Home / Writings / Diary of a solo dev building a web app |
|
Day 15: text preview Home / Writings / Diary of a solo dev building a web app |
|
Day 25: Google Drive support Home / Writings / Diary of a solo dev building a web app |
|
Day 16: bookmarks Home / Writings / Diary of a solo dev building a web app |
|
Day 17: file download Home / Writings / Diary of a solo dev building a web app |
|
Day 18: improving s3 upload Home / Writings / Diary of a solo dev building a web app |
|
Day 19: analytics, context menu Home / Writings / Diary of a solo dev building a web app |
|
Day 20: fs refactoring Home / Writings / Diary of a solo dev building a web app |
|
Day 21: s3 create new dir, last modification time Home / Writings / Diary of a solo dev building a web app |
|
Day 0: the idea Home / Writings / Diary of a solo dev building a web app |
|
Day 2: displaying list of files Home / Writings / Diary of a solo dev building a web app |
|
Day 23: file copy Home / Writings / Diary of a solo dev building a web app |
|
Day 24: dialog refactoring Home / Writings / Diary of a solo dev building a web app |
905 d |
Programmer productivity: lines of code edition Home / Writings / Diary of a solo dev building a web app |
913 d |
Filerion marketing Home / Writings / Diary of a solo dev building a web app |
916 d |
Thoughts on developer productivity Home / Writings / Diary of a solo dev building a web app |
|
Filerion tech stack Home / Writings / Diary of a solo dev building a web app |
|
Using Roam Research for productivity Home / Writings / Diary of a solo dev building a web app |
|
Thoughts on documentation Home / Writings / Diary of a solo dev building a web app |
|
Thoughts on getting user feedback Home / Writings / Diary of a solo dev building a web app |
923 d |
Upload files from your computer Home / Software / Filerion documentation |
|
S3 and directories Home / Software / Filerion documentation |
1231 d |
Pure Bash Bible Home / Writings |
1232 d |
Using Notion API Go client Home / Software |
|
siser Home / Software |
|
Vim Reference Home / Writings |
|
atomicfile - robustly writing to a file in Go Home / Software |
1964 d |
Fuzzing Markdown parser written in Go Home / Go Cookbook |
1982 d |
Pigz windows port Home / Software |
2264 d |
Go Cookbook Home / Writings |
2707 d |
Experience porting 4.5k loc of C to Go (Facebook's CSS flexbox implementation Yoga) Home / Go Cookbook |
2730 d |
3 ways to iterate in Go Home / Go Cookbook |
2731 d |
Rotate log files daily in Go Home / Go Cookbook |
|
Using MySQL in Docker for local testing In Go Home / Go Cookbook |
|
Simple serialization format for logging and analytics in Go Home / Go Cookbook |
|
Embedding build number in Go executable Home / Go Cookbook |
|
HTTPS for free in Go, with little help of Let's Encrypt Home / Go Cookbook |
|
Advanced command execution in Go with os/exec Home / Go Cookbook |
|
Generating good unique ids in Go Home / Go Cookbook |
2737 d |
Solo founders with profitable businesses, collected stories Home |