More Downtime

Cari.net (where my server lives) had a massive DDoS attack against their network today, resulting in 5+ hours of effective downtime starting around 2pm PDT.  The server was responding, and some traffic managed to get through, but in general the network was swamped to the point of being dead for all intents and purposes.  Apologies to all affected; hopefully it won't happen again.

Schema Tool Update

I've just released a new version of my Schema Tool that won me a Wii. The major feature is SQL-based migration scripts, so you don't have to build big nasty CFSWITCH statements if you don't want to. To accommodate that, I've refactored the migration hierarchy, and deprecated BaseMigration. There is a new SwitchBasedMigration class that is a direct replacement and should be used instead. For the moment, BaseMigration is still present, but it'll be removed eventually.

The SQL-based scripts can be really nice if all your transformations are in the database and don't require programming to do. Just drop a SQL file in the migration scripts directory with a .sql extension (following the same naming conventions for the filename root), and it'll automatically get picked up as a script and executed. Minor versions considered one per statement. Not that this means you don't get multi-statement minor versions (you still have to use a CF-based script for that), which by extension means you can't do your own transaction demarcation. Like the CF-based scripts, each minor version corresponds to a transaction, and it's managed for you.

There are examples of both in the demo app (linked above). If you're building an app and want to use it, all you care about is the actual 'schema_tool' directory, and the invocation syntax in Application.cfm.

The source (of the zip linked above) is available from my SVN repository as well, at https://ssl.barneyb.com/svn/barneyb/schema_tool_demo/, if you'd prefer that. For my projects, I use an svn:externals definition pointing at https://ssl.barneyb.com/svn/barneyb/schema_tool_demo/schema_tool/ to link in the core, so I can get transparent updates when I want them. If you don't want bleeding edge, make sure you use a revision number, but I use bleeding edge on all my projects, so an expectation of stability is reasonably fair.

More Bicycle Dashboard Updates

I just pushed a couple usability tweaks to the bicycle dashboard app.  First, the profile you're viewing is now persisted in a cookie, as well as session, when you return to the app, you'll still be viewing the same thing, even if your session expired.  Before you'd always revert back to me, and while I'm ridiculously good looking, there isn't a picture of me in the app, so all you get to see is my boring numbers.

Second, I resorted the ride listing so that by default the most recent ride is at the top.  That's what I'd intended from the beginning, but it didn't work, and I hadn't taken the time to figure out why until now.  Turns out that my reference maintenance code reorders stuff when new data is pulled in and it does the state substitution on existing entities.  It uses a couple Dictionary objects as lookups for the substitutions, and they don't maintain insertion ordering (and why should they?), and I didn't consider the ramifications.  But that's fixed now, and also means that the bike selector when adding a new ride will work "correctly" in that it'll automatically select the bike you've ridden most recently, rather than the one your rode first.

The Delete is Done

I'm here at the Portland AIRBus tour, and just checked the status of my server.  7.2 GB of class files in the `/WEB-INF/cfclasses` directory.  Wow.  But they're all gone now, and things should stay good this time.

Unexpected Downtime

Had some unexpected downtime this afternoon.  ColdFusion's class file cache had completely filled the partition it resided on, locking up the box.   Deleting of all the files is still underway, but I've disabled the file-based cache so it doesn't happen again.  Everything is back up and running, albeit slowly as the system is churning away deleting several GB of little tiny classfiles, all in one huge directory.

Flash 9.0.48 for Linux

Adobe has released Flash Player 9.0.48 for Linux, and my bicycle dashboard seems to work now, which is good news, since that app was undoubtedly not the only one affected.  If you're on Linux, go get it! LustPage

Public SVN Access

To this point I've kept all my personal projects in a private SVN repository, but Joe wanted access to the source of my bicycle dashboard, so I opened it up to anonymous read access at https://ssl.barneyb.com/svn/barneyb/bicycle_dashboard/.  I'll probably end up opening a few other projects as well (like my award winning schema tool, which has some major updates close to release), so stay tuned.

Golf

I went golfing this morning with Joshua (a blogless coworker) at the Lake Oswego City Course.  It's an 18-hole par-3 course, and pretty nice.  Holes were from 75 to 180 yards, averaging around 150, and I played pretty well.  Handful of pars, a couple double bogies, and the rest bogies.  I figure if I play bogey and a half average for a round, it was a good round, and I definitely beat that today.  Even more encouraging was that I didn't do it with putts, I did it off the green, which is typically where my game is weakest.

However, even better than the round itself, they were selling golf shoes for quite cheap and they had 13's.  I got a nice black pair that are supposed to be waterproof and wow am I impressed.  I knew my feet were slipping backwards slightly as I swung, but not very much.  With the spikes on, however, no slippage at all.  Zero.  Zip.  Zilch.  And while I can't necessarily attribute it entirely to the shoes, I hit the ball 12-15% further on every full-swing shot I took (well, except for the shank on 9).  That's more than a club's worth of extra distance.  It'll be interesting to see if that increase in performance was just a fluke or if it persists to future rounds.  Anyone around here (Portland, OR) want to play?  ;)

More Bicycle Dashboard Updates

I just pushed some new updates to the bicycle dashboard, including multiuser support and the ability to store a map URL for routes.  Currently the multiuser support is limited to just having an account, and if it's public, for other people to view your ride information.  I'm planning to add groups of some sort to allow multiuser reporting, for riding clubs or the like.  I'm still trying to figure out the best way to deal with a couple "weirdnesses" that present themselves, but all the data will continue to be per-rider, so it'll be accessible through whatever group structure I end up implementing.

The route maps stuff is nothing more than  URL field that causes rendering of a 'view' link that loads the URL in a new window.  As such, you can use whatever you want for your maps.  Now that Google Maps has custom rerouting, that's pretty hard to beat for ease of use.  But you can use whatever you want as long as it lives at a public URL.

Draggable Routes in Google Maps

The guys a Google have come through again.  Google Maps now lets you drag driving directions around to add custom waypoints on the route, without having to manually enter their address or lat/long.  Aside from being really neat to play with, it lets you easily map a custom route (say, for my morning commute) without having to do a whole bunch of futzing.  This pretty much trumps any custom route plotting stuff I've seen, and linking support will be enabled in my bicycle reporting dashboard shortly.