Wednesday, December 31, 2003

Happy New Year

Many of us will be trying to sing the song that nobody knows this evening, Auld Lang Syne.
Should auld acquaintance be forgot and never brought to mind?
Should auld acquaintance be forgot and days of auld lang syne?
For auld lang syne, my dear, for auld lang syne,
we'll take a cup of kindness yet, for auld lang syne.
Such melancholy lyrics in the context of a party atmosphere. How did this song become so popular? Of course things could be worse, we could instead try to sing the post-apocalyptic lyrics of Prince's New Year's effort

Have a Happy New Year!

FBI urges police to watch for people carrying almanacs

According to this article, the FBI is "warning police nationwide to be alert for people carrying almanacs, cautioning that the popular reference books covering everything from abbreviations to weather trends could be used for terrorist planning".

Further down in the article there's a quote from a senior editor for The World Almanac noting that his reference book includes "stuff that's widely available on the Internet". Exactly. A good Internet connection is probably more useful than an almanac. And wireless Internet access makes it easier to do from anywhere.

I blogged about Schott's Original Miscellany the other day which is a weird sort of almanac. I wonder if I should avoid taking it along on trips?

Note: I'm not against police or airport screeners noting suspicious items or behavior. But terrorists read the news too.

Tuesday, December 30, 2003

Sir Tim

Tim Berners-Lee, inventor of the world wide web, has been awarded a knighthood. Good for him. He seems to be a down-to-earth guy. Also he has good taste: the first incarnation of HTTP / HTML was done on a NeXT computer

The Triplets of Belleville

I saw The Triplets of Belleville this evening. It's an unconventional and beautiful piece of animation. The plot involves a grandmother trying to rescue her grandson, who is kidnapped during the Tour de France by the French Mafia. He's spirited away to Belleville which is a oddball take on New York City. I mentioned French caricature in American cartoons in a blog entry the other day. Here's American caricature in a French cartoon -- nearly all of the residents of Belleville are immensely overweight including a rotund Statue of Liberty.

Note: at the Kendall Square Cinema in Cambridge, Triplets is preceded by a showing of the animated short, Destino. Destino started as a collaboration between Walt Disney and Salvador Dali. The original project was started 50 years ago and abandoned when Disney's studio ran into financial difficulties. This short is based on the work that Dali had started. It's amazingly weird and inventive. There are a couple of clips from the short here.

Variable-length argument lists

The varargs mechanism in C/C++ is a useful but error prone approach for supporting variable-length argument lists. The main problem with varargs is that the called function needs to figure out, somehow, how many arguments were passed. Some functions such as printf do this by using a format string to determine the type and number of arguments passed in. Like many things in C/C++, this isn't type-safe and can cause problems if the caller doesn't pass the proper number or type of arguments as specified in the format string.

Java 1.4 and earlier don't support variable-length argument lists. The usual work-around is to define multiple methods that take an increasing number of arguments. For example:
public void log(String arg);
public void log(String arg1, String arg2);
public void log(String arg1, String arg2, String arg3);
A couple of less-attractive alternatives are to use an array or Properties argument to collect the arguments.

C# allows variable argument lists via the params keyword. Java 1.5 will have support for the variable argument lists using the <type-name>... syntax. In both cases the variable length argument is effectively of a single type (e.g. String or Object). Not quite as flexible as varargs but this approach is typesafe and the called method can easily determine how many arguments were passed in.

Note: JSR 65: Concise Object-Array Literals had an interesting proposal for creating array literals by automatically boxing other literal types (e.g. int, double, ...). The proposal was withdrawn. Java 1.5 will support automatic box/unbox of primitive types. I wonder if automatic boxing of other literals in Object array literals will "just work" in Java 1.5?

Monday, December 29, 2003

Top Ten Words of 2003

It's the end of the year so the endless lists of Top Ten Best, Worst, Most Popular, etc. are coming out. YourDictionary.com released its Top Ten Words of 2003. Look at what came in second.

Adult humor in kids cartoons

Adult humor in kids cartoons dates at least back to the Rocky and Bullwinkle show (by "adult" I mean jokes targeted at adult viewers, not vulgar). I was watching television with my older son the other day and saw a more recent example of stealth adult humor in a cartoon: a character in Fairly Odd Parents gains super powers. He kicks a soccer ball which then sails clear across the Atlantic Ocean. Cut to a Parisian scene, a caricatured French couple sip coffee at an outdoor cafe. The soccer ball strikes the man in the back. He immediately stands up, raises his hands in the air and shouts "I surrender!". Oddly enough, the pejorative term for the French that some Americans were using earlier this year (cheese-eating surrender money) came from another cartoon, The Simpsons. It was said by Groundskeeper Willie, the Scottish handyman at Bart's elementary school.

Note: I don't think this sort of national name calling really serves any useful purpose. I can imagine the sort of uproar if the media reported that French cartoons depicted Americans in a similar skewed and simplistic manner.

Balloon Molecules

Two German Chemistry PhDs and a chemistry student who is also a balloon sculptor have created a cool technique using balloons to build chemical molecules. They show and explain knot techniques used to build simple and complex models. Their balloon model gallery includes a collection of models from a simple tetrahedron all the way up to the DNA Helix.

Schott's Original Miscellany

As a child, I loved to read almanacs. I was just enamored with the endless collections of tables and facts. Schott's Original Miscellany is a terrific book about nothing and everything. It's a collection of trivia and random useless information, it contains great trivia such as "War Cries of Some Scottish Clans", "Ivy League Fight Songs", the words to the "The British Riot Act", a list of "Untimely Deaths of Musicians", etc. If you're looking for a trivia fix, take a look.

Saturday, December 27, 2003

My new toy

I got a Pentax Optio S4 digital camera for Christmas this year. It's incredibly small -- the height and width of a credit card and only 0.8 inches thick (it fits inside an Altoids box). Despite the small size it's a 4 megapixel camera with a 3x optical zoom, lots of bells and whistles -- and picture quality is outstanding. Fortunately it uses SecureDigital cards so I don't have to buy yet another card reader.

I'm a happy camper. Now I just need to get a good case and a second battery.

Wednesday, December 24, 2003

Buried in snow

Warmer than usual weather melted nearly all of our remaining snow. I found a missing Boston Globe on the front lawn this morning. It had been buried under the snow and was still perfectly preserved in its plastic bag. It was from December 6th, when we got two feet of snow. The headline read "Snow fears pile up".

Tuesday, December 23, 2003

Comma operator

The comma operator in C/C++ is an odd bird. It takes two operands (a, b), evaluates the first, discards its value, evaluates the second and returns it's value as the result of the expression. Comma separated operands can be chained together, evaluated in left-to-right sequence with the right-most value yielding the result of the expression. It's all very Lisp-like but seldom used in C/C++ code except in for statements and macros. Note: the commas used to separate the arguments in a method call, or the elements in an array are not comma operators.

Here's something I hadn't thought about before: Java does not support the comma operator. It allows comma separated initialization inside a for statement (e.g. (for i = 0, j = 0; i < foo.size(); i++) { ... } but doesn't consider the comma in this case to be an operator. Since I rarely used commas in C/C++, I didn't notice the lack of support in Java. It turns out that C# doesn't support the comma operator either. As with Java, the C# for statement supports comma separated intializers but doesn't consider the comma to be an operator.

Now you may ask why I was even thinking about an arcane language feature like the comma operator. Well, besides being a language geek I was thinking about multiple return values. Java, C# and most compiled languages don't support them and I think that's a shame. I have a blog entry in progress discussing this but it'll have to wait until another day.

Software Disasters

When software engineers talk about "software disasters" they usually mean projects gone bad. Schedule slippage, creeping featurism, second-system syndrome, software bloat, etc. These aren't disasters or failures in the same sense that other engineering disciplines discuss them. At least, that is, until the software has been installed or deployed by its intended customers.

The study of failure is an important part of engineering education. Engineers learn from failure. Designs improve as the result of past failures. Designs are constrained within the limits of what measurements and modeling can predict. (An excellent book on the role of failure in engineering design is Henry Petroski's book: To Engineer Is Human).

The most common engineering failure discussed is the collapse of the Tacoma Narrows Bridge which was caused by wind-induced negative damping of the structure. It doesn't require an engineering education to appreciate the spectacle of the bridge's failure.

As the author of this article points out, embedded systems engineers (and software engineers in general) can learn, need to learn, from failure as well. There are several excellent, and hopefully well known, examples described here.

Zipcode Visualizer

Ben Fry, one of the creators of Processing, has also written a cool little Java applet that helps you visualize Zipcodes in the continental United States. The zipcode data in use does not seem to be completely up-to-date but it's fun to play with nonetheless. (Via MetaFilter)

Monday, December 22, 2003

Michele Pennell

During the development of Domino R5, I was the technical lead for the Domino Web Server team. Michele Pennell was our product manager. She was famous, among other things, for her Lotusphere presentations. They were much more entertaining than the dry technical talks given by folks like me. She moved to Australia a few years ago. I noticed Ed Brill's blog in my referrer log and found this entry about Michele. A virtual Hello (or something more Aussie like G'day) to Michele. (Via Ed Brill)

From Your Blog Shall We Know Thee?

I read a newpaper article a few years ago where the reporter interviewed a letter carrier and asked him to profile some of the people on his delivery route based on the mail they received. The writer compared notes with the people the carrier had profiled. He was pretty accurate in many cases. We have limited control of what mail we receive. Much of it, especially junk mail, is based on our spending habits, or other profile information. Analyzing someone's trash or email or credit card bills would provide similar insights into their life.

Blogs are a little different. We control what we reveal. Some bloggers report all sorts of details of their private lives; others, like me, are more circumspect. Most of my entries are technical, not about my personal or work life. I'm not trying to hide anything, I'm just being careful about what I talk about in such a public setting. The thing is, only a few people visit my blog directly but many others will happen upon it via a Google search. It's pretty interesting to see which queries end up here. Often two or more totally unrelated blog entries cause a Google "hit" that ends up here.

Sunday, December 21, 2003

Coroutines and Iterators

The C# 2.0 specification introduces a number of language extensions including generics, anonymous methods, partial types and iterators. In this entry I want to focus on iterators.

Iterators were first introduced in the CLU Language. An iterator is a type of coroutine that yields the elements of a data object, to be used as the sequence of values in a for loop. Here's an example of an iterator in C# 2.0:
using System.Collections.Generic;
public class Stack: IEnumerable {
   T[] items;
   int count;
   public void Push(T data) {...}
   public T Pop() {...}
   public IEnumerator GetEnumerator() {
      for (int i = count-1; i >= 0; --i) {
         yield return items[i];
      }
   }
}
The presence of the GetEnumerator method makes Stack an enumerable type, allowing instances of Stack to be used in a foreach statement (e.g. foreach (int i in stack) { ... }). The caller and enumerator maintain their own states independent of one another. The iterator returns a value to the foreach loop each time it calls yield. And the iterator's state can be arbitrarily complex. Imagine that the data that the iterator is traversing is a complex tree structure.

One way to visualize how this works is to imagine that the iterator running on a separate thread from the foreach loop. It could use a mutex to notify the foreach loop that another value is available. But threads aren't needed to implement iterators. Coroutines are cooperative. Yhe iterator does the following: start, find an item, yield to the foreach loop, restart, find next item, yield to the foreach loop. The iterator just needs a separate stack. This is too low-level to implement directly in C# but it has been implemented for .NET using Win32 fibers.

Iterators are a gee-whiz feature that you can usually code some other way but there are times when it certainly would be useful, especially if there's an efficient implementation. Personally, I'd love to see iterators in Java.

Upgrade of IRS Computers is Slow Going

According to an NPR interview with New York Times' tax reporter David Cay Johnston, the $8 billion project to replace the Internal Revenue Service's aging computer systems, which haven't been upgraded since the Kennedy administration, is now 40 percent over budget and more than two years behind schedule.

Some interesting tidbits from the interview: The current system has 13 terabytes of data and requires a sequential scan to find taxpayer records. It has 40 years of bug fixes and patches. Patches were mainly due to changes in the complex tax laws; often they were made under tight schedules without decent record keeping. The system is written in a mixture of COBOL and 1960's-era Assembler; skilled programmers in these languages are becoming harder and harder to find.

SD Takes the Lead in Memory Cards

According to this article on PalmInfoCenter, the SD flash card has passed CompactFlash in terms of market share. Not surprising since SD cards are more suitable for smaller devices -- an SD card is less than half the size of a CF card. I don't really care which format is dominant. I just hope that vendors can settle on one or a couple of card formats. At home we have devices with SmartMedia, SecureDigital and Sony Memory Sticks. I don't want to deal with any more formats.

The Politics of Eating

I heard a radio interview with organizers for the Dennis Kucinich presidential campaign. They were in Iowa and trying to get a vegan meal for their candidate. Kucinich is a vegan. I don't eat meat but I'm not a vegan. Even if I was, I wouldn't decide to vote for a candidate solely on one fact. I will admit, however, that Bob Dole's statement that he wanted to be "the first Bob president" was tempting.

Note: I'm not endorsing or disclaiming Kucinich. I just thought that this was an interesting factoid.

Friday, December 19, 2003

RSS Item Titles

I fixed the item titles in my RSS feed. They used to be the first chunk of the entry content but since I always put titles on my entries I finally got around to passing the title to the RSS feed. Sorry for not doing this earlier.

Santa Catapult

Help two elves fling Santa with a catapult. Good thing he has all of that padding.

Thursday, December 18, 2003

MIT Hacks

Ned mentions that MIT hackers placed a replica of the Wright Brothers plane atop the Great Dome to celebrate the 100th anniversary of powered flight. (Here are some better pictures of the hack). Other buildings on the MIT campus get hacked as well. The Green Building was turned into a Sound meter during a July 4th Boston Pops' musical performance on the Esplanade.

While not a hack in the same sense, you can play Tetris on the Green Building. Use the arrow keys to shift and rotate pieces. It would be cool if you could do this on the Green Building itself.

Twentieth Anniversary of the Macintosh

The Macintosh will turn 20 next month. The original 128K Macintosh was released in January 1984 with much fanfare including the infamous 1984 commercial shown during the Super Bowl. Apple had released the Lisa a year earlier with many of the same features but the Lisa was substantially more expensive ($9995 in 1983 dollars!). Also, the Lisa relied on Apple Twiggy drives that used non-standard media.

I didn't get my hands on a Macintosh until a few months after it was released. The CFO of the startup where I worked bought one. I was able to spend a few hours with it late one night. Even though I was using Apollo workstations with more powerful hardware, I was blown away by this amazing machine. And it was something I could actually afford to buy. I waited a while and finally bought a "Fat Mac" (512k Macintosh) which I eventually upgraded to a Mac Plus. I bought an external hard drive (a 20 MB DataFrame drive). All of this cost about $3500 including $800 for the hard drive. But I was able to develop code with this machine. It was even capable of running Apple Smalltalk.

Note: Back in 1997 Apple released the Twentieth Anniversary Macintosh but that was to celebrate the 20th anniversary of Apple, not the Mac.

Wednesday, December 17, 2003

Mfop2 (Moblogging for other people too)

Now this is what I've been looking for. Mfop2 allows you to blog from a mobile device. You can post new entries (with images) to your blog via email. This is perfect for my Treo 600. Mfop2 supports Moveable Type, Blogger and Gallery (?).

IKVM.NET

IKVM.NET is a Java VM that's under development for Mono and the Microsoft .NET framework. Jeroen Frijters' blog for this project has lots of interesting stuff about building a Java VM and issues with .NET CLR. They've made pretty good progress. In fact, here's a screenshot of Eclipse running in IKVM under Mono.

In an unrelated but cool blog entry, Jeroen hacked some code to read the accelerometer data from his IBM Thinkpad T41p (the T41p includes a sensor that's used to detect when to park the harddisk heads in the event of shocks or the laptop being dropped).

Exception To Every Rule

We've been building APIs using the interface / factory design pattern. No implementation classes are exposed. This is good in many respects especially in Java. Since we aren't exposing classes, we can easily reorganize our implementation or provide multiple implementations without disturbing callers. Also, Dynamic Proxies can be used to transparently insert behaviors before/after method calls such as tracing, logging, remoting, etc. The one remaining problem with this approach is what to do about exceptions. Exception are concrete classes. Also, exceptions that a method throws are part of the method signature so they can't be changed without changing the signature. Worse yet, an implementation of a method cannot extend the set of exceptions thrown as defined in the interface (although it can narrow the set).

So what to do? How do we avoid breaking callers? This is a brute force but workable answer: all methods that throw exceptions will declare the most generic exception possible. Ugly but prudent. The Javadoc for each method can list the exception subclasses that may be thrown but they aren't spelled out in the throws clause of the method.

By the way, I just noticed that this is exactly what the Java Language Bindings for the W3C DOM have done. Pure interface / factory approach and a single abstact exception class. In fact, they define this exception class (DOMException) as a subclass of RuntimeException. Methods do not even have to declare that throw exceptions subclassed from RuntimeException. Hmm, that's an interesting approach.

Fortran

True confession: I wrote code in Fortran. It wasn't professionally -- just in high school and college but it was Fortran (Fortran 66 to be specific). I'm cursed with a good memory so despite years of writing in many other programming languages, I can still remember Fortran. It was crude in a BASIC sort of way. The branching and looping constructs were primitive. The lack of good constructs encouraged spaghetti code which could be a maintenance nightmare. So bad, in fact that Brian Kernighan wrote a preprocessor called Ratfor to allow C-like flow expressions to be used. Why bother with Fortran? Because it was highly portable. Just about every OS worth considering had a Fortran compiler. And Fortran compilers had existed for a long time and generated fast code.

I haven't looked at Fortran code in years. When I decided to write this entry I did a few Google searches and found some interesting stuff. Here's the first Fortran manual. It was for the IBM 704 and was written in 1956 (!). Here's a snippet of Fortran 95 code that implements Quicksort. Hmm, except for the lack of any user-defined types, that looks more like Ada than Fortran.

Blogger

Blogger has been a bit flakey this week. Normally it's pretty reliable but this morning I couldn't reach blogger.com. I don't use Blogger for hosting but if I can't reach Blogger, I can't post. More impetus to use b2 or some other BlogWare.

How Christmas Works

We took the kids to Edaville last night to ride the trains and look at Christmas lights. It was a cold evening. Snow is on the ground. The air is dry and crisp. As we rode the train, I realized that I'd never spent Christmas anywhere warm. In fact, to me, Christmas has to be a cold, and hopefully snowy, holiday. Even people who live in warmer climates get the same message: songs and images of bearded men in heavy red wool suits, sleighs, snowflakes, snowmen, evergreen trees, etc. This is the commercial version of Christmas and not related to events in Bethlehem (where it clearly does not snow this time of year). But where did all of this cold, snowy Christmas stuff come from? How Christmas Works

Pepper Computer

Len Kawell, one of the founders of Iris Associates, has a new company: Pepper Computer. They're building instant sharing and collaboration software for consumers. They also seem to be building hardware, something called the Wi-Fi Pad. According to this article, Pepper is about to launch its first software product called Pepper Keeper that allows consumers to build journals, photo albums, etc. and share them. Pepper Keeper has an application development model as well. Third parties can build additional applications for Pepper Keeper. One aspect of Pepper's business model is unusual: the pages of the various applications you use are "consumables" That is, once you've filled the 100 "pages" of the photo album that you bought, you need to go back and by more "pages". Hmm. (Via Thomas Gumz)

Windows Really Good Edition

Some people hate Windows with a zealot's passion. Much frothing at the mouth and gnashing of teeth. It's like the bit that John Belushi did on Saturday Night Live as a commentator for Weekend Update. He'd get into an animated rant about some topic, usually punctuating his outrage with the phrase "But nooooo". Eventually he'd get so worked up, he'd fall out of his seat behind the desk. Zealots can be like that.

I'm not sure what motivated this demo of Windows RG (Really Good) Edition. It's a little crude but pretty funny. (Via Andrew)

Tuesday, December 16, 2003

Google adds more features

Google now allows you to track UPS and Fedex packages by ID, look up US patents, etc. For example patent 6,368,227 will get you to the Method of swinging on a swing patent

Monday, December 15, 2003

Ouch

I was just trying out a new blogging tool. It didn't go well. It modified my Blogger template when loading the current set of entries and then promptly crashed taking my original Blogger template with it. Patience while I fix up the mess.

Update: everything is pretty much restored as it was. I need to remember to backup my Blogger template more frequently.

St. Joseph sells

According to a recent article in the Boston Globe homesellers are burying St. Joseph statues on their property to ensure that it sells. Quoting the article:
According to Catholic folklore, a home where a St. Joseph statue is buried on the property will sell quickly and be blessed.
I wasn't aware of this folklore until we put our last house on the market in 1999. The housing market was pretty hot anyway but we figured "Hey, it can't hurt". Following advice, we buried a St. Joseph statue in the flower bed in front of our house inside a plastic bag. Funny thing is, a couple days later we found that it had been dug up by an animal (dog, skunk, squirrel?) who bit through the bag and left it discarded. We buried it again. We sold the house, not clear if the buried statue had any influence either way.

palmOne To Bring Java Applications to Treo and Tungsten Handhelds

According to an article on BargainPDA:, the IBM WebSphere Micro Environment Toolkit for Palm OS Developers has been released by palmOne that will allow developers to target the Java 2 Micro Edition platform. I'm still skeptical about the memory requirements for smaller devices (the Treo 600 has 16MB) but the opportunity for building "portable apps for portable devices" is appealing. As I've blogged before, the runtime bloat is the biggest issue. If I only need a one or two simple apps, J2ME is probably not the way to go. If, on the other hand, the J2ME runtime is in ROM, this becomes less of an issue. (Via MobileWhack)

Sunday, December 14, 2003

Wiki inventor goes to Microsoft

Ward Cunningham is the inventor of Wiki. He's joining Microsoft and in the Wiki way, he's set up a page for Tips For Ward At Microsoft. Some of the contributed content is pretty interesting. I especially liked this one: Beware of ArchitectsDontCode. (Via BoingBoing)

Java access specifiers

I don't like the way that access specifiers were defined in Java. Public, protected and private are fine. My beef is with "package" access. First there's no keyword to indicate package access. It's implicit. As a result, if you don't provide an access specifier, you get "package" access. What does this mean? All classes in a package have access to any member variables or methods of any other class in the package except those marked as private. This is a lousy idea. And it doesn't generalize for large projects. Why do the classes in a single package get special treatment? Why can't I have a set of related packages that share classes that cannot be used outside the set? Of course this would require some sort of explicit declaration which might be problematic. At what scope would it be defined and enforced?

My rule of thumb with Java access specifiers is to avoid package access for member variables and methods. My member variables are always marked as private (not protected). Defining a member variable as protected is fragile. You're better off defining setter/getters as protected if you don't want to allow access outside the class and its subclasses. (Note: protected also allows package access -- that was a bad decision in Java as well). My methods are always explicitly marked as public, protected or private. I suppose that package access is useful for "package private" classes but, as I said, this is often insufficient. I often use multiple packages for a subsystem so the package boundary feels artificial.

Note: access specifiers are no panacea. Perfectly good code could be written without using access specifiers Their main usage is to allow you to provide an explicit contract about how your code should be used: which portions are private to the implementation, which portions can be called publicly, which classes can be subclassed, etc. But they're still coarse-grained. Package access was defined as a simple way to allow a collection of classes to have special implicit access. Compare that to the friend concept in C++. It's explicit and pretty ugly. So the designers of Java side-stepped this with a simpler model. Not a bad compromise, I just wish they hadn't made package the default access mode.

C# switch statement

I've been meaning to write something about multi-way branching (aka switch statements) for a while. I don't have the time now to go into everything I want to say but I'll dip my toe into the waters by discussing the C# switch statement.

C# has a switch statement just like the one found in C/C++ and Java. But the C# switch has an important difference: it does not allow fall-through between cases. Unintentional fall-through is a common programming error so this was done to "protect" programmers from this error. Good idea but it turns out that C# does actually allow explicit fall-through by using a new form of goto statement. You can write something like this:
switch (i) {
   case 0:
      CaseZero();
      goto case 1;
   case 1:
      CaseZeroOrOne();
      goto default;
   default:
      CaseAny();
      break;
}
Yuck! What a language wart. It reminds me of the Pascal goto statement whereby you have to declare the goto label in the prologue of the procedure to use it. (Apparently the label statement is intended as a badge of shame that you had sunk to using a goto statement). I don't encourage the use of gotos in any language but that's my point. If you want to disallow fall-through, just do it. Don't come up with some extended goto syntax to let someone rattle around inside the switch block. The designers would have been better off adding a do-not-break statement to note the fall-though.

The C programming language is an excellent portable high-level assembly language. It was designed primarily as a system programming language. I've been writing C code for 20 years so I find C syntax to be comfortable. But do new languages have to swallow everything from C? Java doesn't have C-style pointers and doesn't allow any code to exist outside of classes. C# tries to improve the switch by disallowing fall-through and then adds this junk. I guess someone really wants to see an Obfuscated Programming Contest for C#.

Friday, December 12, 2003

Sober Santa

Help Santa collect Christmas cheer before he gets too inebriated to avoid getting zapped on toy train tracks. Reminds me of Bad Santa without the cursing. (Via MetaFilter)

Yatta!

Dave Winer pointed to this Flash animation as something he expected he'd be watching over and over. Catchy tune and funny imagery but there's more to this story.

The same web site has the original music video. The group singing is called Happa-tai (Leaf Team). The video is a bizarre melding of The Full Monty, Village People and The Wiggles. The group appeared on Jimmy Kimmel back in March. Lyrics to the Yatta song can be found here.

Caution: if you watch any of these clips often enough the Yatta song will be permanently lodged in your frontal lobe. (Via Scripting News)

Which Historical Lunatic Are You?

Take this personality test. For the record, my test results indicated that I'm most like Charles VI of France, also known as Charles the Mad or Charles the Well-Beloved. Oh Joy.

Thursday, December 11, 2003

Security Flaw in MSIE, Mozilla and Firebird

Sam Ruby reports a security flaw that affects MSIE as well as Mozilla and Firebird. Here's an example: not yahoo.

Notice that the status bar reports the URL as http://www.yahoo.com but if you click on the link it goes elsewhere. Not really a big deal since you can easliy do this sort of thing with Javascript but this hack doesn't require JavaScript to be enabled.

Understanding Aspects

Here's an excellent presentation on Aspect Oriented Programming by Mitchell Wand. I've wanted to dig more deeply into AspectJ. It's good to see details on some of the limitations of current AOP technologies. (Via LtU)

A couple of quick links from Metafilter

This online Nintendo Game Emulator lets you relive your childhood -- or feel sorry for those of us who thought these crude old arcade games were cool.

Here's a chance to build your own snowman without getting wet and cold.

Hitachi squeezes fuel cell into PDA

Hitachi has managed to squeeze a fuel cell into a PDA. Fuel cells seem like the most promising next generation technology for power-hungry mobile devices, especially laptops. According to the article NEC is planning to develop and sell a 40-hour fuel cell for notebooks by the end of 2005. But there are hurdles left to overcome before fuel cells are useable for mobile devices. First, fuel cells will need methanol cartridges. When you're traveling, you'll have to carry a supply or find somewhere to buy them. Second, current airline regulations won't allow potentially flammable methanol cartridges on board aircraft. Fuel cell vendors are working with airline regulators to overcome this hurdle.

IMDB Goofs Browser

This is cool. IMDB has a Goofs Browser that lists movie goofs and discontinuities. For example, look at this list of goofs and continuity errors from the original Star Wars. (Via usedwigs)

Steve Jobs: The Rolling Stone Interview

Someone just lent me a copy of The Second Coming Of Steve Jobs. Now I notice that there's an interesting interview with Jobs in Rolling Stone.

I have a friend who worked Apple in the late 80s and early 90s. He worked on the Pink project that eventually became Taligent. He told me that when his group moved into the office building that had contained the original Macintosh team, a mock exorcism was performed to remove any remaining traces of Steve Jobs. It wasn't even a remote possibility that Jobs would return to run Apple again.

Around the same time, I had a different perspective on Jobs. I was working at Lotus on BackBay (which became Lotus Improv). Jobs had convinced Lotus management to do the first version of BackBay on NeXTSTEP and would come to visit our team in Cambridge from time to time. He was always upbeat and energized. He made you feel like you were part of something "insanely" important.

Second (or third or fourth) acts in business are rare. It's been great to see innovation coming out of Apple again (and the resurrection of much of NeXTStep in Macintosh OS X). Without people like Steve Jobs, this industry is a pretty boring place.

Master and Commander: The Far Side of the World

I saw Master and Commander: The Far Side of the World last night. Excellent film. This may be an odd comparison, but I was reminded of Das Boot. It has some of the same story elements but Das Boot is a much darker film. The main comparison is how well the directors of these two films (Peter Weir and Wolfgang Petersen respectively) give you a strong sense of what life is like aboard a war ship (British Frigate and German U-boat respectively). Beyond that the two movies are quite different. Das Boot focuses on the horror and consequences of war while Master and Commander focuses more on the glory.

Pete Lyons has an interesting perspective on the heart of the film -- the relationship between the captain and ship's surgeon.

John Lennon

I was listening to the radio this morning and John Lennon's Happy Christmas (War Is Over) was playing. I realized that 23 years ago this week Lennon was murdered (December 8, 1980). I wasn't a huge Beatles or John Lennon fan but they were a part of the background music of my life since childhood. Being old enough to remember the Beatles, I can remember the effect they had on people. Someone younger just knows how the story ends. John Lennon's death was a shock. Not to sound too maudlin but I think for a lot of people it shattered a secret wish -- somehow, someway, the Beatles would reunite and create music again. It went beyond wanting to see them perform again, it was more of a matter of restoring a part of their earlier lives.

Wednesday, December 10, 2003

ATMs struck by W32/Nachi worm

I guess Microsoft didn't follow my advice and strip out the "bad parts" of Windows XP before letting it be deployed for ATMs.

According to this article from InfoWorld, Diebold revealed that some of its Windows-based ATMs operated by two financial services customers were struck by the W32/Nachi worm. The two customers had to take down and patch their infected ATMs before they could be brought safely back online. I don't expect that this sort of thing will be common since ATMs are on private networks but the potential for ATMs to be disabled when the next wave of worms flood though is still there. Imagine the public reaction if some large percentage of ATMs went out of service when the next W32/Sobig or W32/Klez virus got loose.

Adam Bosworth and REST

Adam Bosworth has a blog. He's a brilliant guy so it's worthwhile to read his thoughts in this format. He posted some recent entries about REST. I'll admit that I haven't been following the REST vs. SOAP debate. And I gave up trying to keep up with the XML specs du Jour. My basic impression with the XML world is that the specs are layering complexity on top of complexity on top of something that was initially quite simple. But there's just so much to track and as Adam says "I have a day job". That said, I'll try to find some place to dip my toe back into this rapidly moving stream. As a start, I think I'll try to get back to reading Sam Ruby's blog on a regular basis. Some many blogs, so little time.

Hell on the road to Prague

James Gosling writes about his recent hellish experience trying to travel to Prague to speak at the TechDays conference. The "Hell" of his experience had little to do with Prague or the Czech Republic, it was mostly the incompetence of the travel agency and the "Hell" that went through stuck in Charles du Gaulle airport to try to get the problem resolved. (James is Canadian and the Czech Republic requires visas for entry by Canadian citizens). End result: James got the visa but never made it to Prague. A good travel agent is worth his/her weight in gold.

My father-in-law and his wife had a similar experience recently when they traveled to Europe. They were booked to fly on British Air through Heathrow on their way to Slovakia. She's a Slovak citizen, living in the US with a permanent residence visa. When they booked their flight, no one told them that she'd need a special visa to travel through the UK. They didn't find this out until they got to the airport. End result was that they had to travel to New York City to get the visa at the British Consulate, delaying their trip by a few days. The folks at the British Consulate were not particularly helpful but after two attempts they did manage to get the visa . Changing reservations to avoid traveling through Heathrow was not feasible, it would have cost them a bundle to change their tickets. To add insult to injury, her passport was stolen during the trip requiring her to go through the whole process again on their return.

A couple more Palm OS 5 applications that support the Treo 600

Hand/RSS (an RSS aggregator) now works properly on the Treo 600 and supports the five-way navigator. It handles the Treo's small screen pretty well and works will all of the RSS feeds that I've tried. Launcher X is an application launcher (replacement for the default Palm Applications launcher). The latest version also supports the Treo 600 including five-way navigation. Looks pretty cool. I don't think that I really use the Application launcher enough to buy Launcher X. I usually rely on McPhling to launch applications and switch between them.

If you've been using Palm devices for a long time, you'll probably notice that Graffiti is used a lot less on newer devices (especially the Treos). This may seem like sacrilege but it's much faster to use the five-way navigator for simple operations than to pull out the stylus. This is especially true for Palm-based phones where one handed operation is really important.

Tuesday, December 09, 2003

Why the Sky Was Red in Munch's 'The Scream'

Edvard Munch's 'The Scream' is a disturbing piece. According to an entry on the Nasjonalgalleriet website, the first time Munch described the experience which gave rise to this painting was in his literary diary. He wrote:
I was walking along the road with two friends.
The sun was setting.
I felt a breath of melancholy -
Suddenly the sky turned blood-red.
I stopped, and leaned against the railing, deathly tired -
looking out across the flaming clouds that hung like blood and a sword
over the blue-black fjord and town.
My friends walked on - I stood there, trembling with fear.
And I sensed a great, infinite scream pass through nature."
Scary stuff but did the sky actually turn blood red? Possibly. According to this article, Munch may have been inspired by the vivid red twilights that were created from debris thrown into the atmosphere by the Krakatoa eruption from November 1883 through February 1884.

Back in 1994, on opening day of the Winter Olympics in Norway, "The Scream" was stolen from a museum in Oslo. It was recovered three months later undamaged. I remember at the time the press was reporting that this was considered Norway's "most famous" painting. Was that hyperbole or fact? It's such a disquieting image.

A Killing Floor Chronicle

Here's an interesting article in the LA Times about Virgil Butler, a former poultry worker turned animal-rights activist / blogger. His blog can be found here. Some of his descriptions of the day-to-day life at the Tyson "processing plant" where he worked are pretty gruesome. I don't think he's exaggerating. A meat packing / processing plant can be a nasty place. I worked at a meat packing plant in upstate New York during the summer in high school and college. It paid substantially better than any other summer jobs I could find. The plant (now closed) produced Tobin's First Prize hotdogs, cold cuts, etc. It was a slaughterhouse and processing plant: hogs go in on one end, finished products come out the other end. You don't want to know what goes on in between.

Warning: you may not want to read the rest of this while eating. Working in a meat packing plant was difficult, grueling and sometimes dangerous work. I had a number of different jobs: I ran machines that ground through 100 lb blocks of frozen meat, hung pork belly meat (aka bacon) for the smokers, moved racks of hotdogs from the smokers, ran "cure" injecting machines for hams, etc. All these jobs were done at a frenetic pace; injuries were common. One morning I accidentally sliced open my hand with a knife. The company doctor stitched up the wound without aid of anesthetic. Ouch. I never worked any shifts on the Kill Floor but I spent time there. It was the most dangerous part of the plant. The hogs were shackled upside down, shocked to unconsciousness and their throats were slit. After the blood drained, they passed through a chamber where all of the hair was burnt off their hides. That was the nastiest smell I've ever had the displeasure to be around. It just gets up into your nostrils and stays there.

I never saw any abuse or cruelty to the hogs as Virgil says happened at Tyson but hogs are much larger and more aggressive than chickens. The way in which hogs are slaughtered is "humane" but watching it happen is not for the squeamish. I couldn't help but feel sorry for them. The blood and gore that are omnipresent at a meat packing plant just became part of the daily routine.

I appreciated the pay that I got and knew that I was only working there for summers. It wasn't my "career". I didn't have to think about the place as soon as I punched my timecard at the end of the day. It was honest hard work. Also, it kept me in much better shape than working as a software developer.

Have Laptop, Will Travel

On my drive into work this morning, I saw someone trudging through the snow balancing an open laptop in his arms. He semed to be trying to type while walking. Route 110 in Westford is dangerous for pedestrians even when the curbs and sidewalks aren't covered with snow. The guy was either crazy enough to try to work while he was walking or he was Warchalking. Either way, it's a dangerous way to start the day.

Monday, December 08, 2003

Java Goes to Wal-Mart (Not Really!)

According to an article in eWeek Sun is challenging Microsoft on a new front: the consumer market with its Java Desktop System (JDS). The article indicates that Sun is talking to Wal-Mart and Office Depot. I've lost track of how many vendors have decided to "challenge" Microsoft with a Linux-based desktop system. The consumer market is very tough. Just ask Apple. And Sun has no real experience in the consumer market so why do they think they'll succeed with this strategy?

Does Java make a difference? No and as I've blogged before, there's very little Java in JDS. And even if JDS was "pure" Java, consumers don't care what programming language was used to build the desktop systems that they use. John Mitchell on java.net has expressed similar thoughts. It seems like Sun has decided to flog Java as a brand to be applied broadly, above and beyond Java as a technology. Microsoft was doing this with .NET was well but pulled back on that strategy. For example, Windows 2003 Server was originally going to be called the .NET Server but it contained very little .NET technology.

I thought this quote from an unnamed IT manager in the eWeek article was interesting:
"I personally keep Java off my computer because it crashes the system," he said. "If Sun had the interests of the customer in mind, then the Sun desktop would be written in C and donated to Linux. Sun is no better than Microsoft."
Actually the Sun desktop is written in C so maybe Sun lost a sale here by putting Java in the product name. Pretty funny.

Sunday, December 07, 2003

A History of Snow Removal

Keeping with the snowy theme for this weekend, here's an interesting article on the history of snow removal. (Via MetaFilter)

Northeaster buries N.E.

The headline on the front page of today's Boston Globe reads "Northeaster buries N.E." Don't you love headlines like that? This storm didn't qualify as a blizzard. The sustained winds and visibility didn't quite meet the NOAA National Weather Service definition but we did get an awful lot of snow and the winds were quite strong.

It's a little hard to tell how much snow we got. It was blowing and drifting so much. My estimate is that Arlington got at least 18 inches, possible as much as 2 feet.

The benchmark for snowstorms in Boston is the Blizzard of '78. The 1978 blizzard hit during morning rush hour and stranded a lot of people in their cars. The highways ended up clogged with snow. The cars sat there for days. I didn't live in Boston back then so my recollection of that storm is a little different. I'm a little embarrassed to admit that the evening before I was at an ELP concert in upstate New York. The storm hit there earlier than Boston and the band's limos got stuck in the snow. The band finally appeared on stage two hours late. The next day it kept snowing and snowing. Tenants in the second-floor apartment below mine could jump from their window into the huge snow banks below. Now that was a storm.

Update: Years later I ended up sitting next to Greg Lake on a flight to New York City. I was going to ask him about the blizzard concert but he and Carl Palmer (who was sitting behind us) seemed pretty pissed off about their flight arrangements so I decide to leave him alone.

Saturday, December 06, 2003

Snowcraft

While it's snowing hard outside here in Boston, let's have a virtual snowball fight. No one gets hurt and you avoid getting snow down your neck. (Via MetaFilter)

The Nutcracker Vs. The Sugarplum Fairies

My son found this game on nick.com. He said that it was funny but "kind of mean". Agreed.

Shake, Shake Shake

Shake this Holiday Snowglobe. I'm reminded of an old Twighlight Zone episode called The Little People. Let it sit for a while, there's some interesting action among the residents of the globe.

FeedDemon

I've been using FeedDemon as an RSS aggregator for the past few days. I like the UI and it's certainly faster to skim lots of blogs this way. It's been pretty robust so far but I did manage to crash it just now. An odd-looking application error alert came up. Looks like FeedDemon is written in Delphi. It's good to see that Pascal never really died.

Snowstorm

We're getting hit by our first big snowstorm of the season this weekend. We have 8-9 inches of fluffy snow on the ground now. The forecast is for 1-2 feet of snow by the time the storm is over on Sunday. Snowstorms can be fun as long as you don't have to drive or fly and as long as the power stays on. It's beautiful to look at and exciting for kids. You can play in snow, build snowmen, slide down it on saucers and sleds. We have a good hill in our backyard for the kids to slide down. Several years ago we had an improptu afternoon party for our neighbors during a snowstorm after the power went off. Around March if we're still getting snowstorms we'll start wishing for Spring to start but the early storms can be enjoyable.

State of the blog

I begin posting to this blog about four months ago (in August). I read a fair number of blogs and wanted to join the fun. When I started I didn't know whether I'd be able to come up with enough interesting things to say but I wanted to find my own "blog voice".

It's been an interesting experience. Blogging is not exactly like publishing, more like scribbling graffiti on a wall or sending off a message in a bottle for someone you don't know to find. It's been fun so far and I don't have any reason to stop. Blogger still works well enough for me and I haven't had the time or inclincation to switch to something else. I'd like to to clean up the page layout and switch to a better comment system.

I haven't blogged as much about software development as I'd like. I've got some thoughts in that area that I eventually plan to blog about. At this point I blog about what interests or amuses me at the moment. I hope that the three or four of you who read this blog find some of it interesting.

Friday, December 05, 2003

PVRblog

PVRblog is a new weblog focused on PVR (personal video recorder) technology such as TiVo, ReplayTV, etc.

Gigapixel Images

The original source for this image contains about 1.09 billion pixels (40,784 x 26,800 pixels). It was stitched together from 196 separate digital images. The image file using non-lossy compression is nearly 2 GB. Think we'll get to a point when 1 GB digital cameras will be available?

Sun Drops Bid to Join Eclipse

According to TheServerSide.com, Sun has decided not to join forces with Eclipse. Personally, I was surprised that Sun had considered joining Eclipse in the first place, especially given its name. .

Thursday, December 04, 2003

Bad Santa

I saw Bad Santa this evening. Directed by Terry Zwigoff who did Crumb and Ghost World. The Coen brothers produced it. If you're looking for something to counter treacly Christmas movies look no further but beyond the concept of a department store Santa as an alcoholic con man, there's not much here. The Coen brothers may have been involved but it plays more like something from the Farrelly brothers.

Sun Java Desktop

Rory Blyth has a funny blog entry about Sun's Java Desktop System. Rory's main point is that it looks an awful lot like Windows and Microsoft seems to be the only company that developers complain about when it comes to idea theft. That may be true but there's more blog fodder here.

Look at a screenshot of this desktop. It's Linux with a GNOME UI that's skinned to look like Windows. Fine. Where's the Java in that? The data sheet says that it includes a Java Runtime Environment. Well, seems like that would be kinda useful for a Java Desktop. It says that it includes StarOffice. Nice. But where's the Java? The data sheet says that it runs Java applications and has a screenshot that shows two lame looking Swing-based applications. Wow. And it says that it includes "plenty of applications" including "Text Editor, Calculator, CD Player, Media Player, Image Viewer...". World class.

So is the "Java" in the product name because they included a Java Runtime? By that logic isn't Macintosh OS X a "Java Desktop" too? And what's the point of a "Java" Desktop in the first place? Java is a programming language. No vendor (except perhaps Sun) crows about what programming language was used to build their Desktop offering. Apple didn't feel that it was necessary to call Macintosh OS X the "Apple C++ / Objective-C Desktop". Why did Sun feel compelled to stick "Java" in this product's name? And it gets worse, the data sheet indicates that they renamed "Sun ONE Calendar and Messaging Servers" to "Sun Java System Calendar and Messaging Servers". What's up with that?

Dark Side Switch Campaign

This parody of Apple's switch campaign is pretty funny. (Looks like this link is at least a year old. I must have blinked and missed it).

MobileWhack - squeezing the last ounce of mobility

MobileWhack is a new weblog that is "all about that mobile handset, palmtop, hiptop, ipod, or laptop in your pocket, purse, briefcase, or dangling from your utility belt. It's about squeezing every last ounce of mobility out of your mobile device." It's only been "live" for a few days and already has some good content.

Tivo for audio streams?

Tivo is useful for time-shifting television viewing without the hassle of dealing with program listings and videotapes. A cool idea. What about time-shifting audio? I was listening to a ShoutCast channel the other day and thought: "Wouldn't it be cool if I had something that would record the news or a radio show and let me listen to it when I want to?" Audible.com provides a subscription service that does something similar but since I can already get the stream via ShoutCast, why bother with a subscription?

Pre-disastered

In the early 70s, a Mohawk Airlines commuter plane with a malfunctioning propeller lost altitude while on final approach to Albany County Airport. It crashed into a two-family house. Miraculously, of the 24 people on board the plane and several occupants of the house, only one person was killed. I grew up in the Albany area and this was a huge local news story. As a child, the concept of a plane falling from the sky and crashing into a house, was scary. Despite the fact that it hadn't happened before (or since) in Albany, every once in a while I'd catch myself noticing plane engine noises late at night. "Hmm, is that engine sputtering or stopping?". I guess I didn't appreciate statistics at that point.

If you saw the movie version of The World According To Garp, you may remember the scene where Garp is house hunting with his wife, Helen. As they are being shown a house by a real estate agent, an airplane crashes straight into it. Garp, to Helen's horror, turns to the agent and said, "We'll take it!" "Honey, honey," he tells her, "the chances of another plane hitting this house are astronomical. It's been pre-disastered. We'll be safe here"

Update: I just discovered that predisastered has become a meme. It's a useful concept so I guess I shouldn't be surprised.

Wednesday, December 03, 2003

Calvin and Hobbes

Here's an interesting article on Bill Watterson, creator of Calvin and Hobbes. Watterson retired the comic strip in 1995 and apparently has retired himself; at least as a cartoonist. I loved Calvin and Hobbes and really miss the interplay of the characters. I rarely read comic strips in the newspaper these days except Dilbert which is funny but so crudely drawn. No offense to Scott Adams but I think the comic strips my friends and I drew as children were on par with his strips. (But our strips had more in common with Captain Underpants than with Dilbert ).

Even though it was "only" about a kid and his stuffed animal, Calvin and Hobbes was a step above the rest in wit and sophistication. It was a throwback, more like the early days of comics than much of what appears on the Comics page in newspapers these days.

One Calvin quote from the article strikes home with respect to my blog content:
I hate to think that all my current experiences will someday become stories with no point
Ouch. That should be my new tagline.

Calculator Memories

Thanks to Ned for triggering a geek memory for me. Ned blogs about the museum of HP calculators. I had an HP 25 which I bought at Macy's for $200. (A massive sum for me at the time). It was programmable and had great geek appeal (or as was more common at the time great "nerd" appeal). HP sent out slick full-color quarterly newsletters about all of the cool stuff you could do with their calculators. Even though the HP-25 programming "language" was limited, it was cool to have something portable that you could use to program repetitive calculations and simple games.

Competing with the HP was a line of scientific calculators from Texas Instruments, notably the TI SR-50. They were cheaper than HP and had most of the functionality, except for programmability. But they did not use RPN notation, a key difference if you were used to HP calculators. A friend of mine could get TI calculators cheaply through his Dad (who worked at TI in Andover) so a lot of our friends had TI calculators. We had long arguments over which was easier to use or more powerful. Pure geek, er nerd, behavior.

There's an online museum devoted to Texas Instruments calculators as well.

I still have my HP-25 but haven't used it in years. I replaced the rechargeable batteries a couple of times but I doubt that I could find replacements now. It still works when plugged into the AC adapter. Also, if I ever want to walk down HP-25 memory lane, I can use the very cool HP-25 simulator. You can even use the programming features. Source code can be found here.

An anniversary, one week late

Two years ago, last Wednesday, I joined IBM. Officially I was rejoining IBM. I had worked at Iris and Lotus, both subsidiaries of IBM for over ten years before that. I was at a (now dead) startup for one year in the interim. Tempus Fugit.

Welcome to Winter

I got up this morning and looked out at our street and thought "We got another dusting of snow?". On closer inspection it wasn't snow. The street was stained white from the salt that was put down to deal with yesterday's icy roads. Also, it's bone chilling cold this morning: 18° F (-8° C) according to our outside themometer. Winds are 18-28 mph. Winter has officially arrived.

Tuesday, December 02, 2003

The Guts of a New Machine

Interesting article in the New York Times Magazine on the design of the Apple iPod.

Pocket Tunes and ShoutCast

Pocket Tunes is an MP3 player for Palm devices. It works great on my Treo 600. I can put a few CDs of music on an SD card and listen. It's redundant if you already have something better such as an iPod but the sound quality is good and I don't need to carry anything else. The latest version of Pocket Tunes supports something that you can't do with an iPod. It supports streaming audio via ShoutCast, taking advantage of the data network available on the Treo 600. It works quite well, handling ShoutCast stations with bitrates up to 64Kb without dropping packets. Sure, in some respects it seems like a silly idea. Why not just install an FM tuner and avoid using the data network? One reason is that you can get access to any ShoutCast station around the world. And the selection of ShoutCast stations is enormous, much broader than any local selection of FM stations.

Kronos

When I was around eight years old, I saw a science fiction movie that scared the crap out of me. Nightmares. It wasn't gory or particularly violent. I just recalled a giant black rectangular robot marching ominously across the landscape. The scientists and military were powerless to stop it. When I was in college and up late studying, I had the television on in the background and realized that they were playing the same old movie. It was called Kronos. On second viewing the special effects were laughably bad and I couldn't believe that the film had scared me. I wasn't particularly sophisticated as a child and I think the powerlessness of the adults in the film was disturbing.

It's amazing what a little snow can do to your commute

We woke up this morning and saw a light dusting of snow on the ground. Wow, that looks nice. I didn't know that this light snow was going to be responsible for one of the worst commutes I've ever had. My drive to work usually takes about 45 minutes including dropping my son off at preschool. I have a "reverse commute". The time spent driving is mostly due to the driving distance, not the traffic. Not this morning. Boston roads were iced up. My drive took nearly three hours. Very frustrating. I wish I had had a book on tape or something more interesting to listen to.

Monday, December 01, 2003

one word

one word:
"simple. you'll see one word at the top of the following page.

you have sixty seconds to write about it.

as soon as you click 'go'the page will load with the cursor in place.

don't think. just write." (Via Evhead)

Easy as A-B-C

It's cold and flu season again. I'm not a germaphobe but I've been thinking about ways to avoid getting sick. Most viruses and bacteria are spread through physical contact. The simplest way to reduce risk is to wash your hands. Americans seem to be compulsive about cleanliness but studies have shown it's not entirely true. People don't wash their hands as often as they ought to. Hand washing is easy and reduces your chance of getting sick. Reciting the alphabet takes roughly 15 seconds - about the time needed to properly wash your hands.

Mr. Picassohead

Mr. Picassohead lets you draw crude Picassoesque figures.

This page is powered by Blogger. Isn't yours?  Subscribe with Bloglines