Archive | Technology

08 February 2010 ~ 15 Comments

Restoring a PC using the Windows Home Server (WHS) Restore CD

Yesterday started well and ended well; not so much in between :)

After finishing some laundry and cracking open The Four Steps to the Epiphany, I decided to add two, 2GB DIMMs to my wife’s Windows 7 desktop.  After inserting the memory, Windows 7 booted and proceeded to fry the hard drive (corrupting at least the boot record, likely more).  I removed the memory and spent the rest of the day attempting to perform a bare-metal restore from our newly purchased HP EX490 Windows Home Server.  Thank goodness for backups!

The Good News: Successfully restored Pokin’s machine from the WHS backup (Time Machine-like, pretty slick).

The Bad News: Getting the restore started took about 10 hours.

In no particular order, here’s everything I learned.  If there’s anything missing, please leave a comment below.  Hope this helps!

Creating a WHS Restore CD or USB Key

Restoring Windows from a Windows Home Server is done using the Windows Home Server Computer Restore CD (download from Microsoft).

Alternatively, you can extract the ISO to USB key if the machine doesn’t have a CD/DVD drive (e.g. netbooks) or you prefer the speed of a fast key.  I would suggest using a USB key since it will likely take a few attempts to get your network drivers right during the restore wizard and you don’t want to have to deal with re-burning CDs.  Plus, most keys have activity lights on them so you can see the key is getting used during those looong pauses while the WHS restore does who-knows-what.

For some, creating a CD/USB key and booting is all you need to do.  The WHS restore wizard kicks in (it takes a very long time to process, be patient) and you can stop reading here.  If that doesn’t work, read on…

WHS kindly backs up your critical drivers if you have automated backup turned on.  These files are stored with your backup on the WHS, so using another PC you can extract the drivers on to your bootable CD/USB key and the WHS restore wizard will find them during restore.  Unfortunately, there is a problem here – the WHS restore CD is 32-bit.  If you are restoring a 64-bit flavor of Windows, the drivers that WHS stores with your backup are… not that useful.  Microsoft mentions this caveat in their Windows Home Server Technical Brief for Home Computer Backup and Restore.  You mean you haven’t read it? :)

Even if the WHS finds your drivers, that means almost nothing.  It reportedly found the drivers for my “Atheros AR8121 PCI-E Ethernet Controller” and did not properly install or configure them.  How’s this as a backdoor?  Click on help during the restore wizard, right-click “View source” on a help page which opens Notepad.  In Notepad go to File->Open, find your driver’s setup.exe, right click “open”.  Yes, this was the only way I could get my NIC drivers loaded.  Credit goes to someone in the MS support forums, which I can’t find (sorry!).

The big takeaway is that you really should prepare (and test!) the WHS restore CD or USB key in advance.  Boot the CD and get to the point where your network is up and you can see the WHS.  You don’t want to be going through this while freaking out about your crashed drives!

General Restore Tips

  • Be sure your Windows PCs are doing full backups every night.  That saved us.  The prospect of losing a day’s worth of work isn’t much to be concerned with, especially on a home PC.  I suppose that excludes things like term papers the day before ;)  Once you get past a day, it’s difficult to reason about what exactly you’re missing.  We’re backing up from 3am to 6am nightly.
  • If you’re going to be doing a bare-metal restore from the WHS, buy a 100′ cable ($25 at Fry’s) and plug your computer into your wireless access point, assuming the WHS is wired up as well.  Technically, restores are not supported over wireless and besides – they’re terribly slow.  My wife’s restore was ~250GB and it took so long we left it on overnight (this was wired too!).
  • Wireless security is not supported during a restore.  You won’t have a wireless network UI to configure wireless security, and it needs to be on the same subnet as the WHS.  Yet another reason to go wired!
  • During restore, the WHS does not like other backups or restores happening and (I think) this includes Time Machine.

Continue Reading

15 March 2009 ~ 0 Comments

BlackBerry Bold Impressions

This past Friday I unboxed and setup the BlackBerry Bold ordered via Amazon.  Since then I’ve been iPhone-free, emailing on the shiny new Bold.

This isn’t meant to be a comprehensive feature comparison – only what I’ve noticed over the last two days.

Where the BlackBerry Bold is Superior

  • Typing, by a longshot.  Old Rob would kid himself into thinking the iPhone was fine until I stopped sending emails because of typing accuracy.  Lightning fast on the Bold with far fewer mistakes – a few minutes after using it, versus a few weeks / months / years / never on the iPhone.
  • The unified inbox and calendar are amazing.  I have 4 email accounts and busy home/work calendars.  No clumsy hierarchical iPhone account navigation (read messages – back – back – down – down – read messages – back – back – …) and the iPhone only lets you use one calendar at a time.
  • Navigability (speed, not ease).  Berries are for Getting.  Things.  Done(tm).  Screen swipes, transitions, big button prompts (click the Reply icon on the iPhone when reading mail) all look terrific and make the phone much easier to use and without any accelerators for the accustomed user, they slow you down.
  • The screen is brilliant.  Same iPhone res crammed into half the size, of course!

Where the iPhone is Superior

  • Software support.  iTunes as the control center was a terrific idea on Apple’s part.  The Berry has no such thing.  Mac users get 3rd party software (PocketMac) which allows to you sync data from different apps (Address Book, iCal, iTunes) though the software itself is a shambles.  It took several attempts to perform a sync of only Address Book contacts, many of which hung or crashed PocketMac entirely.  In the end, only a small number of my contacts made it over and I have no idea how to get them all across.  I’m shocked RIM provides this as the default support mechanism for Mac users.
  • Two-way sync on all mail providers.  All IMAP accounts have two-way sync (e.g. read a message in Gmail, appears read in the iPhone).  The BlackBerry only supports this on BES accounts only (corporate email) and on ISP accounts it supports 1-way sync (read message on device, marks it read on Gmail).  If you only read these in your BB, it’s not a problem.  If you routinely swap between your web browser and the device, it’s a major annoyance.
  • Web browsing.  The world has already implemented crippled sites for BlackBerry browser detection and you need to change your User Agent in the browser settings to get the full web experience.  Changing your agent to Firefox or IE means you get to experience the web as though you were using the IE5 renderer.  Things work… mostly.
  • Google Maps.  The killer app on the iPhone for me.  The BB has maps as an app download from Google, though it’s much slower and clunkier than the iPhone even over WiFi and 3G.
  • Mail account setup: you use the browser on the phone to access the BIS (BlackBerry Internet Service) and setting up an account is circa 1999.  The only way to get IMAP is to leave your password empty, get an error, choose to set your settings manually and then specify an IMAP mail server.  Is your IMAP server also listening on a POP port?  OOPS!  The BIS looks for POP first and won’t let you set it to IMAP.
  • Overall organization of apps and options – settings on the Bold are in a few different places.  There’s a “Setup” icon and a “Settings” icon…?  Want to change your ring tone?  Use the Media app and select ring tones.  Want to play music?  Not under “AT&T Music”, under “Media”.  The saving grace here is that you can get rid of the noise by hiding half of the useless icons that ship with the phone.

My Choice

In the end I decided to go with… the iPhone.

  • Lack of two-way sync on non-BES accounts played a major part in the decision.  Picking up my device at the end of the day, full of messages that I’ve already read from my desktop, did not work well for me this weekend.
  • Amidst a myriad of crashes and hangs, PocketMac did not earn my trust and I won’t be depending on it to manage “my digital life”.  Who knows what havoc it could wreak on my data?
  • Apple hosts major updates to their firmware at least once a year and one gets the feeling that while they’re lagging behind in copy-and-paste, MMS, etc. that these are just around the corner.  For example, if iPhone 3.0 adds a landscape keyboard, will that do the trick on typing mistakes?

Thus ends my weekend of using the Bold.

Continue Reading

02 January 2009 ~ 0 Comments

Serving SVGs with Ruby on Rails

I’ve been working with Rally’s Ruby API intermittently over the last several weeks, as part of a side project to create some alternative visualizations of SCRUM release progress.  I’ve just now finished gathering the data from Rally and am moving on to creating the charts.

My options are Google’s Chart API (or another hosted graph creator) or to install one of the more popular Ruby gems (Gruff Graphs or Scruffy) though this doesn’t appeal to me as they both require ImageMagick and I want to minimize platform dependency down to native Ruby.

After some recent experience with SVG at the office, it ocurred to me that having a designer make a nice looking chart in Adobe Ilustrator and exporting it to SVG would be pretty slick.  You start with a hardcoded chart as your template, insert some dynamism and you’re all set.  Though it looks like the SVG exporter is still using a DOCTYPE and this is no longer recommended; an easy fix though since it’s all XML (ta-da!).  This assumes your browser supports SVG (FF3, Safari 3, Opera, not IE7).  Fortunately my project is internally focused, so requiring an alternative browser is acceptable.  A luxury, I know ;-)

Thus began a small adventure into just about every Rails nook and cranny, so save yourself some time and learn from it!

Continue Reading

12 June 2008 ~ 0 Comments

Redirects and mod_rewrite

I don’t write a lot about tech stuff in this space, but I do have one rule: if something takes longer than it should (or that I’d like) and involves much experimentation, I’ll share.

I’ve been using Google Webmaster Tools to track site statistics. Surprisingly, there were many incoming links to invalid URLs, all to my old images:

From my experience with WordPress I knew that URL rewriting could fix this. I want to replace “photos” with “galleries” and I’m all set. Seemed simple enough!

Tick tock… 12:30am turned to 1:30am… turned to 3am. In the world of technology, mod_rewrite and regular expressions are just about the two last things you’d want to mess with after midnight :)

The first part is easy – match all URLs that aren’t files or directories (in case these documents do actually exist) and contain the word “photos”:

                RewriteCond %{REQUEST_FILENAME} !-f
                RewriteCond %{REQUEST_FILENAME} !-d
                RewriteCond %{REQUEST_FILENAME} photos

I could have a blog post containing the word “photos” (I don’t) but I didn’t worry about that.

Next, through the use of a RewriteRule, I need to figure out how to turn this:

Into this:

Not only that, I want the search engine crawlers to record it as a permanent redirect (HTTP 301) and stop perpetuating these old URLs.

                RewriteRule  photos(.*) /galleries$1 [R=301,L]

The tricky bits are the $1 and [flags]. The $1 refers back to the Pattern, photos(.*), and basically writes a new URL that starts with /galleries and appends everything that matches after the word photos.

The [flags] tell the browser this was an HTTP 301 Permanent Redirect, and that for the preceding conditions, this should be the Last rule (i.e. stop processing).


Apache mod_rewrite Reference @
Regular Expressions Tutorial @

Continue Reading

24 October 2007 ~ 1 Comment

Windows Mobile Emulation

Hardware vendors often provide hardware “emulators” for developers to increase the speed by which we can create software for them. For example, an emulator for Pocket PC looks like this:

Because the emulator runs on my desktop, I don’t have to worry about buying one (costing me $) or configuring it (costing me my sanity). I can test my website from the emulator with very little turnaround time.

Only because the cost benefits are so significant would anyone struggle through setting this up.


After downloading the emulator, let’s install it. Oops!


If typing long URLs made up of random characters killed zombies, I would be overjoyed at seeing this dialog. As it does not, each keystroke provided repeated insight into the psyche of the developer. Sadistic? Hurried? Junior? Who’s to say really. Rather than take the time to use a hyperlink control (1-5 minutes) he lazily pasted the URL into the error message.

What’s worse is that this dialog is completely unnecessary. The purpose of the installer is to walk me through the process. Why, when something is wrong, should a separate window tell me? Isn’t that the installer’s responsibility? The installer window is huge and would have easily fit this long error message.

And what am I saying “OK” to? Things are not OK. I should be clicking on a button called, “Download Virtual Machine Network Driver”.

Lastly, the wording in both the initial setup screen and this dialog show that someone without a terrific command of the English language was responsible for this creation. It’s a shame when companies assume things like the setup process and error messages don’t need to be scrubbed by tech writers.


Finally, a quick download of the Virtual Machine Network Driver for Microsoft Device Emulator and I’m all set!

One click on “Download” and I’m good to go. OOPS!

Note: This download has now been retired. If you would like to get the Virtual Machine Network Driver, please download Virtual PC 2007 from:

Another error message, another URL I can’t click on.

Any why do I have to read this? Why didn’t the initial download page automatically forward me to the Virtual PC 2007 download?

Or even better, why isn’t there a packaged version of Virtual PC 2007 for Pocket PC developers? That would have solved the entire problem from the beginning – 1 download with everything I need.


I was able to download Virtual PC 2007 and install it without difficulty.


Now that I have everything setup… after grinding my teeth typing URLs and jumping through additional steps, the Pocket PC emulator starts up.

After installing and starting the emulator, I’m staring at a blank screen? After all of the time and effort put into the install, it’s a safe bet to assume that I might actually want to run it.

I can’t recall if I clicked on the power button to start the emulator or if I had to activate a menu option…

…but at least I didn’t have to type any more URLs.

Continue Reading

21 October 2007 ~ 0 Comments

Microsoft Focuses on Security

As you browse the web, various components are cached (reused) to speed up your experience. For example, why download the eBay logo anew on each page? It rarely changes, so just keep reusing the same one.

What happens when we don’t want things cached? For example, your online bank statement. If that were cached and someone broke into your computer, they could see your bank statement web page sitting in the cache.

To prevent this behaviour, set the Cache-Control HTTP header. It’s a bit technical, but basically you tell someone’s browser not to store sensitive information in the cache.

What about sensitive attachments? For example, viewing your account statement as a PDF. In Internet Explorer, this is not possible.

“Wait!” you’re saying. “Rob, I just did this today. I went to TD Ameritrade and viewed my transaction history as a PDF and it worked!”

Alright, I wasn’t quite honest there. It is possible in Internet Explorer, but in order to do so you have to instruct the browser to store the PDF in your cache. If the security of your machine is compromised, an attacker doesn’t need your bank account numbers or customer numbers; they’re sitting there on documents in your cache.

According to Microsoft “This behaviour is by design.” After all, if you tell your browser not to store the attachment, how can you view it after downloading? This is their statement, in a nutshell.

Firefox doesn’t have this problem

How is this related to usability?

There are downstream effects to Microsoft’s decision. They could have implemented this (Firefox does), but chose not to. If you want to offer secure downloads to your clients, you can’t. A decision having nothing to do with anything more than a function call at Microsoft dictates how businesses are best able to serve their customers.

It’s a pretty simple case of the needs of the machine being given more importance than the needs of the user.

The above-linked article makes mention of the specific API call to open the file – IPersistFile::Load – as the reason why this impossible.  It just as easily could be ITransientFile::Load or IMemoryFile::Load, right?  Or how about Internet Explorer deletes the file from your cache when it’s done viewing?  Lots of possible solutions here but all we’re given is a technology-first justification of why it’s broken today.

Then again, if any of you are looking towards Microsoft as a paragon of secure computing, I have some bridges for sale…

Continue Reading

26 September 2007 ~ 0 Comments

JavaScript Detection and Redirection Trick

With the advent of cross-site scripting attacks and other browser security issues, approximately 4-6% of us have disabled JavaScript completely. Unfotunately, the navigator object does not include a way to check for JavaScript execution the same way it allows a check for cookies.

A number of workarounds exist, none of which work if your application consists of one page (rare) or if the page that has to detect JavaScript is a deep link (not rare).

  • Use JavaScript to drop a cookie, then check for the cookie. Sure you can drop the cookie, but during that single page load you need to be able to see if the cookie was dropped and act accordingly. But if JavaScript is disabled, you can’t make the check.
  • Use JavaScript to fill in hidden form fields. Again, it assumes you can deal with a server round-trip to discover that JavaScript is disabled.

What worked for me was use of the <noscript> tag:



<meta http-equiv=”refresh” conetent=”0;url=/noJavaScript.html”/>



…which immediately redirects the client to the specified URL should JavaScript be disabled.

I haven’t run this through the W3C validator, but it does work on IE6, IE7 and Firefox 2 which is good enough for me :-)

UPDATE  10/04/2007: This does not pass XHTML validation.

Continue Reading

23 September 2007 ~ 0 Comments

I Can’t Even Tell

Some UIs are just so confounding, so defying of common sense that you can’t even guess what they were going for.

Courtesy of Fry’s online presence –

  1. Enter “Palo Alto” in the City field.
  2. <Press TAB>.
  3. The screen redraws with the red message, “City modified to match zip code” except, since you didn’t yet enter the new zip code, it changes the city name back to what it was.

If you want to change the city, you have to edit the fields in reverse order.

Let’s take a look and see what’s wrong:

  • The message is red, which looks like an error (it’s not).
  • Display inertia – while programmers think in terms of “onclick,” “onfocus,” and “blur”, nobody else does. Interrupting flow in response to these events is confusing at best, alarming at worst.
  • There’s a full page refresh that axes your keyboard focus, so when the page refreshes while I’m glancing at my numpad thinking I’m putting in my zip code, I’m filling “33322” in the First Name field.

I’m taking a shot in the dark here when I guess that Fry’s is dealing with a lot of returns based off bad zip codes. Since you know where you live, if a strange city appears you’re more likely to notice that than the difference between 33322 and 33323.

The real solution is for the application to stop whining. In the case where I get it right, don’t tell me anything – take my order and be quiet. If the city name and zip don’t validate, are they close enough that the application can figure it out? The chance that I would get my city name wrong seem infinitesimal, unless this is the first time I’ve ever had to fill it out.

What’s surprising about all this is that I’m in the process of giving money to Fry’s. If there’s one “use case” that should be bulletproof, it’s the checkout process.

Unless of course, you’re not interested in making money.

Continue Reading

12 September 2007 ~ 0 Comments

…Paved With Good Intentions

Overall, my experience with the USPS web site has been a pleasant one. I recently sold several items on eBay and printed many labels. It saves me a trip the Post Office and for that I’ll suffer through most anything, which is a strange selling point – the in-person experience is so bad yet I still patronize the company. Fortunately they’ve done decent work and their UI gets the job done. It’s as much as I can ask from the government :-)

This one particular interaction always trips me up: When you fill out an email address and click on the “Notify recipient” checkbox, the check mark disappears!

We won’t take too much time to bemoan the inclusion of a group box around a single control ;-)The developer is attempting to solve a problem that doesn’t exist via the use of “helpful” JavaScript.

<input type="text" id="deliveryEmail" onchange="checkEmailAddress('deliveryEmail', 'emailNotification')"/>

The issue is one of placement. If the check box was not next in the component flow, this would work perfectly. Because it is next in line, this is what happens:

  1. Fill out email.
  2. Click checkbox.
  3. Email field loses focus.
  4. JavaScript checks the checkbox.
  5. My click unchecks the checkbox.

The more important issue to consider is that this JavaScript is attempting to solve a problem that doesn’t exist, akin to pages that automatically advance the tab order when you’ve completed filling out a field.

Developers are attempting to address the false goal of minimizing clicks. What they fail to understand is that these easy component navigation clicks are invisible to users. They understand that to type or check something you have to click on it. Why break that expectation? I’m typing in one field and without purposefully navigating to another, my focus has changed?

Some people may notice it but I suspect most people are clicking anyway, so they get no benefit. Other people navigating with the keyboard are frustrated because their navigation model is broken.

Don’t pull the rug out from under your users.

Continue Reading