The iPod is nice, but…

So, I drank the Kool-Aid(tm) and bought an iPod last Sunday. I bought what at the time was called a “60GB iPod Photo” for $449, but now a few days later is simply called a “60GB iPod” for $399. (The “Photo” moniker and $50 were dropped.)

Since I bought mine at a local store, I didn't get the laser engraving on the back, but now that the price has dropped, I may go ahead and return it (paying a $50 “restocking” fee), and order one online with my email address engraved on the back.

Modern iPods don't come with a doc, firewire cable, remote, belt clip, or much else (you get the iPod itself, charger, USB cable, and ear buds), so I forked over another $40 for a doc. I wish it were all included, but then, those that don't want them would be forced to pay for them, so it makes more sense that they're separate (if the price has been lowered accordingly, of course).

As nice as the iPod is (and its companion iTunes software, which completes the iPod experience), there are some very annoying design flaws...

  • The ear-bud “headphones” have virtually no visual or tactile indication as to which is for the left ear, and which is for the right. That means that you must inspect them each time you pick them up to see which has the tiny little “L” and “R”. This is absolutely moronic, and another case where Apple puts form over function. Apple's form, in general, is very nice, as is their function, but I wish they'd made one ear-bud a different color from the other, so you could tell at a glance, without having to use many neurons, which is which. I guess I'll try to find colored foam covers or something.

  • Why can't I watch videos on my iPod? It has a nice 2" color display for pictures — I'd like to have some baby movies on there as well. I'm hoping Apple will eventually add this capability.

  • The iPod is all about recorded sound, so you'd think that adding a small built in microphone wouldn't be that hard. You could then use it to make audio notes to yourself (perhaps for later plodcasting), record lectures, etc.

About the iTunes/iPod software....

  • The shuffle style should be able to be set on a per-playlist or per-genre, etc. basis. Except in rare situations, I always like shuffle play. However, with classical stuff that has movements, I want the movements in order. If I make the album unique, I can put the shuffle mode onto “album” and the movements therein will go in order. But I want that only for classical.

  • For playlist maintenance with iTunes, it would be nice if, as you went through your Library (the actual songs from which all playlists are composed), the playlists which include the song would be highlighted. As it is, there's no easy way to find out what playlists a particular song is in. This is a no-brainer UI component; it's pretty shocking that they don't do this.

  • There should be a “list all songs not in any playlist” feature. Similarly, there should be a “list all songs not in this playlist” feature, so you can easily scan for missing items.

  • There's no way to turn off the annoying “do you really want to delete this song?” dialog that pops up when you try to delete a song.

  • I'd like to be able to mark a song and/or playlist as “don't export to iPod”. I know that I can move out of the auto-update mode at which point only playlists I mark will get copied over, but I'd like a simple “don't copy me” override to the automatic updates.

  • The iTunes “help > provide iTunes feedback” menu item brings you to a “request iTunes Music Store music” page (e.g. “I want the music store to provide more Falco songs”). Fishing around on the web site brings up a “provide iTunes feedback” link, which brings you to the same “request music” link. I guess they're not interested in bug reports.

  • The bricks-and-mortar Apple store I went to sold a bazillion different belt clips (from both Apple and third parties). But none of them were available to see and hold, to see how they felt. You could look in the shrinkwrap and try to guess how it might look and feel, but that's it. How do they expect to sell any of theses? (Can anyone recommend an iPod carrying solution?)


My dad can kick your butt!

I have had back problems for the last few years, and although I do a lot of stretching which seems to help at times, overall it's more bad than good. My dad has suggested that I do situps, and he reiterated it again this morning (I'm in Ohio now for the next month). He remembers reading in Reader's Digest 40+ years ago about how an imbalance between the back muscles (which get a good workout in daily life) and the stomach muscles (which apparently don't) can create back problems.

My dad is in his 70s, is arthritic, has bad shoulders, and hasn't had a good night's sleep in 10+ years. But, he runs a little every weekday, and after each run does one minute of situps. I asked him to show me how he does situps, and he got onto the living room floor, stuck his feet under a La-Z-Boy, and started doing normal full-range situps at the rate of about one per second. He stopped after 50. It took about a minute. I watched in wide-eyed wonder and amazement.

Normally, he watches a clock to time his minute, and gets about 45, so it's 1.25 sec each. He's never actually done 60 in a minute, but it's still extremely impressive even not considering his age.

When I was in 7th grade, I had the school-system (K-12) record for situps: 102 in two minutes, but those days are long past. My back simply hurts to much to do them. I'll have to ask Alan (who has a masters in sports physiology) how I might work on that.

In any case, I was cool to see him kick some serious sit-up butt. Think you're in shape? See if you can pound out 45 situps in a minute.


The (Coding) Commands According to Dr. Bergeron

In my first semester at grad school (wow, now 18 years ago... I'm old), all CS master's students were required to take two intensive “this is what you should have learned during undergrad classes”, CS801 (theory) and CS802 (practice). The latter was taught by Dr. Dan Bergeron, who was — and probably still is — an excellent teacher, but whom I remember most as a man of stellar integrity and fairness — a good father-figure that most collegiate environments lack.

Anyway, while rummaging around some old papers the other day, I found this handout on “coding commandments” from the class. (It seems that programming in the class was done in Pascal — ugh.) The commandments are still as relevant today as then (well, perhaps the last one is more “advice” than “commandment”, and about some others, I do remember bristling at some of them, but I no longer remember which.)

I thought some of you might enjoy this, so pass it along...

Coding Commandments
CS802 - Fall 1987
October 30, 1987

The programming style conventions listed below shall be followed for programs submitted in this course. I firmly believe programs that follow these guidelines are more readable, more comprehensible and more maintainable than programs that do not follow the conventions. Furthermore, these conventions are consistent with well-established philosophies that define what constitutes good software engineering and are not just my idiosyncrasies (in spite of the fact that lots of existing software does not follow these guidelines). Finally, I will be the last to claim that there are no circumstances in which these guidelines should be violated. (In this course, however, there will be no exceptions!)

(1)  

Every procedure/function shall have exactly 1 return statement and that statement will appear at the bottom of the procedure as the last executable statement of the procedure.

(2)  

Every identifier used in the program shall have an associated comment that describes what the function of the identifier is. This includes symbolic constants, types, fields in records, parameters, variables, etc.

(3)  

Every procedure/function shall be preceded by a clear separator (such as a row of asterisks or dashes or whatever) with a clear indication of the procedure name and a brief comment describing the essential function provided by that function.

(4)  

A long procedure is a bad procedure. All the code for a procedure should fit on no more than one page, so that it can be readily comprehended by a reader.

(5)  

Indentation of code is a very important tool in producing understandable code in which the control flow is readily discernible. Use good indentation that clearly shows the control flow. Don't let comments or debugging code obscure the indentation. Don't indent more than 2-4 blanks per nesting level.

(6)  

Use a blank line to clearly identify major loop or conditional statements. A brief comment at the end of the line with the statement keyword is also very helpful if it tells at a high level what the statement does. If you have a loop or conditional that covers more than 8 lines or so, make sure that the end statement includes a comment that identifies which statement is being ended. If there are nested statements of the same type, be sure to include enough information to clearly identify the right one. (For example, end { while i <> 0 })

(7)  

If you have an if-then-else statement with 1 short alternative and one long alternative, arrange the condition so that the short alternative is the then clause, and the long one is the else.

(8)  

Use nested else-if in preference to nested then-if.

(9)  

Every loop should have exactly one exit. Do not use a loop statement if a while or repeat is what you mean.

(10)  

Use meaningful variable names.

(11)  

Use symbolic constants excessively.

(12)  

If you use arrays, you must always check the index for exceeding the bounds before trying to access the array element indicated by the index.

(13)  

If you use lists, use a dummy sentinel, so that no list is ever empty. Generally, it is also wise to always have a tail pointer for efficiency of search and addition to the list. For searching, store the key you wish to search for in the tail (which is the sentinel), so that you are guaranteed to find it. Finally, if you are bothering to implement a list at all, you might as well implement two-way lists. The extra overhead of having the back pointer is insignificant and it makes deletion much easier.


I know what flipping the bird means, but….

The other day I pulled out into a three-lane (in one direction) road, and just as I'm pulling out, I realize that the car I thought was in the middle lane was really in the near lane. They were far enough away that my pulling out in front of them wasn't dangerous, but it was certainly rude, and I felt bad. I wanted to stick my hand out the window and give some kind of “I'm sorry — my bad!” sign, but I don't know of any.

Is there any universally understood (at least, universal except for me) driver's sign for “oops, sorry”? There should be.


I didn’t kill myself!
Brian Acton batting away a disk meant for Dave Filo
as Susan Churchill and Jesse MacNish look on
( from a game in May 2001 )

In a previous life (before the book, before the baby) I used to play ultimate Frisbee with friends at Yahoo. I played in the first Y! ultimate game, back in 1997, and fairly consistently for about four years. I wasn't outstanding, but wasn't too bad. Physically, I was in pretty good shape. (If you're not familiar, Ultimate Frisbee is like soccer with a Frisbee instead of a ball.)

Then, I started working on the book. With every waking moment not devoted to work going to the book, I soon turned into a blob (gaining 15 pounds over the two years working on it). Ugh. Then Anthony was born, and any thoughts of getting back in shape went out the window. Ugh.

I've long had random back aches, but once when Anthony was 7 months old (two years ago), I was carrying him and my back just “went out” (whatever that means -- I effectively couldn't walk for three weeks after). Since then, on my best days, my back only hurts a lot. It's horrible. It's gotten so that on some days I'm so scared about how my back will hurt that it starts to hurt all on its own. When the thought of having to put your socks on drives you to terror, something like running (which is what ultimate Frisbee is all about) is seems unthinkable.

Yet today, I visited Yahoo! and played Ultimate with the guys, and actually could do much more than I'd thought. The times when the game was most active was the best, as I thought less about the pain (or potential pain — there was both) and so my fear didn't cripple me — just the actual pain. It was wonderful to get out there again, even if only for perhaps 20 minutes.

The best part about it is that I didn't kill myself. I thought I'd be in major pain afterward, but I don't even feel achy (at least not any more than I would normally). It makes me want all the more to get back into shape!