I just had a surprisingly positive experience with Google Calendar support

A month or two ago, they rolled out a new (very slick, IMO) calendar UI that broke one feature: the ability to type the time of an event in the description and have it update the actual time, stripping it from the description as you save. I used the Send feedback functionality to tell them I dearly missed this feature, fully expecting it to go into a void of too many problem reports.

This morning I got an email quoting my original request, and a note that it’s implemented now with instructions on how to use it. It was clearly a form letter sent to more than one person, but the fact that they sorted feedback granularly enough to respond like this is pretty good.

Sigg customer service

Sigg has had a two pressworthy incidents of bad news lately: one that their older bottles weren’t BPA-free as advertised, and a second that the credit cards of a number of their customers were stolen.

I’m among the supposed stolen credit cards. A bit of context: Sigg was using Network Solutions (the original domain name seller before others joined in the race, and still an overpriced waste) for credit card processing. It wasn’t actually Sigg’s website that was compromised, it was the site they used internally to handle credit cards and other payments. As someone who works on websites for a living, I have some sympathy for them – it’s really an unfortunate event that’s out of their control. In fact, I actually got two notifications from Network Solutions – another site other than Sigg suffered the exact same compromise. I certainly wasn’t blaming Sigg for the loss.

So imagine my surprise when I got a box from them, with a free Sigg water bottle in it and a letter apologizing for Network Solution’s screwup. I’m pretty happy with the outcome; I didn’t expect more than the legally-required notification, so seeing them do more than just hide behind their ecommerce partner’s faults was a nice touch.

Adventures in rental cars

This past weekend I made a very short trip to York, PA for a wedding. Thanks to the wonders of schedules and airfares, the cheapest method of getting there and back on a reasonable schedule involved flying in to Harrisburg, PA and out of Baltimore, MD on separate airlines (two one-way flights).

This complicated the process of getting a rental car, since I needed to do a one-way rental. I usually rent from Avis (a holdover from when I was under 25 years old and being a Microsoft employee let me rent there without paying the Youth Tax), but Avis said they were all out of cars for that schedule, even 2 months in advance. So was Budget, Alamo, Enterprise, and Hertz. In fact, the only rental company I could find that would rent to me was Thrifty, so I used them.

Fast forward 2 weeks. Thrifty calls me to inform me that they’re closing their rental counter in Harrisburg, but Budget will honor my reservation. Um, okay – not that I really have reason to believe either company is motivated to getting this right. A week later, I get another call from Thrifty – this time it’s not Budget, it’s Avis. At this point I’m motivated to try calling Avis and getting a confirmation from them that they’ll honor the reservation. Remember, at least online, I can’t make this particular rental; I think my skepticism is warranted. I called Avis’ national number, was provided the number for the local rental counter, and talked with a woman there. I told her my case, and she told me that:

  • No, they couldn’t make the rental for the schedule I want.
  • Yes, they’re planning on honoring my reservation.

Yeah, a bit contradictory. In the end I had to just bring my Thrifty papers to the rental counter and cross my fingers.

The good news is it all worked out. I was a bit sleep deprived from the red-eye, but Avis was incredibly helpful getting everything sorted out, and even accepted an Avis coupon I had as part of my Thrifty rental. All told it was about an extra 3-5 minutes to deal with the complication, which is far better than I expected.

Thanks Avis for making it all work out.

Installing Ubuntu in KVM using only a text console

I recently updated some CentOS machines to version 5.4, which finally comes with KVM in addition to Xen. I wanted to boot up a few Ubuntu VMs using this new tool. There are a handful of resources out there that show how to use virt-install to create a Ubuntu guest on a KVM machine, but they all seem to assume you want to run a VNC session to use a graphical installer.

If you want to fully automate the installation process, the first thing you should do is switch to a text-based console. Here’s how to do it (at least on CentOS 5.4, KVM, using virt-install):

virt-install --connect qemu:///system --name vm01 --ram 512 --vcpus=2 --disk path=/vm/vm01/vm01.qcow2,size=12 --location http://ubuntu.osuosl.org/ubuntu/dists/hardy/main/installer-amd64 --os-variant ubuntuhardy --accelerate --network bridge:br0 --nographics --extra-args console=ttyS0

Some notes about my setup:

  • I already set up bridged networking – this varies from distribution to distribution, but should be something similar.
  • I’m specifically pulling Ubuntu 8.04 (Hardy Heron) installer images from a nearby mirror. You’ll likely want to change the URL to a mirror close to you, and possibly change it to a different release of Ubuntu.
  • I’ve setup the path /vm/vm_name/vm_name.qcow2 as the location for my VM image on disk, you may want to change this to use something like LVM or to match your own preferred path of choice.

Gardening Electronics

It’s late Springtime, which means Margot has gotten the planting bug again. After reading my latest issue of Make, I decided I’d participate a bit this year and try building myself a Garduino. In essence, it’s a simple microprocessor controller that automatically waters your plants and kicks in a grow light if you’re not getting enough daylight.

I’m not much of a physical electronics guy – I haven’t wired my own circuits since building a Rube Golderberg machine in high school physics, but I’d been doing so much Java and Ruby coding lately, it feels good to hunker down and with some good low-level programming on an 8-bit processor with 1k of usable memory.

Today I assembled a protoshield, made some wire leads for a moisture sensor, and did some simple programming of the Arduino using LEDs to get the hang of it. Things I’ve learned so far:

  • Not all galvanized nails are created equal; I bought a box of nails without reading the fine print that says “PrimeGuard polymer coating on enclosed fasteners is equivalent to galvanization” – it also means they’re non-conductive, which makes them less-than-useful for measuring soil moisture levels.
  • Soldering is easier than I remember it being, or the nice soldering tools I borrowed from Chris really help. I only had to use the solder sucker once. I did burn myself accidentally touching the heating element, but not badly.
  • The Arduino itself is a really nice platform. It gives you just enough I/O to accomplish most projects, and they’re dirt cheap – I got a Seeduino for $16 assembled. The software stack could use some work (it hangs when uploading, has some unintuitive UI, and for some reason kicks Vista into 16-bit color…) but it gets the job done without needing to learn the intricacies of cross-compiling using GCC.

So far I’ve yet to get the watering pump working – I realized too late today that the only extension cord I have available to cut and splice into a relay is 2-pronged, and the pump I have is grounded. Hopefully tomorrow I’ll get a new extension cord and actually get it all working.

JAVA’s stock worth cash on hand?

At the close of business today, Sun Microsystems‘ stock price took a wallop – down over 12% to $3.61/share. Let’s do some math:

According to the Yahoo Finance, JAVA’s market cap is current $2.67 billion, and as of the close of the last quarter (9/28/2008), they had $2.63 billion in cash. Granted, some of that cash is likely used up now, but JAVA’s stock is now at the point where it’s not valued at all – if Sun were to just close up shop and distribute cash on hand (and not sell anything via liquidation), investors would get their money back. Debt/equity isn’t that bad, so it’s not like they owe so much to creditors the cash wouldn’t make it back to investors.

Still, Sun isn’t exactly the darling of the market. They’ve made a lot of missteps, and I wouldn’t be surprised to see their CEO ousted soon. But the stock is reaching the point of negative valuation – and I’m not sure they’re so bad off that they’ll completely run the company into the ground.

A better del.icio.us bookmarklet

Post to delicious

Unlike the default del.icio.us bookmarklet, this one automatically takes the selected text and uses it as the “notes” field in your delicious bookmark. If you tend to quote a paragraph from the page you’re bookmarking, this saves some time using copy-paste.

Thanks to Jesse Ruderman’s bookmarklet site for the inspiration – I based it off the fairly simple Google bookmarklet he wrote.

Firefox without Page Up/Page Down

If you use a very small laptop, you’re likely to be missing some keys that are normally available on a full keyboard. On my Eee PC, Asus didn’t have room for PageUp and PageDown keys, and replaced them with a function key equivalent of Fn-Up and Fn-Down.

I normally use PageUp and PageDown a lot in Firefox. PageDown can be easily replaced with the space bar, but what about PageUp? Here’s the fix:

  1. In Firefox, navigate to about:config
  2. Type backspace into the Filter box.
  3. Double-click on the browser.backspace_action entry, and change the value from 2 to 1

Now you can use spacebar as PageDown, and Backspace as PageUp.

Flex Builder, Eclipse, and Async Saves

At blist, I use Flex Builder a lot. It’s essentially a plugin for Eclipse, the IDE that grew out of the Java world but now seems to do almost as much as emacs via plugins. While you can use the free Flex SDK to build Flex applications, there’s really no decent alternative to Flex Builder for rich debugging support or profiling. Without that, I’d probably switch to using a text e ditor – it’s just too buggy to be my primary editor. Here’s a few examples:

Flex Builder supports incremental background compilation of your project. (There are also ways to accomplish this from the command line, but that’s another story.) This means that you can simply save your work as you go, and it’ll happily go off in the background and build your project for you, and only need to rebuild the parts of your application that have changed. This is great if it worked – but the background support is shoddy. If I have a few different files open for edit and hit Cmd-Shift-S (Save all), all the saves aren’t atomic – the first file will save, Flex Builder notices the file was saved, and starts a build. The build finishes, some more files get saved, and then the build starts over again. Even worse, the build process isn’t always in the background – I got enough hangs after saving while it started the background compilation that I turned it off. Instead, I just save when I want and hit Cmd-B to build the project when I want to actually run it.

But even that doesn’t work properly. If I hit Cmd-S, Cmd-B to save and build, the save operation often won’t have registered before the build operation, so the build process doesn’t start. As a developer, rely on muscle memory for keyboard shortcuts, but it’s really getting on my nerves that a common key sequence (save and build) can’t even work consistently.

Cisco VPN Client, Error 51

Occasionally, I’ve gotten the following error when trying to launch the Cisco VPN Client:

Error 51 : Unable to communicate with the VPN Subsystem. Please make sure that you have at least one network interface that is currently actove and has an IP address and start this application again.

Rebooting usually fixed the problem. I finally got annoyed with having to reboot, and found a faster solution on MacInTouch’s Tiger Incompatiblity page (and yes, I’m already running Leopard):

sudo kextunload /System/Library/Extensions/CiscoVPN.kext 
sudo kextload /System/Library/Extensions/CiscoVPN.kext 

Seems like unloading and reloading the kernel module fixes it.

UNIX shell tricks: find the escape sequence a keypress

If you ever need to figure out what escape code is generated when you press Ctrl-Left Arrow on a random terminal process, try the following:

cat > /dev/null
<press your random key sequence here, followed by enter>

You’ll end up with the escape sequence being printed directly to the terminal window. This is useful when you’re setting up things like bindkey statements in your .screenrc.

(Hat tip to Jonathan Daugherty.)

Leopard upgrade: BSOD

Last night I upgraded my iMac to Leopard. Some notes about the process:

  1. I spent the evening before the upgrade running SuperDuper to backup my entire hard drive to an external disk. Especially given this was the first OS upgrade I’d ever done of a Mac, I wanted to be extra-sure I had good recovery options. SuperDuper worked great, but the backup was extraordinarily slow – I got about 6MB/sec transfer speeds over a USB 2.0 connection. Amazingly, I could boot off the external USB drive just fine, although it was a lot slower loading.
  2. I’m not quite sure what the purpose is of running the Leopard installer application on your existing Mac OSX installation, rather than just booting off the DVD. As best I can tell, it just sets your startup disk to your DVD drive and reboots. The only contrary evidence I have is that when I launched the installer from my external USB 2.0 drive, after the reboot the installer didn’t see my internal hard drive at all as an upgrade option. I rebooted a 2nd time, turned off the USB drive and used the Cmd-key to boot off the DVD again. This time it allowed me to select the internal drive.
  3. I never saw an option in the installer to pick between an upgrade, archive install, or to wipe the drive and install clean. I wanted to try the upgrade first, so it didn’t particularly matter, but I still don’t know how to do a clean install if I wanted to, short of wiping the drive before running the installer.
  4. In an amazing display of trust given it was my first OS X upgrade, I answered the initial questions and went away for an hour or two, had dinner, gave out candy to trick-or-treaters, etc. I have no clue how long the installation actually took.
  5. When I finally did return to my iMac, I was stuck at the now somewhat-infamous Macintosh blue screen of death. Apple’s knowledge base article on the issue was all I needed to fix it, but it certainly wasn’t the most reassuring environment for a fix. Single user mode on Leopard is just like single-user mode in Linux: text based, read-only filesystems you need to fsck, etc. I was particularly amused by the instruction to “Restart normally” – how do you restart “normally” when there’s no OS X GUI? I know to type reboot, but not everyone does…
  6. Aside from the BSOD, I had no issues upgrading. So far it feels snappy and has some very nice additions, but I’m still exploring, so I’ll leave it at that.

Life at blist, 6 months in

I haven’t been blogging much lately, because I’ve been heads down in my work at blist. (You can also see me blogging on the blist blog – I’m due for another post there sometime soon, I think…) Halloween marked my 6-month work anniversary, which technically means I’ve now had the same manager at blist for the average time I did at Microsoft. (I had 7 managers in 3.5 years, or roughly a new manager every 6 months.)

Things at work are really coming together nicely – our team has really gotten into a groove with an ambitious but sustainable development pace, and our estimates (we informally use Scrum) are really starting to line up with reality now. Kevin, our CEO, and Matt, our marketing guru, have drummed an amazing amount of PR so far – if you follow the Seattle Startups rankings, you can see that we’ve shot up 22 spots to 81st place in the current rankings, and we haven’t even released a product yet!

Comcast DVR downgrade: TV Guide replaces Microsoft

For the past few months, Comcast has been sending me emails, postal mails, and at one point, even having an automated system call me to inform me about the impending DVR upgrade. I was excited: one of the promised fixes as part of the update was the “DVR hangs while fast forwarding” bug, which was particularly inconvenient because you ended up seeing parts of a TV show out-of-order, which ruins some surprises on shows like Lost.

Last Thursday, I came home to a newly-upgraded DVR. After a few days of testing, I’m reasonably convinced they fixed the dreaded stuck-while fast forwarding bug. Unfortunately, so many other things regressed from the Microsoft-branded DVR that I’d gladly switch back:

  1. While watching TV, the DVR will occasionally pop up a message front-and-center on the display with one of two messages: Your recording has finished or Your recording has started. There’s a few things wrong with this message:
    • It doesn’t provide anything useful, like the name of the program that just started/finished recording.
    • I don’t care that it started/finished. If the DVR is doing its job properly, it should act like an appliance and Just Work. Displaying a message like this reminds me of a novice programmer using printf-style debugging and forgetting to remove the debug statements.
  2. The user experience for searching by title is vastly worse than it was before. On the Microsoft software, I was provided with an alphabetically sorted list of shows on the right, and an onscreen (alphabetically sorted) keyboard on the left. Screenshot of new Comcast DVR UI - Search by titleI’d use the up/down/left/right/OK buttons to “type” a letter, and it would jump to shows starting with that letter. I could enter more letters to continue filtering the show title; eventually I’d have enough that I could easily locate it in the show list. On the new software, I’m presented with 5 boxes representing the first 5 characters of the show name – initially “AAAAA.” To change a character, I use the left/right buttons to select the appropriate box, and the up/down buttons to scroll through the alphabet.
    Remote controls aren’t the greatest input device, but this really should be a solved problem. My cell phone and squeezebox both get it right: use T9 and the number keys. Now, instead of the suboptimal Microsoft choice of navigating a 2D keyboard to pick each letter, I’m stuck with the even worse solution of navigating along a 1-dimensional line for each character.
  3. The Microsoft software had a button that brought up your list of recordings in one press. It’s probably the most common navigation action besides fast forwarding, and the new software requires I hit a button and navigate a menu just to bring up my recordings.
  4. Once I’ve made it to the list of recordings, they’re no longer grouped by show. When you have season passes to a number of shows, it helps to have a display where each show only takes one line, and selecting it allows you to pick which episode you want to watch. You can sort by show title, but you can’t group them.
  5. When a program is recording and you want to switch to live television, it doesn’t just automatically start using the second tuner. It asks if you want to cancel the current recording or use the second tuner. I can’t think of a reason I’d ever want to cancel the recording in that situation, aside from the programmers being lazy.
  6. The channel guide no longer provides the full channel name. I’m forced to learn that “THC” means the “History Channel.” It’s almost as bad as trying to memorize channel numbers again.
  7. Fast forward doesn’t jump back in time. TiVo pioneered this simple usability improvement, and I can’t imagine using a DVR without it. When you’re fast-forwarding and press play, the machine should jump back a bit from where the fast-forward got to, in order to account for human reaction time. At first I thought that it was just providing less reaction time, but then I noticed that I had the opposite problem in reverse – it didn’t jump forward to account for the reaction time there, either. This is extremely frustrating when you’re trying to skip commercials – fast forward, overshoot, rewind, overshoot, fast forward, overshoot, give up in disgust.
  8. While this software doesn’t seem to get stuck (stop responding to remote commands) while fast forwarding, it does appear to get stuck in a different way. When rewinding through a show, a corrupted picture frame will change the play state from rewind to paused. To go back to rewinding, you have to hit play, then rewind again.
  9. I lost the ability to pick when to record a show. Some shows air a second time in the middle of the night, and i’s convenient to record them in their non-primetime slot to free up the DVR for other recording duties when there would normally be conflicts. Now, any conflicts during primetime mean the show never gets recorded.
  10. Comcast promised the upgrade would maintain all my current recordings, scheduled recordings, etc. That wasn’t quite what happened:
    • Really old recordings I’ve kept on the DVR for months were simply deleted.
    • Any recording settings to record a few minutes early/late were lost.
    • After the upgrade, the DVR decided to record a few random shows I’d never told it to record.

I really liked the idea of having a Comcast-owned DVR. For the past 1.5 years, it’s given me a decent experience and provided the ability to record HD broadcasts for about $10/month. I knew TiVo had a better service, but it wasn’t worth the high upfront cost for the HD-capable box or the higher monthly cost to me. With the new “upgraded” service, I may change my mind on that. Since TiVo recently released a reasonably-priced HD model, the prospect of switching looks much nicer…

Sky Radio Network: First Spam, now Astroturf?

Just when I thought my issues with Sky Radio Network had blown over, it appears they’ve gone and shot themselves in the foot again. For those of you not familiar with the case, Sky Radio Network sent me an unsolicited email back in May, and they were relatively unrepentant about it.

Now, almost two months later, I got a comment on my original posting, defending Sky Radio and reproduced here:

I actually am defending Sky Radio because this is not traditional media and found it to be an effective medium for my company to get my word out to a captive business audience.
I understood it to be an advertorial and don’t feel I was deceived in anyway because I understood this to be another marketing tool to help build exposure for my firm.
Sky Radio delivers a high quality editorially driven show and doesn’t have the sponsorship of companies’ ad dollars like a traditional tv, radio programming. You also have to keep in mind regular tv, radio, print outlets are also subject to their advertisers in terms of content being produced.
The role of advertising was instrumental in the mass adoption of TV’s in the 1940’s and 50’s. It was ad dollars that financed the national network build-out.
At least with this vehicle, I am able to spin the message I’d like to without the constraints of a traditional media outlet that wants to garner higher ratings for their own purposes.
Sky Radio has its place for the business audience.

Okay, someone likes them enough to defend them. I wonder who that is?

Whoever it was, registered for an account to make the post, and provided an email address chipats[redacted]@[bigwebmailhost].com. (I’ve withheld part of the email address as a courtesy.) Could chipats be Patricia Chi, the Producer at Sky Radio Networks who was the author of the original spam?

Some more investigation revealed that the reverse DNS lookup of this mystery poster’s IP address (67.49.27.x) placed them at [redacted].socal.res.rr.com – a residential customer of Time Warner/Road Runner in Southern California. That’s interesting – Sky Radio Network is based in Valley Village, CA. The location matches.

I still didn’t want to falsely accuse Patrica Chi, but then a friend sealed the deal with a link: The Center for Media and Democracy has an identical comment 18 minutes later, from user “notme1230”. I have a really hard time believing anyone outside of Sky Radio would be posting rebuttals against negative press online, much less to two entirely independent sites.

There’s a term for these actions: Astroturfing. It’s the same reason that John Mackey, the CEO of Whole Foods, is currently being investigated for anonymously posting on Yahoo! finance message boards. Granted, Whole Foods is a publicly traded company attempting to purchase the competitor the CEO anonymously bashed, but it’s still a despicable business practice. I actually felt bad when I originally busted Sky Radio for spamming, because they were one of the few spammers that actually provided enough contact information that I could put a face with the name. Now I feel no remorse – misrepresenting your company by pretending to be a satisfied customer is stooping even lower than spamming, in my mind.

$9.99 Server

I’ve been looking for a “toy” server for a few months now to run at home. I didn’t want anything particularly powerful, but I wanted something that met the following criteria:

I didn’t want something like a rackmount PC. I have a wooden rack for AV equipment, but I find that 1U rackmount cases are overpriced, bulky, and they’re just too darn wide.
I’m not really sure where the server would live yet – it could end up somewhere where I don’t care about noise (the garage, or the closet with AV equipment), but it might also end up near my desk. Having an iMac has spoiled me in the noise department – it’s pretty much inaudible, and I love that.
Capable of holding a few hard drives
One thing I’d love to play around with is ZFS, which is usable on one hard drive, but infinitely cooler on many. I already have a few spare IDE drives laying around, so why not put them all in one case and make it a decent file server?
More powerful than most embedded PCs
There are plenty of thin clients and embedded systems out there that could handle the job, but I wanted something where I wouldn’t feel strained running a small Asterisk system on it, or encoding video on it, etc. I certainly didn’t need anything top-of-the-line, but a relatively modern CPU with more than 500MHz would be nice.
Well, it goes without saying…

I ended up with an ASUS Terminator C3 that I bought used off eBay for $9.99 + shipping, which actually brought the total to around $40. It’s not quite the perfect system, but it’s pretty close. And for $40, you call can’t beat it. Some things to like about it:

Expansion slots
2 external 5.25″ slots, 1 internal/1 external 3.5″ slots, and one PCI slot. Oddly, there are two brackets on the back for expansion cards – I guess I could put some monster 2-slot video card in it, if they actually made 2-slot PCI cards. Regardless, in theory I could fit 4 internal hard drives, although after taking apart the case I’ve realized that’s easier said than done. One 3.5″ slot is taken for a floppy and would need some metalwork for the proper screw positions to fit a hard drive, and there just aren’t enough connectors from the meager 165W power supply to power it all.
More than barebones
Most sites selling the Terminator C3 sell the barebones kit, where you need to add (at a minimum) RAM and a hard drive to make it work. Mine came witih 256MB RAM, and a 40GB hard drive. I’ve since added another 512MB RAM I had sitting around from an older Shuttle PC, and replaced the 40GB hard drive with a 120GB model.
Unexpected data
Don’t folks realize when they sell things on eBay they should wipe the hard drive first? Whoever touched it last just went into the BIOS and disabled booting from the hard drive, rather than wipe it. However, there wasn’t anything sensitive on the drive – just a copy of Windows XP Home Edition with nothing else on it. I suspect they imaged it before selling to verify it worked. I guess I have another product key for XP Home now!

And the things I’m less happy about, so far:

Noisy fan
It’s actually not that loud, but I’m spoiled. Still, I might consider doubling my cost just to get a good, quiet 90mm fan for it.
Driver support
Windows seemed to work fine with it, but I wasn’t intending to run Windows on it. So far it’s been an uphill battle with the built-in network card and the built-in video card. I haven’t even tried the audio, but I suspect that would be a trouble spot, too.
Case design
Small cases always suck, but this one sucks more than I expected. The removing the outer case requires you hinge it at an odd angle, then disconnect the power bracket from the back, and then you can hinge all the drive bays around 180° to access the motherboard, cables, and most of the drives. The fact that the external 3.5″ bay is drilled to only accept a floppy drive also annoys me. Until I either get a dremel or a 5.25″ to 3.5″ bay adapter, I’m stuck with only one hard drive in it.

I’ve just started getting it up-and-running with OpenSolaris build 64. I’ll put more details on that in a separate post.