Monthly Archives: July 2011

The Flash Cache Flush

We all endure software that seems to grow worse with each upgrade; for me, that includes Ubuntu, the Weather Channel App, and Flash.  I try clinging to the “oldies but goodies” for as long as I can (for example, I use my 9.10 Ubuntu VM far more than my 11.04 one), but forced upgrades are usually inevitable.  Flash is one very necessary evil that must be kept current: it’s either upgrade or stop using some sites.

After a brief period of continually-improving releases, Flash is giving me fits again, at least with the 10.3 version.  I’m again getting bizarre behavior with sites like Nike+, requiring periodic work-arounds.  One often effective fix for Flash problems is to clear its cache.  Fortunately, that’s a quick process:

  1. Open the Flash Settings Panel by hitting this URL: http://www.macromedia.com/support/documentation/en/flashplayer/help/settings_manager07.html.
  2. Scroll through the Websites list to locate and select the site with “issues.”
  3. Click Delete Website.

This often clears things up.

This handy URL shows the installed flash version.

Summer Running

“Heat, hills, and humidity.  Welcome to Atlanta.”

Run Atlanta slogan

While summer adds heat to the challenge of running, it also brings time in the schedule for racing.  My daughter Lydia and I ran several races over the past couple of months; here are a few of them.

Celebrate America 10K

For Memorial Day, we ran the Celebrate America race at Alpharetta’s Northpoint Mall.  This 16th annual event was well organized and equipped, making for a smooth race of nearly 900 runners.  The course was pleasant – a loop on tree-lined streets around the mall area, with a few rolling hills.  The 10K was a double loop, which provided an extra benefit for me: I was able to watch Lydia cross the 5K finish line as I started my second time around.  Lydia won her age group in the 5K at 25:00; my 10K time was 53:02.

There were several Memorial Day races in the area, and I’m pleased that we chose this one.  We’ll watch for it again next year.

ATC Fathers Day 4 Miler

The Atlanta Track Club (ATC) held its annual Fathers Day 4-Miler on Saturday, June 18, the day after Tina and I returned from our 25th anniversary trip.  It had the benefits of being free for ATC members and ending inside Turner Field: the Braves home plate area makes a great place for the finish line.

The course was well-planned, through the historic neighborhoods of downtown Atlanta, past Grant Park and the Atlanta Zoo.  There were some challenging uphills, but good downhills to recover.  I enjoyed running alongside Lydia the entire time and crossing the finish line together.  I was proud of her for doing well on the 4 mile distance and hilly course.  Our team finished 22nd overall at 36:47.

Peachtree Road Race

No other race matches the excitement of the world’s largest 10K.  And with 60,000 runners, the 42nd annual Peachtree Road Race was the largest yet.   On July 4, Stephen and Lydia ran the Woodstock Freedom Run, while I headed downtown for the Peachtree.  Getting there is the hardest part: waking in the darkness of 4:00 am and driving to the nearest Marta rail station before the parking lots fill up.

The new time groups make the crowds manageable: it becomes more like 22 serial races of about 3,000 runners each than a mob of 60K.   I was in corral C which, fortunately, is one of the four start waves with access to the starting line area.  This provided more space to relax and explore and enjoy the pre-race activity and wheelchair division start.

Another first this year was a flyover by three F-16s to close the national anthem – a flyover at a 10K – how cool is that?  That added to the excitement of the start, which continued throughout the race.  The entire course is lined with bands, giveaways, spectators (over 100,000), TV and radio stations, costumes, and some unique Independence Day celebrations.  As my college “stomping grounds”, the route also brought back many memories.  All this carried me along so that it felt more like a celebration than a race.  I hardly noticed the heat and “cardiac hill.”

There’s quite a bit of “sideways running” to weave around crowds and dodge fire hoses, so the Peachtree isn’t a race for PRs.  I kept an even pace and finished at 54:01, par for the Wave C course.

This race just gets better every year, and the current ATC leadership is doing a great job of implementing smart improvements.  Taking the AJC’s post-race poll revealed a lot of popular suggestions: tweak the start waves for groups, switch to a technical T-shirt, start earlier.  But, even if nothing changes, I’ll be back next year: me and 60,000 fellow runners.

Etowah River Run

The annual Etowah Swelter River Run balances the benefit of a fast course with the challenge of late July heat.  This year, like last, was certainly no exception: race time weather was at 77 degrees with 91% humidity, but that was offset by the signature opening downhill run and flat-as-a-pancake route.  This was the third year running it for Lydia and me; she finished first in her age group at 25:06, while I came in at 24:23.

The race held many familiar positives: fast course, helpful volunteers, good local turnout (about 500 runners, including a few cross country teams), nice T-shirt design (a repeat of last year’s popular art), valuable and plentiful door prices, and close proximity to home.   This year’s introduction of D-tag chip timing was a nice improvement.  I’d like to see the race start earlier to beat some of the heat, and a technical (rather than cotton) T-shirt would be nice.  As in years past, a few runners complained that the course was a little long (from 3.18 to 3.22 miles), but that narrow discrepancy is really only a concern to folks looking for new PRs.  We’ll be back again next year, pushing the pace against the heat.

Node.js

A lingering sense of abandonment dating back to Netscape’s LiveWire leaves me leery of server-side JavaScript (SSJS).  Not that it’s a bad idea, it just didn’t gain traction.  JavaScript as a language is great but, by design, it lacks built-in I/O support and other things required for writing servers.  And with no standard platform to fill these holes, JavaScript remained relegated to sandboxes, mainly browers and system extensions.

That’s all been changing as SSJS proponents have rallied around Node.js, a toolkit for easily building scalable event-driven servers running atop Google’s V8 JavaScript Engine.  It was easy to ignore Node’s initial hype, but when I found myself needing to serve up some new REST APIs, I thought I’d check it out.  Besides, my AJAX calls can point anywhere, so there was really no risk in trying.  If it didn’t work out, I could always abandon Node and fall back to something more conventional, maybe even EventMachine.

Getting started was quick and easy.  Cloning and building takes only a few minutes; even faster, binaries are just a sudo apt-get install away.  There are many online tutorials, so I worked through the obligatory web server and other examples.  There’s not a lot going on in my services, so I couldn’t factor them into many event-driven/parallel fragments.  But I quickly got a feel for doing things the Node way: spinning off handlers, writing callbacks, and even running multiple node processes.  With help from Node’s non-blocking libraries, that single-threaded event loop wasn’t a bottleneck.

It didn’t take long to complete my work, so I quickly got to the question of deployment.  Sure, I have VMs out there where I can run whatever I want, but I needed this running under my jailed hosting service.  The awesome Heroku service now supports Node, but I stopped short of rolling it out there.  So I’m keeping it local now as I build out the other pieces.

Node has come a long way fast and appears to have a bright future.  It has a rich and growing ecosystem of basic modules and frameworks for web apps/MVC, content management, blogs, comet, etc.  Time will tell how pervasive Node becomes, but for shops wanting JavaScript all the way down, it’s a very nice platform choice.

Implicit Casting

Co-worker Bob and I were surprised to find today that DB2 9.7 accepts SQLs like the following:

select count(*) from syscat.tables where tbspaceid = ‘0’

In all prior DB2 versions, comparing an integer column with a string constant (or anything similar) would yield the error:

SQL0401N  The data types of the operands for the operation <operator> are not compatible or comparable.

The source of this new flexibility is DB2 9.7’s implicit casting, yet another feature added in the quest for greater Oracle compatibility.  The DB2 documentation clumsily introduces it:

Version 9.7 introduces support for implicit casting. Implicit casting is the automatic conversion of data of one data type to data of another data type based on an implied set of conversion rules.

Automatic type conversions (yea, duck typing even) are a good thing, but require care when arriving late to an installed base.  We developers are now on DB2 9.7, but have to support DB2 versions as far back as 9.1.  It’s now too easy to write SQL that will “work on my machine” but not on the older versions of DB2 that our customers run.

Once everyone is at DB2 9.7 and higher, this will be a non-issue.  IBM’s usual policy with breaking DB2 compatibility is to provide registry settings or other means of disabling the change, often leaving it disabled by default for some time.  But that doesn’t seem to be the case here.  I couldn’t find a mechanism to turn off implicit casting for now; if you know of one, please pass it on.