Tomorrow: The First Annual D Language Conference

This week Amazon is hosting the first annual D Programming Language Conference here in Seattle. Looks like the conference will have just over 50 people attending. There’s a single track of speakers, so I hope to attend most/all the sessions, and blog some notes and thoughts here.

There is so much rich thinking going on with dynamic languages like Ruby, etc. This can be a much more expressive, productive way to program, compared to the more verbose and brittle static-typed language world. And with the web at the forefront, they have attracted a great community that is pushing the envelope in many areas.

But with Ruby, I often I feel like I’m building a house on shifting sands. And there is much that C/C++ can do to improve. Where Ruby is flexible and concise, but loose and slow — C/C++ is fast and strong but verbose and brittle. [That seeming contradiction of being both strong and brittle is a truth, but one that's sometimes not immediately obvious]

D is a tight, elegant evolution of C/C++ that retains the strength, but attacks the verbosity and brittleness from several angles, especially with its metaprogramming features. It is C++ completely rethought, simplified, and done right.

As a device driver developer, the language has features that I often wished I had (like static ifs, better templatized functions, and compile-time code execution). And they are syntactically elegant, unlike C++.

The first talk of the morning starts it off right, given by Walter Bright, D’s designer and mind behind the Zortech C++ compiler and others; and Andre Alexandrescu, the C++ guru and author of the brilliant, dense Modern C++ Design: Generic Programming and Design Patterns Applied, among many other things. D already has the signs of attracting its own great community. These are two minds to follow, and I’m looking forward to this talk and others.

Paul Dowman’s Rails image for EC2

Paul Dowman has created what looks to be a very promising Ubuntu+Rails image for Amazon’s EC2 platform. He has support for capistrano deployment, mongrel_cluster, mysql backup to Amazon’s S3 service, and a few other nifty features. When multiple server support is completed (said to be soon), this will be a great package. Definitely worth following.

An Amazon Machine Image is basically a filesystem image that then gets loaded in Amazon’s farm of Xen servers. Does anyone know of existing scripts that can create a Xen image from an AMI? It’d be nice have the ability to test and stage locally with the same image used for any of your EC2 hosted test, staging, or production instances.

The mainstream API of the future

Google’s Gears announcements today highlight the huge amount of activity happening right now with cross-platform web/desktop hybrid application platforms.

These API platforms are universally rough and will change a lot, but they’re functional today. The time for a major wave of new desktop applications is near — replacing the Windows 9x/NT generation that’s still widely in use. That will create a ton of opportunities for small and large software companies alike.

The 9x/NT Windows API is no longer appealing. And Microsoft is unable, for a number of reasons, to take their own mantle with the next generation (.NET/Vista).

So there’s a vacuum that’s beginning to be filled by a ton of interesting new desktop application platforms, which have their roots in the web: Adobe Apollo, Google Gears (with some collaboration with Adobe), and potentially tools similar to Joyent Slingshot or LINA or just straight apps-on-VMs. And Microsoft is trying to stay in the game with things like Silverlight 1.1, which is available across two OSs and several browsers, which would have been unthinkable just a few years ago.

Unfortunately, for a platform today to be ubiquitous, it’s got to run in so many different environments, that it’s hard for it to be anything but open source. Which is why Google is going that route for key portions of Gears, and why the announcements today are so important for independent software developers in placing their platform bets.

The game-changer would be if Bill (or Ray) could put out an “Embrace Open Source as a Tool” memo, which could turn the company on a dime like the “Internet Tidal Wave” memo did 12 years ago this week.

But, unfortunately, I don’t see that happening.

So while it’s not a question about whether we’ll have a shift in platforms — and clearly open source is going to play a key deciding role this time — we’ll have a while to wait until we see decisively which platform(s) have won.

Widgets vs. Gadgets

I’ve been waffling, often referring to Feedsparks or Days Since as “widgets”, even though they’ve been written first to the Google Gadgets platform. I wanted to use the general term, since the intent is to have these ported to as many platforms as possible in time.

But what should the general term be? Well, the world is a bit split:

Google Gadgets
Microsoft Gadgets
Yahoo Widgets
Netvibes Widgets
Pageflakes Flakes

What a mess. And overall usage of the terms across all meanings is similar.

Possibly because I’ve done a lot of stuff in the hardware/driver space, I tend to think of gadgets more as personal electronic devices — more like the Wikipedia definition of Gadget. So I thought “widget” (which has a history of implying “Window Gadget” in X Windows and elsewhere) was a better term. And I’m certainly not going to stoop to writing “widget/gadget” everywhere.

So should we all stick with trying to make the generic term for these things “widget”? Or is “gadget” the better term?

Next time, we present an erudite discussion of “soda” vs. “pop” …

The mysteries of software development, revealed!

OK, not really. But the problems of large-scale software development are still an obsession for me, despite it being a few years since anyone last tried to shame me into committing to deliver a fixed scope by a fixed date that I had no confidence in.

There’s now an outlet for these thoughts, while not distracting the gentle readers among you who don’t have to suffer the frustrations of working in teams. And this blog will continue its focus on the technical and business aspects of building small web tools.

If you’re at all interested, please head over to our new blog with some wisdom on Lean Software Engineering and join us as a subscriber.

Maxing out your MacBook Upgrade

Running out of space on your MacBook? Things getting slow because you’re low on memory?

Maxing out the disk and memory in your MacBook can be a relatively stress-free and simple process. The only extras you need are an external drive enclosure and software to create a bootable drive image.

Apple charges a premium for upgrades, so here you get both the benefit of less expensive suppliers and the ability to wait until you really need the extra space down the road — when components are cheaper.

What worked well for me (my MacBook is a 1st gen Core Duo) basically fits in 3 steps.

  1. Buy compatible upgrade gear — SATA drives and SODIMMs
  2. Put the new drive in the enclosure, connect it to your MacBook, and create a bootable image of your old drive using SuperDuper
  3. Open up your MacBook, swap the old/new drives and memory

Now the details on each of these …

1. Buy the upgrade gear

You can buy a complete set of compatible gear from a store like Other World Computing, or go shopping for individual pieces as I did.

SODIMM PicOn the memory front, I’ve always had luck with in terms of identifying the type and amount of memory that can be upgraded. I bought the 2GB kit (1GBx2), 200-pin SODIMM Upgrade for a Apple MacBook 1.83GHz Intel Core Duo (13-inch White) from them (currently $131.99. I paid $203.99 in Feb)

The MacBook is my first laptop with an internal SATA connector for the hard disk (SATA 150 compatible). That meant none of my existing ATA/IDE enclosures would cut it for the upgrade. When looking for one to buy, I would have liked to find one that supported Firewire 400 for the external connection, since Firewire gets closer to the actual disk throughput on the Mac (and also on the PC, if you have a few other USB devices attached) — but only USB 2.0 was available. If anyone has tried a Firewire 400 enclosure that works, comment and I’ll update this post.

SataI bought the nice little Mini 2.5 inch SATA to USB 2.0 Aluminum Enclosure ($24.98) from

For the drive, 200GB was the largest available. I bought a Toshiba 200GB 4200 RPM 8MB Cache Serial ATA150 drive ($179.99. I paid $223.99 in Feb)

2. Put the new drive in the enclosure, connect it to your MacBook, and create a bootable image of your old drive using SuperDuper

Follow the enclosure’s instructions. For more on the drive image part, SuperDuper’s defaults do exactly what you want. But if you want to see more, look at MacWorld’s disk cloning with SuperDuper article. Leave a few hours for this step, as the full drive image will be pounding that USB 2.0 connection and drive for a while. I initially did this with the free, unlicensed demo of SuperDuper and it was problem-free. But, especially with your old drive and new enclosure available as a backup destination — it’s worth buying a licensed copy to get the faster incremental backup functionality.

3. Open up your MacBook, swap the old/new drives and memory

Macworld made a great video to watch before you begin all this, giving you an idea of what’s ahead.

But the best video, one that includes key hints like the amount of force required to re-insert the memory DIMMs is from the good folks at OtherWorldComputing:

OWC MacBook Upgrade Video

Watch that one a few times, possibly keep it up on another PC while upgrading to ease any fears you have.

There you have it. How is the performance? Effect on machine temperature? Subjectively, both have been great. The memory upgrade and extra cache in the drive overwhelm any disadvantage from the slower 4200RPM rotation speed. And all that extra space means I finally can develop, listen to music, edit my videos, and still have room for a some VMs or a BootCamp partition on my little wonder laptop.


  • Apple doesn’t mind you upgrading memory, but may charge you extra for any future service to a machine that’s had a hard disk upgrade. My local Apple store gave me this warning, but then serviced the machine for free anyway.

Textdrive and hpricot

Web hosts have a difficult challenge with their shared servers. Unlike a dedicated box or a virtual private server, they can’t let users install just anything, because stability for everyone is at stake.

I needed the amazing hpricot gem for an app I’m testing on textdrive. It’s a native gem that requires a compile step to install, so normal users can’t do it themselves. I assumed I was stuck.

Within 24 hours of submitting a support ticket, they came through. Most other shared hosts would have no idea what to do with this. Thanks, Textdrive!

———- Forwarded message ———-
From: Help @ Joyent
Date: Mar 12, 2007 1:55 PM
Subject: Update on Your Request {68041}
To: …

Hi Bernie,

I just installed hpricot on Burnaby. Thanks for hosting with us!

Best regards,
Basil Crow