Archive
2018
NixOS on prgmr and Failing to Learn Nix
House Rules
2017
Return Statement
Voicemail
Lobsters
Attending Recurse Center
MiscPodcast
Arithmetic Wrap in GMS2
Redshift With Cloudiness Adjustment
2016
Hard Lessons
When maintaining a legacy Rails apps, drink every time…
Queue Zero
Vim: highlight word wrap column in insert mode
Should multiple Rails Apps and APIs share a database?
How side effects make ActiveRecord models unreliable
Recursive Sum
2015
The Plan
Advice for First-Time Attendees to MicroConf
Peter Bhat Harkins
Battery Longevity
ActiveRecord Dangers Cheatsheet
Have You Seen This Cache?
Replacing Ack with Ag
POP3 and SMTP via SSH Tunnels
Chicago Code and Coffee
Finished Libraries
Deleting Spam From sup Maildirs
The Harmful Consequences of Postel’s Maxim
Skyscrapers and Doghouses
Against Tedium
Economics Doesn’t Believe in Magic
Sizing Up My Queue
Y Combinator News
Acceptable Errors
Will knowledge change a decision you make?
Installing You Need a Budget 4 (YNAB) on Arch Linux
An ActiveRecord Adapter
What Comes After MVC
The Two Kinds of Integers
Create localhost Aliases for Different Projects
Case Sensitivity in In-Page Anchors
Hiring Apprentices
Dual-Booting Arch Linux on Lenovo X1 Carbon 3rd gen
Isolating Polymorphism
2014
Type-Checking Interface in Ruby
Prefer: Censorship
Integration as Composition
Long-Term Travel Gear List2
Builder Methods
Two Designs for SequenceIdGenerator
Distributed ID Generation and Bit Packing
Ironwood, a Roguelike Game in 7 Days
2013
Extracting Immutable Objects
CTF Liveblog
Random The Flag
Personal Workflow
The Well-Sorted Version
Inheriting From Built-In Ruby Types
Social Media for Programmers
Backpack Criteria
Why I Rarely Use HABTM
2012
Solving vs. Fixing vs. Introspecting
FTL: Simulationism Lost
Open and Closed Platforms
Legacy Bitmask Puzzle
2011
Timing
Breakdowns
Keeping Jim Busy
Rewriting My Competitors
Two Turnarounds
Recreating My Firefox Profile
Small Steps
Craftsmanship Tour: New York Times
Now Featuring Monsters
SPWA Week 2: Funding and Forms
SPWA Week 1 Response: Code Hassles and Kittens
SPWA Week 0 Response: A Strong Start
So Play We All
Software Craftsmanship Tour: Aidan Rogers
Grind Without Progression in Die2Nite
Retracting my JungleDisk Recommendation
Dropbox and Git Play Well Together
Craftsmanship Tour: Jim Ray
Craftsmanship Tour: David W. Allen
2010
XML Crash Course
Craftsmanship Tour: 8th Light
Craftsmanship Tour: Obtiva
Social Pastimes
The Dog That Didn’t Bark
Book Licenses
Spreadsheet Errors
Twitter
Investing in Cloud Computing
Travels of Indefinite Duration
Reading 400 Feeds with Newsbeuter
Globalton
Interview Questions
Sample Camera Pictures
From Fixtures to Factories
Camera Card
This is Not A Productivity Post
Freemium and Segmentation
PHP Hex Map Graphics
Tracking Finances Though Benign Neglect
Yomi vs. Nash Equilibria
Hackers and Gamers
Domain Registration Survey
One Fine Git Book: Pro Git
Admitting Diminishing Returns
Finish a Project
Efficiency Replaces Autonomy
Competition and Bluffing
Game Influences (7/6): Warstorm
2009
HTML is Your Markup Language Anyways
Inbox Zero
Survey of Conference Attendees
Serenity Green
Redirecting Users’ URLs
JavaScript: The Good Parts
Investigating Theme Spam
Athenge Ops Playtested
Developer Day Notes
Client Logging to AWS
City of Heroes as a Pastime
Karma, Farming and Play Styles
Feedback and WeeWar’s Game Design
Technology Trees
Game Influences (6/6): Kongai
Game Influences (5/6): X-Com
Game Influences (4/6): Counter-Strike
Game Influences (3/6): Tactics Ogre
The Farming Genre
Game Influences (2/6): WeeWar
Game Influence (1/6): Ikariam
As Difficult as Possible
The Game Industry
Intention and Design
ListLibrary.net UI Design
A Spine of Trust
Announcing ListLibrary.net
Command/Query Separation
Worthy of Praise
Done at the Post
Markoff’s Gated Community Should Die in a Fire
Web Game
NearbyGamers To-Do List
Small Plans
Giving Notice
Linearization of the Playing Field
OpenOffice.org Losing Viability
Inauguration
Open Source Communities
Django vs Rails: The Dead-Tree Edition
Two Interactions With Amazon
Rules of Database App Aging
Rails Forum Roundup
Washington Post Update
Why I Write Tests
Twitter and Ruby’s Open Classes
Developers Need IRC
You’re Not Refactoring
2008
Authenticity
Greasemonkey Scripts: Gamasutra and Arlington Library
Deploying Crontab With Your Rails App
Now Do You Know It Works?
RailsRumble Postmortem
RailsRumbling
Don’t Play Hurt
256-Color XTerms in Ubuntu
14 Years to Unicode
Rails URL Params as Types
Moving is Rewriting
WWW Will Never Die
Harkins’s Law of Enterprise Software
Getting Git
Picking a Username
Finding Value in Bogosity
Free Shipping From Amazon Merchants
Improvement and the Hawthorne Effect
StackOverflow Sounds Pragmatically Postmodern
Turning Wordpress Categories Into Tags
Functional Package Management
Finally, Sweet Success
Pipe Viewer
Caching Dictionaries in Python vs. Ruby
2007
Django Template Tag for Dictionary Access
My Four-Year Patch
Painless Upgrade to Rails 2.0
Drifting Into Test-Driven Development
Choose Your Candidate
An Academic Inconvenience of Python
Because Internet Explorer is a Failure, That’s Why
Keep Ruby Gems in Your Home Directory
How To De-Asshole-ify Links
Post: Politics and Blogs
Post: The Moby Quotient
These Elves are People
Oh Noes!
Post: Politics Glossary
WashingtonPost.com
Simple Ruby Mocking
Fixtures in Ruby Unit Tests
Adequacy is Inadequate
Google Zombies
Good Timing
Flash Gaming
Alphabetical Sorting SQL Without “The”
Logging Internal Server Errors
Discussion URLs: Opaque, Usable, and Readable
Human-Readable ActiveResource URLs
Rails: Semicolons Out, Slashes In
One Laptop Per Chicago
Add Feed Discovery Links Easily
Colorizing Rails Test Output
Epson Perfection V100 in Ubuntu
Rails 1.2.1 Impression
Seeing Subversion Diffs for Commit Messages
Capistrano Task to Load Production Data
Sociable 2.0 Released
Sociable 2.0 Tomorrow
Which Vista Version?
Sociable 2.0 Beta 2
Announcing NearbyGamers
GET and POST variable hashes in Ruby on Rails
2006
Making Valid XHTML Easier
Dual-Head on the 13” Macbook
Tidy Stylesheets in Rails
Freshwater Live and TechCoffee
344 Books Must Go
Clean Up Your Mess
ChiPy at Google
Triple-boot Filesystem Layout
Bar Camp Chicago
Flintstoning Toasters
Leaving Hostway
Programming Is Like Sex
Cambrian House Party
Building Clean URLs Into a Site
Rails Day 2006
Ripping Unicode
Developing With Evil
Ripping Unicode at ChiPy
Building a Site With Clean URLs
Cambrian Development
Pre-Cambrian House
It’s, Like, Symbolic
Playing With Fire
Strings are a Domain-Specific Language
Django And The Disappearing Template Tags
Know a Good Linux Feed Reader?
Sociable Makes Blogs Happy
What a Blog Post is Missing
Newsflash: You’re Not Good Enough
NDAs: Fear and Shame
Writing and Formatting
Ruby Blocks and Blocks
Sociable Is The New Black
Lambda at Work
GoJobby Launches - Web 2.0 Job Site
Sociable 1.2
Sociable 1.1
Specificity
Think Outside the Euclidean Universe
Python Flyweights
Sociable 1.0
XmlHttpThrottleRequest
The Best Filler Ever Written
Equality for Python
Django Gets Transactions
Versioning: The Next Big Thing
Defeating Hardware Keyloggers
Compressing Sudoku
Push cx