Essays

I've been writing and publishing essays on this site since 2010. Here they are, gathered into topics. If you'd like to see them chronologically check out the full archive.

Best Of (start here)

Mastering Modern Payments: Using Stripe with Rails
A concise ebook packed with helpful tips and juicy best practices for integrating Stripe into your Rails application.
DNS: The Good Parts
Dig through the DNS and learn how and why it all works.
Program your Finances: Command-line Accounting
All about my financial journey, from debt-ridden towards debt-free. More importantly, this is a very basic introduction to how to use ledger to keep track of your finances. This has been described as the best introduction to ledger out there.
The Stripe Webhook Event Cheatsheet
Fourteen common scenarios and the hooks that Stripe fires for them, including full JSON samples.

3d printing

Using a Secondary Klipper for Printer Power Control

book reviews

Book Review: Tubes: a Journey to the Center of the Internet
Take a journey through the literal tubes of the Internet, tracing cables to routers to data centers across the world.
Book Review: The Box
After reading The Box by Marc Levinson I'm relatively certain the Millenium Falcon would be considered a breakbulk tramp freighter.

business

Bootstrapping a Side Business - First Steps
Five business lessons from an idle game
What a simple idle game can teach bootstrappers about their businesses.
What is the best modern payment provider?
A comparision of modern payment providers including Stripe, Braintree, Balanced, and more.
Pay Your Taxes!
Freelance software developers have to pay taxes too, just like everyone else.
Organizing Your Consulting Business
The best strategy for organizing your consulting business.
Does an LLC protect me from a personal injury lawsuit?
LLCs have "limited liability" right in the name, but what does that actually mean?
My Miniature Corporate Empire
The way my businesses are structured and how they came to be
Adventures in Stock Picking
Notes on Shutting Down an S-Corp
Shutting down an S-Corp is complicated.

dns

How I run my own DNS servers
Running your own DNS server using Tinydns is cheap and easy and fun.
How and why I'm not running my own DNS
Running a DNS server is not without it's drawbacks. Eventually I decided not to do it.
DNS: The Good Parts
Dig through the DNS and learn how and why it all works.
Fix Your Email Deliverability with DMARC
Improve your email deliverability using DMARC, SPF, and DKIM.
Your DNS Provider Should Not Be Your Registrar
By hosting your DNS nameservers at your DNS registrar you are exposing yourself to a large liability.

email

Email: The Good Parts
There are an awful lot of interesting things happening between hitting Send and your email hitting an inbox. This post is an overview of how your message makes it's way to your recipient.
SPF: Sunscreen for your Email
Sender Policy Framework (SPF) is a type of email deliverability record that helps servers that receive email verify the sender. This post is a deep dive into how it works and what it's good for.
DKIM Deep Dive
DKIM (DomainKeys Identified Mail) is another type of email deliverability record that helps recipient servers be confident that you authorized any given email. This post is a deep dive into how it works and what it's good for.

finance

Program your Finances: Command-line Accounting
All about my financial journey, from debt-ridden towards debt-free. More importantly, this is a very basic introduction to how to use ledger to keep track of your finances. This has been described as the best introduction to ledger out there.
Program your Finances: Reporting for Fun and Profit
Outlines a reporting system that I used for awhile to run queries against my ledger data that I couldn't with the native ledger program. Also introduces a small tool for generating realistic sample ledger data.
Program Your Finances: Vacation Tracking
Describes a system that I hacked together in an afternoon before a recent vacation that let me keep track of vacation finances on the fly without a laptop.
Program Your Finances: Automated Transactions
Walks through a simple but very capable and extensible reporting system for ledger written in Ruby. Reports are simple ERB pages with embedded SQL and javascript.
A Robust Reporting System for Ledger
The reporting system I use to manage my financial life. Reports are just HTML and ERB with a smattering of SQL.
Program Your Finances: Envelope Budgeting
Use Ledger's automated transactions to implement envelope-style budgeting.
Program Your Finances: Algorithmic Savings
Using algorithms to calculate savings targets instead of percentage-based automated ledger transactions.
Automatic Finances
Automatic Cash Management
Automatic Insurance
Automatic Investing

hardware

I Soldered Something!
Knocking together a little Arduino demonstrator, including soldering something for the first time in about ten years.
Quadrotor Motors Are Alive!
Building up a quadrotor using an Arduino and Wii motion sensors.
Quadrotor Update
Things are not looking so great in the land of Quadrotors.
Quadrotor Update Part 2
It moves! It flips itself over!
Quadrotor Update 3
Mounting a Magic Trackpad on a Kinesis Advantage Keyboard
The Kinesis Advantage is a funky keyboard with a blank spot exactly right for mounting a Magic Trackpad. But how to get it to stick there?

networking

Increasing the Encryption Noise Floor
HTTPS is incredibly important for the survival of the Internet and installing it is easy.
Building a Private Backplane Network for your VPSs with ZeroTier
See how I built a private network that ties together my VPSs and my laptop.

politics

We (Probably) Have Two Years of ACA Left
Don't panic just yet. There are at least two reasons why.

programming

Using Que instead of Sidekiq
Sidekiq is awesome but sometimes alternatives make more sense.

software

Calorific, a Simple Calorie Tracker
A simple system for tracking calorie consuption in a plain text file, inspired by Ledger
Moose vs Mouse and OOP in Perl
Comparing performance of two Perl class metaprogramming systems: Moose and Mouse
Actionable Information
How do you get from data to information? How do you make it useful?
Building Battle Bots with Clojure
Tiny introduction to Clojure via a bot contest system named RealTimeBattle.
Everyone Needs Goals
Adding goals to the Calorific data format
Iterating Elements in boost::tuple, template style
Building recursive template iterators for serializing boost::tuples
Data Mining "Lost" Tweets
Gauging Twitter's reaction to the LOST finale in real time.
Daemons are Our Picky, Temperamental Friends
A survey of available user-space process managers for running modern web applications.
Managing Your Processes with ProcLaunch.
Managing user-space processes with ProcLaunch, a Perl user-space init system.
Perl with a Lisp
My attempt at writing a Lisp in Perl using just the original Lisp micromanual.
Concurrency on Heroku Cedar
One way of adding more concurrency to a single Heroku dyno using Unicorn and Resque.
Another Tiny Webapp
A little webapp for managing a painkiller schedule.
Dokuen, a Personal App Platform
Deploying apps on your own hardware shouldn't be so hard.
Task-oriented Dotfiles
I set up my dotfiles by task instead of program, making them much easier to maintain.
Keeping a Programming Journal with Marginalia
On-the-fly Markdown Conversion to PDF and Docx
How to convert markdown content into other formats using Docverter.
Private Git Repositories with Gitolite and S3
How I host my private git repos on my own hardware.
Run Anything on Heroku with Custom Buildpacks
Heroku is an incredibly flexible platform for running applications. You can compile your application exactly how you want it with custom buildpacks.
Deploying a 12-Factor App with Capistrano
Deploying Heroku-style applications to bare metal with the help of Capistrano and Foreman.
Deploy 12-Factor Apps with Capistrano::Buildpack
Capistrano::Buildpack is a gem for deploying apps originally meant for Heroku onto your own hardware.
Full Text Search with Whistlepig
Whistlepig is a small in-memory full-text search engine. This is how I embedded it into my blog engine.
Distributed Personal Wiki
Putting together a personal git-backed wiki using Gollum and SparkleShare.
Design for Failure: Processing Payments with a Background Worker
Making requests to external services during a web request cycle is a recipie for pain. Learn how to make them in the background.
Page Viewer, a Simple Markdown Viewer
Page Viewer is a little Sinatra app that just renders a directory full of Markdown files into HTML.
Making eBooks with Docverter
Building an eBook is not a trivial endeavor but Docverter makes it easier.
Essential Tools for Starting a Rails App in 2013
Gems and other handy tools that make building a Rails app easier.
DRY your Rails CRUD with Simple Form and Inherited Resources
Building admin interfaces is a drag. Make it easier with a few handy gems.
Post-mortem of a Dead-on-Arrival SaaS Product
My side-business Marginalia has not done well so I decided to put it out to pasture.
Little Data: How do we query personal data?
Our lives are awash in little silos of data. How can we pull those together in a comprehensive way?
Simulating a Market in Ruby
Public markets are fascinating entities, and at the core of most markets is a data structure called an Order Book.
Simple Git-backed Microsites
Make new websites on the fly with nothing but a git push.
A Practical Exercise in Web Scraping
Using Ruby and Docverter to pull down a whole website and convert it to an eBook.
Using the Mailchimp API for Sales
Auto-adding purchasers to a Mailchimp list makes sending them email much lower effort.
Self-hosted Git Server
Moving off of Github and onto my own public Git hosting.
Start a VirtualBox VM at Boot on Mac OS X
Sometimes you have a VirtualBox VM that's critical to your workflow. Start it at system boot with launchd.
Command Line Faxing
The fax machine is an archaic technology. Let's mash it up with another one!
Know How To Roll (Your SSL Certificates)
Learn how to keep your SSL certificates up to date and valid.
Why your SaaS application should support SAML
Because large enterprise customers will pay you more for it
My Own Private CDN
Yet another edition of Why Would You Ever Want To Do That
What is a CDN and why do I need one?
A content delivery networks (CDN) speeds up your content delivery over the network. Simple!
Using Let's Encrypt Without certbot
Certbot is a wonderful tool but it doesn't work for my CDN project.
Tiller, Ledger, and Sorbet

stripe

Shipping with Stripe and EasyPost
Make a thing, sell it with Stripe, ship it with EasyPost. Cruise control for cool.
Adventures in Self Publishing
My journey from an empty text file to a successful book launch, including pretty graphs!
The Life of a Stripe Charge
How Stripe processes a credit card charge, from soup to nuts.
Using Stripe Checkout for Subscriptions
Stripe provides a gorgeous pre-built credit card form called Stripe Checkout. Learn how to best use it for subscription applications.
Stripe Account Balances for Service Credits
Your customer earned a referral fee. You can pay them with a credit to their Stripe account balance.
Introducing Payola
A drop-in Rails engine for accepting credit card payments with Stripe
Building Payola Extensions
How to extend Payola with your own functionality
Payola v1.2: Now with Subscriptions
Payola is a drop-in Rails engine for accepting payments with Stripe, now with Subscription support
Stripe removed SSLv3 support. Here's how to fix the HTTP 401 errors.
Here are three solutions to fixing HTTP 401 errors caused by Stripe removing SSLv3 support.

updates

Yet Another Static HTML Blog
The very first post on this blog describing a very out-of-date backend engine.
Adding RSS and Other Things
Adding RSS to the old Perl-based engine
Blog Generator Updates
ProcLaunch v1.0
ProcLaunch Improvements and v1.1
ProcLaunch v1.2
Random Remindlyo Things
Remindlyo is a Go
What sucks about apartment hunting?
Introducing FivePad
Yet Another (not very) Static Blog Generator
The second major version of the engine that runs this site is a small Ruby/Sinatra application.
Dokuen Update
Dokuen 0.0.8, Now with Linux Support
Marginalia: A web-based journaling and note taking tool
Journal and take notes on the web with a built-in email workflow.
Docverter is now Open Source
New Blog Design
I redesigned my blog again. This time it's better.
Blog Relocation
I've moved my website to petekeen.net and managed the redirects like a pro.
Cancer
2013 was a terrible, horrible, no good, very bad year.
Announcing: Mastering Modern Payments: Using Stripe with Rails
I wrote a book about using Stripe with your Rails application.
Mastering Modern Payments Is Out Today!
MMP is available to buy today!
Let's Begin Again
I am now an independent consultant!
New Book: Handle Your Business
One Thousand Days