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.
Someone at work today demanded that I add an RSS feed, so here you go: [atom]. It didn't take very much to [hack it in]. Basically, all I had to do was install a few more CPAN modules, specifically [DateTime::Format::Natural], [DateTime::Format::W3CDTF], and finally [XML::Atom::SimpleFeed]. 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.
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.
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!
ProcLaunch has learned a bunch of new things lately. I've fixed a few bugs and implemented a few new features, including:
--log-level option, so you can set a level other than
- Kill profiles that don't exist
- Instead of killing the process and restarting, proclaunch can send it a signal using the
- Instead of always sending
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
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
- You can pass the
--log-path command line option to change where proclaunch writes it's log. By default this is
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.
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.
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.
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.
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.
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.
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.
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
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.
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.
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.
"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.
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.
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.
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.
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?
I did over two years of research into how to set up my business properly, both to protect me and to save money on taxes every year.
There's an awful lot you need to know, and a whole lot of noise you don't.
My new book Handle Your Business gives you all of the good stuff and none of the noise in a succinct, easy to read guide.
Learn everything you need:
- What business entity to pick
- How to structure your contracts
- Where to get a business bank account
- The insurance coverage you need, and what you don't
- ...and more!
Handle Your Business is available today.
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.