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.
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.
- 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.
- 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: 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.
- 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
- 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?
- 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.
- We (Probably) Have Two Years of ACA Left
- Don't panic just yet. There are at least two reasons why.
- Using Que instead of Sidekiq
- Sidekiq is awesome but sometimes alternatives make more sense.
- 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
- 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.
- 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