One of my goals this year was to up my foundation dev skills and a (sort of) semi-SMART goal of getting up four progressively more difficult apps I’d be scheming about releasing over the course of the year.
Kobayashi, which powers my re-christened blog Tundramonkey, was one of those apps. Yeah, I know… blog software? Can’t you do that in, like 15 minutes? I mean, there’s a Rails screencast and everything… Well, actually… no. What I found once I got going was that it ended up being quite the little project and while the basic coding behind getting core functionality up was quite easy, the vast collection of details that goes into migrating over eight years of posts and the functionality you’ve actually used means quite a bit of detail sweating.
So why’d I do blog software? Good question.
Probably the most important reason was scratching my own itch.
It’s always surprised me there is no de facto standard blog or CMS software for ruby and rails. Perhaps because I find it such a much better development environment, I’m often surprised it hasn’t had a wordpress or drupal killer leap to the forefront yet. Of course, it is astoundingly easy to roll your own basic CMS or blog, usually sufficient for the needs of apps where it’s not the core applications, it’s possible no one has perhaps bothered to write an all-singing, all-dancing blog soft for all comers, and while a wp killer with a 5 minute install was way too ambitious for me, I did want to replace my wp install with something slick, fast, hackable and easy to manage. And I wanted it to be in ruby.
I did try other ruby-based blog software (read: all), but nothing I found did precisely what I wanted. Quite a few came close. Jekyll I liked, but when it ended up taking 20 minutes to generate the site dealing with 8 years of my posts, well… it was out of the running and, to be honest, even with octopress making it simpler, static site generation felt a bit too much like 1992 to me despite the benefits of serving simple static files. I took quite a few of the idea in Serious and Toto as well, and applied them to Kobayashi, but neither had everything I was looking for.
Dev Goals and Features
In fact, the overall goal was to replace all the features I used on wp and make it svelte and slick and fast. So, taking loads of great ideas I’d seen in different blog engines and static site generators, I accelerated them to near relativistic speeds and smashed them together in the code equivalent of a large hadron collider (or, as I like to describe it… “schmooshed them”) into what I hope is a lot of best-of-breed ideas served quickly (rather than bolted on bits of a Frankenstein.). I created an MVP feature list and started progressively implementing and crossing features off the list at the New Zealand Railscamp on Mt Cheeseman. It grew a little during the writing but this is basically what I started off with:
Kobayashi Feature Set
- Markdown written static files for posts and pages
- Will run efficiently on one heroku dyno (scale as necessary from command line - uses
- git controlled. (git push origin master && git push origin heroku + autobackups on github!)
- Fast. Damn fast. (well, faster than wp anyhow)
- Can efficiently handle large numbers of posts (8 years worth in this case)
- Simple and small (< 500 LOC) (actually got it down to < 250LOC with refactoring)
- Caches - leverages both etags/last modified and Rack::Cache (and, optionally CDNs)
- Supports yyyy/mm/dd posts, and yyyy, yyyy/mm, and yyyy/mm/dd archives listing
- atom feed
- Sitemap generator
- Code highlighting in posts - along with a nice solarized theme
- Tagging of posts (which a lot of other apps didn’t support)
- Commenting (a la disqus - easy)
- Future posting (ie. can write a post that will be revealed as time catches up to its time)
- Flickr sets gallery
- Display latest tweets
- Asset compression, schmooshing and minification
- Pages + posts
- Well documented, easy to hack
- Easily migrate from wordpress or Jekyll/Octopress
The underlying goal beneath all these features though was to use the same approaches and solutions you’d use in larger apps (though for instance, I’d make choices like sinatra-assetpack rather than using Rails’ asset pipeline approach and used Sinatra for speed and simplicity rather than a full Rails stack.).
Design ended up being one of those areas that swallowed the most time, both at the beginning, and at the end (in fact, I’m still looking for a kickass default design for when I release Kobayashi as open source. If you’re interested in adding your name to open sourcing this, and can design your way out of a wet paper bag, please drop me a line.).
I am not a designer (though I’m not proud about that). So, the first thing I did was beat the bushes to see if some designer friends were interested, and when they were lukewarm on the idea, looked for affordable pros before finally punting to 99Designs. Sadly, no joy was found there either after some initial contest speccing, so I added a slightly new and ambitious MVP goal to the list: “Teach myself bootstrap and as much about good typographic design as I could to migrate over the old AWWS theme.”
So, that’s what you’re really looking at when you look at Tundramonkey, the work I did with css and some heavy reading on typography and vertical rhythm to migrate over something similar to the old design I had which was a modified version of Warpspire’s excellent Hemmingway theme for wordpress.
Yeah, I’m not wildly in love with it, but it’ll do for an MVP. Seriously, did you ever see the first default design for wordpress when it came out? But some design love, particularly along the Tundramonkey theme, is definitely in the future now that I’m happy with the code.
Open Sourcing Kobayashi
Anyhow, the plan from here now I’ve got the app up and it’s running is to extract the core functionality and make it available as open source to anyone who cares to use it (or cares to contrbute. Pull requests always welcome!).
Just a few things I need to sort out.
- Clean up the code and more documentation commenting
- Write up a howto and deployment guide README
- Bang out some more tests and move over to MiniTest
- Would be really great if I could get a designer to help me with a default theme for Kobayashi
So, let me know if you’re interested in auditing the code, contributing or giving a little design assistance and putting your name to the first release.
One of the problems with being on the internet before the days of “brand management” is that I had a lot of different domains, handles and monikers that ended up sort of being assembled into a strange range of things, may of which just confused people when they realized my emails were wakatara but, for example, my blog was Across Weirdish Wild Space and I was (and still am) @awws on twitter.
So, I decided with the blog redesign to also do a little bit of personal branding consolidation (besides the fact everyone here in Aus at the moment knows me as “that Canadian who plays werewolf”) and tryied moving a whack of different usernames, domains and handles over to the single, hopefully memorable and logoable, Tundramonkey. Despite the fact it more than likely convey the professional image I’d prefer major international organizations have of me, I do find it is how I think of myself when I’m out and about in the world. A lone Canadian simian from the snows cartoonishly bouncing around the globe. In fact, it’s gone surprisingly smoothly actually, though someone managed to swoop in (most likely completely independently, not maliciously) and grab the tundramonkey twitter handle in the last few weeks, though I’ve contacted them since they’re a twitter newbie and asked if they’d mind much ceding the handle to me (never ask, never get… ya know?).
Anyhow, as part of the design for the site I had planned to get a snowboarding yeti in there to make it look better, but with all the issues I had around the initial design getting done, it might take a while before design and logo branding get into the type of graphical range I’m going to feel is an expression of what I want the site to be personally and professionally.
But, most importantly, it’s up and out there now. Shipped!dev ruby gtd