Category Archives: Development

ctags on OS X

A good tags file is essential when developing with emacs. My tags setup (see Adam’s dot files) didn’t work out of the box on my Mac. It turns out that the included ctags is ancient. The simple fix is to install a newer version of ctags with Darwin Ports.

sudo port install ctags

Rails Without a Database

Ruby on Rails is great for quickly building web applications but is heavily biased towards database-backed apps. Let’s say a handsome developer is creating a web service on rails that speaks to another web service and doesn’t need a database (yet). The app works great, but unit and functional tests fail, complaining about not being able to connect to a database. What is he to do?

Fortunately, there is a free excerpt from Rails Recipies that shows how to get tests working without a database.

Adam’s Dotfiles Uncaged

Adam Doppelt, a former coworker and emacs enthusiast, has shared his emacs dotfiles with the world.

This collection of lisp files has a rich set of features that I have found indespensable as a developer: source code highlighting, tags, source control integration, etc. I look forward to see what new tricks Adam has added.

Complexity Kills

The New York Times ran an interesting article on how complexity slows down development at Microsoft.

An excerpt:

In an internal memo last October, Ray Ozzie, chief technical officer, who joined Microsoft last year, wrote, “Complexity kills. It sucks the life out of developers, it makes products difficult to plan, build and test, it introduces security challenges and it causes end-user and administrator frustration.”

I have experienced the pains of complexity with a couple of projects I work on at Jobster. Our privacy logic (e.g. who can see my information, who can contact me) for one, is very complicated and changes very frequently. This introduces a lot of fragility; it does not take great effort to introduce a bug. I am probably the only developer in Jobster who fully understands our privacy logic, so I doubt our customers fully get it.

I have also done a lot of work with search within the referral app. We use Oracle Text for this, which is very powerful, but maintaining and modifying what we index is a real pain. (Details deserve their own blog entry.) For example, if I decide that we should add a new field to user accounts and make it searchable, I have to touch a lot of SQL and rebuild the indexes. This has proven to be less than simple and results in wasted development time.

My frustration with complexity makes my current Ruby On Rails project interesting. The whole point of Rails is simple, agile development. We’ll see how it lives up to this claim.

I have some work to do with chain sawing complexity in our product. But it can wait until I get back from my Australia trip. Things are simpler there, right?

Ruby on Rails and ANSI C

I received to books in the mail the other day: Agile Web Development with Rails and The C Programming Language (aka K&R).

I am starting a project at work using Ruby on Rails, whose goal is to facilitate rapid development of database-backed web applications. It automatically generates the guts of a webapp (provided certain naming conventions are followed), allowing the developer to focus on the application logic. Things like wiring together models, views and controllers and the the mapping between business objects and database tables are automatic. Rails even promises to optimize for programmer happiness, a bold claim.

Jobster is written on a Spring + Hibernate + Oracle platform which is really powerful, but complicated. We often use rails for prototypes and side projects where rapid development is highly valued.

But I miss system programming. Instead of piecing together handfuls of other technologies and dealing with abstractions, you interact directly with the OS with a simple programming language and a small set of libraries. You aren’t dependant on magic black boxes that do most of the work. It is all you for better or worse.

It will be fun contrasting my high-level rails work with whatever pet C projects I come up with.