Banks and S/MIME (and other public key encrypted mail options)

January 18th, 2010

Many widely deployed mail client apps support S/MIME. Banks worry about phishing and security since generally they are either liable for losses due to unauthorized online account access or act as though they are to encourage use of the online tools rather than expensive agents.

I really wish a bank supported me giving them a public cert to encrypt use for all communications to me — and published a public cert that I could use to validate all communications from them.

They all handle SSL in the browser and they all support some kind of email-based notifications.

Then, ideally, I could configure my mail client to binfile anything from their domain that isn’t signed with the right key and encrypted to me.

On the other hand, it may be dangerous to stop training people that clicking on a link in email is never a good idea.

The Robustness Principal and internal APIs

January 15th, 2010

RFC 761 section 1.2.2.

2.10. Robustness Principle

TCP implementations should follow a general principle of robustness:
be conservative in what you do, be liberal in what you accept from
others.

RFC 1122 elaborates with section 1.2.2.:

1.2.2 Robustness Principle

At every layer of the protocols, there is a general rule whose
application can lead to enormous benefits in robustness and
interoperability [IP:1]:

“Be liberal in what you accept, and
conservative in what you send”

Software should be written to deal with every conceivable
error, no matter how unlikely; sooner or later a packet will
come in with that particular combination of errors and
attributes, and unless the software is prepared, chaos can
ensue.
[...]

For anything expected to inter-operate “in the wild” with other implementations of a given standard or API this approach is optimal as both competitive advantage (how successful would a browser that only accepted valid HTML have been in a world with Netscape 1.0?) and user experience (always working as best as possible increases the chance of something working).

However, when an API is internal to a component, department, or a company it might well be better for implementations to reject fast invalid or malformed requests with informative error messages rather than attempting to proceed.

Within an organization the chances of integration testing catching an error before it affects user experience is much higher and failing immediately helps reduce the chances of future revisions of software needing to be “bug compatible” with easily avoided problems. It’s not a competitive advantage to try to muddle along with bad input in a world where there are no competitors. The entire system is more robust if each side of every API is careful that they are producing only valid requests and responses.

For example, if a company has standardized on UTF-8 as a wire format for text it is probably best if all new implementations of services validate that their input is correct UTF-8 at every edge and refuse to process anything that is invalid. Otherwise eventually some system is going to end up having to try and guess the correct encoding in order to proceed and serve valid data that came in an API that didn’t validate and has to go out an API that must be valid.

This only applies, of course, when both sides of an integration are new enough to be tested together but this applies to a lot of new development within an organization — a new capability is being added to an entire “stack” resulting in API revisions at each layer.

It’s dramatically easier to catch problems at the first opportunity and requiring the source of the incorrectness to correct it before proceeding than ending up years later with tons of special compatibility hacks where an API is versioned based on the different clients foibles rather than by design.

Internal APIs should be designed to be as easy as possible to use correctly — but once designed they should only work when used correctly.

Thunderbird 3

December 8th, 2009

Not perfect.

A clear improvement, however. I particularly dig the new search. Once I figured out I could configure the Archive function to put archives from all my accounts into my local Linux box’s IMAP server I also liked the new Archive function. It nearly matches the system I maintained by hand anyway (manually periodically moving a bunch of mail into suitably named folders on my local Linux box).

Also nice is the “smart” Inbox — a feature I’ve liked in Mail.app and kind of missed in Thunderbird.

I’m not yet sure if I like the rest of the UI changes but I’m going to try them out for a bit before trying to reconfigure them back from whence they came.

Cineform NeoScene, Adobe Premiere Pro CS4, 5D mark II, and Timecode.cpp

November 19th, 2009

Suppose you’ve recorded some video with your Canon 5D mark II. It is in a format that is annoying to edit using Adobe Premiere Pro CS4.

Suppose further that you have purchased Cineform Neoscene to transcode that video into a nice-to-edit format.

Further suppose that this workflow was working fine on your old Vista 64-bit machine.

Now, you’ve installed CS4, Cineform, and transcoded some video. Then you import it into Adobe Premiere Pro CS4 and prepare to edit!

And PPro crashes. With an error referring to Timecode.cpp. Around line 930.

You are sad. You scour the entire internet in tens of milliseconds and find several posts talking about crashes in that location, but they have nothing to do with importing files created by NeoScene.

You try to play the files in Windows Media Player and they do not crash but they also are not playing at the right speed. Ah ha! That does rather smell timecode related.

Cutting this story short, install Quicktime 7. This workflow requires Quicktime to be installed or crazy broken things will happen. The requirements page for NeoScene does not talk about needing Quicktime on Windows.

With Quicktime installed, you re-run NeoScene and birds burst into song. Or rather, the output files are right and can play back in Quicktime and WMP. They can also be imported into PPro without mysterious crashing.

The day is saved.

Windows 7 might be cool if the upgrade worked

October 24th, 2009

I preordered Win7 Pro from Amazon. I’ve been using 64-bit Vista for almost a year now and it’s been nice enough.

I decide to do a clean install. The Windows 7 installer works great right up until it won’t accept the product key that came in the package. The “Upgrade” Win7 cannot install to a clean disk and then take the Vista product key to satisfy the upgrade. It’s not even clear how to get a clean install of Win7 now, since it seems the ONLY valid path is to have a copy of Vista installed already. Furthermore, it puzzles me why Win7 Pro Upgrade can’t tell me this instead of offering to do a clean install and then failing 45 minutes in.

It does work with a clean, unactivated Vista install immediately followed by a Win7 Pro upgrade. This was a needlessly frustrating introduction to Windows 7.

Once it is installed Win7 seems nice enough — an incremental upgrade from Vista. It’s not at all clear why Microsoft decided to inconvenience such a small population of people. The vast majority of users will get Win 7 with a new machine purchase. Very few, relatively, will buy Win 7 as an upgrade, but those are exactly the users Microsoft can least afford to make frustrated. These are the users most likely to be the people advising their friends and family about what to buy.

Credit card security

September 13th, 2009

I received a letter from “Network Solutions LLC” claiming they had a security breach and some transactions made via “a web merchant” “may” have been compromised on a particular date. I only had one transaction with a “web merchant” on the date they list with that card.

I wonder if this letter is entirely legitimate since it seems pretty desperate to convince me to sign up for a “free credit monitoring” period — but that doesn’t seem like a useful response to a single card number being compromised. Furthermore, I’d expect that the credit card issuer was also notified and their usual response to this kind of thing is “cancel all the cards and issue new ones” and that didn’t happen. Though maybe they didn’t bother because that card had already expired by the time “Network Solutions LLC” reported the breach.

Nevertheless I’m looking over statements since that date more carefully than usual to see if there’s any fishy transactions.

It’s not the same card as the one a credit card provider recently replaced mysteriously due to “a security breach with a merchant” that they naturally didn’t explain. That is the kind of behavior I expect from a bank.

I suspect that credit card companies aren’t interested in increasing the security of cards because paying for the fraud is cheaper than the lost sales due to lower convenience.

Of course, every time I get a new card number I would have to go change the umpty-jillion places that have the card number for automatic billing if most of those places didn’t have single-merchant numbers. This is a case where the issuer with the capability to issue single-merchant card numbers wins. I’ll probably switch the rest of them over next time the card number from the company that doesn’t support single-merchant numbers gets compromised.

Adobe Audition 3, Windows Vista 64, and running as Administrator

August 23rd, 2009

Adobe Audition 3 (or at least the trial version) really wants to run as an administrator on Windows Vista 64-bit. Several hours groveling through possible resolutions from the Internets (including searching Adobe support) to diagnose the “exit on startup with the modal dialog box ‘Adobe Audition cannot find any supported audio devices. Check your device settings. [OK]” led to repeated failure.

Finally just before giving up and working on something else for a while, I try to run it as an admin on a whim. It starts. !!!

So I go and check “this program wants to run as an administrator” in the properties of the start menu shortcut. Perhaps now it will actually work.

Asterisk (Still)

August 20th, 2009

I finally disconnected the phone  that was directly connected to the landline, which means Asterisk now decides when the phone rings at all and any voicemails get mailed to me as WAV files.  This is much better.

I did have to tweak the voicemail settings so the WAV files were actually audible without turning the PC speakers waaay up.  In /etc/asterisk/voicemail.conf, I set volgain to 8.0 (and installed sox).

Asterisk has “taken care of” 358 calls (callers with no CID or CID identifying them as toll free numbers) since I set it up early last month.  They went straight to voice mail without ever ringing my phone.  Very few of them left messages.

(Yes, I still plan to post something more descriptive with configs describing as much of my setup as seems reasonable.)

Asterisk, again

July 3rd, 2009

I dragged out a Cisco (Linksys) SPA3102 and finally got around to setting up Asterisk at home. The final motivation? Easy “routing” of annoying (800|866|877|etc|no caller id) callers straight to voicemail.

Despite being on all the “do not call” lists I still get too many (= some) unsolicited calls representing entities rather than people I know. My new crazy complicated answering machine can now route them straight to voicemail where they will not leave a message but also not ever ring my actual phone.

I don’t just blacklist them outright because once and a while one of those suspicious looking numbers is actually a call I want (“Dear Ken, Is it really you buying all this shiny? –your credit card”) but all of those DO leave messages.

Python and libyahoo2, take 2

June 1st, 2009

Last October I worked on a libyahoo2 binding using Pyrex and got it far enough along to discover the version of libyahoo2 I was using couldn’t log into YIM.

Several Ubuntu updates later I noticed libyahoo2 had been upgraded and, sure enough, this version worked.

I updated the Git repository mentioned in that post but it is likely if I continue to work on it it will go to python-yahoo2 on GitHub.

Pyrex’s blindness where “const” is concerned is pretty annoying.

Ubuntu 9.04 and python-virtualenv

May 31st, 2009

I recently upgraded a bunch of physical and virtual machines from various Ubuntu v.older version to Ubuntu 9.04. Naturally, this broke my Python development environment since Python was upgraded from 2.5 to 2.6. I had instructed easy_install to put things into /usr/local.

The upgrades from Ubuntu v.older to 9.04 went quite smoothly on every machine including the ones where I had to do several stepped upgrades since on various machines I skipped one or more upgrades prior to 9.04.

Rather than return to my old ways of just hosing packages (and, worse, “setup.py develop” symlinks) into /usr/local I’ve decided to use python-virtualenv to create some non-root-owned Python environments to work on my various Python-y apps. The main difference to me is being able to keep things I’m working on separate from one another.

We’ll see how it goes.

I’m afraid all these years of using package-managed software has made me soft — now a piece of software not having a nice package means I need to think a bit harder about if it’s worth dealing with the hassle of having that software outside of the package manager. (That applies to when I’d like to be using a more recent version of the package, too, though generally on Ubuntu I run into that a lot less frequently than I did on Debian.) I have mixed feelings about setuptools and easy_install.

I am pleased that now mod_wsgi is in a package so I can switch to that version rather than the one I installed by hand. mod_wsgi was worth it to install by hand to use until there was a nice package available. It’s Just Better than my previous mechanisms for running WSGI apps in, under, or behind Apache.

Singleshot and Git and first steps

March 4th, 2009

Singleshot is the photo album software I use to host photos.xythian.com. The last release was .. rather a while ago though I have been making minor enhancements and bug fixes since then for my own use (including flash video support which extracts thumbnails using mplayer and embeds flowplayer to play) though there’s no video on my public photo site).

Prior to today every time I took the time to try and update the source tree on Sourceforge I ran into a snag such as “Sourceforge CVS is unavailable.” Months ago, when I tried to migrate from CVS to SVN on Sourceforge I ran into errors. I didn’t even try to investigate what went awry as I was low on patience and time.

As a result, my own tree (first in Perforce and now in Subversion) has gotten pretty out of sync from that tree. I decided to try GitHub and try using Git for something “real” — so I’m going to move Singleshot’s source to GitHub and then push all my changes to there.

I followed (mostly) the steps from How to export revision history from mercurial or git to cvs which describes how to use the git cvsimport command to pull Singleshot’s revision history from its Sourceforge CVS repository, testing making a tiny change to a README, and pushing that change back to the Sourceforge CVS tree.

(After backing up the source tree on Sourceforge using rsync.)

% export CVS_RSH=ssh
% git cvsimport -d :ext:xythian@singleshot.cvs.sourceforge.net:/cvsroot/singleshot -C test1 \
    -r cvs -k -A /home/fox/src/singleshot-import/authors.txt  singleshot
Initialized empty Git repository in /home/fox/src/singleshot-import/test1/.git/
[longish pause]
Counting objects: 561, done.
Compressing objects: 100% (502/502), done.
Writing objects: 100% (561/561), done.
Total 561 (delta 317), reused 0 (delta 0)

(Some poking around to see if things look reasonable, making a small change to the README, commiting it first to the git repository and then back to Sourceforge using git cvsexportcommit.)

Then I pushed the whole thing to a GitHub tree:

http://github.com/xythian/singleshot/tree/master

% git remote add origin git@github.com:xythian/singleshot.git
% git push origin master

That was pretty straightforward and appears to have worked.

My plan is to merge my changes into the out of date tree and then push the new code to GitHub. If it all works out I’ll probably indicate that the Sourceforge project is defunct there and host the code on GitHub henceforth.

Pyrex and libyahoo2 (or not)

October 27th, 2008

I had something I wanted to try in Python running against Yahoo! Messenger. The obvious choice of library for talking to Yahoo! Messenger was libyahoo2.   I could not find a Python binding for it, so I started sketching one together with SWIG.  The first step is creating a bunch of empty callbacks. The libyahoo2 in Ubuntu’s package is compiled without USE_CALLBACK_STRUCT, so libyahoo2 expects to find a bunch of extern functions defined to interact with the host. I made empty callbacks in a C file and started reading more about the API.

It rapidly became clear that I was going to want a layer on top of the library to make interacting with it from Python more palatable.   I switched to Pyrex, since I wanted to write that wrapper in Python (or something Python-like) rather than building a straight-C wrapper so using SWIG would continue to make sense.   SWIG’s big benefit in my mind over Pyrex is easy support for more languages and better tools for defining straight wrappers.  I wasn’t going to get "free" use in other languages and it wasn’t going to be a straight wrapper now but rather a module that exposed the functionality of libyahoo2 to Python.

I kept the callbacks.c I had defined but started migrating the definitions to the Pyrex file as I implemented.  This way my library would continue to link without complaint about functions I didn’t have yet.

Following the usual pattern for Python bindings to libraries that need wrappers to be more Pythonic, I planned to have a ‘yahoo2′ module in Python and a ‘_yahoo2.so’ extension module.  The _yahoo2 module is written in Pyrex.

libyahoo2 appears not to adhere to the documentation it defines.  It’ll call ext_yahoo_remove_handler with a tag that was never returned by ext_yahoo_add_handler… (0).  It looks like an undocumented (that I found) part of the charter of ext_yahoo_add_handler is not to add a given handler more than once.

This also made defining the callbacks the way libyahoo2 expected easier.

D’oh, I got it far enough along to get this:

libyahoo2.c:620: debug: Key: 4 Value: Yahoo_Messenger
libyahoo2.c:620: debug: Key: 5 Value: hodorbot
libyahoo2.c:620: debug: Key: 14 Value: This version of Messenger expired on April 2, 2008. Please upgrade now to the latest supported version: http://messenger.yahoo.com Learn more: http://messenger.yahoo.com/eol
libyahoo2.c:620: debug: Key: 15 Value: 1225167367
libyahoo2.c:620: debug: Key: 97 Value: 1

I’ve learned what I wanted to, so instead of seeing if a more recent libyahoo2 than what’s in Ubuntu works (> 0.7.5+dfsg-3), I’m just going to call it here.  I’ll post it in case someone can learn something useful from it.

You can pull a working repository with a command like:

git clone http://notes.xythian.net/media/2008/10/pythonlibyahoo2.git/ mydirectory

There’s three files that do anything:

  • yahoo2.py – wraps some of the lower level details from the Pyrex layer, including exposing the IO bits as an asyncore dispatcher
  • _yahoo2.pyx – is the binding
  • callbacks.c – exists to have empty functions defined to satisfy the linker until those have implementations in the Python binding

Not much works, really; there’s implementations of connect and async_connect, but only async_connect is called by libyahoo2 before it gets far enough along to not log in with the error message above. There’s a wrapper for setting the log level (which was key to discovering the above fact…).

This is a typical definition of one of the library callbacks:

cdef public int ext_yahoo_connect_async(int id, char *host, int port, \
  yahoo_connect_callback callback, void *callback_data):
   cdef ConnectionHandle handle
   handle = ConnectionHandle(id, host, port)
   handle.connect_callback = callback
   handle.connect_data = callback_data
   handle.async_connect(callback, callback_data)
   HANDLER_MAP[id].connections.append(handle)
   MANAGER.add(handle)
   return handle.fileno()

ConnectionHandle is an extension class which wraps a Python socket object and can make the callbacks the libyahoo2 IO layer expect.   MANAGER is the connection manager, which is implemented in the higher level layer (yahoo2.py) so it could be replaced with something that interacted with a GUI event loop.

I’m probably done with this for the forseeable future and hope publishing it along with a git repoistory may allow someone to build on or learn from what I’ve done.   I stumbled upon Cython while working on this, but didn’t want to derail any progress to something working by playing with it.

So what did I learn?

  • Write toy bots against open protocols with existing libraries in your language of choice, such as XMPP, lest your project get hijacked working on a binding rather than the toy.
  • Pyrex is pretty nice for building wrappers that have more meat than a typical SWIG binding.
  • Cython is probably worth checking out.
  • git is worth playing with more

VirtualBox 2.0.0

September 4th, 2008

Virtualization is still shiny. I’ve been playing with VirtualBox 2.0.0 tonight. I’ m writing this from an Ubuntu 8.04 VM running on my Windows XP desktop machine in “seamless windows” mode. It’s not quite as “seamless” as VMWare Fusion’s Unity mode on the Mac, but it’s still pretty neat.

VirtualBox 2.0.0 is as smooth to install on WIndows as the 1.x build I tried on the Mac was (I’ll try 2.0.0 on the Mac soon) and either adds a bunch of cool features or I noticed some features that were in 1.0 the first time with 2.0. I know seamless mode is new in 2.0, but I don’t know if the “headless mode” (= run as a daemon and display only as an RDP server; not interesting on my Windows box but quite interesting for Linux) is new or not.

“Seamless mode” is not as seamless as Unity mode: the tab order (and task bar) do not show the virtual machine’s apps as first class windows. Instead, the entire VM appears to be a single app to Windows not unlike running in full screen mode. It’s essentially as if the desktop background of the VM was replaced with an transparent texture, so I can see all the windows apps wherever the desktop would been visible. It’s handy but a little confusing. Also the system menu bar is considered a window and thus shows up at the top of the Windows desktop machine (compared to Unity mode, where it can be turned off entirely and replaced with Fusion-provided navigation functions). It’s not quite fair to compare Fusion running Windows to VirtualBox on Windows running Linux since it may be that “seamless mode” is more seamless with Windows guests (and, of course, VirtualBox is free for personal use and Fusion isn’t, but Fusion is cheap enough to be essentially free for the sake of a tool I use as much as virtualization).

It looks like Fusion 2.0 is nearing release (as well as VMWare Workstation 6.5, which finally adds support for Ubuntu 8.04 guests — this lack in Workstation 6.0.4 is how I ended up playing with VirtualBox in the first place).

I suspect VMWare is going to remain the virtualization tool I reach for “in anger” (especially once Fusion 2.0 and Workstation 6.5 and Server 2.0 finally all ship, which will give me good solutions for running the same virtual machine images on any machine I might desire).

Saving power on Intel/Linux

September 4th, 2008

lesswatts.org has some interesting reading and references an interesting utility called powertop (which is available as a package in Ubuntu). It turns out there are some easy things to reduce the power used by a Linux server (or desktop or laptop, but I cared about the server) by a few watts here and there (or more, but I didn’t do before/after measurements). Even just upgrading to Ubuntu v.latest (8.04) probably saved me some power because the tickless kernel became standard.

Idea: Visualize wikipedia trails

August 26th, 2008

A browser extension that watches you surf through Wikipedia, and then generates a pretty graph with some kind of representation for how long you spent on each page.

On the other hand, maybe not, because I’m not sure I really want to know where that time just went. It would be a pretty branching tree, though. I should know better than to click through links to Wikipedia — it really doesn’t matter where the link goes. They’re all dangerous. Howstuffworks, too. And if any of the Wikipedia articles link TO Howstuffworks (or visa versa) then it really is hopeless.

And THEN, you get a LOT of people to install it (or Wikipedia to run it on their access logs) and let people surf through the trees starting from some arbitrary page. That would be cool.

Soft word wrap in Emacs

August 17th, 2008

I was editing some text with emacs and finally got fed up with the choice between “auto-fill-mode” (spray hard newlines into my file to word-wrap) and “suck” (no word-wrap, long lines). Fortunately for me, not only is there a minor mode to implement this feature, but GNU Emacs 22 (the version I was using) bundles it.

It’s called “longlines-mode”, and I am grateful for Soft word wrap for long lines because it was the search hit that explained to me the existence of the mode, its name, and how to get it (in my case, “it’s included”). Finally Emacs has something every single other text editor I’ve used since QEdit has had.

Lightroom 2

August 13th, 2008

It’s a significant upgrade from Lightroom 1. Lightroom 1 didn’t make it past “fool around with it a bit” for me because it fell over when I fed it my entire photo tree.

The 30 day trial is key — there’s almost no chance I would have picked LR v2 up without being able to try it “for real” for a while.

I’ve been feeling the pain of inadequate management tools for my slowly but inexorably increasing photos directory tree. My workflow prior to Lightroom was (is, since I haven’t really committed to LR yet):

  1. Shoot lots of photos.
  2. [Download all the pictures using Downloader Pro onto the laptop; manually copy them to an external disk.]
  3. [Look through them with Breezebrowser Pro.]
  4. At home, copy all the photos from the external disk to the desktop (or download them using Downloader Pro if the photo shooting if I was home the same day as I shot the photos, as in when I am not traveling)
  5. Sort through them in Breezebrowser Pro tagging the ones I like, using Photoshop and Camera Raw to prepare any I like to post or use for something. If they’re to post, ruthlessly edit down to very few with multiple passes in Breezebrowser untagging photos that do not make the cut. If they’re for family, the bar is a bit lower since I get flack when I shoot hundreds of shots and share .. four with them.
  6. Use CR/PS to open, crop, jigger exposure, sometimes edit; post and/or write to DVD-R appropriately.
  7. When I post, I add metadata (title, keywords) to the file using PS and carefully use the export path that preserves that and the EXIF metadata (not Save For Web…, but Save As…JPEG). This metadata can be consumed by both Flickr and my own photo album software. Lots of other things too.
  8. Once and a while I’d use Bridge to tag the entire shoot’s worth of photos with something to identify them later, but not usually because Bridge is just too slow even when fed only one directory/shoot’s worth of photos.

I didn’t have any good way to store or search on metadata across the whole tree. And the PS/BR/DL workflow is kind of clunky.

With Lightroom, once it’s all configured, it’s more like:

  1. Download using LR, having LR copy to the backup drive when applicable (*) According to forums, I have not set this up yet, but will certainly do so before the trial runs out..
  2. Sort, choose, tag photos in LR.
  3. Jigger exposure, crop all in LR for shots that make the cut.
  4. Export from LR with metadata intact. The only bummer about this bit is that when I used to do bulk exports, BreezeBrowser made it easy to just extract the embedded “thumbnail” in the raw file, which was much faster than converting the raw file and the “thumbnail” with my current cameras is 3MP or more, plenty for web.
  5. Metadata remains searchable and browsable far more easily than the huge tree of directories I have.

LR is not as fast as I’d like (BR is just crazy fast at display even when fed hundreds of shots in a directory) but it’s fast enough for its other wins to be very enticing. I need to put it on the laptop and see how it works as if I was traveling and then came home. Some forum surfing indicates this flow can be very nice.

Also the fact that it’s easy to Stack the original with any edited versions (in the rare cases I need more than LR’s built-in nondestructive edits like cropping or exposure/curves/etc) is very nice.

I’ve already unearthed some shots I liked but missed using my old workflow. One thing I really, really like about LR: it’s easy to configure it (with a performance cost) to always keep metadata with the actual photos (embedded in JPEGs, sidecar .XMP files for raw files). Some things don’t get represented this way (e.g. Stacks).

A big reason I’ve avoided tools like this for so long is I got thoroughly burned once by Thumbs+ when I spent an afternoon carefully adding metadata to all my photos which got stashed away in Thumbs+’s db .. and then it blew up and lost the db somehow. Not even my normally relatively diligent backup procedures saved me there (nightly).

It seems like a win. It’s big enough that I may need to pick up a book on it to really leverage it well, but even without anything other than a cursory surfing through some forums and its own help it’s looking like a big improvement to my workflow.

Virtual Box

July 12th, 2008

I’m fooling around with Sun’s VirtualBox — virtualization software that comes in both an open source GPL version and a “free for personal use” closed source version with some more features.

It seems pretty nice so far. It compares favorably with VMWare given the price. I haven’t done much with it yet, though, so it may turn out to have rough edges.

I’m running an Ubuntu 8.04 LTS box on my Mac. The Mac version looks to be the least polished, since it’s the newest. VMWare Fusion has a lot more hardware support (e.g. sound). I need to take another shot at VMWare/Ubuntu v.latest to see if the guest additions are now supported.

TiVo is fired

July 7th, 2008

I haven’t really been using my TiVo since I got the HD cable box. The HD cable box is not great but it supports HD and my old TiVo doesn’t.

I like the TiVo UI — my series 1 TiVo served me well for nearly 8 years and it still works fine. I only stopped using it because it didn’t do HD and I’ve been waiting for a good HD-TiVo solution that I was sure would fully work with my cable. Since I haven’t used the old TiVo in months I want to stop paying for it. (Yeah, the breakeven point for the “lifetime” subscription was years ago — oops, I never expected to keep this first-generation TiVo for so long. I was sure that something more compelling would come up from TiVo or someone else within 3 years…)

I’ve heard some horror stories about getting the CableCard TiVo to work with Comcast — getting it to work seems to hinge on how well the Comcast guys you happened to get were trained. Comcast is going to be fired too. This is too bad, since otherwise I would have picked up the CableCard-OK HD TiVo when the price dropped.

So I’d like to suspend service on the old TiVo. TiVo would lose me as a monthly customer, but I’d still be willing to pick up a new TiVo in the future. No problem, since TiVo has a pretty nice account management web interface. Except…

I can do everything except cancel or suspend service on the TiVo web site. I have to talk to someone on the phone to cancel — so far I’ve been on hold for 15 minutes once and then the support line hung up on me. Now I have called again and am waiting on hold again.

Making me call to cancel or suspend service is why I am unlikely to ever buy any more TiVo products in the future. It’s too bad, too, because without that I would still like TiVo despite the fact that they have no products that can help me right now. Perhaps they do not care about alienating customers that want to suspend or cancel service but it does seem to preclude the chance of any customers that leave ever coming back. I am sure to tell my friends about this experience, too, changing my recommendation that folks pick up a TiVo despite being offered a cheap but lame DVR from the cable company to just use the cable-provided DVR. The monthly fee is cheaper and there’s no up-front equipment cost.

I’m up to 15 minutes on the second attempt at getting a person to talk to. This seems designed to ensure I’m in a particularly bad mood by the time anyone ever answers. I suppose if they never answer the phone then they think I can’t ever cancel.

Update: At around 22 minutes, somebody answered. She was very polite, tried to get me to stay, pointed out that they had CableCard-enabled HD TiVos when I explained why my TiVo was no longer adequate, and apologized about the wait and the hang-up. I have no complaints about the experience once I finally got to talk to someone.

However, since the only reason TiVo forces a call for cancellation is to benefit itself with a “saves” mechanism then putting people on hold for a long time and having a buggy IVR that hangs up on them seems pretty counterproductive.