VMSave has made over 10,000 calls

VMSave has made over 10,000 total calls as of yesterday. That's an astounding number to me. Originally VMSave was a tiny ruby script that I made to save my wife's mom's outgoing voicemail message. With her encouragement I made it into a full-fledged service. I never thought it would get this big, and yet here we are.

One Thousand Days

Today in my calendar there's a little entry that just says "1000 days."

One thousand days ago I received my first infusion of life saving deadly poison.

Between that day and today, I received twenty infusions of poison and then the best news: I was cancer free.

I also lost a parent. Wrote a book. Got married to a beautiful, amazing, tolerant, hilarious woman.

I lost another parent. Moved across the country. Bought a house.

I got married again, to that same beautiful, amazing, tolerant, hilarious woman. We honeymooned in Niagara Falls.

I quit my job. Made myself another one. Lost a pet. Wrote another book.

What's the common thread?

I'm still here.

And that's something to celebrate.

New Book: Handle Your Business

Let's say you do some consulting work once in awhile. You do some work, people pay you, everyone's happy.

Now, let's say you want to make a living with consulting, like I did a year ago. What do you need to know? How do you set up an effective, legitimate business around your work?

Let's Begin Again

At the ripe old age of 12 I started messing around with computers. I've been hooked ever since. I've also read everything I could get my hands on about business, hoping to some day be able to start my own. However, I took the well-worn path of college, then into industry where I lucked into a series of great jobs.

Today, I'm finally striking out on my own. Today I'm throwing open the doors to my software development consultancy.

Mastering Modern Payments Is Out Today!

I'm so proud to announce that Mastering Modern Payments: Using Stripe with Rails is officially launching this morning. Mastering Modern Payments is your guide to integrating Stripe with your Rails application and is packed with sample code and best practices that will make sure your integration works now and in the future.

Announcing: Mastering Modern Payments: Using Stripe with Rails

Over the past few years I've put together a number of projects that use Stripe and their Ruby API to collect payments and manage subscriptions. I've learned quite a bit about how to effectively use the things that Stripe provides to my best advantage. Two months ago I decided that I would like to share that knowledge and so I started working on a guide to integrating Stripe with Rails and today I'd like to announce that Mastering Modern Payments: Using Stripe with Rails will be available on August 15th, 2013.


"Thank you for calling the Bergs and the Keens. We're not home right now...". Mom hasn't changed the outgoing voicemail message yet. John's voice is still there, encouraging anyone who wants to leave a message. It's the last vestiage of him, other than what we hold in our memories. The last bit of him that's still real, and even that's just an echo that will fade with time.

Blog Relocation

After a lot of thought and deliberation I've decided to retire bugsplat.info as my blog address. It's served me well for about six years, but the word "bugsplat" has recently gained some other unrelated connotations, the latter being the most unsavory. The other big reason is that at this point I would like people to associate my work with my actual name, not some other name that you would only know was related if you knew me already.

That said, any @bugsplat.info email addresses you have will continue to work. Any links to bugsplat.info will also continue to work through the magic of HTTP 301 Moved Permanently. Read on to see how I set that up, because it's kind of interesting.

New Blog Design

For the past three years this blog has has featured the same basic design. Header, sidebar, content, footer. Simple, classic, kind of ... homely. Today I decided to give a new design a whirl, and if you're reading this on the website you can see what's changed.

Docverter is now Open Source

A few months ago I created a hosted document conversion service named Docverter. The idea was to collect together the best document conversion tools I could find into one comprehensive service and sell access. Many of these tools are difficult to install if you're used to a service like Heroku, so it only made sense to wrap it all up.

Marginalia: A web-based journaling and note taking tool

I'd like to present my new webapp, Marginalia, a web based journaling and note taking tool. Notes are written in Markdown, and there are some simple shortcuts for appending timestamped entries at the end of a note, as well as a few email-based tools for creating and appending to notes. You should check it out. Look below the fold for technical details and the origin story.

Update 2013-10-19: Marginalia is shut down and open source on GitHub

Dokuen 0.0.8, Now with Linux Support

When I released Dokuen last week I had no idea it would get as much press as it did. I'm excited that so many people want to give it a shot. To that end, v0.0.6 v0.0.7 v0.0.8 has rudimentary Ubuntu support, along with revised Mac support. See below for the changes.

Dokuen Update

After writing last blog post I started to build out another app using Dokuen and the pain really got to me. I've addressed the caveats that I listed at the bottom of that article and I think Dokuen is ready for tryouts. I wouldn't put anything mission critical on it, but that's not really what it's for anyway.

Yet Another (not very) Static Blog Generator

The very first post on this blog was about how I wanted a completely static blog and how it'll be great and wonderful and boy howdy was it ever. Over 500 lines of rather dense perl plus almost 20 separate template files because the kind-of-mustache that I decided to implement can't handle inlined templates for loops so I have to do everything as partials.

Needless to say, it isn't very fun to work on. It mostly does what I want but adding new things is pretty painful, as is changing any of the templates. Yesterday I decided that I would see what a Sinatra port would look like. Why Sinatra? It's fun, that's why. Ruby and Sinatra make writing new webapps easy and fun.

Introducing FivePad

For over two years I've been ruminating on an idea for a webapp that would help people coordinate apartment searches amongst roommates. Finding a place is pretty tough, and finding the right place for you and one or more other people is even harder. Emails, phone calls, spreadsheets, links, bookmarks. It's a mess. So, I built FivePad. More details after the fold.

What sucks about apartment hunting?

I want to brainstorm everything that sucks about searching for an apartment. Why is it always so painful? Does it have to suck so much? I have some ideas but I haven't done this in almost a year so the pain, it is not so fresh.

Remindlyo is a Go

Eight weeks ago I embarked, almost by accident, on one of the most interesting challenges that I've ever set up for myself. I've created something new, something that I don't think the world has had before, and that makes me feel good. So, if you're reading this, go check out Remindlyo, because it's as done as it's going to get for now.

Random Remindlyo Things

I think everyone is due for an update on my remindlyo progress, but I don't really have an organized post. Here's a bunch of random thoughts instead.

ProcLaunch v1.2

Just a few bug fixes this time:

  • When you send proclaunch SIGHUP, it will send all of the profiles their respective stop signals and then wait for them to shut down. You can tell proclaunch to stop without waiting by sending SIGHUP again.
  • You can pass the --log-path command line option to change where proclaunch writes it's log. By default this is $profile_dir/error.log

ProcLaunch Improvements and v1.1

ProcLaunch has learned a bunch of new things lately. I've fixed a few bugs and implemented a few new features, including:

  • A --log-level option, so you can set a level other than DEBUG
  • Kill profiles that don't exist
  • Instead of killing the process and restarting, proclaunch can send it a signal using the reload file
  • Instead of always sending SIGTERM, the stop_signal file can contain the name of a signal to send when proclaunch wants to stop a profile
  • Pid files are properly cleaned up after processes that don't do it themselves
  • You won't get two copies of proclaunch if one is already running as root

ProcLaunch v1.0

I kind of started [ProcLaunch][] as a lark. Can I actually do better than the existing user space process managers? It turns out that at least a few people think so. I've gotten a ton of great feedback from thijsterlouw, who actually filed bug reports and helped me work through a bunch of issues. ProcLaunch even has some tests now!

Blog Generator Updates

I've made some small changes to the way bugsplat.info is generated. First, I refactored publish.pl quite extensively. Instead of being a huge mess of spaghetti-perl, it's nicely factored out into functions, each one doing as little as possible. It got a little longer, but I think it's worth the tradeoff in readability.

Adding RSS and Other Things

Someone at work today demanded that I add an RSS feed, so here you go: [atom][1]. It didn't take very much to [hack it in][6]. Basically, all I had to do was install a few more CPAN modules, specifically [DateTime::Format::Natural][2], [DateTime::Format::W3CDTF][3], and finally [XML::Atom::SimpleFeed][4]. The first two are so I can put natural-looking dates in my entries and still be able to get full-fledged DateTime objects out of them, and the second is to save me the pain of writing out the Atom format's preferred datetime format. Also, I get neat date formatting in blog entires almost for free with the CLDR syntax.

Yet Another Static HTML Blog

I'm a strict believer in learning by doing. It's how I learn best. In the spirit of learning, then, here's how I built the engine that powers this blog.

Right away I decided that there's no point in having a database to back this thing. The only useful thing that a database brings to the table is comments, and those are way more hassle than they're worth. Better to leave the comments at reddit or hacker news, where they already know how to deal with spam. Not having to worry about a database freed me up to worry about more important things, like how to put text on the screen. I'm most familiar with perl at the moment so I decided that the best way to build it would be a client-side script that generates some static html.