/
Words written by me
/ blog posts
edit
Search
Need a freelance Go developer? You can
hire me
.
2022 (2)
Find programming work by increasing luck surface area
Extreme #include discipline for C++ code
2021 (3)
@levelsio and survivorship bias
Lessons learned from 15 years of SumatraPDF, an open source Windows app
How I use Roam Research
2019 (3)
The things we do to ship desktop software
Lessons learned porting 50k loc from Java to Go
Trade offs in designing versatile log format
2018 (4)
How I implemented Oembed Proxy for GitHub
Powering a blog with Notion and Netlify
2017 (8)
Business of Software talks
57 MicroConf videos for self-funded software businesses
How to install latest clang (6.0) on Ubuntu 16.04 (xenial) / WSL
Solo founders with profitable businesses, collected stories
Analyzing browserify bundles to minimize JavaScript bundle size
Blueprint for deploying web apps on CoreOS
Tutorial for github.com/kjk/flex Go package (implementation of CSS flexbox algorithm)
Guide to predefined macros in C++ compilers (gcc, clang, msvc etc.)
2016 (1)
Optimizing JavaScript by using arrays instead of objects
2015 (4)
Extracting files from .7z archives in Go
Go package for better guid generation
Accessing GitHub API from Go
First release of dbHero - a GUI database client
2014 (5)
SumatraPDF 3.0 released
Improving speed of SMAZ compressor by 2.6x/1.5x
Notes on Ansible
Tip for per-test verbose logging in Go
SumatraPDF 2.5.2 released
2013 (7)
Using Fabric for deploying server software
The Silver Searcher windows port
SumatraPDF 2.4 released
Inspiration for programmers that want a passive business
Pigz windows port 2.3.1 released
How I ported pigz from Unix to Windows
Pigz windows port
2012 (10)
Hiding duplicate content from your site via robots.txt
Speeding up Go with custom allocators
Thoughts on Go after writing 3 websites
Design and implementation of translation system for desktop software
SumatraPDF 2.2 released
How I sped up Go by 20% (or is Go really slower than Java?)
Websites with free ePub and mobi ebooks
SumatraPDF 2.0 released
SumatraPDF 2.1 released
Buying a certificate for signing windows applications
2011 (17)
A list of chm readers/viewers for Windows
SumatraPDF 1.9 released
How to make software crash less
SumatraPDF 1.7 released
Showing html from memory in embedded web control on windows
SumatraPDF 1.8 released
Introducing Volante - a database for C# (.NET)
Easy vs. probable or how to make money with software
SumatraPDF 1.6 released
SumatraPDF 1.5 released
90% of success is showing up - a proof
Experience porting 4k lines of C code to go
SumatraPDF 1.4 released
XML is really, really slow
Writing a custom installer for Windows software
SumatraPDF 1.3 released
My social marketing failure
2010 (34)
Best captcha is exotic captcha
You have to implement to understand
BitTorrent-based, large file distribution for HTTP
VisualAck 0.3.2 released
VisualAck 0.3.3 released
How to accept online payments
Things I’ve learned this week
Bash programming basics
Productivity ideas
E-books economics
Go vs. Python for a simple web server
Summary of talk on continuous deployment
uISV stories
SumatraPDF 1.1 release
Idea for code review tool
Searching for available DBA name in San Francisco
Comparing program versions (in C# and Python)
Software licensing scheme
Converting PartCover results to html
Introduction to PartCover - a short manual
Hipmunk - a new site for finding flights
Find free stock photos with Fotofi
Why you shouldn’t write Mac programs in QT
SEO is harder than you think
Tools that find bugs in c and c++ code via static code analysis
Value your time
Simple duplicate post detection for your blog, forum or commenting software
Marketing lessons from WebP launch
Startup management lessons from “The Social Network”
8 habits for becoming a better programmer
SumatraPDF 1.2 released
Using averages - a common performance measurement mistake
Which technology for writing desktop software?
Executable compressors comparisons: upx 3.07w vs. mpress 2.17
2009 (25)
App Engine as generic web host
Profiling tools for C/C++ on windows, mac and linux
Exporting data from EverNote
Fonts on windows
NSCopying, NSMutableCopying or NSCoding
Resources related to implementing programming languages
ssh tips
Compacting s3 aws logs
Summary of David Ditzel talk on binary translation
Where do bugs come from?
scdiff update (Windows git/subversion/cvs gui diff previewer)
How content-based addressing can help web performance
Setting up s3 logging
Forcing basic http authentication for HttpWebRequest (in .NET/C#)
Parsing s3 log files in python
15minutes - a simple productivity too
Network drives, .net, security and virtualbox
15minutes for mac now available
Automatic Java to C# conversion - experience using Java Language Conversion Assistant
Setting unicode rtf text in rich edit control
15minutes 1.1 for windows
We need Visual Ack
15minutes for mac updated
Sumatra 0.9.4 release
SumatraPDF 1.0 released
2008 (26)
backtrace_symbols() and -rdynamic in gcc
enabling coredumps
How to think
Sumatra 0.8 released
Logging in WinDBG
making unix user a sudoer
Reverse DNS lookup
Objective-C patterns
Valgrind basics
Windbg reference
Software worth buying - SftpDrive and ExpanDrive
gflags - a debugging story
_NT_SYMBOL_PATH considered harmful
Google App Engine - the first Internet operating system
Remapping Page Up and Page Down on Mac to move a cursor
Extreme (size) optimization in C and C++
Habit forming
Variadic Macros (C++)
Announcing fofou - forum software for Google App Engine
SumatraPDF 0.8.1 release
realloc() on Windows vs. Linux
SumatraPDF 0.9.3 released
SumatraPDF 0.9.1 released
SumatraPDF 0.9 released
Results of tweaking compiler flags before 0.9 release
Mac program scheduling (like crontab)
2007 (10)
memset() considered harmful
2 great books and one not so great
A debugging story
SumatraPDF 0.4 released
SumatraPDF 0.5 released
Few things I’ve learned when writing Sumatra PDF
Merge tools showdown
Sane #include hierarchy for C and C++
SumatraPDF 0.6 released
Sumatra PDF 0.7 released
2006 (31)
Basics of mysql
Debugging adventure
Check if file exists on Windows
Basics of writing DOS .bat batch files
Compile-time asserts in C
Get file size under windows
Subversion basics
C portability notes
Embedding binary resources on Windows
Make C code safe for C++
Designing web forums software
What makes a CD bootable
Python id3 library
Document your software
Digg and the craft of catchy headlines
A simple captcha scheme
Sumatra PDF is born
Short tutorial on svn propset for svn:externals property
Order of #include headers in C/C++
Deeply nested if statements
The missing msvcr80.dll story
Sumatra PDF 0.2 released
Performance optimization story
php_mysql.dll not loading in PHP 5.1.4 and Apache 2.2
Paradox of bad comments
What I love about Google open-source project hosting
Navigating source code in large programs
Gdb basics
On how I improved Sumatra performance by ~60%
Sumatra PDF 0.3 released
Talk on designing good APIs
2005 (33)
Subversion with SSH on Windows tip
Backpack observations
How to delete a file you get from urllib.urlretrieve()
Google saga - episode 205
Google - what kind of a giant they are?
A book to read, talks to listen to
Longhorn/Vista fonts
Deep indentation vs. flat
musikCube - nice mp3 player
VirtualEarth vs. Google Maps - not hitting the high note
Open-source and windows
Code-name Monad and the value of different perspective
Interesting Dave Winer interview
Rich client is here
Petzold on Visual Studio and mind corruption
Getting user-specific application data directory for .NET WinForms apps
Unsolved source control problems
High-resolution timer for timing code fragments
Accurate timers on Windows
Another lesson in entrepreneurship
Serialization in C#
Local DNS modifications on Windows (/etc/hosts equivalent)
Pickling (serialization) in Python
2004 (34)
A tip from “Getting things done”
Patterns in interaction design (web and gui design pattern)
Microsoft leading the way with open bug database
.NET Framework bootstrapper
Blogs should always provide “previous posts” button
wTail release
scdiff - show diffs of local changes in CVS or Subversion repository in a GUI
Productivity tips
Don’t use 0 instead of NULL
Web writing that works
Review of “Hot text - web writing that works”
DocSynch - multi-editor plugin for collaborative text editing
Alan Cox on writing better software
A collaborative text editor for Windows
scdiff 0.3 released
Google - comments on comments
2005 prediction - the rise of anonymous p2p
Counterpost to a counterpost
University of Washington on-line videos
Bad Google - the fallout
Google - we take it all, give nothing back
GPL 3 - anti-patent virus?
Google - ultimate hypocrite
Recovering data from formatted drives
2003
Catch me if you can
SICP lectures available on-line
Publicity 101
Lying with a straight face
Old ArsDigita content
Seth Godin on Purple Cows
Source Insight 3.5
Successful telecommuting
Creative commons presentation
Your life
Asking the right question about language design
Python idioms
Don’t change URIs
An old ad for a job at Microsoft
Outsourcing
Remote desktop - from Windows to Mac OS X
Disabling WFP (Windows File Protection)
Abut Face - second edition
Are Microsoft products any good?
Do you read the old papers?
Carmack on creativity
Good software, bad buying experience
Perl to Python compiler
Given enough eyeballs make all bugs shallow
Is software industry a place to be - Greenspun perspective
Programmers don’t steal enough
Why consistency is important in software design
On difference between amateur and professional shareware
My future is so bright that I’ll need to wear sunglasses
Software can always be better
Writing to sell
As we may think
How much can you make writing computer books
Memex - “sue me please” device
Lucene for searching source code
Shirky on Wikis
Better selling through a web-site
Popular fallacies
O’Reilly on software
Usability Heuristics for Rich Internet Applications
Marketing and shareware articles
Not as happy as you thought you will be
A shameless rip-off, or what did you expect?
Critical reading skills
How to make money developing Mac apps
Myths Open Source Developers Tell Ourselves
Skype as an example of changing nature of social interactions
Royalties in game business
Making money with shareware software
Watch TV on the internet
The story of Photoshop
2002
SMART Goals
Fine interview with Marcelo Tosatti
Laws of marketing #1 (leadership)
Bugs and eyeballs
On “The 22 Immutable Laws Of Marketing”
Laws of marketing #5 (focus)
Laws of marketing #11 (perspective)
Laws of marketing #4 (perception)
Laws of marketing #3 (mind)
Laws of marketing #2 (category)
Laws of marketing #7 (ladder)
Laws of marketing #6 (exclusivity)
Laws of marketing #9 (opposite)
Laws of marketing #10 (division)
Laws of marketing #8 (duality)
Laws of marketing #13 (sacrifice)
Laws of marketing #15 (candor)
Laws of marketing #14 (attributes)
Laws of marketing #16 (singularity)
Laws of marketing #12 (line extension)
Laws of marketing #21 (acceleration)
Laws of marketing #19 (failure)
Laws of marketing #17 (unpredictability)
Laws of marketing #18 (success)
Laws of marketing #20 (hype)
Redefining Professionalism for Software Engineers
You and your research
Principle of good design: discoverability
Open Source is Philanthropy
Laws of marketing #22 (resources)
Life of Hellen Keller
Information business as a relationship
How to be a leader in your field
C Interfaces and Implementations
Daemon tools for mounting iso images
Stuff costs more than you think
The value of programming
On writing well
Wozniak’s speech
The future is here, it’s just not evenly distributed
Interview with MicroStrategy CEO
Blog your resume
A lesson in marketing needed
High tech martyr
Great business without innovation
Quote from “Net Words”
Show me the code
The history of bookfinder
The stupidest thing a software company can do
Those are the good times
You’ll have a job
Three-way merge
High-level languages not so great
You won’t make money blogging
WinAmp 3 and software business lessons
Platform Leadership
Profitable open-source business
Joel, man of his word
Open-source lesson from a stripper
How to sell software
How to refuse features
LL1 Videos
Slate knows why Amiga failed
Good programming practices
Blown to bits
LL2 webcast
High Tech start up
Selling Microsoft
The power of endorsement
The ghost of ArsDigita
Written on Jun 28 2018.
home
Found a mistake, have a comment?
Let me know
.
Feedback about page:
Feedback:
Optional: your email if you want me to get back to you:
Send Feedback
Cancel