FAQ of the Day

From Dar.fm’s FAQ:

Q: Wait – is it $39.95/year or $40/year?
A: Officially it’s $39.95 because some MBA student showed us a spreadsheet explaining how there are people out there who if they see “$40” will say, “No way – that’s much too expensive!” But if they see $39.95 they’ll round down to $30 and think “Man, that’s barely more than a Starbucks coffee, what a great deal!” and then type their credit card into the system. We think he’s crazy but his Dad put some money into the company so we’re humoring him.

Actually looks like a cool service, and something I’ve pondered writing myself for years. Might need to sign up.

Emacs Tip: Make CSS mode sane

The default CSS mode in emacs does very funny things with indentation if you like leaving the brace on the same line as the definition. As with everything in emacs, this is fixable with a few lines of config. In this case:

 ;;; Fixes totally weird default css formatting.
 (require 'css-mode)
 (setq cssm-indent-level 4)
 (setq cssm-newline-before-closing-bracket t)
 (setq cssm-indent-function #'cssm-c-style-indenter)
 (setq cssm-mirror-mode t)

I can’t remember where I found this on the internet, but here it is, repeated again, so more folks can find it.

Ubuntu upgrade: solving the unresolvable package issue

I’m doing my 3rd and 4th upgrade of machines to Ubuntu 11.10 today. The early results on my laptop have been very good (Unity seems way less crashy now), so I’m upgrading a number of other systems I’ve got.

When first trying to upgrade my home server, which has gone through a series of upgrades, I got an error like this about not being able to resolve some packages for upgrade:

E:Error, pkgProblemResolver::Resolve


It turns out that one of my past upgrades probably wasn’t done cleanly, so there were some really old packages on this system. The upgrade logs will be stored in /var/log/dist-upgrade/main.log. In that file, you’ll find an analysis of your packages that will include references to “Foreign” and “Obsolete” packages that were found.

Take the list of everything in Obsolete and run “aptitude remove” on them. As soon as it is done you can kick off the upgrade again, and all will be good.


They said it couldn’t be done, and he did it

From a great post about Dennis Ritchie, that puts the magnitude of his contribution in perspective:

… A high-level, portable, efficient systems programming language.

How silly. Everyone knew it couldn’t be done.

C is a poster child for why it’s essential to keep those people who know a thing can’t be done from bothering the people who are doing it. (And keep them out of the way while the same inventors, being anything but lazy and always in search of new problems to conquer, go on to use the world’s first portable and efficient programming language to build the world’s first portable operating system, not knowing that was impossible too.)


RIP Dennis Ritchie

The man that invented the C programming language and co-invented UNIX, has passed. When you think about impacts of individuals on the world, it’s hard to find people that had quite the same impact.

C issued in the era of portable computer programs, ones that could compile on multiple types of servers, which was really a new concept at the time. UNIX issued in the era of network connected servers, using commodity protocols. Without UNIX the ARPANET project, which became the internet, would not have succeeded.

Node Announce

At the September Mid Hudson Drupal Meetup I talked a little about a drupal module idea I’d been kicking around. Most of my drupal websites are about groups that have meetings. So I’ve got content types with cck date fields. Experience has shown that people need reminders, like via email, otherwise they forget to show up. Drupal has a lot of modules that will send notifications to users of the website, but that doesn’t work in my situations, because what I really want is the email going to a mailing list. Seemed like a good idea to me. And when I brought it up with the group, two people immediately said “oh, that would be great.”

That, it turns out, was enough motivation for me to get off my butt and implement it. node_announce 1.0 was released today. I’ve had it live on my sites for about 2 weeks, though the UI was in flux enough that I held off for a full release until now.

You want this module if you’ve got an announcements mailing list, and you are using the Calendar module on a drupal site to display events. I’ve got a list of ways I could make the module better, but for now it does the basics quite nicely. If you want to give feedback, do so via the issue queue, and I’ll do my best to respond.

Steve Yegge and the Google Platform issue

Steve Yegge is one of the most insightful people on the internet. I was really bummed when he stopped blogging, because his posts were always well thought out, funny, and really got to the heart of some key issues in software development.

Last night he posted publicly, by accident, Google’s current biggest issue, a complete lack of a platform. He’s really dead on.

I hope Google internalizes that post and does something about it.


Etherpad was a great idea, online simultaneous editing. After the team was acquired into Google Wave they dumped what they had in open source, and moved on. A few brave souls tried to improve it, but it was a beast, and seems to have died on the vine.

Fortunately a few new brave souls have decided to try to build a conceptual fork from the ashes of etherpad. The new version is written in node.js (all the hipness now), and called etherpad-lite. The install isn’t too bad, and I’ve gotten a couple instances up and running so far.

Etherpad has become a critical tool to me for coordinating distributed teams. We use etherpads as part of remote planning sessions. While it’s not quite the same as a whiteboard, it’s closer than you’d imagine, and the fact that everyone has a cursor makes it easy for anyone to speak up and make changes. The most important part of a plan is that everyone that’s part of it buys into it, and participation is one of the best ways to ensure that happens.