Ruby on Rails
Ta-da List


January 30, 22:27 | Comments (28)

Making the 37signals connection official

The ceremony took place at the glamourous Holiday Inn. We had prepared the precious 33-paged contract from the finest 50 cent a paper FedEx/Kinko's could offer. Four signatures was all it took and the deal was done.

I'm now officially a partner at 37signals. Or member, as the legal term for LLCs define it. Boy, does that feel good. It's been long coming, too. I've worked with Jason and company for more than three years. We started talking about the possibilities of making the connection formal mid last year. And now it's finally a done deal.

I can't believe that its just been three years since I started writing my first commercial PHP for Jason. Back then, I was merely a huge fan of 37signals. I'm so very glad that Jason tried to learn PHP, which initiated our contact, and I'm equally glad that he dropped the idea again after we hooked up.

I've never worked with such intensely talented achievers as the 37signals crew. It's really a dream come true to be part of the it. I can't wait to take our soon-to-be suite of products even higher in their companionship.

Jason announced the deal on Signal vs Noise too.

January 28, 16:30 | Comments (23)

After Building of Basecamp in Seattle

Our fourth Building of Basecamp went really well yesterday. We didn't make as many radical changes to the presentation this time as we've done before, so the material was more intimate to us and we are able to deliver it in a more convincing and timely manner.

Especially the timeliness was helped along by Apple's great new Keynote 2, which has a presenter view that's different from what's being shown on the projector. This view has a clock, a timer, notes, and — most importantly — a preview of the upcoming slide.

We also had significantly more push-back from the audience on our views on functional specs and contract-driven development, which gave a more varied discussion. Speaking of discussion, Dave Thomas of the Pragmatic Programmers was in the crowd asking lots of questions. Thanks, Dave!

All in all, it was really fun doing it again. I look forward to our next one, which might be in New York in a couple of months. The plan is to do the workshop every two-three months.

Today the plan is to hang with Jamis Buck and Dave Thomas before they head back around noon, visit the Robots to talk about the 43 Things experience on Rails, and finally pay a visit to the Seattle.rb (the user group for Ruby in Seattle) at the Omnigroup's offices.

Oh, and of course pick up my Mac Mini and iPod Shuffle also at the Robots office. Can't wait to fondle the both of them!

January 26, 13:05 | Comments (22)

Building of Basecamp in Seattle

I'm leaving for the Building of Basecamp workshop in Seattle tomorrow. A grueling 10-hour flight. Uargh. At least its direct and with SAS. And the iPod is loaded up with podcasts and audio books. We'll make it through. See you on the other side.

January 22, 12:46 | Comments (48)

‘That application is so stupid’

Just as Patrick Lightbody recants his ill-guided charge, Geert Bevin — also involved with a Java web-framework, this time RIFE — picks up the torch and tries his best to scorch the earth anew:

About tadalist, that application is so stupid that I'm wondering how the hell it could have taken him 600 lines to write it. Also, the hugely hiped 'killer application' of RoR, Basecamp, is a total fraud imho. The screenshots look nice, and are nicely presented. So I did make an account and started using it. And honestly, everything they say is true, it sets itself apart in simplicity. Not difficult to write that in a few weeks.

It's incredible how much vile bile that lies within the Java community. I'm beginning to understand why many of the defectors I've talked to are so happy about the Ruby and Rails communities. Oh well, back to the stupid, fraud applications.

January 22, 1:22 | Comments (30)

'I think Ruby on Rails is way over hyped'

Patrick Lightbody is on the steering committee of the Java web-framework WebWork and not at all happy about all the attention Ruby on Rails is gaining. Apparently, it's all terribly undeserving as Rails surely "doesn't scale" to applications with "thousands of concurrent users and/or hundreds of thousands of gigabytes", right?

Of course, Patrick doesn't bother to back up his charge besides asserting that "anyone... knows that a CRUD framework just doesn't cut it". Interesting. Rails follows a similar approach to scaling as do Yahoo and LiveJournal. Share Nothing. Push concurrency into the database and the memcache. I hear that approach is working rather well on LJ's 100 machine park handling 5+ million dynamic requests per day.

But why bother addressing the specifics when you can just assert the somewhat cryptic "Mapping web UI directly to the DB never scales". What does this mean exactly? Does Patrick think that the only UI you can do in Rails is a scaffolded one? Oy, talk about forming ill-informed opinions.

If any of these vague, hand-waving assertions should have failed to convince you, then of course, we can always rely on our good friend complexity!

Form processing, payroll, etc probably work very well with RoR. But trying to implement Spoke using RoR would be impossible — the schema is just too complex.

I'm sure it's too complex, Patrick. Can't beat an expert at his own game. But since you're interested in learning more about marketing your open source wares, you might start by dropping the FUD tactics. They leave such nasty stains of ignorance and bitterness.

Brian McCallister offers a similar rejection of Patrick's fear mongering:

It is scary (FEAR FEAR) to see opinions formed, and backed with vitriol, by fear that something different than what they are doing works better. Something you don't know that approaches the same problems as something you do know does not make the first thing bad. It does not justify lashing out at it saying "it is just [foo] and sucks so bad compared to [bar] and can never [scale|perform|manage|eat] enough to be used for [serious|difficult|real] things." Possibly this is true, but reacting that way out of fear certainly does not make it so.

Now back to our mega-scala-enterprisy-serious-real-complex-important work. Nothing to see here, move along.

Please follow up with comments on the Rails blog version of this post

January 21, 11:32 | Comments (8)

Rails tutorial on O'Reilly's ONLamp

Curt Hibbs has written a great tutorial called Rolling with Ruby on Rails. It takes the reader through setting up Ruby on Rails, scaffolding an application into immediate use, and tailoring the results. It's focus is especially on setting everything up and using it with a Windows machine. It has been published by O'Reilly with their site. A small note from the introduction:

What would you think if I told you that you could develop a web application at least ten times faster with Rails than you could with a typical Java framework? You can—without making any sacrifices in the quality of your application! How is this possible?

I'm always hesitant to provide any exact measures of productivity increases, but the 10x number has been echoed by more than a few of the Java programmers I've known coming over. Of course, most projects involve lots more than just programming, so this would hardly mean a project completed 10x — or whatever multiplier you fancy — but the difference is indeed startling.

In any case, awesome work, Curt! Let this serve as an encouragement for other Railers to spread the good work by getting their knowledge published by outfits like O'Reilly.

January 20, 17:53 | Comments (9)

Thousands of accounts, #1 on, bloggers delight

We knew it we had a neat application going with Ta-da, but the last 24 hours since launch have really showed just how neat people think it is. We already have thousands of people signed up with tens of thousands of items recorded in their lists.

And the server isn't even breaking a sweat (load averages: 0.07, 0.03, 0.02). The caching additions to Rails have really made a huge difference and its fun to watch the logs race past your eyes with entries like "Completed in 0.003394 (294 reqs/sec)".

A huge part of this early success is due to the fantastic uptake by a bunch of bloggers. We're tracking it on a public list called Ta-da mentions and I believe that the count is already 42. The blogosphere can sure launch a project like nothing else. Thanks, all of you.

In addition to the bloggers, we're now #1 on / popular with just under 300 tracks at the time of writing.

January 19, 23:46 | Comments (16)

Make your Ta-da list today

Todo lists have long been one of the favorite features in Basecamp, so we thought it would be a nice experiment to share that particular feature with the world at large. Free of charge. And Ta-da List was born!

A few user-oriented highlights of Ta-da:

  • Extensive use of XMLHttpRequest: Adding new items and checking them on and off are done with remote calls that change their state in the database while simultaneously updating the view using Javascript. This makes it really, really fast to add new items to a list — and you're not restricted by the 10 predefined fields that most apps like this does.
  • Loose sharing with unique URLs: Sharing a list with a single or group of buddies is easier than ever as there is no password to remember. Instead, everyone just gets a unique URL that they can bookmark right away. At 32 characters and as a MD5 hash, it's plenty of security for this type of application and much easier to use.
  • Collecting all the shares: By allowing you to share any list with any email address, we already got the viral thing going. The barrier of signing up has been postponed until you're hooked, and once you are, you automatically collect all the shares as you signup. This means that they're all available from your dashboard and you can reduce the bookmarked lists down to one URL.

And for the technically inclined:

  • Three levels of caching: I implemented page, action, and fragment caching for the Action Pack in Rails so I could be able to use it in Ta-da. And it's working exceedingly well. Lots of pages went from 50-70 req/sec to 400-1100 req/sec due to caching.
  • 579 lines of code: That's including models, controllers, and helpers. It's really lean and really readable too. It was great to see just how small you can make an application with a recent version of Rails (especially the 0.9.x series) on a fresh code base. In Basecamp, I'm often working on code that predates the release of Rails, so it's a nice change of scenery.
  • Finally FastCGI: Basecamp is still running mod_ruby for various reasons, but Ta-da is fresh out the gate on FastCGI. And what a difference it makes in memory consumption! We're currently running five FCGI processes (which is more than plenty) that come in at about 15MB a piece. On top of that, we got 50 Apache processes at just around 3.5MB a piece. That's just 250MB for the entire setup. Much unlike the situation on Basecamp where we have 40-60 Apache processes of 40MB a piece.

In addition, it seems we're off to a flying start as we blew through 1,000 people signed up in just a matter of hours! And it's getting blogged all over the place. Justin French has a really nice post about how he switched his workflow over. And Tobias Luetke already whipped up a script to integrate Ta-da into your site using Ruby.

January 19, 11:56 | Comments (16)

Mac Mini shipping, iPod Shuffle still waiting

My Mac Mini has been shipped off to the robots awaiting my arrival in Seattle next week, but the iPod Shuffle still hasn't. They expect it to ship on the 24th, though, so there should be enough time for it to make it before I go back on the 30th. Pretty crazy demand for those things, by the way. I hear that there's a 4-week backorder in a lot of places now.

January 18, 15:34 | Comments (20)

Licensed to drive an automobile

"When he's commenting his own minor errors, you know that you're dealing with a perfectionist. And then there's nothing to worry about", the officer conducting the exam conferred with my instructor after we were done. So yeah, it went pretty alright, and I'm licensed to drive a car now.

January 18, 11:25 | Comments (1)

Handling a price hike

Considering we just underwent a similar situation with Basecamp — when we raised prices to coincide with the release of a bunch of new features and adjusting for the year gone by — it's funny to read how others tackle it:

Irina: OK. Can we talk about the eBay members who are frustrated with the fees? The ones that were increased, not the ones that were decreased.

Durzy: I think most ebay users are evaluating the price changes to see how they will impact their businesses.

Irina: Um, OK. Um. [debating if I should follow up on that "answer"] How did eBay decide on the increase.

Durzy: We carefully valuate our pricing structure from time to time. We believe these price changes are the right thing to do for the vibrancy of the market place.

It's no wonder that spokespeople like Hani Durzy has such a bad reputation. When you can't even acknowledge that you're raising prices in a civil manner, there's obviously a disconnect with reality and reporters and customers smell that in a second. And it's not at all about the actual price raise. It's about not having the balls to stand up for it.

eBay would do well by replacing the archetypical PR drone with something resembling a human being.

January 15, 13:24 | Comments (11)

Stolen Moments presents Adapt

Between six months of labor, years of prior training, and an uncanny sense of quality, something very special has emerged. Stolen Moments, the "production label" for my kid brother, has released Adapt.

It's twenty-three minutes of the best skating from the Scandinavian scene, shot almost entirely on a single camera by a single operator, and cut with a level of precision unlike anything coming out on inline skating in Denmark.

But that's not all. While most others choose to charge good money for variable quality, Jonas have decided to give away his labor of love for free. In full DVD quality. With a disclaimer that proclaims: " are by law required to shamelessly rip and burn as many copies as you see fit. Any offenders will be prosecuted."

I'm utterly impressed with the level of craftsmanship involved in the production, the adherence to quality ideals, and the instinctive response to share with the world. Naturally, it's because I see these ideals reflected in my own work on especially Ruby on Rails.

Congratulations Jonas, the work is unrivaled on the local scene and set to make a big splash on the global one.

P.S.: Many thanks to the ever amazing TextDrive for playing host to these movies. Are you still not hosted there? Then stop procrastinating and signup today.

January 13, 14:50 | Comments (14)

Bare Bones starts giving the leftovers away

It shall remain no secret that I am not a BBEdit fan. It shall remain less of a secret that I was involved with bringing TextMate to market. So an unbiased reporter on this subject, I most certainly am not. But that won't stop me from wondering about the disconnect in logic exhibited by Bare Bones with the unloading of a free TextWrangler on the market.

In their FAQ, they state the reason for giving away TextWrangler 2:

We see the need for a strong, feature-rich text editor at a low price. In the past two years since TextWrangler's initial release, we have observed the crowding of the landscape with products which don't meet our standards for quality and thoughtfulness.

By making TextWrangler 2.0 available at no charge, we're answering the call of Mac users who need a powerful, professionally executed product, and raising the bar for Mac text editors.

If the market is getting crowded by editors that doesn't meet their "standards for quality and thoughtfulness", why should it be a problem to maintain TextWrangler at $49? If the bar is really raised by the "mind-boggling quantity of additions", then TextWrangler should be selling like hot-cakes at $49.

But maybe, just maybe, the problem isn't that the market is crowded with sub-par products. Maybe the Mac is just finally getting some competition around text editors and a watered-down version of an editor that used to hold a monopoly wasn't looking too sharp in the same price range as Subethaedit (for commercial use) and TextMate.

Even if you're the greatest Bare Boned fan in the world, you should be seeing the rise of Subethaedit, TextMate, and other new editors on the Mac as the best thing that ever happened to your text editing needs. Lack of competition makes for old sleepy giants. It appears that one of them is just waking up now. Rise and shine!

January 13, 3:02 | Comments (12)

Forty favorite flickrs

Go check 'em out

January 13, 0:59 | Comments (11)

I ordered a Mac Mini

I needed a good excuse (or any excuse, really) to get a Mac Mini and in the long lasting desire of a PVR to record TV onto a harddrive, I found it. I'm going to "build" (plugin firewire cables and chuckle at the missing step three) my own PVR using the Mac Mini and the EyeTV 200.

I'm ever so envious whenever I drop by Jason's place and play with his Tivo, so since Tivo won't come to us Danes, we'll build something even better ourselves. That's right!

I already have the external firewire drive to beef up the storage and since I'm getting it with the airport extreme card it'll fit right into the stereo rack under the TV. Oh, got the bluetooth builtin as well, so it can be controlled with Salling Clicker from that wonderful phone of mine.

Can't wait to stop complaining about how we got 40 channels with nothing on.

January 12, 14:22 | Comments (25)

The desk after the 23'' arrived

October 2003...

March 2003...

January 12, 2:28 | Comments (13)

Seven years ago with Konsollen

Browsing through iPhoto today, I spotted a scanning of an old newspaper clip. The story is about Konsollen and its 18 year-old editor. Me. Seven years ago. It was my first venture into internet publishing and the start of a career as a gaming journalist.

It was such a great project. I ran a crew of nine writers spread out throughout all over the country and delivered a free online magazine that I'm very proud of to this day. Can't believe that its seven years ago. I can't even believe that I said "I can't believe..." about a moment in time. Oh well.

January 07, 13:47 | Comments (1)

Basecamp gets SFTP & timezones with Jamis

We just launched a major upgrade to Basecamp to coincide with the plan revisions for 2005. It includes a big push for security with SSL being available to both Premium and Plus plans and SFTP being available to all paying plans. It also makes it easier to use Basecamp if you're not in Central Time as its now possible to specify time zones on a per-company basis. Oh, and we finally added "Remember me for 2 weeks" back.

So launching a big upgrade is good, but getting the feedback from happy customers is even better. The thread on the launch is already filled with congratulations, like:

Thank you for kicking tremendous amounts of ass... My God, I love you guys. I think I'm going to cry... I seriously treasure the day I discovered Basecamp!!! So many amazing updates! Basecamp Forever!

The outburst of joy is even more welcome after we've been battling with a couple of extremely rude and totally unreasonable customers the last couple of days. One guy wanted to "DESTROY YOUR COMPANY" if we didn't refund his six months of usage. Yikes! So a huge thanks to the vast majority of our customers that are liking what we offer and are not afraid to say so.

This release is significant in another way too. It includes, for the first time, the work of another programmer in the core Basecamp code base. We've brought on Ruby master Jamis Buck as a moonlighting consultant and both the SFTP and timezone support are to his credit.

I've been impressed with Jamis work on sqlite-ruby, Needle, and Net::SSH for a long time, so when we had the opportunity to engage a working relationship with him, it was obvious that this would be a great fit. And it has been. I can't believe that a Ruby programmer of Jamis' caliber isn't doing it full-time, so we'll see what are in the cards to change that.

UPDATE: Jamis shares a few more details.

January 05, 21:21 | Comments (21)

23'' with 1920x1200 pixels of pure pleasure

I had been contemplating the move for a while. Debating back and worth whether it was worth moving away from always the same every where. But when Apple lowered their prices by about 1/4 yesterday, I did it. I bought the 23" Apple LCD.

And oh my. Oh my, indeed. It's freaking huge. And gorgeous. But mostly huge. I can fit a browser, TextMate, a terminal tailing the log, and CocoaMySQL on a single desktop! That's just productivity screaming out right there.

Of course, it does have one somewhat annoying dead pixel. A green one showing up on black, but I now keep the editor to the right and the browser to the left, so it's not noticeable in normal use.

Funny thing was that Rails friend Tobias Luetke ordered just today as well. Heh. They got a killer deal going on there. In Denmark, it's now an instant depreciation for companies (if you throw on a student discount).

Did I say it was huge?

January 03, 18:57 | Comments (16)

Test-driven vs test-first development

I've been a test-driven developer for quite a while, but I haven't really gotten into the religious test-first branch yet. Usually, I'm too impatient. I have a good idea and want to execute on it right away. Then, when I see it in code, I'll come back to do the tests.

I have done short spurts of test-first — some tasks just seem to invite it — but not as a regular approach over a longer and sustained period of time. I want to give that a try. For a month. Where I can't right any code until I've seen a test fail.

It's one of my 43 things.