Saturday, December 31, 2005
Starbucks Doesn't Use Two-Phase Commit?
This article analyzing Starbucks order processing is pretty geeky. Unlike the author's experience, in my experience at Starbucks they don't usually record your name and call it out when your order is done. As a result, people sometimes pick up the wrong order or an order out of turn.
Since moving to Seattle, we tend to go to Tully's instead of Starbucks. We like their coffee better. And when they're busy they record your name and call it out when your order's ready.
Since moving to Seattle, we tend to go to Tully's instead of Starbucks. We like their coffee better. And when they're busy they record your name and call it out when your order's ready.
Donuts, Coffee Cups and Asteroids
A mathematician's joke:See, they're topologically identical because they both have exactly one hole (i.e. by stretching one shape can be turned into the other). Ha ha.
Okay, not particularly funny but it also may not be the best way to explain what topology is. How about using the Asteroids video game instead? Here's an attempt to explain topological classification using Asteroids. Does this work better?
A topologist is a person who cannot tell a donut from a coffee cup with a handle.
Okay, not particularly funny but it also may not be the best way to explain what topology is. How about using the Asteroids video game instead? Here's an attempt to explain topological classification using Asteroids. Does this work better?
Friday, December 30, 2005
Spell with Flickr
This is a cool hack. Spell words with Flickr images. For example: my name:










I'm sure someone else will figure out a more interesting way to use this.










I'm sure someone else will figure out a more interesting way to use this.
Do you get less wet if you run in the rain?
Analysis of the eternal question: Do you get less wet if you run in the rain? The analysis makes the type of simplifying assumptions that I remember from undergraduate Mechanical Engineering classes: treat the person as a rectangular block, treat rain as a continuous wetness factor, etc. Which reminds me of Sami's link to the Spherical Chicken joke. It's a joke but this sort of back-of-the-envelope analysis is very common, at least to see whether a more complex analytical answer in in the right ballpark.
Scheme in Eclipse
SchemeScript is a Scheme editor plug-in for Eclipse. SchemeScript embeds a Scheme interpreter and can also connect to external Scheme interpreters such as SISCweb-based web applications. Both Kawa and SISC interpreters are supported.
If you're already familiar with Eclipse and Java, this is an easy way to get exposed to Scheme. It's pretty easy to install and configure. Take a look at the SchemeScript User Guide included with the plug-in for information on how to configure the interpreter.
The interpreted nature of Scheme makes it easy to try out code in the console. Eclipse provides a scrapbook facility for Java that's similar but the Scheme interpreter is more interactive. One funny behavior to note: using the Kawa interpreter I was curious what would happen if I typed (exit). Oops, Eclipse disappears! Well it is an embedded interpreter.
If you're already familiar with Eclipse and Java, this is an easy way to get exposed to Scheme. It's pretty easy to install and configure. Take a look at the SchemeScript User Guide included with the plug-in for information on how to configure the interpreter.
The interpreted nature of Scheme makes it easy to try out code in the console. Eclipse provides a scrapbook facility for Java that's similar but the Scheme interpreter is more interactive. One funny behavior to note: using the Kawa interpreter I was curious what would happen if I typed (exit). Oops, Eclipse disappears! Well it is an embedded interpreter.
Thursday, December 29, 2005
The Trouble with Tom
I heard a radio interview with Paul Collins the other day. Collins is the author of The Trouble with Tom : The Strange Afterlife and Times of Thomas Paine. The book traces the weird story of Thomas Paine's remains after his death in 1809. Paine was buried on his New York farm. Ten years later his bones were exhumed by a follower who took them to England where they were passed around for decades while various people harvested this or that relic for their private collections.
Paine was the author of Common Sense which convinced colonists to seek political independence and proposed the name United States of America for the new nation.
Such an important figure in American history and his bones are just rattling around the world? Well, he made lots of enemies later in life (and was nearly put to death during the French Revolution). By the time he passed away in 1809 he had been derided by the public and abandoned by his friends for his views. According to Collins' book, Paine's place of death on Grove Street in Greenwich Village is now a gay bar called Maria's Crisis. Inside the bar there's a plaque commemorating Paine.
Note: the title of the book is a riff on the title of Hitchcock's film The Trouble with Harry. The trouble with Harry in the film is that he's dead and almost everyone in town thinks that they had something to do with his death.
Paine was the author of Common Sense which convinced colonists to seek political independence and proposed the name United States of America for the new nation.
Such an important figure in American history and his bones are just rattling around the world? Well, he made lots of enemies later in life (and was nearly put to death during the French Revolution). By the time he passed away in 1809 he had been derided by the public and abandoned by his friends for his views. According to Collins' book, Paine's place of death on Grove Street in Greenwich Village is now a gay bar called Maria's Crisis. Inside the bar there's a plaque commemorating Paine.
Note: the title of the book is a riff on the title of Hitchcock's film The Trouble with Harry. The trouble with Harry in the film is that he's dead and almost everyone in town thinks that they had something to do with his death.
Management Means Never Having to Say You're Sorry
Phil Chu's article Management Means Never Having to Say You're Sorry has some good advice on managing software projects. Phil's anecdote in the section Pick One reminds me of an experience I had a few years ago:Phil's other articles are good reading as well: Seven Habits of Highly Effective Programmers, The Art of the Schedule, Minimizing Meetings. I really like how he brings examples from his own experience to reinforce his message. (Via Jeff Atwood)
At one company where I was maintaining a Unix application while porting it to Windows, the president of the company told me the number one priority was to get the PC product out. When I asked him what about the Unix product, he thought a bit and said, "that's the highest priority, too". Thanks a lot, that's really useful.
No more time to make the donuts
Michael Vale, the actor who protrayed Fred the Baker with the tagline "Time to make the donuts" in a Dunkin Donuts ad campaign has died.
The "Fred the Baker" ads ran for fifteen years. If you don't remember them, here's a typical storyboard. Dunkin Donuts doesn't run these sort of ads any longer because they no longer "make the donuts" at their stores.
The "Fred the Baker" ads ran for fifteen years. If you don't remember them, here's a typical storyboard. Dunkin Donuts doesn't run these sort of ads any longer because they no longer "make the donuts" at their stores.
Write Your Name in Elvish in Ten Minutes
If you can spare ten minutes, Ned Gulley promises that he can teach you his technique for writing your name in Elvish. Fortunately for me, I didn't need to spend any time since Ned used my name as an example:
Apparently there are people who take Elvish pretty seriously and are trying to get it included into Unicode.

Apparently there are people who take Elvish pretty seriously and are trying to get it included into Unicode.
AMD64 CPU Easter Egg
The CPUID instruction on x86/x64 processors lets operating systems and applications determine the capabilities of the hardware platform and choose appropriate runtime libraries to use specific processor features. The two documented modes for the instruction return the processor vendor string (e.g. "GenuineIntel") or a set of "feature flags".
The AMD64 processor has a third undocumented mode -- a CPU Easter Egg described here. In this mode, the processor returns the string "IT'S HAMMER TIME" (the code-name for the AMD64 chips was Hammer). I wonder how the processor designers snuck that by review?
The AMD64 processor has a third undocumented mode -- a CPU Easter Egg described here. In this mode, the processor returns the string "IT'S HAMMER TIME" (the code-name for the AMD64 chips was Hammer). I wonder how the processor designers snuck that by review?
Sausage In The Making
I'd never seen Mike Gotta's blog before reading his essay IBM Workplace: Sausage In The Making. I think his analysis is accurate and I like the "sausage making" analogy. All vendors change messages over time as products and markets evolve. And they really hate when analysts call them on it.
Wednesday, December 28, 2005
Home in Redmond
It's taken longer than we expected but we're finally settled. We bought a home in Redmond, WA. We were living temporarily in Bothell while waiting for our house in Arlington to close and finding the right house out here. In retrospect it was good to spend time getting familiar with the area before deciding where to live.
Reading the Wikipedia entry on Redmond, WA I learned that the city was named after Luke McRedmond but was originally called Salmonberg. Weird but there are worse names -- we received a Christmas package a couple weeks ago addressed to our apartment in Brothell, WA.

Reading the Wikipedia entry on Redmond, WA I learned that the city was named after Luke McRedmond but was originally called Salmonberg. Weird but there are worse names -- we received a Christmas package a couple weeks ago addressed to our apartment in Brothell, WA.
WTF: Listing a List
The Notes formula language is the awkward child of the Lotus 1-2-3 formula language. It will never win any beauty contests. So it's a little surprising that it took so long for a Notes formula example to appear on The Daily WTF. Predictably many of the comments bash the language itself. For example:If you scroll down about halfway through the comments you'll see that all of this Notes formula syntax bashing made Damien cry.
Now, I've seen lots of ugly languages (and code) but this has transcended fugly into demanding new, hithereto unknown realms of invectives to describe it.
Convert SMS messages on Treo 650 to CSV
I've been looking for a while for a program to read the SMS messages database on my Treo 650 so that I can archive messages in a more useful format. sms2csv does the job. It converts SMS to a CSV file and comes with source code. See this thread for a discussion of the app.
Tuesday, December 27, 2005
Saying No
Great post by Rands on the value of honesty in decision-making. He has a terrific comment on questioning authority:Developers have responsibilities as well. Rands provides this example:Managers have managers as well and also have to learn to Say No.
I've worked on projects where people were afraid to Say No. The results were often disastrous — faulty technical decisions, insane schedules, horrible morale. etc. Of course, just Saying No may not be enough. Someone above has to listen. Otherwise, those who question decisions or recommend alternatives are ignored — or worse, singled out as "trouble makers" or not being "team players".
Managers lose it when they are no longer questioned in their decisions. When the team stops questioning authority, the manager slowly starts to believe that their decisions are always good and while it feels great to be right all the time, it's statistically impossible. The most experienced managers in the world make horribly bad decisions all the time, the good ones have learned how to recover from their decisions with dignity, but, more importantly, help from the team.
Your boss has just picked the one scenario that involves the most work and has the least chance of succeeding. You're screwed and while you might think your boss has lost it, you are a co-conspirator in this disaster because you didn't do one simple thing, you didn't Say No.
I've worked on projects where people were afraid to Say No. The results were often disastrous — faulty technical decisions, insane schedules, horrible morale. etc. Of course, just Saying No may not be enough. Someone above has to listen. Otherwise, those who question decisions or recommend alternatives are ignored — or worse, singled out as "trouble makers" or not being "team players".
Friday, December 23, 2005
Happy Holidays
Sorry for the lack of recent posts. We just moved into a new house so I haven't had much free time as we unpack. I've got a blogging backlog to catch up on as soon as we're settled. Happy Holidays!
Thursday, December 15, 2005
What if...
Avi Bryant has been a Smalltalk developer for many years. During that time he's watched as Smalltalk was eclipsed by other languages that use some aspect of Smalltalk and its implementation approach. Here's what he said about Java and Ruby:And Avi wonders how both efforts might be merged into one:Now that would be interesting. But is there sufficient interest to move Ruby in that direction? Most of the recent attention has been for web applications using the Ruby on Rails framework.
Is Ruby capable of building an IDE as sophisticated as Eclipse? Perhaps but one big problem with Ruby GUI toolkits is that there are too many of them.
What about a Ruby VM? Efforts to host Ruby in Java and .NET environments exist but they're not too mature yet. There's also a separate Ruby-specific VM effort underway called YARV. Finally, Ruby 2.0 (aka Rite) will move the language runtime to a bytecode implementation (as well as other changes) but Rite seems far off.
So will Ruby built on a high-performance VM become a legitimate successor to Smalltalk? Perhaps but there's still a long way to go before then.
So if Java is a victory for Smalltalk's implementation choices, and Ruby is a victory for Smalltalk's language choices, what do you do if you want both? There's still only one option: use Smalltalk.
What if there were a Hotspot VM that ran Ruby instead of Java, without any loss of performance, and a version of Eclipse written in and for this new platform?
Is Ruby capable of building an IDE as sophisticated as Eclipse? Perhaps but one big problem with Ruby GUI toolkits is that there are too many of them.
What about a Ruby VM? Efforts to host Ruby in Java and .NET environments exist but they're not too mature yet. There's also a separate Ruby-specific VM effort underway called YARV. Finally, Ruby 2.0 (aka Rite) will move the language runtime to a bytecode implementation (as well as other changes) but Rite seems far off.
So will Ruby built on a high-performance VM become a legitimate successor to Smalltalk? Perhaps but there's still a long way to go before then.
On eating balut
Balut is a Filipino delicacy. It's basically a fertilized duck egg that's been allowed to incubate for a couple of weeks. According to The Wily Filipino blog the duck inside the egg really looks like a duck, eyes, pink little limbs, gray feathers, useless beak and all. To eat, you cook the egg in some water, crack it open, dip it into a little salt and pop the bugger into your mouth. Finish with a big gulp of beer. The blog post doesn't include any pictures which is a good thing. Balut looks pretty nasty. Maybe the first step is to down a six pack of beer before trying?
Children Learn by Monkey See, Monkey Do. Chimps Don't
A recent New York Times article describes an interesting study on how children learn tasks differently from chimps. The results are evidence that humans are hard-wired to learn by imitation, even when that is clearly not the best way to learn. Primates are bad at imitation: they appear to focus on what its goals are and ignore its actions.
Wednesday, December 14, 2005
Milton Bradley's Secret Invasion Orders
I love this McSweeney's post. If you don't get it, add a comment.
The Scala Programming Language
The Scala Programming Language looks quite interesting. It's statically typed like Java and C# but provides some additional features such as type inference, XML as a datatype, etc. There's extensive documentation as well as an Eclipse plugin for Scala. The default runtime supports the Java VM but Scala code can also be compiled and hosted on the .NET platform.
I'm not interested but you should talk to...
Early in my career I worked at a company that built turnkey CAD/CAM systems (hardware/software bundles). They bought "bare" hardware from Digital (backplane and cards) to repackage into their own systems. This worked fine with their existing PDP-11 systems but when they moved to the VAX, Digital made life more challenging. Digital also manufactured its own disk drives and made it very difficult to replace the "boot" hard drive on VAX systems. And since Digital charged a premium for their hard drives, it would mean less profit for our company. So the company negotiated to obtain a VMS source license in order to write its own boot drivers.
To get the driver work done quickly, source code alone wasn't enough; the company needed to find developers who understood VMS internals. But nearly all of them worked for Digital. So they employed a headhunter to find appropriate candidates. When the headhunter called people at Digital she was often told that she should talk to a specific developer (e.g. "I'm not interested but you should talk to ..."). At the same time, someone noticed that this particular developer's name showed up a lot in the VMS source code. Sounded like a perfect match. After one or two interviews, the developer was hired. But things didn't really work out. It turned out that he wasn't the stellar developer that they had expected. His peers at Digital were trying to get rid of him by giving his name to headhunters. His name was all over the VMS source code because whenever he touched a file he would put him name in it to take credit.
Moral: Be cautious when people seem too eager to recommend a co-worker. They may be trying to make their problem into your problem.
To get the driver work done quickly, source code alone wasn't enough; the company needed to find developers who understood VMS internals. But nearly all of them worked for Digital. So they employed a headhunter to find appropriate candidates. When the headhunter called people at Digital she was often told that she should talk to a specific developer (e.g. "I'm not interested but you should talk to ..."). At the same time, someone noticed that this particular developer's name showed up a lot in the VMS source code. Sounded like a perfect match. After one or two interviews, the developer was hired. But things didn't really work out. It turned out that he wasn't the stellar developer that they had expected. His peers at Digital were trying to get rid of him by giving his name to headhunters. His name was all over the VMS source code because whenever he touched a file he would put him name in it to take credit.
Moral: Be cautious when people seem too eager to recommend a co-worker. They may be trying to make their problem into your problem.
Tuesday, December 13, 2005
Multiple Monitors
One thing I found interesting when I started at Microsoft was how many people used multiple flat panel displays for development; usually two, sometimes three or more. Windows has supported multiple monitors for years but I rarely saw setups like this when I worked at IBM.Studies have shown that multiple monitors increase productivity. And they aren't that expensive: many graphics cards already support dual displays and mid-sized flat panels have gotten very affordable.
Going to three or more monitors is somewhat more complicated since it requires multiple video cards. But a cluster of monitors can be used in interesting layouts. For example, the stand pictured on the right from TouchScreens.com supports a nice array of five monitors. May seem like overkill but I'm sure I'd find a way to use all the screen space.
Build your own snowman
Don't like cold weather? No problem. You can build your own snowman without leaving your desk.
Bliss
Ned's post on the BLISS programming language reminded me of my first job. I worked for Applicon as a software developer on their next-generation CAD/CAM system code-named FAST*.
Applicon's existing CAD system ran on the PDP-11 and was written in Macro-11 assembler. When Digital introduced the VAX, Applicon saw the opportunity to move to a 32-bit platform and develop in a high-level language. They passed on Unix and C, feeling that the platform was not mature enough. They decided to use VAX/VMS and to write the new system in PL/I Subset G. PL/I may seem like a strange language choice but at the time it was the only high-level language for VMS that had a decent optimizing compiler (Digital hadn't done VMS compilers for C et al yet). Also a number of people on the team knew PL/I from their days at MIT with Multics.
So where does BLISS come in? Generating code with full debug symbols for PL/1 was costly and the debugger didn't really understand PL/1 syntax anyway. So when you fired up the debugger the first thing you'd type was the command SET LANG BLISS to indicate that you wanted to use BLISS syntax for variables and expressions. It sounds weird to me now but we really did debug PL/1 code using BLISS syntax.
* Footnote: the code-name FAST stood for "Future Applicon Systems Technology". The joke was that when we shipped it would be renamed PAST for "Present Applicon Systems Technology". When the product shipped the marketing folks decided to call it BRAVO! (including the exclamation point in the name). That exclamation point was irritating when you wanted to refer to the product in a spec or email. It seemed like you were Just! Too! Darned! Excited! About! Bravo! But maybe Applicon was prescient: they beat Yahoo! by a decade in the usage of a silly appended exclamation point.
Applicon's existing CAD system ran on the PDP-11 and was written in Macro-11 assembler. When Digital introduced the VAX, Applicon saw the opportunity to move to a 32-bit platform and develop in a high-level language. They passed on Unix and C, feeling that the platform was not mature enough. They decided to use VAX/VMS and to write the new system in PL/I Subset G. PL/I may seem like a strange language choice but at the time it was the only high-level language for VMS that had a decent optimizing compiler (Digital hadn't done VMS compilers for C et al yet). Also a number of people on the team knew PL/I from their days at MIT with Multics.
So where does BLISS come in? Generating code with full debug symbols for PL/1 was costly and the debugger didn't really understand PL/1 syntax anyway. So when you fired up the debugger the first thing you'd type was the command SET LANG BLISS to indicate that you wanted to use BLISS syntax for variables and expressions. It sounds weird to me now but we really did debug PL/1 code using BLISS syntax.
* Footnote: the code-name FAST stood for "Future Applicon Systems Technology". The joke was that when we shipped it would be renamed PAST for "Present Applicon Systems Technology". When the product shipped the marketing folks decided to call it BRAVO! (including the exclamation point in the name). That exclamation point was irritating when you wanted to refer to the product in a spec or email. It seemed like you were Just! Too! Darned! Excited! About! Bravo! But maybe Applicon was prescient: they beat Yahoo! by a decade in the usage of a silly appended exclamation point.
Monday, December 12, 2005
iPhoto-like image resizing using Javascript
Maybe I'm easily amused but I thought that the technique shown here to do iPhoto-like image resizing is a neat trick. No Flash, just Javascript and DHTML.
Samorost 2
Samorost 2 the sequel to the wonderfully bizarre Samorost has just been released. I was only able to play with it for a few minutes but from Jay's review it sound like it's going to be a lot of fun.
SeaTraffic
SeaTraffic is a cool Treo application to get up-to-the-minute traffic maps on your Treo of Seattle traffic conditions. Traffic data comes from the Washington State DOT.I try to avoid highways in Seattle during rush hour but when I have to travel on them, it's nice to know where the hotspots are. (Via Engadget)
Friday, December 09, 2005
CEO-For-A-Day
Today I work for Kiyaan Vazirzadeh, a 10-year-old from Simi Valley, CA. He was granted his wish to be Microsoft CEO for a day by the NBC Television reality show Three Wishes.
Kiyaan was granted his wish based on his essay about Bill Gates and his goal of being a CEO at a young age. I'm sure it will be an interesting experience for Kiyaan but I'm still disappointed that NBC didn't pick my compelling essay on why I should be IBM CEO for a day.
Kiyaan was granted his wish based on his essay about Bill Gates and his goal of being a CEO at a young age. I'm sure it will be an interesting experience for Kiyaan but I'm still disappointed that NBC didn't pick my compelling essay on why I should be IBM CEO for a day.
Thursday, December 08, 2005
Ruby Book Sales Surpass Python
Tim O'Reilly reports on recent book sale trends: in the last twelve weeks, Ruby book sales surpassed Python book sales for the first time. Python is up 20% vs. the same period last year, but Ruby is up 1552%! Ruby has been around for a while, I'd imagine that most of this recent surge in book sales is the increasing popularity of Ruby on Rails.
During the same twelve week period, Java book sales are off 4% vs. the same period last year, while C# book sales are up 16%. The C# increase isn't that surprising since .NET 2.0 was recently released. Java is still the leader of the pack in book sales: about 2x C#, 2.5x PHP, 4x Perl, and 9x Ruby/Python.
As someone notes in the comments, books sales are an inexact proxy on language popularity. A lot of programming language books are purchased and never read. And a lot of developers learn programming languages without buying books. Also, the impulse to buy a book doesn't necessarily reflect an immediate need. It can often be a reflection of things we want to learn, not what we need to know now.
During the same twelve week period, Java book sales are off 4% vs. the same period last year, while C# book sales are up 16%. The C# increase isn't that surprising since .NET 2.0 was recently released. Java is still the leader of the pack in book sales: about 2x C#, 2.5x PHP, 4x Perl, and 9x Ruby/Python.
As someone notes in the comments, books sales are an inexact proxy on language popularity. A lot of programming language books are purchased and never read. And a lot of developers learn programming languages without buying books. Also, the impulse to buy a book doesn't necessarily reflect an immediate need. It can often be a reflection of things we want to learn, not what we need to know now.
Wednesday, December 07, 2005
Number Spirals
Wow. I had no idea that number spirals had such interesting properties. (Via Kottke.org)
CMYK Humor
CMYK is a color model used in printing. These print ads of popular books and movies were done viewing the world through CMYK. Clever.
Tuesday, December 06, 2005
Employee Rationalizer
More evidence that Scott Adams has a lot of chair-warming readers:
Sunday, December 04, 2005
Swedish Campground
How did the Macintosh get its command key symbol? The story is interesting. It came from a floral symbol that was used in Sweden to indicate an interesting feature or attraction in a campground. I wonder if Swedish users were initially confused when they saw this in the Macintosh UI?
Friday, December 02, 2005
Airline Security a Waste of Cash
Another good essay by Bruce Schneier. He explains why airline security programs such as Secure Flight and Trusted Traveler are a waste of money.
Thursday, December 01, 2005
Domain Suffixes
A domain name typo (.cm rather than .com) got me wondering about how many of these domain suffixes existed. It turns out that there are nearly 250 two-letter registered top-level domain suffixes out of a possible 676 letter combinations. Some countries have similar names so not all of the domain suffixes are obvious. For example, it's tough to match up Morocco, Monaco, Moldova, Madagascar, Marshall Islands, Macedonia, Mongolia and Macau with their domain suffixes (.ma, .mc .md, .mg, .mh, .mk, .mn, and .mo). Also, some of the suffixes are similar to other top-level domains (e.g. .com, .co and .cm).
Try Ruby (in your browser)
Here's a clever idea for promoting the Ruby programming language: try Ruby in your browser. Type help and you can take a quick interactive tutorial.
Try Ruby was built by why the lucky stiff, author of the quirky Why's (Poignant) Guide to Ruby
Try Ruby was built by why the lucky stiff, author of the quirky Why's (Poignant) Guide to Ruby


RSS 0.92 Feed