Wednesday, August 24, 2005

How much of your youth can you still stomach?

Apparently, the game is this:

The instructions are: Go to, and do a search on the most popular 100 songs from the year you graduated high school. (You can do this by searching on the year you graduated). Bold the ones you actually like. (Understand that the word "like" in this case means, at the very least, "wouldn't immediately change the radio station from.") Pick a favorite. Underline that favorite. And Strikethru the ones you loathe. Italicize the ones you consider to be guilty pleasures.

Well, I never actually graduated High School. I was granted sufficient credits to graduate from the Catholic school I had been attending on a part-time, casual, not-enough-money-to-play-pool-today basis at the end of the 12th grade in 1978, but without merit and on the condition that I continue elsewhere. You see, in my day, and in the province of Ontario, there was still a year to go if you wanted to attend University. I took three maths and three sciences in grade 13, but dropped out of Chemistry with a month or so to go in the year due to irreconcilable differences with my teacher (who, by the way, taught my kid brother the same analysis technique I was failed for inventing some years later, so although my year remains incomplete, I feel somewhat vindicated). I would have graduated in '79, along with Ben and Gregg, though, so here's my list:

  1. My Sharona, The Knack
  2. Bad Girls, Donna Summer
  3. Le Freak, Chic
  4. Da Ya Think I'm Sexy, Rod Stewart
  5. Reunited, Peaches and Herb
  6. I Will Survive, Gloria Gaynor
  7. Hot Stuff, Donna Summer
  8. Y.M.C.A., Village People
  9. Ring My Bell, Anita Ward
  10. Sad Eyes, Robert John
  11. Too Much Heaven, Bee Gees
  12. MacArthur Park, Donna Summer
  13. When You're In Love With A Beautiful Woman, Dr. Hook
  14. Makin' It, David Naughton
  15. Fire, Pointer Sisters
  16. Tragedy, Bee Gees
  17. A Little More Love, Olivia Newton-John
  18. Heart Of Glass, Blondie
  19. What A Fool Believes, Doobie Brothers
  20. Good Times, Chic
  21. You Don't Bring Me Flowers, Barbra Streisand and Neil Diamond
  22. Knock On Wood, Amii Stewart
  23. Stumblin' In, Suzi Quatro and Chris Norman
  24. Lead Me On, Maxine Nightingale
  25. Shake Your Body, Jacksons
  26. Don't Cry Out Loud, Melissa Manchester
  27. The Logical Song, Supertramp
  28. My Life, Billy Joel
  29. Just When I Needed You Most, Randy Vanwarmer
  30. You Can't Change That, Raydio
  31. Shake Your Groove Thing, Peaches and Herb
  32. I'll Never Love This Way Again, Dionne Warwick
  33. Love You Inside Out, Bee Gees
  34. I Want You To Want Me, Cheap Trick
  35. The Main Event (Fight), Barbra Streisand
  36. Mama Can't Buy You Love, Elton John
  37. I Was Made For Dancin', Leif Garrett
  38. After The Love Has Gone, Earth, Wind and Fire
  39. Heaven Knows, Donna Summer and Brooklyn Dreams
  40. The Gambler, Kenny Rogers
  41. Lotta Love, Nicolette Larson
  42. Lady, Little River Band
  43. Heaven Must Have Sent You, Bonnie Pointer
  44. Hold The Line, Toto
  45. He's The Greatest Dancer, Sister Sledge
  46. Sharing The Night Together, Dr. Hook
  47. She Believes In Me, Kenny Rogers
  48. In The Navy, Village People
  49. Music Box Dancer, Frank Mills
  50. The Devil Went Down To Georgia, Charlie Daniels Band
  51. Gold, John Stewart
  52. Goodnight Tonight, Wings
  53. We Are Family, Sister Sledge
  54. Rock 'N' Roll Fantasy, Bad Company
  55. Every 1's A Winner, Hot Chocolate
  56. Take Me Home, Cher
  57. Boogie Wonderland, Earth, Wind and Fire
  58. (Our Love) Don't Throw It All Away, Andy Gibb
  59. What You Won't Do For Love, Bobby Caldwell
  60. New York Groove, Ace Frehley
  61. Sultans Of Swing, Dire Straits
  62. I Want Your Love, Chic
  63. Chuck E's In Love, Rickie Lee Jones
  64. I Love The Night Life, Alicia Bridges
  65. Ain't No Stoppin' Us Now, McFadden and Whitehead
  66. Lonesome Loser, Little River Band
  67. Renegade, Styx
  68. Love Is The Answer, England Dan and John Ford Coley
  69. Got To Be Real, Cheryl Lynn
  70. Born To Be Alive, Patrick Hernandez
  71. Shine A Little Love, Electric Light Orchestra
  72. I Just Fall In Love Again, Anne Murray
  73. Shake It, Ian Matthews
  74. I Was Made For Lovin' You, Kiss
  75. I Just Wanna Stop, Gino Vannelli
  76. Disco Nights, G.Q.
  77. Ooh Baby Baby, Linda Ronstadt
  78. September, Earth, Wind and Fire
  79. Time Passages, Al Stewart
  80. Rise, Herb Alpert
  81. Don't Bring Me Down, Electric Light Orchestra
  82. Promises, Eric Clapton
  83. Get Used To It, Roger Voudouris
  84. How Much I Feel, Ambrosia
  85. Suspicions, Eddie Rabbitt
  86. You Take My Breath Away, Rex Smith
  87. How You Gonna See Me Now, Alice Cooper
  88. Double Vision, Foreigner
  89. Every Time I Think Of You, Babys
  90. I Got My Mind Made Up, Instant Funk
  91. Don't Stop 'Til You Get Enough, Michael Jackson
  92. Bad Case Of Lovin' You, Robert Palmer
  93. Somewhere In The Night, Barry Manilow
  94. We've Got Tonite, Bob Seger and The Silver Bullet Band
  95. Dance The Night Away, Van Halen
  96. Dancing Shoes, Nigel Olsson
  97. The Boss, Diana Ross
  98. Sail On, Commodores
  99. I Do Love You, G.Q.
  100. Strange Way, Firefall

Not exactly a great year. Then again, some of these songs don't seem to belong at all. I'm pretty sure that "Pieces of Eight" was a very early '78 release — I distincly remember it blaring on the 8-track in a Pacer belonging to a friend at the aforementioned Catholic school — so "Renegade" shouldn't be there. "Parallel Lines" was a mid-'78 release, so "Heart Of Glass" should have come and gone before the new year. (Okay, it should have gone much sooner than that. I liked Blondie the punk band; that disco album was more than a little disappointing. And "Autoamerican" did nothing to make me feel better.) I have a feeling that the release and promotion schedule in Canada is/was significantly different than in the US; there are a lot of songs I remember from different years from my American friends, sometimes by quite a few years. "Sunshine On Lieth" was everywhere in Canada in '88; I hear it didn't get any non-college airplay in the 'States until after Benny And Joon was released.

I won't apologise for "Chuck E's In Love". Rickie Lee Jones' eponymous album is one of my all-time favorites and still gets heavy rotation in my listening list. Song 1, side 1, may not be the best song on the album, but it was the song that got me to listen to the rest.

Tuesday, August 23, 2005

Sorry about the Captcha* thing

Once upon a long time ago (that would be last week some time), it was easy to comment on this blog. Nary a bit of comment spam ever came my way. In the past week and a bit, I've had to delete several. While I haven't had nearly the problems that some folks have had, I thought I'd take advantage of a Blogger feature to try to nip this stuff in the bud.

A word of warning, though -- the Captcha* thing times out reltively quickly, so if you are entering a longish comment with typing skills that match my seventeen words per hour, you may have to resubmit your comment with a new Captcha value.

Completely Automated Public Turing Test to Tell Computers and Humans Apart. You know, those squiggly alphanumeric pictures you have to "copy" into a text field. So far this year, people can usually extract the characters from the picture in a reasonable amount of time and computers usually take to long. I give it until about mid-February (around my birthday, more or less) before spambots grow a good-enough OCR facility to make the whole thing worthless.

Tuesday, August 09, 2005

Leven Schtein all over the place....

Okay. Let's say, for the sake of argument, that you have to import a whole whack of data into a new application. Those data have been maintained, yea, verily, passed down from generation to generation, on a series of clay tablets. Well, they might as well have been, anyway.

You see, just as your brand-spanking-new application has finished all of the various tire-kicking, surprise "requirements" miraculously extrapolated from the font face used in the original request document, haggling over the UI and so forth intact and approved, you are handed the old "system" for import. A finer collection of Excel spreadsheets there never was. Each subtly different from all of the others. Oh, they all contain the same set of values, but the columns are in different orders on every sheet, and even from sheet to sheet within the same workbook, the column headers are slightly different. There is nothing really jarring about the differences. Any idiot could look at the sheets and understand what was there.

Your average computer doesn't quite make it up to the level of idiot, though, does it? When I saw that the columns were out of order, I thought it would be easy to simply look at the header row and do some field mapping there. Then when I started to spot exceptions —abbreviations used in one place, full spellings elsewhere, plurals used at random, and so forth — I thought I could code for the oddballs. When I saw that they were all oddballs in one way or another, I had to rethink things. I could edit all of the spreadsheets, but could I be sure that I'd get them all, and get them all right? Manually entering the data was an even sillier idea, since it would be months before everything was entered, and the data are constantly changing. There would be duplicates everywhere, and we'd never be able to whittle it down to a single, correct set of data.

So I needed a programmatic solution, and I needed one that could tell whether the value it was reading was "close enough" to any one of the list of canonical labels I had assembled.

Enter Levenschtein.

Have you ever played Word Morph? You know, the game where you try to get from one word to another by changing only one letter at a time? The Levenschtein Distance, or Edit Distance, uses the same sort of system to determine the difference between two strings. How many leters need to be changed, added or removed to get from one word or phrase to another? There are a lot of implementations out there on the web already, so there wouldn't be a whole lot of benefit posting the code I used. Google, as ever, is your bestest friend.

Data import is probably not the best use of Levenschtein. It's something you'd normally see in a search, returning results that are close but not quite what the user entered, or in a "did you mean ..." suggestion. In this case, though, I could count on the fact that the variations on a theme were closer to one another than they were to any of the other headings.

Now that I know it works, though, I have to go back and take a look at that PNL query code I was talking about earlier.

Thursday, August 04, 2005

Slowly getting there

The Utility Server applications suite is very near completion. It was getting a bit late in the Domino 6 life cycle, so I took a bit of extra time to make sure it would work with whatever Domino 7 configurations happened to be in place as well. It's going a bit more slowly than I'd like, both because of the back problem situation and because, well, this is an evenings and weekends thing, what with my employer expecting that their work would take priority in the office and all.

The suite is pretty much what you'd expect, I suppose — an enterprise scheduler based largely on the Open WebCalendar code you've already seen, a CRM, a CMS, a project management application, a "website in a box", a help desk/bug tracker, and a portal. All can be used standalone or as components of an integrated application. (Okay, the portal all by itself with nothing to run in it is pretty much useless, I'll admit.) What I hope will set the suite apart from the others out there is the bang for the buck factor. I expect to price it so that it's a reasonable fit as a purchase plus optional maintenance with a Utility Express turnkey (about the price of a "professional" productivity suite) or as a rental with a low-end hosted Domino solution. Either way, the BP/ISP gets his/her/its cut as well. Target audiences would include small businesses and NGOs. (I figure the ability to create an adaptive project-oriented schedule in a volunteer-driven organisation would be a good selling point.)

I've tried to make the applications as close to best-of-breed as possible, but I'm approaching the game from a developer's point of view rather than the end-users'. I'll be needing a smallish number of pre-release testers who can make a legally-binding promise not to sell the applications as their own or release them as free apps. Drop me a line if you're interested.