Thursday, June 29, 2006
@deprecated is a lie
Good essay by Steve Northover (the Father of SWT) on why @deprecated is a lie. Once an API is public you're committed. As I mentioned before, @deprecated is at best an idle threat. Breaking running code by removing public methods or classes is rarely, if ever, acceptable.
Note: in another post, Steve refutes the rumor that the name Eclipse was chosen to offend Sun. If true, didn't someone eventually realize how the name might be perceived by Sun? And if so, they decided it was okay?
Note: in another post, Steve refutes the rumor that the name Eclipse was chosen to offend Sun. If true, didn't someone eventually realize how the name might be perceived by Sun? And if so, they decided it was okay?
Look At That Escargot!
I didn't realize that snails were this acrobatic or this fast. Either way,
they probably won't escape from Victor Yool's cookpot.
One thing I learned from reading the article on Victor is that the snails eaten as escargot are common garden snails. I thought it would be some special breed. Which makes me wonder — a slug is basically a snail without a visible shell. Does anyone eat them? If so, you're welcome to come to the Pacific Northwest and harvest as many as you like. The slimy little buggers are everywhere.
they probably won't escape from Victor Yool's cookpot.
One thing I learned from reading the article on Victor is that the snails eaten as escargot are common garden snails. I thought it would be some special breed. Which makes me wonder — a slug is basically a snail without a visible shell. Does anyone eat them? If so, you're welcome to come to the Pacific Northwest and harvest as many as you like. The slimy little buggers are everywhere.
Amazing
While waiting at a traffic light this morning on my way to work I glanced down at some papers on the passenger seat. When I looked up again I noticed that the light had turned green and the car in front of me was already a few hundred feet down the road. And yet, none of the drivers in the cars behind me honked their horn.

Wednesday, June 28, 2006
Evil I tells ya! Evil!
In the Treehouse of Horror III episode of The Simpsons, Homer buys Bart a talking Krusty doll for his birthday. When Grampa Simpson sees the doll, the following plays out:Some of the tools in the software development toolbox are considered to be Evil too:
Threads are Evil. They can cause sporadic and non-reproducible data corruption or deadlock bugs.
ThreadLocals are Evil. They're just glorified global variables. And since global variables are Evil, ThreadLocals must be Evil too.
Caching is Evil. Some of the nastiest bugs turn up in caches: stale data, memory leaks, performance issues, etc.
What about Getters and Setters? Evil. They violate the basic principle of encapsulation.
How about class inheritance? Evil. Extending existing classes causes coupling that make future changes more difficult.
The Singleton pattern? Evil. Singletons are just global variables in design pattern speak.
This is somewhat tongue-in-cheek but what other software tools and techniques might be considered Evil as well?
Abe:[shouting] That doll is *Evil*, I tells ya. Evil! Eeeeeeviillll!!!
Marge: Grandpa, you said that about all the presents.
Abe: [whines] I just want attention.
Threads are Evil. They can cause sporadic and non-reproducible data corruption or deadlock bugs.
ThreadLocals are Evil. They're just glorified global variables. And since global variables are Evil, ThreadLocals must be Evil too.
Caching is Evil. Some of the nastiest bugs turn up in caches: stale data, memory leaks, performance issues, etc.
What about Getters and Setters? Evil. They violate the basic principle of encapsulation.
How about class inheritance? Evil. Extending existing classes causes coupling that make future changes more difficult.
The Singleton pattern? Evil. Singletons are just global variables in design pattern speak.
This is somewhat tongue-in-cheek but what other software tools and techniques might be considered Evil as well?
Log Jam
I was reading Steve Rubel's post on a UMass study identifying the traits of successful bloggers. The bottom line is that being a successful blogger takes time and commitment. And then I read Jeff Atwood's essay Meet the Arch-Nemesis of Productivity: The Internet.
Writing a blog takes a lot of time. And reading blogs can suck up all of the rest of it. Sometimes I wonder how prolific bloggers like Jeff have enough time to do anything else.
Writing a blog takes a lot of time. And reading blogs can suck up all of the rest of it. Sometimes I wonder how prolific bloggers like Jeff have enough time to do anything else.
Cosmic Justice
The theme of last week's This American Life was things that never seem to come to an end. (Listen to the episode here).
The first story is about Jonathan Gold who was bullied in high school by a glad-handing jock. He recalls an incident where the bully hip-checked him (and his cello) down a flight of stairs. So who was this bully and what has happened to him since then?
Jonathan Gold had nothing to do with Abramoff's downfall but this "Revenge of the Nerds" moment must feel pretty sweet.
The first story is about Jonathan Gold who was bullied in high school by a glad-handing jock. He recalls an incident where the bully hip-checked him (and his cello) down a flight of stairs. So who was this bully and what has happened to him since then?

Jonathan Gold had nothing to do with Abramoff's downfall but this "Revenge of the Nerds" moment must feel pretty sweet.
Tuesday, June 27, 2006
nano nano
I bought my wife an iPod nano for her birthday. It's so tiny and jewel-like. It's the perfect size for exercising but still is as functional as my iPod photo. Now I want one.
Can you pass the U.S. citizenship test?
When an immigrant wants to become an American citizen, they have to take a civics test as part of their naturalization interview. Here's a list of twenty questions from the test. See how well you do.
Note: the civics test is given orally, not as a multiple choice exam. For the record, I got 19/20. I missed the question on which INS form is used to apply to become a naturalized citizen. But how would I know that anyway?
Note: the civics test is given orally, not as a multiple choice exam. For the record, I got 19/20. I missed the question on which INS form is used to apply to become a naturalized citizen. But how would I know that anyway?
Monday, June 26, 2006
ce n'est pas une bicyclette
In 1963, a young, beardless Frank Zappa appeared live on the Steve Allen show playing a musical composition on bicycles. The grainly video can be viewed on Youtube in two parts: Part 1, Part 2.

HA HA HA HA HA HA HA HA
The Laugh Song is from Chinese kids television. It features children telling bad jokes followed by groups of kids laughing and laughing and laughing. And they're pointing too. Out of the screen directly at you. Pointing and laughing. Pointing and laughing. Go ahead and watch it over and over. (Via BoingBoing)
Okay, they really aren't laughing at you. Relax.
Okay, they really aren't laughing at you. Relax.
Sunday, June 25, 2006
An Inconvenient Truth
It reached 90°F today in the Seattle area. A record-breaking high for the day. Which reminded me to note that I watched An Inconvenient Truth last week. The movie's message is disturbing. If, as the movie suggests, human activity is responsible for the rise in temperature, will we be able to modify our behaviors in time or like the frog in the kettle, just keep noting "Hmm, it's a little warmer now than it was before"?
Update: Here's an animated trailer for the film with a rebuttal from Futurama's Bender.
Update: Here's an animated trailer for the film with a rebuttal from Futurama's Bender.
Saturday, June 24, 2006
Five Signs of the (Development) Apocalypse
Another essay from codebetter.com, this one by Eric Wise: Five Signs of the (Development) Apocalypse. Eric lists five signs that a project will be late, bloated, failed (or maybe all three).
Been there, done that, got the t-shirt. Seriously. With no sense of irony, the management-approved t-shirt featured a "Survivor" theme.
Been there, done that, got the t-shirt. Seriously. With no sense of irony, the management-approved t-shirt featured a "Survivor" theme.
Friday, June 23, 2006
Opera on Nintendo DS
Opera on the Nintendo DS is coming out in July. It's kinda cool that a gadget that only costs $129 can surf the web over Wifi. Oh, it plays games too
Beer Battered Deep Fried Bacon Double Quarter Pounder
Wow, a new item for McDonald's value menu?Imagine if Morgan Spurlock from the film Super Size Me had tried to eat one of these every day for a month?
Thursday, June 22, 2006
Hire Pete!
If you're looking for a senior software architect type in the greater Boston area you should consider hiring Pete. He's smart and he gets things done.
Barrel Rolls
On my return flight to Seattle, three passengers sitting behind me were having a loud discussion as to whether a large commercial jet was capable of doing a barrel roll. The consensus was that it was possible and probably was done as part of the plane's testing. That didn't seem right to me so I did some digging. Is it possible to roll such a large plane? Yes, probably but according to The Straight Dope it's never been done, except with a prototype of the Boeing 707 (video here). It's too bad the video doesn't show off the roll better.
Fancy maneuvers with large planes can be impressive but dangerous. There was the infamous crash of the Russian SST (Tupolev TU-144) at the Paris Air Show in 1973. Speculation at the time was that the pilot was trying to do some sort of loop and stalled. The real story of what went wrong is more complicated than that. The crash was the result of last minute changes made by the engineering team at the airshow to make the Tu-144 appear more maneuverable than the Concorde. The details are kinda sad. (video of the crash can be found here).
Fancy maneuvers with large planes can be impressive but dangerous. There was the infamous crash of the Russian SST (Tupolev TU-144) at the Paris Air Show in 1973. Speculation at the time was that the pilot was trying to do some sort of loop and stalled. The real story of what went wrong is more complicated than that. The crash was the result of last minute changes made by the engineering team at the airshow to make the Tu-144 appear more maneuverable than the Concorde. The details are kinda sad. (video of the crash can be found here).
Irrational Exuberance
Karl Seguin's essay about his experience with Rational tools made me smile. It's not funny, I just recognized his shared pain.
Karl's comment "I’m sure there are really big teams out there that need products like Rational" is too kind. In my experience, ClearCase is even worse for large teams. It doesn't scale when there are lots of source files and lots of code churn. And if your development team is distributed and you're forced to use MultiSite? Look in the mirror, here's what you'll see.
Yes, there are some benefits to the ClearCase source control model. And yes, some people love ClearCase. And because I had to use it, I tolerated its inadequecies. But I'd prefer to use just about anything else.
Karl's comment "I’m sure there are really big teams out there that need products like Rational" is too kind. In my experience, ClearCase is even worse for large teams. It doesn't scale when there are lots of source files and lots of code churn. And if your development team is distributed and you're forced to use MultiSite? Look in the mirror, here's what you'll see.
Yes, there are some benefits to the ClearCase source control model. And yes, some people love ClearCase. And because I had to use it, I tolerated its inadequecies. But I'd prefer to use just about anything else.
Pervasive Marketing
When I arrived at my hotel for TechEd and went to my room I was a little surprised when I looked at my room key:

Wednesday, June 21, 2006
Monty Python: International Philosophy Soccer Match
Classic Monty Python sketch: International Philosophy Soccer Match. (Via reddit)
Tuesday, June 20, 2006
Video Killed the Radio Star
Want to be temporarily transported back twenty years? Start watching this massive list of 80's music videos (also found here). Just start from A Flock of Seagulls and work your way down. Don't skip 80's oddities such as Klaus Nomi, Gary Numan and Lene Lovich. And then there's the video that was probably under the heaviest rotation on MTV for the entire decade, Peter Gabriel's Sledgehammer. (Via MetaFilter)
Monday, June 19, 2006
$132,994.97 in one month from Adsense
Wow, $132,994.97 of Adsense revenue in one month! As a point of comparison, I get a check every three months. If you know how they decide when to cut a check, you can figure out how many orders-of-magnitude difference there are between my checks and the one pictured at the link.
Sunday, June 18, 2006
TechEd
TechEd is over. It was exhausting but overall a good experience. This was my first opportunity to talk to lots of customers about the work that we're doing. It was great to get feedback. It was also fun to be back in Boston. The nice weather coincided with the conference: Sunday through Friday were terrific. I enjoyed reconnecting with old friends even though I didn't have as much time to socialize as I had hoped.
The new Boston convention center worked well. It's a huge cavernous building. The only complaints that I heard were occasionally chilly rooms and not enough bathrooms to handle the traffic between sessions. Getting to and from the convention center is quite easy via public transportation. From South Station, Silver Line underground buses take you within a short walk of the building. Many of my Microsoft co-workers commented on the ease of getting around via public transportation in Boston. Seattle doesn't have anything comparable.
The new Boston convention center worked well. It's a huge cavernous building. The only complaints that I heard were occasionally chilly rooms and not enough bathrooms to handle the traffic between sessions. Getting to and from the convention center is quite easy via public transportation. From South Station, Silver Line underground buses take you within a short walk of the building. Many of my Microsoft co-workers commented on the ease of getting around via public transportation in Boston. Seattle doesn't have anything comparable.
Thursday, June 15, 2006
The Evergreen State
Another Tabblo: The Evergreen State
Foggy Fountain
My latest Tabblo: Foggy Fountain
Wednesday, June 14, 2006
Integer Overflows
Lots of bloggers have commented on Joshua Bloch's article on a bug in the standard Binary Search method in Java.
While it's mildly interesting that a bug escaped detection for so long, the real issue here isn't with the binary search code, it's a class of integer overflow bugs. Joshua's bug only occurs if you have at least 230 array elements. On a 32-bit system it's not practical to have such a large array but certainly possible on a 64-bits system. And since most static languages treat int as a 32-bit signed quantity, we're likely to see more 32-bit integer overflow problems as 64-bit systems become more popular.
This reminds me of two bugs from the past. The first was an index bug with improperly specified loop conditions (e.g. for (int i = n; i > 0; i++) where n has the value 1). This was in a solid modeler that I worked on many years ago. When the bug occurred, the UI would lock up. The tester who found it left the application running and noticed that twenty minutes later it was working again. This was on an SGI workstation with an early version of the MIPs processor. Spinning through 231 and wrapping around to a negative value took 20 minutes. I just tried an equivalent on a x86 box and it took less than 10 seconds.
The second bug was handling a bounds check on a CAD system. We had a 32-bit coordinate system and if you tried to move an entity outside legal 32-bit bounds, it would snap them back into the valid range. The bug happened while handling overflow: as coordinates moved outside of 32-bit bounds, an exception was raised and processing continued. Exception handling was done by the runtime using a linked list of exception handlers. When an exception was caught it was marked as "handled" and a new exception handler was added to the end of the linked list. As part of our unit tests, we would try to move thousands of entities outside legal coordinates. As each overflow occurred, the list of exception handlers would grow. Which meant that each iteration through the loop would take longer than the last one. Eventually it would slow to a crawl. An easy bug to fix but it showed that even if the runtime doesn't silently allow integer overflows, you may still have issues to deal with.
While it's mildly interesting that a bug escaped detection for so long, the real issue here isn't with the binary search code, it's a class of integer overflow bugs. Joshua's bug only occurs if you have at least 230 array elements. On a 32-bit system it's not practical to have such a large array but certainly possible on a 64-bits system. And since most static languages treat int as a 32-bit signed quantity, we're likely to see more 32-bit integer overflow problems as 64-bit systems become more popular.
This reminds me of two bugs from the past. The first was an index bug with improperly specified loop conditions (e.g. for (int i = n; i > 0; i++) where n has the value 1). This was in a solid modeler that I worked on many years ago. When the bug occurred, the UI would lock up. The tester who found it left the application running and noticed that twenty minutes later it was working again. This was on an SGI workstation with an early version of the MIPs processor. Spinning through 231 and wrapping around to a negative value took 20 minutes. I just tried an equivalent on a x86 box and it took less than 10 seconds.
The second bug was handling a bounds check on a CAD system. We had a 32-bit coordinate system and if you tried to move an entity outside legal 32-bit bounds, it would snap them back into the valid range. The bug happened while handling overflow: as coordinates moved outside of 32-bit bounds, an exception was raised and processing continued. Exception handling was done by the runtime using a linked list of exception handlers. When an exception was caught it was marked as "handled" and a new exception handler was added to the end of the linked list. As part of our unit tests, we would try to move thousands of entities outside legal coordinates. As each overflow occurred, the list of exception handlers would grow. Which meant that each iteration through the loop would take longer than the last one. Eventually it would slow to a crawl. An easy bug to fix but it showed that even if the runtime doesn't silently allow integer overflows, you may still have issues to deal with.
Monday, June 12, 2006
In Boston
I'm in Boston for TechEd this week. It's great to be back after nearly a year in Seattle. All the familiar sights and sounds — Boston traffic, Boston accents, Dunkin Donuts, Toscanini's... And except for Saturday, the weather's been very nice so far. If you're at TechEd this week, send me an email or add a comment here.
By the way, TechEd will be in New Orleans next year, June 3-8. Hopefully hurricane season 2007 doesn't get an early start.
By the way, TechEd will be in New Orleans next year, June 3-8. Hopefully hurricane season 2007 doesn't get an early start.
Sunday, June 11, 2006
Is the MacBook Pro really this hot?
Jonathan Rentzsch decided to reinstall OS X on his MacBook Pro and was having disk problems. The MacBook Pro has been know to run a little "toasty" so Jonathan decided to run the install inside his refrigerator. I've played with MacBooks and MacBook Pros and they don't seem substantially hotter than any other laptops I've used.
Friday, June 09, 2006
Corinthian Leather
In addition to playing Khan, Ricardo Montalban appeared in commercials for the Chrysler Cordoba with seats covered in "soft Corinthian Leather". And what is Corinthian Leather? The ad men just made it up. It became a popular term, due in large part to Ricardo's lyrical Spanish pronunciation.
Search for Spock
An IM chat with Pete led me to this YouTube video clip. Geeky but funny.
Thursday, June 08, 2006
Return To The Center
Roy Goodwin is a friend and former boss. I just found out that he has a blog Return To The Center. No geeky content — Roy prefers to delve into uncontroversial topics like religion and politics.
Tuesday, June 06, 2006
Fortress
Fortress is a new programming language under development at Sun as a replacement for Fortran. Fortress syntax is similar to mathematical notation. Guy Steele is one of the designers. Read an interview with Guy here. The draft specification can be found here.
Monday, June 05, 2006
Kitchen Myths
Putting baking soda in the refrigerator absorbs odors. Lobsters scream with pain when boiled. When you add alcohol to a recipe it all evaporates during cooking so there is none in the final dish. These myths and other kitchen-related urban legends are explored on Kitchen Myths.
Sunday, June 04, 2006
Animator vs. Animation
Very clever Flash animation of an animated stick figure using the Flash toolbar to defend himself against his animator. (Via digg)
Friday, June 02, 2006
Chelsea Buns
Volker's post on Europe's Worst Cuisine reminded me of my eating experiences in Britain several years ago. (No, I'm not going to make fun of British food!).When I ordered food I sometimes had difficulties. I learnt early on that ordering coffee was a choice of "black or white" rather than "black or regular". And to go with my coffee, how about a nice cinnamon roll? Blank stare. A what? I motioned into the case. Oh, you want a Chelsea Bun! Um, okay.
Thursday, June 01, 2006
Time Creep
A Lotus Notes quirk made an appearance on The Daily WTF. Document and database ids are generated from unique timestamps. According to this IBM tech note, the resolution of the timestamp generator is 1/100th of a second. If the generator is called more frequently than 100 times per second, it will start giving out timestamps in the future. This can cause replication problems. I remember this code but I can't remember why the granularity isn't finer than 1/100th of a second. Perhaps this was the worst case timer resolution of one of the platforms that Notes supports?
This reminds me of a problem that we had with Apollo workstations with bulk file copying. Apollo used a similar scheme for generating time-based GUIDs for the file system. I don't recall the granularity but if you did a bulk copy of a large set of files, the copy operation could actually block at some point waiting for more ticks so that it could generate more GUIDs. They "cached" GUID time intervals so unless you tried to copy thousands of files at once, you usually wouldn't see this happen.
This reminds me of a problem that we had with Apollo workstations with bulk file copying. Apollo used a similar scheme for generating time-based GUIDs for the file system. I don't recall the granularity but if you did a bulk copy of a large set of files, the copy operation could actually block at some point waiting for more ticks so that it could generate more GUIDs. They "cached" GUID time intervals so unless you tried to copy thousands of files at once, you usually wouldn't see this happen.
HP to pass IBM as biggest tech company?
Interesting note in Business Week comparing IBM and HP:Of course this is just comparing revenues. IBM is still a substantially larger company in terms of employees.
If one looks at trailing twelve months of financial reports, both companies have sold exactly $88.89 billion over the last year. And analysts' consensus estimates are that HP will grow 5.1% in fiscal 2007, versus 4.3% for IBM. So a changing of the guard may not be far off.
JavaOne, Two, Three...
The annual JavaOne Conference was held in San Francisco recently. I remember attending the first JavaOne ten years ago. The level of buzz and hype surrounding Java back then was pretty amazing. Lots of companies were jumping on the Java bandwagon. In the years since, Java's success has been primarily on servers and mobile devices. Java on the desktop was mostly a bust in the early years. Remember Javagator, Lotus eSuite and Corel Office for Java?
The situation has changed in the last few years. Desktop applications written in Java have gotten pretty good. But these days, writing a desktop application in Java isn't going to garner any buzz. In fact, given the earlier memory and performance issues, it may be viewed by some people as a negative.
I've played with several RSS Readers (yes, I still plan to write a review). Some are native apps, a few .NET apps, a couple Java apps and one written in Smalltalk. The one I liked least happens to be a native app. The two I liked best were built with .NET and Java. But I liked them because of what they do, not how they were built. It may break our developer hearts but users don't care what language we used to build an application.
The situation has changed in the last few years. Desktop applications written in Java have gotten pretty good. But these days, writing a desktop application in Java isn't going to garner any buzz. In fact, given the earlier memory and performance issues, it may be viewed by some people as a negative.
I've played with several RSS Readers (yes, I still plan to write a review). Some are native apps, a few .NET apps, a couple Java apps and one written in Smalltalk. The one I liked least happens to be a native app. The two I liked best were built with .NET and Java. But I liked them because of what they do, not how they were built. It may break our developer hearts but users don't care what language we used to build an application.



RSS 0.92 Feed