I got a little sick of having to maintain an unmaintained blog engine (I'm looking at you SimpleLog), so I did what all the cool kids are doing, I switched the blog to using Tom Preston-Werner's excellent Jekyll. I threw in a few tweaks of my own, and tweaked my Rakefile and Apache to support things that SimpleLog can do, but the static nature of Jekyll can't. Thankfully, the URL format of both is pretty similar, so it was pretty easy to set up redirects from the old URLs to the new ones.

For comments, I welcome Disqus.

The full blog is on GitHub, feel free to look at the deployment scripts and the build file. The latter uses Jekyll as a library to generate pages for all topics used in the posts. Nothing short of rocket science, I'm telling you.

Why you ask? Because a simple text file wins over a database system any day, and using cap deploy to update a blog entry is just outright cool.

Tags: blog, miscellany

So you're still looking for things to do in the new year, eh?

Let me get you started:

  • Refactor some ugly code. There's nothing more that'll teach you about how code should look than ugly legacy code. You'll be sure to find some in the next project at hand. Rip it apart, throw a big test suite at it, and get going. A very satisfying work, though I wouldn't recommend to continually do it, working with ugly code I mean. I like ripping apart stuff, but I also enjoy working on code that's clean and minty-fresh already.

    I've done my fair share of this over the last year. It's fun, challenging, satisfying, annoying and exhausting. My lesson learned over last year: Mocks are mocking you.

  • Read books. Yeah, yeah, same old. So?

  • Help out an open source project. OpenOffice.org is apparently short of developers. Just kidding, there's always work to do on existing projects, if you can't come up with something new on your own. Good maintainers will happily accept your patches. But you did write tests for them, did you?

  • Don't write a plugin. Yeah, plugins are so 2007. Make it a gem instead.

  • Put out code. Did I say you don't have to come up with your own projects? I take that back. Write fun apps, write serious apps. Put them up on GitHub. They'll be your future CV.

  • A new year, a new language. For me, last year's new language was photography. Weird eh? But I opted for learning as much as possible about photography, film (sorry, no digital photography to see here) and Polaroid as I could, instead of learning a new language. I'm not completely happy about it, but on the other hand I am.

  • Add some new tools to your box. For me, those will be mostly testing tools, like Cucumber, a decent JavaScript testing library, but also RubyCocoa (incl. MacRuby of course, but I liked RubyCocoa even without it).

Tags: miscellany

All right, so I didn't exactly learn that testing all the fucking time is effing important over the last 12 months, it's become clearer and clearer ever since I was first introduced to JUnit. But it did become crystal clear to me how important it really is. I've worked with a lot of legacy code, I've refactored a lot of it into more reasonable and manageable slices, and I've thrown a fresh set of tests at them. I swore at it, I cursed it, but in the end I was very satisfied with the result. The more code I worked with that wasn't covered by a decent test suite the clearer the picture of always testing became to me.

Testing is an art, and it takes a long time to master it, it's hard, it's fun, it's maddening, it's sometimes a time-consuming process, but in all, it's easy to start. Just write a test. For me there's nothing that was worth investing more time than testing.

It needs to hurt when you're touching code without tests, it needs to hurt when you're writing code without tests. When you get a funny feeling, and you find yourself writing a line of code without first writing a test for it, then you're on your way to testing-zen.

Mocking

When you start looking deeper into RSpec, you're bound to come across mocking as a wicked tool for testing. I've had my fun with it, but my lesson at the end of the year is to avoid it as much as I can. Mocks are mocking you. I much prefer a simple setup of real objects instead of relying on mocks and stubs, even if they hit the database.

Mocks are making testing simple, but they also make life a little too easy. You're relying on something that's just not realistic. Your application needs to hit the database, whether you like it or not.

I'd highly recommend checking out "Testing Heresies" and "Writing Code That Doesn't Suck", both talks from last year's RubyConf. Maybe they'll help you understand why I changed my mind about mocks.

Enterprisey Rails

Oh, how I love that E-word. For a while now the question whether Rails is ready for the Enterprise was not a question anymore, at least for me. The real question is: Is the Enterprise ready for Rails?

Anyway, I learned a lot about scaling a big Rails application with all nuts and bolts. It was both incredibly satisfying and frustrating. There's been so many things involved, the most important tools has become asynchronous processing. No better way to take some load of your application and to reduce response time when it comes to longer-running tasks.

I've played with ActiveMessaging, but these days I'm more up for writing my own background processes with either delayed_job or just simply the daemon gem.

Clarity over Magic

I've learned more and more about the depths of Ruby meta-programming, and as much as I like it, I like to avoid it as much as I can. People tend to fall back to using them way too fast instead of just writing the code they originally intended to write. It's fun to play with, it's a nice tool to have, but it's like the light of Eärendil. It's supposed to guide you to find a way out of the darkest corner of your code base.

I just like to write code that's concise and reveals what it does at first sight.

Plugins are Evil

I'm amazed how quickly people crank out a plugin when they believe they're seeing something that'd be worth moving out of the application's code base. The unavoidable urge to abstract always seems to end in either meta-magic or a new plugin.

Ever heard of the folder lib in your application? Right, that's where you can put stuff too. It will be easier to test, therefore easier to integrate in your continuous integration system, and easier to find. Glad we got that out of the way.

Here's to more fun with Rails in 2009!

Tags: miscellany

For a new project I wanted to try some new things, the moment just seemed right, so let me just give you a quick round-up.

  • Machinist - Now I liked factory_girl, but after looking into Machinist it still seemed too tedious. It took me a while to replace the fixtures with Machinist, but it was totally worth it.

  • resource_controller - Way to DRY out your controllers. It abstracts away a lot of the tasks you repeat in RESTful controllers, but in a way that doesn't feel like it's totally out of your hand. Just the right amount of abstraction.

  • Cucumber - When I first saw the PeepCode on RSpec user stories I was a little bummed, but that was mainly because the PeepCode itself didn't really show the power of stories for integration tests. Quite the opposite, it used the stories to directly work with the model, and to test validations. Not really what I fancied, I already had a tool for that.

    But Cucumber, where have you been all my life? I started working with it today, and just after a few hours it already felt so natural to put the things you expect from your application on the user level into sentences, and to write or reuse the according steps. If you haven't already, do give it a go. It's been the missing tool for integration testing in my toolbox, and I'm in love with it already.

    It integrates nicely with a lot of things, for me right now, Webrat is sufficient, but if you fancy it, use Selenium, Celerity, Mechanize or whatnot.

In other news, I gave actsassolr a new home, it's not fancy yet, but at least there's an up-to-date RDoc available.

The guys at Upstream Agile in Berlin are having a Cockpit Night again, and this time it's screencast week. On the menu will be the first four of the Erlang screencasts (on January 21) and the first two of the new Objective-C 2.0 series (on January 22), both kindly provided by The Pragmatic Programmers.

prag-screencasts

Head on over to the wiki and sign up already, will ya? Seating is limited.

Tags: miscellany

If Rails was anything like Spring, we wouldn't see a 2.1.2 release anymore:

"After a new major version of Spring is released, community maintenance updates will be issued for three months to address initial stability issues. Subsequent maintenance releases will be available to SpringSource Enterprise customers. Bug fixes will be folded into the open source development trunk and will be made available in the next major community release of the software . . . "

Right on. I can understand that SpringSource has to make money somehow, but way to screw over the community like that. But given the enormous amounts of money put into it by investors it's no surprise really.

Via TheServerSide.

Tags: miscellany

Chris (of GitHub and err.the_blog fame) gave an inspiring keynote at this year's Ruby Hoedown. Check out the essay, or enjoy him in full visual glory.

Inspiring quote to scratch your itch:

"In fact, stop worrying so much about other people. Every time I've worked on a project I thought other people would really love, it was a massive flop. Every time I've worked on a project I loved, it worked. If you're sitting in this room, your taste is not as far off from those around you as you'd think. Build something you love and others will love it, too. (Not everyone, of course.)"

Seriously, go check it out.

There are more videos from the Hoedown available, of course.

Tags: git, miscellany, ruby

Well, they had it coming. Neither S3 nor SimpleDB could've been the final storage solution for EC2.

"Amazon Elastic Block Store (EBS) provides block level storage volumes for use with Amazon EC2 instances. Amazon EBS volumes are off-instance storage that persists independently from the life of an instance. Amazon Elastic Block Store provides highly available, highly reliable storage volumes that can be attached to a running Amazon EC2 instance and exposed as a device within the instance. Amazon EBS is particularly suited for applications that require a database, file system, or access to raw block level storage."

Pricing looks reasonable.

Tags: miscellany

Steven Frank gives you a whole bunch of reasons not to use FTP anymore. For me, SFTP (the SSH version), together with scp, have replaced FTP long ago. FTP reminds me of the good old PHP days, when your deployment would consist of just copying your files over FTP, without backup of course, and then frantically trying to revert the change that cause your production application to break.

"FTP has served us well, but it's time to move on. You wouldn't use a 23 year old computer to do your work, so don't use a protocol from the same vintage. Demand modern transfer protocols from your host."

Well said. Me, I still use Transmit. Still one of the best pieces of Mac software out there.

A lot has been said about Apple's AppStore. There are mixed opinions, and I'm sort of in both camps, if that's possible. While I think it's probably the best part about the new iPhone (just like Bill de hÓra), building and distributing your application doesn't come without sacrifices.

I bought an iPod Touch just to use the AppStore, I'm pretty excited about it, and I don't really care about the iPhone itself. I might get me one once it's available without locking myself into a specific carrier (for a decent price, that is), but until then the iTouch will do. I just wanted to have the applications. Though there's lots of repetitive applications in the store, and a lot of the applications just don't have any use (for me anyway), there's still lots of good stuff. The first application I bought was OmniFocus, in my opinion even better than the desktop version.

But on the other hand, there's good reason to be concerned about Apple's model. No beta testing, no trial runs, no open source (hopefully, that'll change, the WordPress team sure doesn't seem to care), Apple's approval process and so on. I'd highly recommend reading through Steven Frank's (of Panic fame) opinion on the issue. As a long-time Mac developer he has some rather mixed feelings on the issue.

The AppStore is still young, and hopefully Apple will listen to its users. The first step will hopefully be removing the NDA clauses from the SDK license agreement. I want to see Macistrano on the iPhone and on GitHub.

Via Stefan Tilkov.

Tags: miscellany

Seriously. More screencasts should be like that.

Also available: #2, #3, #4, #5, #6.

Via Photojojo

Tags: miscellany

And if you listen really carefully, you can hear thousands of Web 2.0 companies screaming. Strangely enough, uploads are running almost smoothly.

Update: And we're back on ;)

Tags: miscellany
Tags: links, miscellany
  1. Integrating Ferret, a very nice search engine for Ruby, in a project with acts_as_ferret.
  2. Learning ten finger typing.
  3. Writing an article about one of my favorite clothing labels, New Zealand based Huffer, for the magazine of two friends.
  4. Been hiking though snowy mountains in Norway on my summer holiday.
  5. Reading "RESTful Web Services" by Leonard Richardson and Sam Ruby. A highly recommended book on REST which I'm starting to like.
  6. Doing my first real-life project with the features of Java 5. That might sound a little ridiculous, but the clients using Java I worked for over the last year all used Java 1.4, mainly for political reasons or restrictions of the application server environment (WebLogic 8.2 is a no-go with Java 5).
  7. Finding more and more joy in photography, and at the same time starting to really like Lightroom.
  8. Playing with AP4R, an asynchronous job processor for Ruby and Rails. It looks like a very nice and more reliable way to do background tasks than BackgrounDRb. The latter now has a new maintainer by the way. Maybe that will bring the mostly stalled development back up to par.
  9. Working in my office. Something I really enjoy. Having a decent and quiet place to work in is important for a freelancer.
  10. Looking for a new mobile. In case you're wondering the iPhone doesn't appeal to me.

So I spent some time off in Bergen (in Norway), and had a wonderful time. We went hiking in the mountains, in a lot of snow, of course, and had a good time there, and made new friends.

Getting back to business includes NetNewsWire, of course. One and a half weeks worth of news, let's see, that could look something like this:

NetNewsWire

A load of news like this always reminds me to clean up and reduce the number of news sources I have in there.

Tags: miscellany

So this is what it looks like:

I had a good laugh.

Tags: miscellany

So this is it. My new blog. It doesn't look like much, but I'm working on it. Here's where I'll write about my adventures as a freelancer, things related to Rails and things that bother me, things I like and my view on life as a freelancer and Mac OS X nerd.

So what is Paperplanes? Paperplanes is the name of my business as a freelancer.

Who are you? I'm an almost 30-year-old freelance software developer, living in Berlin/Germany. I've been freelancing for almost a year now, and so far I can't complain.

What do I do? I used to do a lot of Java-based work. You can read the results of that over at my Java-related blog Javaddicts.

So why a new blog? As a freelancer, I've been doing much more than program Java. Lately I find myself writing more and more apps with Rails which I really enjoy.

What's gonna happen next? The design for the page has been in my drawer for almost a year now, and it's time to finish it. So that's what I'll do.

Tags: miscellany

Well, not quite. It's been quite around here lately. I've been swamped with work over the last two months which is, of course, not a bad thing. The good thing is that I've seen several projects going live over the last few weeks.

I had the pleasure to improve the job board for FreelanceSwitch.com to support a subscription based model. Since Paypal supports recurring payments it was the way to go. I can now safely say that developing Paypal applicaations is a PITA. Instant Payment Notifications are a weird concept, and it took me a while to get my head around it. For testing you just can't get around using mocking to effectively test IPN handling. More on that in a later post.

The other project is palabea, and e-learning community, which recently went into public beta. Well worth checking out.

And, just for fun, I'd like to point to the website of our local cupcake dealer. I do love them so.