Archive for the ‘Geekery’ Category

The GoogleBox lives!


Yes, after 4 days of downtime, my illustrious yellow 1U server has been revived from the dead. After it died, I asked the colo provider to power cycle it, and they said it didn’t come back up. I asked them to yank the box, and I picked it up and brought it home. Expecting a power problem, I first tried yanking all the hard drives and memory, but even then didn’t get any beeps or other activity. So then, I tried yanking one of the CPUs. I must have gotten lucky, because removing the #2 CPU got me a couple of POST beeps, and when I put back the memory and the hard drives, it booted just fine.

I’ve had this box since January 2007, and the CPUs are dated from 2001, so I guess it’s time to replace it. I ordered a slightly newer box off eBay that has twice as much memory and 4 SATA drive bays. With two 1Tb drives, it will have much more disk space, but more importantly the empty drive bays mean that if I need to expand, I can add newer bigger drives when they become available. I’m considering using software RAID to mirror the two drives, because even 1Tb is bigger than what I have now and I’m not hurting for space. And with lvm, I can plonk in two new 2Tb drives when the time comes, migrate the volume groups to the new drives, and yank the old ones. All the remains now is to decide whether to build a new OS and get everything working on it, or just restore from a backup and continue the upgrade path.

While I had the box home for a few days, I took the opportunity to do a long-delayed upgrade from Debian “etch” to Debian “lenny”. I didn’t want to tackle that remotely because there was a significant chance (and it happened several times) that I was going to get it into the situation where I needed to intervene at the Grub stage, and I couldn’t do that remotely (because the cheap colo facilities don’t give you remote boot consoles like the expensive ones do.) The biggest hassle of this upgrade was that I had to do some messing around to get a console to appear, changing the boot options on the box itself, and also the getty lines in inittab of each of the guest “domU”s. The second biggest hassle was that I had to install “udev” on all the guests so that ssh could work. Also while they were home I took the opportunity to make a backup of the whole thing, including the guests that don’t belong to me. Normally I just back up my own. That should make setting up a new box a lot easier.

I got all the fixing and upgrading and backing up done early this morning. I brought my box over to the colo company office at 10:15. And waited. And waited. And waited. I had a “ping -a” running so I’d know as soon as it came back. And I waited some more. The business office is the other side of town from the colo facility, so I figured there would be some delay. The company that used to own those racks would let me go out to the facility with them, but these guys bought the business from that company and they’re anal about security and won’t let me go. Well, it turns out that their scheduled visit to the colo facility was at 10pm – nobody told me that, of course, until after I’d started panicing that they’d all gone home for the weekend without racking my box. But here it is – they racked the box, phoned me to say it was powering up, and now I’m connected again. Hallelujah!

Update: A few hours after I wrote that, I decided to quit and restart Chrome to free up some memory, and now none of the extensions I installed are showing up.

A few weeks ago, I wrote about my experiences with Google Chrome on the Mac. At the time, Chrome on the Mac was lagging quite far behind the Windows version. Supposedly now it’s all caught up, and so I’m going to revisit my previous complaints:

  • It frequently lost the text cursor in text input fields, especially on GMail.
    • Still happens.
  • It seemed much slower and more likely to corrupt the display compared to Safari in Google Wave.
    • I haven’t been using Wave, so no comment.
  • It had a bad habit of undocking a tab on the slightest provocation.
    • Still happens.
  • The fact that the tabs take up space in the window frame means that you’d frequently undock a tab when you were trying to move the whole window.
    • Still happens. There is a tiny bit of real-estate near the “+” to open a new tab that is still available, but it’s a pain to grab.
  • It doesn’t have a “Reload all tabs” option. Supposedly there is an extension to that, but in order to use extensions I’d have to upgrade to the latest development build. That’s more work than I’m willing to do when it has all these other problems.
    • I found an extension that will reload individual tabs on a schedule rather than the whole window on demand. That’s actually nicer than having to reload everything manually. It’s not bad, except when your computer goes to sleep you have to restart it by reloading all the tabs individually. Plus when it reloads on a tab that is on a different Space than the one you’re on, it will switch back to that Space, but that’s a Spaces problem not a Chrome problem.
  • It doesn’t recognize or tell you about RSS feeds. In Safari or Firefox, any page that has an RSS feed displays an icon, and if you click it, the OS opens the feed in the currently configured RSS reader. The functionality is so ingrained in browsers that many pages don’t seem to have any other indication that they have RSS feeds. Once again, I’m told that Chrome has a plug in for that. Once again, too much trouble.
    • The only RSS plug ins I could find will add the RSS feed to a web based RSS reader like Google Reader. There is no support I can find anywhere for the OS-defined RSS reader. So I’m experimentally putting NetNewsWireLite out pasture in favour of Google Reader. Not bad, but not great.

So over-all, it’s got a few user interface annoyances, but the really big sticking points have been taken care of by plugins. And I was happy. Until today. And that’s when I discovered that Google Chrome is utterly useless for a web developer – there appears to be no way to make it reload your javascript file that you’ve just changed unless you go to “File->Clear Browsing Data”, uncheck everything except “Empty the cache”, click “Clear Browsing Data”, and wait, and wait, and wait. In normal web browsers, you just have to hit shift-reload on your page and it will reload that page and all the attendent files, including CSS and JavaScript files. That’s it, I’m switching back to Safari (or maybe Firefox) for the page I’m developing.

Oh, plus the built in “Developer Tools” in Chrome suck in comparison with Firebug, but that’s apples to oranges since Firebug is a plugin.

Update: It turns out that the way I’ve been creating the smart playlist, with “Genre = Podcast”, which worked for years now, suddenly stopped working. Changing it to “Media Kind is Podcast” and making it sync under the Podcast tab worked.

Thanks to the latest iPod and iTunes updates from Apple, the iPod, the very device that “Podcasts” are named after, has become useless for listing to podcasts the way I want to listen to them.

The way I like to listen to podcasts is in the car, while driving, a time when I probably shouldn’t be poking around the screen of my iPod instead of watching the road. But Apple, in its infinite wisdom, made podcasts different from music or audiobooks in that you can’t (by default) click “Play” on them and listen to them one after the other. Instead, you have to pick one, hit play, and when it’s done, find another one, hit play, and lather, rinse and repeat. Until a few days ago, I had a very nice work-around: I made a Smart Playlist that contained “Genre = Podcast + Playcount = 0″. It worked great.

But now there is a new update for the iPod and iTunes, and they’ve broken it. The playlist still shows, and I can still play it in iTunes and it plays all the way through and the ones you listen to remove themselves from the playlist. Beautiful. But even though that playlist is still checked to sync to the iPod, the playlist doesn’t show up anywhere on the iPod. So how the fuck am I supposed to listen to an hour and forty five minutes of podcasts, some of which are only 3 or 4 minutes long, without spending time poking around on my screen instead of watching where I’m driving?

Maybe it’s time to find a podcast app for my Palm Pre.

Is there anybody out here who knows anything about Subversion? I’m very new to it, and I think I might be used to better revision management systems like ClearCase and Git. Here’s the situation: My boss asked me to fix this project so that it could be built with Maven instead of Ant. One of the important things I had to do to was to move src/com to src/main/java/com, and move test/com to src/test/java/com, which I did using the “svn mv” command. I foolishly assumed that since I used Subversion commands to move the directories, that Subversion would then know that things had been moved. And when I merged my branch into the trunk, it appeared to work. But now somebody else just finished work on a branch that he branched off before my work. So we go to merge his stuff into trunk, and basically Subversion appears to think “ok, he made changes to src/com/foo/bar/baz.java, but that directory doesn’t exist any more, so it’s irrelevant, so discard it” instead of what I expected, which was “ok, he made changes to src/com/foo/bar/baz.java, but src/com has been moved, so I need to merge that into src/main/java/com/foo/bar/baz.java”.

Is there a way to make Subversion do the revision management, or am I going to be manually merging this guy’s changes for the next two days?

Here’s what I discovered after a day of using the current beta of Google Chrome for Mac:

  • It frequently lost the text cursor in text input fields, especially on GMail.
  • It seemed much slower and more likely to corrupt the display compared to Safari in Google Wave.
  • It had a bad habit of undocking a tab on the slightest provocation.
  • The fact that the tabs take up space in the window frame means that you’d frequently undock a tab when you were trying to move the whole window.
  • It doesn’t have a “Reload all tabs” option. Supposedly there is an extension to that, but in order to use extensions I’d have to upgrade to the latest development build. That’s more work than I’m willing to do when it has all these other problems.
  • It doesn’t recognize or tell you about RSS feeds. In Safari or Firefox, any page that has an RSS feed displays an icon, and if you click it, the OS opens the feed in the currently configured RSS reader. The functionality is so ingrained in browsers that many pages don’t seem to have any other indication that they have RSS feeds. Once again, I’m told that Chrome has a plug in for that. Once again, too much trouble.

About the only thing I liked about Chrome more than Safari is that when I restarted it, it would re-open the three pages with 15 or so tabs between them that I had open beforehand. Safari can be trained to open the one page with 10 tabs that is my main window, but then I have to manually fiddle with the other pages. Oh, and Chrome opens new links in a tab instead of a window – that’s nice that I don’t have to hold down command when I click.

The main reason I was tempted to use Chrome is that using a busy wave in Google Wave causes browsers to eat memory like crazy. In Safari, to recover that memory I have to close the whole browser. In Chrome, you can recover it by closing the tab. Nice, but I was closing the tab and re-opening it every few minutes because the “space to next unread blip” functionality would stop working. I have to restart Safari about once a week if I avoid Wave, and about once a day if I use Wave.

I find it deeply ironic that the two biggest problems I had with Chrome were with Google apps. Maybe I’ll come back to Chrome when it’s ready. But not now.

Start this off with a look back at last years, because for once I did a pretty fair job.

Here are my resolutions from last year:

break 20 minutes in the Baycreek time trial
I actually broke 19 minutes, so chalk that one up as a win.
finish the Long Lake Long Boat Regatta long race (9 miles)
I didn’t just finish, I came in 5 seconds behind Mike Finear, after dragging him in my wake for several miles. Another win.
figure out if I want to continue flying or not.
Gave up flying, didn’t really miss it. Found myself obsessing over every mistake I ever made in the air and about how blasé I was about the danger at the time. Trying to tell myself that’s because I was on my game back then so I could handle it, and now I’m out of practice I wouldn’t handle it so easily if it happened now. Can’t tell if that means I should never go back, or if I need to really practice a lot if I go back.
develop an ajax web site, using either GWT or jquery or ruby on rails or something
I started an iPhone app, but hit a snag and put it aside. Realized that the GWT web site would be a better help with my job search, and made some half decent progress on this before I actually got a job.
diet
That went pretty well. Between February and June I lost 40 pounds and then hit a plateau. Unfortunately it’s the same plateau I hit every time I go on a diet. Spend most of the fall still within spitting distance of being on the diet (it’s hard to be strict when you’re home all day) but not losing any weight. However, I think I was building some muscle mass in my arms and core, so maybe it wasn’t all that bad. Managed to gain 10 pounds of it back between Thanksgiving and now. Still a win, I think.
exercise
Yeah, pretty much. I started out the year being barely able to paddle 2 miles, and now a 10 mile workout holds no terror for me. Still trying to figure out how to keep that fitness over the off season. (Yeah, I know, “Off season? What’s that?” – getting out to paddle once in a blue moon is no substitute for paddling three or four times a week)
get a better job
Well, it took until a week before Christmas, but I got a decent contract job. Hopefully it will lead to more decent jobs.
once more subject myself to the psychological torture of trying to get more treatment for my pain
I didn’t actually do anything about this one. But between not having to sit at a desk, not having to drive much, losing weight and exercising more, my knees weren’t that bad. Of course after a week of driving 3 hours a day to my new job, my knees are now the worst they’ve been since back when I used to drive to Ottawa twice a month. Hopefully that will recover now that I’m working more from home.
1600×1200
How about 1920×1080 on the left, and 1920×1200 on the right. Now *that* is resolution, baby!

That was the year that was. This is my list for this year:

  • Break 17:30 in the Baycreek Time Trial. I’d like to break 17, but I think 17:30 is more attainable.
  • Join NYMCRA and start competing for points. I’d like to do at least 5 of the points races this year, but they haven’t put out the 2010 calendar yet so I don’t know which ones those will be. Last year I did Tupper Lake, Armond Bassett, and Long Lake, and I could easily extend that to 5 by doing Round The Mountain or Bear Mountain and the long course at the Rochester Open Water Challenge. I probably won’t get a lot of points, because unlike the other guys I don’t get any handicap points because I’m not over 50 and my Thunderbolt is Unlimited Class. If I’m reading the points system right, at Long Lake I would have gotten 85 points because although I was only 5 seconds behind Mike F, he got handicap time for being in an EFT, a Touring Class boat and time for being over 50, so his adjusted time is 3:34 ahead of me. Competing for points might add a new twist to races, but mostly I see it as a reason to go to more races.
  • Start building up my training volume. This year my GPS recorded 670 miles of kayaking, and that’s not including the early part of the season before I bought it, and the few times I forgot to charge the damn thing. I’d like to increase both the number of paddles and the length of them. If I can manage a few 20 mile plus days, I’d be slowly working towards doing the “90 Miler”, maybe in 2011 as a 50th birthday thing.
  • Get the diet back on track and try to break through this plateau I was stuck at this fall.
  • Finish revamping my navaid.com site into GWT so it doesn’t look like something designed in 1992, which it probably was.
  • Figure out the GRIB thing that Laurie wants me to do.
  • Hold onto this job, or find another one quickly when it ends.
  • And that’s about it for the public ones.

Hopefully I’ll do as well this year as I did last.

On the one hand, you have Jeff Atwood’s Coding Horror, a blog about programming read by thousands if not hundreds of thousands of people. And by the same guy, blog.stackoverflow.com. His backup strategy was to make copies of both blogs but leave them on his hosting site, and trust that when the ISP said they had it backed up, they really had it backed up. Of course, the ISP had some sort of hardware failure, and when they went to restore their backups, they found that they didn’t work. He’s now trying to reconstruct his articles (but of course not the comments, and some very few of the images that went along with them) from Google’s cache, the Wayback Machine, and the web caches of his readers.

On the other hand, you have this blog, which is about nothing in particular and read by probably 15 people tops. My backup strategy is this:

  1. Daily database dumps, copied to another file system on a different physical volume on the same box. That’s there mostly to quickly respond if I accidentally delete the database or an upgrade goes bad or something. If my blog got more traffic and more comments, I’d do those dumps more frequently.
  2. Another backup and a tar file just before I do an upgrade.
  3. Daily rsyncs back to my Linux server at home. I keep a week’s worth of those.
  4. Daily copies of that local copy to removable hard drives. I keep a month’s worth of those.
  5. Every week or so, I move one of those removable hard drives to a physically remote location.

And I did this when my blog was hosted on a VPS that the ISP claimed had some sort of backups and now when my blog is hosted on a 1u box that I bought on eBay and stuck in a local colo facility. As far as I’m concerned, you’re not backed up until the backup in your pocket.

Oh yeah, did I mention that some of those Coding Horror blog entries that went missing were about backups and how important they are?

I’m sorry, but the idiocy of this just leaves me shaking my head in wonder about why anybody ever believed anything he ever said about computers. On the other hand, it also makes me glad that I don’t have a huge audience hanging on my every word, because someday I might get something wrong (hey, I know, not likely, right?), and schadenfreude’s a bitch.

So I was reading a story in this month’s Analog magazine, and encountered the following paragraph:

“They company wantoffered me a promotions me to learn aboutlead a new technology group, something I saw in the Dakotas a few months ago,” Gus replied. “It’s a nice increase career move if I accept,” Gus offered.

I swear all spelling, punctuation and spacing is exactly as it is in the magazine. It’s almost as if somebody took the blue pencil markup version and put in all the new stuff without taking out the old stuff. And then later in the same story:

His The aesthetic principles approach would disappear be lost when Phil’s new technology was perfectedused.

Doesn’t Analog have proof readers for this sort of thing?

(What does it say about my age and penchant for trivial that I know this much about obsolete book and magazine editing even though I’m not a writer or an editor?)

Update: They’re all gone now. Hope you all enjoy it.

I have some Google Wave invites if anybody wants one, comment here (only I see the email address you fill in the comment form, it isn’t published) or email me.

I found out yesterday that Kodak has shut down the Digital Cinema group that I belonged to for over 6 years, a victim of a Kodak’s inability to keep up with an incredibly rapidly changing marketplace. Some years before that, I’d had the pleasure to work with many of the same people on a product called “Cineon”, a very high end post production and digital editing program for movies. Alas, technology marched on faster than we did and today people are doing on their Macintoshes and PCs what we were doing on 16 processor million dollar SGI Onyx computers.

But in both cases, I was working with the finest group of programmers, QA people, applications specialists and sysadmins it’s ever been my pleasure to work with (with the possible exception of GeoVision, which was also exceptional). And although I might be cutting my own throat because I’m still in the job market and many of them will be entering the job market very shortly, I sent out this message to the Peernet Rochester Yahoo Group.

I just found out that my old colleagues on the Digital Cinema team at Kodak all got their notices today. And while I’m probably going to be competing with them for some of the same jobs, I’d just like to put a shout out to any hiring managers here to let them know that if you see a software developer or tester with experience in the Kodak Theatre Management System on their resume, you could not do better than to hire them. They are positively the best group of people I’ve worked with in my 25 years of working all over the world.

Ok, if there was some way to put these things on a scale and see how it balances, I’d probably put the team at GeoVision (not the Albany group, the original ones) and the Cineon team as tied for first best, and the Digital Cinema group as a fairly close second, and a couple of the people at SunGard right up there.

Man, I hope we all end up employed again soon. And I hope we all end up working together some time.

Oh, and if you’re one of my former colleagues from Kodak, give me a shout off-line and I’ll hook you up with the Peernet group – it’s really been helpful.

I have a line on a job that involves porting some code that was originally written in R, then in Delphi, and now the researcher wants it re-written in C++, turned into multi-processor/multi-computer friendly (using MPI?), and turned into a plug-in for R. The program as it is now is pretty primitive – he apparently just puts a bunch of parameters into the actual Delphi code then recompiles and runs, and it outputs into a data file. Obviously the first step would be to have a wrapper program that gets the parameters from a data file, and later a wrapper that gets the parameters from however R passes them to plugins.

It’s been a while since I used C++, and the language has changed a lot since then. Name spaces, STL, Boost, auto_ptr, all this stuff is new to me. It’s going to take some frantic reading to get up to speed. Even worse, I have to read the existing code, which means learning a bit of Delphi/Pascal. And I’m going to have to find a decent IDE for C++ – although the consensus on StackOverflow seems to be to go back to the way I’ve always worked until I started using Eclipse last year: gvim, make, gdb, and a web browser open to the man pages.

Even better, the job would mean working from home. The dogs will be happy about that.

I knew the Digital Cinema project that I’d been on for 6 years was doomed. But I didn’t know how doomed until the last week or so, when former colleagues on that project have suddenly started responding to the LinkedIn invitations to connect that I sent them a year ago. I’m guessing there is a lot of resume polishing and network building going on there right now. I’d say “Poor bastards”, but I’m in no better shape right now, except I did all that 6 months ago.

First impressions on Google Wave:

  1. Who thought that bringing back OpenLook’s “elevator” scroll bars was a good idea? Every user interface expert in the world said they were a bad idea then, and they’re still a bad idea. Actually these aren’t exactly like OpenLook’s scroll bars – instead they move some times, and sometimes they don’t, and they’re just weird.
  2. Why does Google Gears say it’s installed on my browser, but the actual Gears functionality (like being able to drag and drop pictures on Wave) not work? I tried some of the demo programs on the Gears web site and they don’t work either. Is there something I’m missing?

I wish there were more of us on Wave. It looks like a great tool for building project docs in a way that’s less likely to turn stale than just putting up a wiki and saying “update it everybody”.

I’ve been banging my head against this one for over a day now. My loop that was supposed to run when the value that came back from the cookie was null wasn’t running. It was only after exhausting every other option that I discovered that in GWT (Google Web Toolkit), Cookies.getCookie(cookieName) doesn’t return null when the cookie isn’t found, it returns the string “null”. You know, four characters, starts with the letter “n”. WTF? That’s just plain bizarre.

Hey, it’s been a couple of weeks of interesting conferences. Last week I went to Toronto for Stack Overflow Dev Days, and today I went to TEDx Rochester. (Hey, I did blog about Dev Days, didn’t I? Or did I just write about it on meta.stackoverflow.com? I’ll have to check that later.)

If you’re at all interested in the Internet, and the amazing ways it can bring people together to talk about amazing things, you probably have heard of TED. If you haven’t, head over to http://www.ted.org/ and watch all the videos. But don’t do that right now, because if you do you’ll never come back and I’ll just be sitting there waiting for you. TEDx is sort of an attempt to do what TED does at a local level. It’s not organized by TED, but they’re allowed to show TED videos as long as they don’t charge any money and they don’t use it for advertising. So what TEDx Rochester did was get some really amazingly interesting people from here in Rochester, and have them give talks, and every now and then they showed one of the “real TED” talks on the video screen. I think there were 6 or 7 real “talks” and 2 or 3 videos. I wasn’t really keeping count. The talks went from 2pm to 4pm and from 5pm to 7pm. There was food provided at the 4pm break.

Like any conference where there is only one speaker track, there were speakers that I found really interesting, and ones that bored my socks off. There were a couple that I really wondered why they were up there, like the woman who seemed to be showing us her life story and resume, but not really talking about how she did things or why, or the not very good improv comedy troupe. And a couple that didn’t hold much interest for me but I could see they were well done, like the Brazilian guitar guy and maybe the weird artsy dance-like movement thing.

The only real downers were that

  • the food at the break was placed at only one table (as opposed to three tables for a smaller crowd at DevDays) so the line was horrendous
  • like every conference in the world these days, the wifi SUCKED
  • and the woman next to me with the really bad breath who, during anything remotely technical and therefore interesting to me, would, every 5 minutes or so, sigh loudly and then slam herself back and forth in her chair, moving my chair and the next couple on the row. Yeah, my butt was getting pretty sore by then too, but I didn’t disturb and entire row of people because of it.

But those were minor and pretty par for the course. The conference was great and I can’t wait for next years.