iPhone 3.0 OS and WiFi Security

I love my iPod Touch, but it hasn’t done any favors for my network security. Before I had the Touch, my home wireless network was secured with the WPA2 protocol and a completely random 64-character security key. Overkill? Perhaps. But I’ve got a healthy amount of paranoia when it comes to the security of my home network – especially my wireless setup.

Once I brought the iPod home and realized that I was going to have to manually key-in my 64 random character passphrase on the Touch’s virtual keyboard, I quickly dumbed-down my ultra-secure key to something that was considerably shorter. The iPod Touch (as well as the iPhone) has had no support for any sort of copy-n-paste operation so there was no choice but to manually enter it character-by-character.  I just don’t have that kind of patience.

I’ve been running my network with this less-than-perfect security key for well over a year now and, while I’m pretty sure that my neighbors haven’t been running dictionary attacks against my access point, it still leaves me with that not-so-secure feeling.

That all changes today. Today, the iPhone 3.0 OS was released (a free update for iPhone users, a $9.95 fee for iPod Touch users) with support for copy-n-paste! This means I can go back to using my 64-character security key without having to suffer through the tedious process of keying it in on the Touch – as long as I can get my key onto the iPod, I can simply copy/paste it into the wifi settings.  Here are the steps:

Step 1

Go to Steve Gibson’s Perfect Passwords page and generate yourself a totally random string of 64 characters.  Each time you refresh this page you’ll get a completely new set of random strings guaranteed to be completely unique. This password page is actually pretty useful for all sorts of security applications – definitely one to bookmark.

Once you’ve got a string that you’re happy with, I recommend that you paste it into a text file and keep it somewhere safe. I’ve got my stored on a flash drive I’ve got squirreled away with all sorts of other important documents on it.

GRC Perfect Passwords

Step 2

Log into your router or wireless access point and update the wifi configuration to use your newly-generated key. The exact steps will vary by manufacturer so consult the appropriate documentation if you’re not sure what you’re doing.

Linksys

Step 3

Now we need to get our security key onto the iPod or iPhone so that we can copy-n-paste it into the Wi-Fi Settings screen. There are probably all sorts of ways to get this key moved over to the iPod, but I’m going to use the Notes syncing feature that is new with the iPhone 3.0 OS.

Open Mail.app and create a new note that contains your security key.

Notes (1 note)

Once you’ve done that, go into iTunes and make sure that you have the new “Sync notes” option checked on the Info tab for your iPod Touch or iPhone.

iTunes

Press the Sync button and your new note should get copied over to the device.

Step 4

Open the Notes app on the iPhone and locate the particular note that you just synched from your computer. Tap anywhere within the body of the note and it should bring-up the new select/copy interface. Drag the selection box around your security key and tap Copy.

photo

Step 5

The final step is to go into the Wi-Fi Settings screen and paste your security key into the Password field. Simply tapping anywhere within the Password field should surface the Paste button.

photo2

Don’t forget that you’ll need to update any other wireless devices that you have around the house (this is where that flash drive comes in handy).

So, is all of that easier than just typing the 64-character password directly into the field? I don’t know – maybe not. It did, however, give me the opportunity to play with some of the new features of the iPhone 3.0 OS and ratchet-up the security of my home network at the same time. That’s a win-win for me. Your mileage may vary.

June 17, 2009 • Posted in: tech • No Comments

The Ultimate Gmail Browser

I’ve talked before about site-specific browsers (SSBs) and even mentioned that I’ve become a big fan of the Fluid SSB on the Mac. I’ve got SSBs for all sorts of applications (Google Reader, Pandora, etc.) but the one that I spend the most time in is my Gmail SSB.

I decided to devote some time this week to digging through the various features of Fluid to see just what was possible. What I ended-up with is a Gmail client that is a huge improvement over the standard (and, arguably, already pretty good) Gmail experience. The sections below will take you through the various steps I used to create the Ultimate Gmail Browser.

Create the SSB

The first step is to install Fluid and create your Gmail SSB. Upon launching Fluid you’re presented with a pretty simple dialog that asks you to fill in a few fields:

Fluid-2.png
gmail.png
gmail2.png

By default, Fluid will attempt to retrieve the favicon.ico image from the destination site and use that as the application icon. This would be great if it weren’t for the fact that these icons are typically 16×16 pixels. If you want something that is going to look nice when displayed in the Dock you’ll need something with a bit better resolution.

Luckily, there is an entire Flickr group dedicated entirely to aggregating high quality Fluid icons. I’ve included PNG versions of my two favorite Gmail icons here.

Enable the Dock Badge

For certain sites (Gmail, Google Reader and Yahoo! Mail) Fluid will automatically add a little badge to the Dock icon that indicates the number of unread items you have. This is a pretty cool little feature that just makes the SSB feel even more like a real desktop application.

dock.png

The dock badge should be enabled by default, but if you find that it is not displaying there are two settings to check:

  1. In the Preferences dialog for your Gmail SSB application check to make sure that the “Fluid attempts to show Dock badge labels” option is enabled.
  2. In the settings for your Gmail account go to the “Labs” tab and verify that the “Hide Unread Counts” feature is disabled. When this feature is enabled it causes Gmail to suppress the unread message count indicators that typically appear in the navigation menu next to your folders/labels. Fluid uses the message count that appears next to the Inbox link to determine how many unread messages you have — if this value isn’t being displayed, Fluid won’t render the dock badge.

Tweak the Gmail UI

Fluid has a feature called Userstyles which allows you to specify a custom style sheet for pages that are displayed in the SSB. As long as you are fluent in CSS, this essentially gives you the ability to completely re-skin any site. Firefox users may be familiar with the Stylish add-on which gives you the same capability.

The Userstyles feature is accessed via the SSB’s Preferences dialog. You simply need to specify the URL pattern and the CSS rules that you want applied to those URLs.

Userstyles Preferences.jpg

In the example above, I’ve defined a custom style sheet for any URL that contains mail.google.com. I’m not going to even attempt a complete overhaul of the Gmail UI — I’ll leave that as an exercise for people far more talented than myself (you may want to check out userstyles.org to see what cool things other people have done). However, there are some minor tweaks that I would like to make to the default Gmail theme.

The screenshot below shows my Gmail SSB before applying my custom style sheet. The numbered items are the UI elements that I want to remove or change in some way with my style sheet. In the section below I’ll discuss each of the numbered items and specify the CSS rule(s) I used to alter them.

Inbox Before

  1. The first thing on the cut list is the little green Labs icon which, when clicked, takes you directly to the Labs tab of the Gmail settings. You can get to exactly the same screen via the Settings link so I’m gonna ditch it.
    1
    2
    3
    
    div#guser span[title*='Labs'] { 
        display: none !important;
    }

    You’ll see that for most of these styles I try to make my CSS selectors pretty specific so that I don’t accidentally target other elements on the page. In this case, I’m looking specifically for a span whose title attribute contains the word “Labs” and is a child of a div with an ID of “guser”.

  2. I’m not interested in the older version of the Gmail UI, so I’m going to get rid of this link as well.

    4
    5
    6
    
    div#guser a[href$='ui=1'] {
        display: none !important;
    }
  3. Not once have I ever “starred” a message. Gone.
    7
    8
    9
    
    div.nH.qj > div.nH > div.nH:nth-child(2) {
        display: none !important;
    }
  4. I don’t use Google Chat so there’s no need for this menu item either.
    10
    11
    12
    
    div.nH.qj > div.nH > div.nH:nth-child(3) {
        display: none !important;
    }
  5. This one is a little different — I still want the link to my spam folder, but I don’t want to be constantly reminded of the thousands of messages I have in there. The clever CSS trick below hides the existing spam link and then redraws the string “Spam” on top of it.
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    
    .pX a[href$='#spam'] {
        visibility: hidden;
    }
     
    .pX a[href$='#spam']::before {
        content: 'Spam';
        visibility: visible;
        font-weight: 400;
        text-decoration: underline;
    }

    I actually lifted this little bit of CSS from the Gmail Spam-count Hide script I found on userscripts.org. Note that you can use Gmail’s “Hide Unread Counts” feature to accomplish this same thing, but it also hides the unread count for the inbox folder. We already saw that the Fluid dock badge feature is dependent on the inbox unread count and the Growl integration that I’ll introduce in the next section will be dependent upon it as well.

  6. I don’t use the chat feature in Gmail at all, so I’m going to completely remove this widget.
    23
    24
    25
    
    div.nH.s {
        display: none !important;
    }

    I could probably handle both #4 and #6 by simply disabling the Google Apps chat feature, but it appears that having chat enabled is a requirement for using the tasks feature which I do like to use.

  7. I think I’ve already seen all the tips Gmail has to offer, this is just noise at this point.
    26
    27
    28
    
    div.nH.l2.ov div.mn {
        display: none !important;
    }
  8. More links related to chat and the baisc HTML mode.

    29
    30
    31
    
    div.nH.l2.ov div.mp {
        display: none !important;
    }
  9. I’m not particularly interested in the terms of service (which I’m surely violating with my UI alterations) or privacy policy so I’m going to remove the remainder of the page footer.
    32
    33
    34
    
    div.nH.l2.ov div.ma {
        visibility: hidden !important;
    }

Obviously, this is just my nit-picky list of UI tweaks. I won’t go into specifics here but I’m sure that you could identify other adnoying features of Gmail that would be nice to remove.

If you’re interested in making your own changes I highly recommend using Firefox and the Firebug add-on to explore the Gmail DOM and understand the various tags, IDs and classes that are employed.

After applying my custom style sheet to the Gmail UI, the result looks like this:

Inbox After Thumb.png

Add Growl Support

The final step in configuring the ultimate Gmail browser is to enable Growl support. If you’re not familiar with Growl it’s basically a universal notification system for OS X. Any application that is Growl-aware (and there are lots of them) can post status messages to Growl and then Growl takes responsibility for presenting those messages to the user. The nice thing about it is that it standardizes the presentation of status messages across all of your applications and gives you a central place to control and customize those notifications. Trust me, it’s cool — install it.

Like many applications, Fluid has Growl support built-in. More importantly, Fluid exposes an API for sending your own Growl notifications. Using this capability, we can write a script that will check for new messages in your inbox and send a notification to Growl whenever you have new mail. This type of integration with the OS is the sort of thing you typically lose when you use a web-based application.

On my system, I have Growl configured to make a little beep and display the following notification pop-up whenever it receives a notification from my Gmail SSB.

Growl.jpg

In much the same way that Fluid allows you to create your own style sheet via the Userstyles feature, there is a Userscript feature that allows you to run Javascript code in the SSB that interacts with the current page. This concept should be familiar to anyone that has played with the Firefox Greasemonkey add-on.

I wrote the script below (also posted on userscripts.org) which will watch the unread message count of your inbox and post a message to Growl anytime it sees that number increase.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
// ==UserScript==
// @name        Gmail Growl
// @namespace   http://dehamer.com
// @description Gmail Growl Notification for Fluid
// @include     http://mail.google.com/*
// @include     http://*.google.com/mail/*
// @include     https://mail.google.com/*
// @include     https://*.google.com/mail/*
// @author      Brian DeHamer
// ==/UserScript==
 
(function () {
 
    if (!window.fluid) {
        return;
    }
 
    var unreadMsgCount = 0;
 
    function growlNewMessages() {
 
        var oldCount = unreadMsgCount;
 
        // Locate the DIV containing the Inbox hyperlink
        inboxDiv = document.getElementById("canvas_frame")
            .contentDocument.getElementById(":r2");
 
        if (inboxDiv) {
 
            // Grab the title of the Inbox hyperlink and locate the
            // unread message count
            inboxLinkTitle = inboxDiv.getElementsByTagName('a')[0].title;
            matches = inboxLinkTitle.match(/\((\d*)\)/);
 
            if (matches) {
                unreadMsgCount = matches[1];
            } else {
                unreadMsgCount = 0;
            }
        }
 
        // If the unread message count is greater than it was the last
        // time we checked, we know that we've received one or more new
        // messages.
        if (unreadMsgCount > oldCount) {
 
            fluid.showGrowlNotification({
                title: "Gmail",
                description: unreadMsgCount + " unread message(s)",
                priority: 0,
                sticky: false
            });
        }
    }
 
    // Check for new messages every 10 seconds
    window.setInterval(function(){growlNewMessages();}, 10 * 1000);
 
})();

To install this script you can simply go to the Fluid script menu and select the “New Userscript…” option. Give the script a name, paste in the code above and you should be good to go (you may have to restart the SSB for the script to take effect).

There you have it. You’ve now got the Ultiamte Gmail Browser. Let me know if you’ve got any customizations of your own.

April 27, 2009 • Tags: , , , • Posted in: tech • 9 Comments

Backing It Up - Everything Else

I’m going to take a little break from my recent Macintosh gushing to finish my Backing It Up series of posts. Previously, I discussed the use of Flickr as a way to backup of your photo collection and Gmail as your email backup. This time around I want to discuss a backup strategy for all the other stuff you’ve got floating around in your computer. Flickr and Gmail serve as good single-purpose backup tools, but we need a general solution that will handle everything else.

Remember that we’re talking specifically about online, off-site backup strategies here. Everyone should already have a local backup solution in place. There’s no excuse for not doing this. If you’re not doing backups go right now to CostCo and get yourself an external hard drive — you can get these things in 1TB and 2TB sizes for crazy-cheap prices. With one of these drives you have all sorts of simple options for doing local backups:

So, given that you are already doing local backups, the situation we’re trying to cover here is the catastrophic failure. Even if you’ve got every bit of data redundantly saved on multiple hard drives, these backups aren’t going to do you any good if your house burns down or is burglarized. The best protection against these worst-case scenarios to make sure you’ve got copies of all your important stuff off site.

S3 & JungleDisk

There are plenty of services available today for doing online backup, but the solution that I’ve been using is Amazon’s S3 (Simple Storage Service) paired with a desktop tool called Jungle Disk. S3 is nothing more than a big ol’ disk in the cloud — you can have as little or as much storage space as you need and you pay only for what you use. By itself, S3 isn’t particularly useful to the average user since it provides no user interface at all. In order for S3 to really be useful you need a front-end that knows how to talk to the S3 API. This is where Jungle Disk comes in.

Jungle Disk is a utility you install on your local system (Windows, Mac or Linux) which exposes your S3-based storage as if it were a disk connected to your computer. The screenshots below show two of my S3-based disks (named Archive and Backup) as seen by the OS X Finder and Windows Explorer.


Since Jungle Disk makes S3 look like a normal disk to the operating system, you can use all of your standard tools for browsing and managing files. Uploading files to S3 becomes a simple drag-and-drop exercise. This also means that whatever tools you are using to do your local backups can also work with S3. If you have a favorite backup utility you’re already using for your local backups there’s a really good chance it will work with JungleDisk too.

If you don’t have a preferred back up utility, Jungle Disk even has an automatic backup feature baked-in. You can tell it which folders you want backed-up and on what schedule and it will make sure that your stuff gets copied to your S3 account on a regular basis. The screenshot below shows the backup job for the /Users/bdehamer/documents folder on my Mac which runs every day at 1:30am.


As you would expect the backup tool is smart enough to not backup any files which haven’t changed since the last backup. It will even maintain multiple versions of files and backup files which are currently open or locked by another application — for me, this comes in really handy for things like my Outlook .pst file since I never close Outlook on my work PC.

Cost

Alright, so what’s all this cost? Jungle Disk has two payment options: you can pay either $2 per month or a one-time $20 charge. Either option includes free lifetime upgrades and you can install the software on as many machines as you want. Not surprisingly, the JungleDisk site tries to push the $2 monthly subscription — the perpetual license option is kind of hidden, but you can find it here (this is the option I went with and the one that I recommend for others).

One thing to note is that the $2/month plan includes some features that don’t come standard with the one-time, $20 license. The monthly subscription gives you web browser access to your files and block-level file updates. The browser access I guess would be handy if you needed to access your files from a machine which didn’t have the JungleDisk client installed. The ability to do block-level file updates means that you only have to upload the changed portion of any large file. Imagine you have a 1GB Outlook .pst file that you backup regularly but only a small portion of that file actually changes on a day-to-day basis. The ability to do block-level updates means that you don’t have to upload the entire 1GB file every time that you back it up.

Just to make the JungleDisk pricing a bit more complicated you also have the option to add the web access and block-level update features to the $20 option via a $1/month subscription fee. Assuming that you use the tool for at least 20 months, this route is still a better deal than the $2/month subscription for those people who want the extra features.

The other component of the cost is the Amazon S3 service where you pay for both storage and data transfer. Storage is priced at 15 cents per GB per month — if you store 50GB of data on S3 it will cost you $7.50 per month. Additionally, you pay 10 cents per GB of uploaded data — this means that it will cost you $5 to upload that same 50GB of data to S3 (if you’re regularly backing up large files that contain small changes this is where the block-level update feature of JungleDisk may pay for itself). I found that my largest bill was the first month that I started using the service since I was uploading a lot of data and having to pay for both data transfer and storage. After that first month though, the data transfer costs were negligible as I was only uploading a handful of new/updated files. I’m currently storing around 30GB of data on S3 and my monthly bill is just about $5.

Note that the data transfer costs for downloads are quite a bit more than for the uploads (17 cents per GB vs 10 cents per GB). However, if you are using this mainly as a backup solution you’re probably only downloading data in the event that you need to recover from some local data loss. Hopefully this isn’t a common occurrence, but it’s still an important factor to consider.

Between April 1, 2009 and June 30, 2009 Amazon is running a special promotion where the data transfer cost for file uploads is only 3 cents per GB (instead of the usual 10 cents). If you’re thinking about getting started with S3, now is a great time to do it since you’ll save a lot on your upfront data transfer — that 50GB of data you have is only going to cost you $1.50 to upload instead of $5

 

Alternatives

The online backup market is a pretty crowded one. Beyond S3/JungleDisk, you can choose from the likes of Mozy, Carbonite, iDrive and many others. I would caution you against simply selecting the cheapest option — spend some time up front thinking about how you want to interact with the service. I used Mozy for about a year but I ultimately gave up on it because it just wasn’t flexible enough:

I don’t mean to pick on Mozy here (it’s probably a good solution for a lot of people), but you should definitely think about your specific needs before you select a solution. For me, S3 and JungleDisk is the perfect combination.

Now, please, go back up your data!


April 7, 2009 • Posted in: tech • 1 Comment

The Switch, Part 2: Applications

In my last post I talked about my decision to trade in my primary PC for a new Mac Mini. When I first started kicking around the idea of making the switch I immediately started to worry about replacing the core library of software that I use on a daily basis. Having worked on the PC for so many years, there are certain applications that I’ve become very dependent on and it was a little scary to think that I might have to give them up.

Having explored the Mac software space a bit while playing with my wife’s laptop, I knew that there were plenty of applications out there but it wasn’t obvious which one’s were the best. Some of these are fairly obvious, but here’s a bit of what I’ve discovered so far.

Web Browser
Google Chrome is pretty new to the PC browser scene, but it quickly became my default browser on most of my PCs. I love my Firefox extensions, but have sort of realized that I don’t use most of them on a daily basis. The speed and simplicity of Chrome make it a very attractive Firefox alternative.

Unfortunately, there is no Chrome for the Mac (yet!) and instead of installing Firefox I’ve been putting Safari to the test. Interestingly, Safari is built on top of the same WebKit engine that is at the heart of Chrome so the rendering experience is much the same. I definitely miss the Chrome “omni bar” and the “tabs on the outside” UI but Safari has proven to be totally usable for me as a primary browser.

Before the end of the year, I suspect that Mac Chrome and Safari 4 (which introduces some Chrome-like features to Safari) will be released so things are only going to get better in the Mac browser space.

Other Contenders: WebKit, Firefox
Migration Rating:
slight downgrade


Media Player

Alright, no surprise here really. iTunes is sort of the gateway drug to full blown Mac usage. It’s the one Apple application that most PC users have installed even if it’s just to load music onto their iPod. However, I never really liked iTunes — I installed it out of necessity, but never used it anymore than I had to. I think part of the problem for me was that it simply looked so out-of-place on the PC. I won’t make an arguments in favor of the Windows UI, but I do think that if you are going to play on their platform you ought to make your app look like it belongs there. Also, it wasn’t until iTunes 7.6 that the program would work properly on 64-bit editions of Windows — just another reason for me not to use it.

Unable to get past the lack of 64-bit support and the un-Windows-like UI of iTunes, I simply defaulted to Windows Media Player. I don’t think that it’s a particularly excellent media player (don’t even get me started on dismal codec situation) but I understood it and it was always there by default when I installed Windows. I thought that WMP did a decent job of managing my music collection and really liked that fact that later versions of the program had a built-in UPnP AV server that allowed me to stream music and video to other computers and my Xbox.

Now that I’m on the Mac, I figured it was time to give iTunes another shot. For one thing, the UI makes a lot more sense when used in the context OS X (no big surprise there). Once I imported my music collection (about 12,000 songs) and really started to use it on a daily basis, I discovered some cool features that actually have me excited about iTunes now.

First, I think the Genius Playlist feature is . . . well, genius. Select any song, hit the Genius button and iTunes will generate a playlist of songs from your library that go great with it. I have no idea how it works, but it has been creating some awesome playlists for me. Some of the associations that it creates are a bit questionable, but it has really helped me re-discover music that I haven’t listened to in years.

The other thing that I’ve found really useful is the “script-ability” of iTunes. I’m just getting started with AppleScript, but with little effort I was able to cobble together a script that would iterate over my music collection and identify all tracks with missing album art. I didn’t have to manipulate binary files or read-up on ID3 tag formats, iTunes did all the heavy lifting.

The final killer feature is the integration with the iTunes store. In the past, I had avoided the iTunes store for music purchases due to the DRM situation. Now, however, with all of the tracks in the store being DRM-free I don’t have any issue buying through iTunes. As a result, the seamless experience between managing my music collection, buying new music and loading my iPod is just too good to ignore.

Other Contenders: Songbird
Migration Rating:
definite upgrade


Site-Specific Browser

I’ve blogged about site-specific browsers in the past so I won’t rehash all the reasons why i think they are a cool idea. On the PC side I had been using Mozilla Prism (if you are a Firefox user, check out the Prism for Firefox add-on) as well as the SSB capability built into Google Chrome (via the “Create application shortcut” feature). These two SSBs are pretty comparable so it’s hard to recommend one over the other. I switched from Prism to the Chrome SSB mainly because I switched from Firefox to Chrome.

If you are a Firefox user on the Mac, I suspect that you could continue to use Prism, but there’s another interesting option named Fluid. Fluid provides the same basic features as Prism (see the dock icon for my Fluid-based Gmail app in the picture to the left) but supports a few new tricks as well. One of the cooler features is the ability to create a SSB that exists only as a status bar icon. The screenshot below shows the status bar SSB I created for the Pandora music service. The Pandora window opens whenever I click the P icon in the status bar.


I haven’t even explored all of the features that Fluid provides yet, but it looks to be a definite winner.

Migration Rating: definite upgrade


Image Editor

For me, there is a sweet spot for image editors that exists somewhere between MS Paint (too basic) and Photoshop (far too complex). On the PC, Paint.NET is an incredible, free image editor that does just exactly what I need. As you can probably tell from its name Paint.NET is written on top of Microsoft’s .NET framework so there’s little chance of seeing it running on the Mac anytime soon (Mono or Silverlight perhaps??).

Originally, I set-out to try GIMP as my Paint.NET replacement on the Mac, but stumbled across a program called Pixelmator in the process. I quickly fell in love with Pixelmator and never actually got around to trying GIMP. Much like Paint.NET, Pixelmator makes it incredibly easy to do the few image editing tasks I’m interested in without overwhelming me with options. The fact that it has a beautiful interface certainly doesn’t hurt either. Pixelmator is not a free application like Paint.NET or GIMP, but it certainly seems worth the price ($59).

Other Contenders: Acorn
Migration Rating:
neutral (Pixelmator is a step-up from Paint.NET, but I did have to pay for it).


Video Transcoder
I think somewhere around version 4 or 5 I purchased a full copy of Nero on the PC because it was the best tool for burning CDs/DVDs. Every year or so I pay to upgrade to the latest version simply because they typically have great deals on upgrade pricing. Just last year I purchased Nero 9 for like $10 after all of the discounts and rebates. Interestingly, I haven’t used Nero to burn discs in a long time (I don’t seem to have much need for optical media these days) — the only part of the Nero suite that I was using regularly was their excellent Recode application.

Recode allows you to take a DVD or other video file and transcode it to MPEG-4 format (MP4 has emerged as sort of the lingua franca of video formats). I often used Recode to rip DVDs into MP4s so that I could load them onto my iPod or play them on the HTPC I have connected to our TV. Instead of shuffling discs in and out of the player, I’ve got all the kid’s shows/movies ripped to the HTPC so that they can be queued-up with a few clicks of the remote.

Recode has lots of features and a great UI but no Mac compatibility. It seems that the go-to transcoder on the Mac is actually something that I’ve played with on the PC as well: HandBrake. From my experience on the PC, I felt like the speed and output quality of HandBrake was pretty much identical (they could be using the same encoder for all I know) — the only reason I held onto Recode is because I thought the UI was a bit nicer.

I haven’t had a chance to play with HandBrake since I switched over to the Mac, but I suspect that it will suit my needs just fine (and it will probably rescue me from the Nero upgrade cycle!)

Other Contenders: VideoMonkey
Migration Rating: neutral

Screen Capture
Before I started blogging I didn’t have a lot of use for a dedicated screen capture tool. I got by for many years with the good ol’ Alt+Print Screen shortcut in Windows. Once I started this blog though I found that I was doing a lot more screenshots and wanted something that was able to capture the transparency and drop shadow effects of the Windows Vista Aero interface. I found a program called Window Clippings that could properly handle Vista’s fancy windows and also integrated nicely with Paint.NET for making quick adjustments.

On the Mac I discovered a program called Skitch which is a free (I paid $18 for Window Clippings), full-featured screen capture tool and basic image editor all-in-one. Much like Window Clippings, Skitch allows you to capture a specific window or an arbitrary region of the screen but as soon as you “snap” your picture it immediately opens in the Skitch editor which allows you to annotate the image, crop it, resize it, etc.

The picture below is a screenshot of me using Skitch to take a screenshot of this blog post as I’m writing it (that should make your head spin a bit).


I think that I’ve only started to scratch the surface of what you can do with Skitch, but I’m already impressed.

Other Contenders: SnapzProX, Constrictor
Migration Rating:
definite upgrade


Blog Publishing
Each of the blog platforms has their own blog publishing UI, and some of them are actually quite good but I found I was more comfortable using a dedicated, desktop application for composing articles. The best tool I found on the PC was Microsoft’s Live Writer — it’s free, compatible with all the major blog platforms and makes it super easy to incorporate pictures and videos into your posts.

On the Mac, I’m still evaluating two different applications: MarsEdit ($30) and Blogo ($25). I like MarsEdit because it has nice integration with Flickr, but it is lacking a WYSIWYG editor. On the other hand, Blogo has a nice WYSIWYG editor, but is lacking any sort of integration with Flickr, YouTube or other sites from which you might want to pull content for your blog. Neither of these apps quite does what I want, so the jury is still out (though I did use Blogo to compose this article).

Migration Rating: definite downgrade

Overall, I’m pretty happy with my new suite of applications and look forward to seeing what else I can find. In my next post I want to talk a little bit about the PC apps I was able to completely abandon because they simply aren’t need on the Mac at all!


March 26, 2009 • Posted in: tech • 2 Comments

The Switch

After dabbling in the Mac world for the past couple of years, I decided last week to really make the switch. For a long time now, I’ve been building my own PCs — lovingly assembled from well-researched, hand-picked components and upgraded on a fairly regular basis. These machines always served me well, but over the past couple of years I’ve found that my computing needs have changed and it’s no longer obvious that a PC was the best fit for me:

  1. There was a time when my PC was mainly a game machine. One of the reasons that I built my own systems was so that I could have complete control over things like the type of memory or graphics card that was installed — always in pursuit of the best experience for the latest games. Now, as a father of two young kids, I find that I have almost no time to play games (I’ve got a copy of Far Cry 2 sitting here that I’ve played for about 10 minutes).
  2. I’m far less dependent on desktop applications than I used to be. It used to be that I was a slave to Microsoft Outlook for my email and calendar. Now I’ve got Google hosting all this stuff for me and the particular operating system I’m running is a lot less important. It’s hard to believe, but I haven’t had any of the Microsoft Office applications installed on my machine in about a year now and haven’t once missed them.
  3. The desktop applications that I do still use are tools for managing my photos and editing video. After playing with programs like iPhoto, Aperture and iMovie on my wife’s MacBook, I found that these were the programs I was drawn to whenever I needed to do photo or video work. The equivalent offerings on the PC side are pretty weak in comparison.

So, with fewer things tying me to the PC and lots of things calling to me from the Mac it seemed clear that a switch was in order. I also got the feeling that my wife was becoming a little annoyed with the amount of time I was spending on her computer (especially considering there are a number of other machines in the house). In an effort to avoid any domestic disturbances, I ordered myself one of the new Mac minis.

I’ve been using the mini for about 5 days now and absolutely love it. There have been a few pain points (which I’ll save for a subsequent post) but, for the most part, it’s been a smooth transition.

Of course, I have no intention of abandoning my PC roots (I pretty much have to use a PC for work), but I am looking forward to immersing myself in the Mac ecosystem and having a whole new set of tools at my disposal. More to come.


March 13, 2009 • Posted in: tech • No Comments

Outlook Calendar Syncing to iPhone via Google

Microsoft Outlook CalendarOne thing I’ve been meaning to do for awhile is to get my Outlook calendar synched with my iPhone (actually it’s an iPod Touch, but the distinction isn’t important here). The company I work for uses a fairly standard combination of MS Outlook and Exchange for email and calendaring. That works fine when I’m sitting in front of my work computer, but there are times when I would like to be able to peek at my work calendar without going out to my office. I had a feeling it was possible to make it work, but it wasn’t until today that I finally sat down to make it happen.

Before I describe my somewhat convoluted solution, I should point out that there are some pretty straightforward ways to make this work. First, if I installed iTunes on my work computer and paired my iPhone with that machine I could easily get my Outlook calendar synched every time I docked the phone. This doesn’t really work for me since I already have my phone paired with my Mac.

The other solution would be to get the Microsoft Exchange ActiveSync installed on my company’s Exchange server. With that enabled, the iPhone can sync directly with the Exchange server (that feature was introduced with the 2.0 firmware release). Unfortunately, my employer is far too paranoid about security to enable this feature so this isn’t really an option for me either.

Having dismissed the easy solutions, what is left? Why ‘Google’ of course (isn’t that the answer to most questions these days). Turns out that it is pretty easy to sync an Outlook calendar with the Google Calendar application and, with the recent release of the Google Sync, it is pretty easy to sync your Google Calendar with your iPhone. So, the solution is to use Google Calendar as an intermediary between Outlook and the iPhone.

The first step is to make sure that you actually have a Google Calendar. If you have a Gmail account, you have a Google Calendar (look for the Calendar link at the top of the Gmail screen). I’m actually using the calendar associated with my Google Apps account, but this approach will work either way.

Once you’ve verified that you have a Google Calendar, the next step is to get your Outlook data synced with it. This is a simple matter of installing the Google Calendar Sync utility on the machine running Outlook.

Google Calendar Sync Settings

When configuring Google Calendar Sync, simply provide the email address and password for your Gmail or Google Apps account and specify the desired sync direction. In my case, I’m only interested in viewing my calendar on the iPhone (not making updates) so I selected the 1-way sync option.

After a few minutes of chugging, you should find that all of your Outlook calendar items are now visible in your Google Calendar as well. The screenshot below shows the Google Calendar view of the same data that’s seen in my Outlook calendar above.

Google Calendar

With the Outlook calendar now being mirrored by the Google Calendar, the final step is to get the iPhone to sync with Google Calendar. Luckily, everything you need for this step is already baked into the iPhone (as long as you’re running at least the 2.0 firmware). The steps are laid out pretty clearly in the instructions provided by Google so I’ll only summarize them here:

ActiveSync Settings

Once you have everything configured you can press the Sync button and open your calendar. After a few seconds you should see your iPhone calendar populated with all the data in your Google Calendar. You should check to make sure that Push is enabled on your phone as this will ensure that any changes to your Google Calendar will be immediately synched to the phone. You can find the Push setting under the Fetch New Data section of the Settings application.

Here’s the same data from my Outlook calendar above after propagating to my iPhone.

iPhone Calendar

It’s a little bit of work to get all this set-up, but ideally I won’t ever have to futz with it again – it should just work.

February 10, 2009 • Posted in: tech • 12 Comments

Microsoft PDC Day 3

Surprisingly, the most interesting thing that I saw today had absolutely nothing to do with .NET, Windows or cloud computing. Rich Rashid from Microsoft Research was the keynoter today and he walked through a number of really cool things that they’re working on, but the project that really stood out for me was something called Boku.

Boku is an application designed to introduce kids to computer programming. Using an entirely icon-based programming language, Boku lets your build your own game consisting of different elements that you can program to interact with each other.  It’s really hard to really describe just how cool this is in words so I encourage you to check out this video.

I may just be rationalizing my own biases, but I like to think that teaching kids to program isn’t just about producing the next generation of nerds, but actually teaches some useful life skills as well: critical thinking, problem solving, etc. And I love the idea of exposing kids to programming concepts in a form that they’re likely already familiar with: computer games. In fact I was having a conversation with one of my co-workers just the other day about how to get kids interested in engineering and this seems like an awesome tool for sparking that interest.

This reminds me a lot of something I played with awhile back called Scratch from the MIT Media Lab. I think the primary goal of Boku and Scratch is probably the same (i.e. create a kid-friendly programming environment), but Boku seems far more polished and sophisticated.

Scratch is available now (for free) while I think they said that Boku would be available early next year — I can’t wait to get my hands on it and start programming with my kids.

Boku UI

At the other end of the programming spectrum, I also attended Anders Hejlsberg’s session on the Future of C#. There was so much interest in this session that it was one of the few that was actually scheduled to run twice during the week. I’m not sure if people are really excited about C# or if they just wanted to see the father of C# in person — either way, it was a great session.

There’s lots of cool stuff coming in C# 4.0 like optional parameters and better COM interoperability but the thing that really “wowed” the crowd was the support for dynamically typed objects. Through the use of the new dynamic keyword you can ask C# to resolve names at runtime instead of compile time. This opens-up a bunch of very interesting scenarios like the one that Anders showed in his demo where he was able to invoke methods on both Javascript and Python objects from C# just as if they were native C# classes.

C# 4.0 Dynamically Typed Objects

Apparently, this capability is being built on top of the same Dynamic Language Runtime (DLR) component that they put in place to build the dynamic CLR languages like IronPython and IronRuby.

 DLR

That final thing I want to mention from day 3 was an interesting session entitled “How HP Built Their Magcloud Service on Windows Azure“. This one caught my attention cause I had initially dismissed Azure as something that HP (my employer) would not be interested in. Given that HP has been making a big deal about how great they are at building and operating world-class data centers it seemed kind of strange that we’d take one of our applications and host it on Microsoft’s infrastructure.

Well, after sitting through the session it became apparent that we didn’t build our Magcloud application on Windows Azure as much as we took a portion of the existing Magcloud application and ported it to Azure as a proof of concept. No part of the production Magcloud app is actually running on Azure. Looks like this may have been nothing more than a way to keep Microsoft (an important partner of HP) happy while also getting HP some visibility at PDC.

It’ll be interesting to keep an eye on this relationship and see if anything really happens here. Perhaps HP is hoping to persuade Microsoft to run the Azure platform in one of its “next generation data centers”.

That’s all from day three. Looking forward to wrapping up tomorrow and heading home.

October 30, 2008 • Posted in: programming • No Comments

Microsoft PDC Day 2

A big part of day 2 was an introduction to Windows 7, the successor to Windows Vista. Not surprisingly, there’s been plenty of coverage on this topic so I’m not going to discuss the announcements in any great detail (you can also watch the complete keynote). However, let me quickly mention a couple of things that made an impression on me:

The other exciting part of the day was getting to talk with Phil Haack from the ASP.NET team. I wanted to ask Phil about his ASP.NET MVC presentation. If you read my post from day 1 you’ll note that I had some concerns about the use of some pretty ugly C# code in the view layer of the framework. I asked Phil what sort of plans they had for enabling developers to create codeless views. He was quick to point out that there’s no rule stating that you can’t have code in your views — I completely agree with that (after all, what is a JSP tag library but a fancy wrapper on some Java code) but from a readability and aesthetic perspective it still seems wrong to have raw C# code in your view.

Phil did seem to agree that the aesthetics of inline C# code in the ASPX left something to be desired (hope I’m not putting any words in your mouth here Phil) and said that they were looking at creating some declarative wrappers around the HtmlHelper class. Turns out that these “declarative wrappers” are really nothing more than good ol’ ASP.NET server controls. The one thing that I didn’t really grok until I talked with Phil was that WebForms server controls will work in the MVC environment . . . as long as they aren’t dependent on any WebForm-specific concepts like ViewState or the page lifecycle.

Turns out that I’ve done some server control development so I might just take a crack at creating some of my own wrappers just to see how it works. Stay tuned for more on this.

The other thing to point out is that you aren’t limited to using ASPX pages as your view engine — since all of this stuff is loosely coupled you’re free to plug in whatever engine you like. At the moment, there are a handful of alternative engines available including Brail, NHaml, and NVelocity.

Thanks to Phil for taking the time to talk with me — much appreciated.

October 29, 2008 • Posted in: programming • 1 Comment

Microsoft PDC Day 1

I’ve traveled all the way from San Diego, CA to Los Angeles, CA this week to attend Microsoft’s Professional Developer’s Conference — watch out L.A. you’re about to be overrun by some pretty serious nerds!

I guess the big announcement of the day was Microsoft’s new Windows Azure cloud computing platform. This is their answer to things like Amazon’s EC2 or Google’s App Engine. The technology seemed pretty cool and may be something I use for future side-projects, but I didn’t dive into it too deeply today since HP (my employer) is unlikely to be outsourcing their datacenters to Microsoft anytime soon (HP fancies itself to be quite the datacenter expert these days).

For me, the most interesting session of the day was Phil Haack’s talk on the new ASP.NET MVC framework (session replay). This is something that I’ve been interested in for some time now, but haven’t yet had the opportunity to play with. As someone who splits his time pretty evenly between Java and .NET programming, there’s always been a major mental context switch that I have to go through when moving from Struts or Spring MVC in the Java world to ASP.NET Web Forms in the .NET world. The programming models are radically different.

On the other hand, ASP.NET MVC now brings to the .NET platform all of the things that I know and love about the MVC development model:

I’ve looked at a lot of the ASP.NET MVC sample code that have been released and the one that I did find disturbing was the amount of code present in the views. MVC is able to leverage the good ol’ ASPX page as a view layer and you’ll often see things like this is the samples:

<p>Please fill out the following form:</p>
<% using(Html.Form("Home", "Index")) { %>
	<input type="text" name="firstname">
	...
<% } %>

In the Java world we’ve been told for years “keep Java code out of your JSPs”, yet here we’ve got some pretty strange looking C# code mingling with our HTML markup (this is actually a pretty clever use of the IDisposable pattern to create a form-scope within the page, but really this sort of code has no business in the view). In Java, this sort of scenario is typically handled by using things like the Java Standard Tag Library (JSTL), the JSP Expression Language or a custom tag library. These things don’t have any counterparts in the ASP.NET MVC world . . . yet.

I was very encouraged to hear Phil say that one of the things they are going to work on is a set of “declarative helpers” that will serve as an alternative to inline C# code within the ASPX view. If true, this would eliminate the one reservation that I currently have about using the ASP.NET MVC framework. Phil is supposed to be in the expo hall this afternoon answering questions and I’m hoping to talk to him about their plans in this area.

Great stuff!

October 28, 2008 • Posted in: programming • No Comments

VirtualBox

Sun xVM VirtualBox In my last post about virtual machines I talked a little about the two virtualization solutions that I’ve played with on Windows: Microsoft’s VirtualPC and VMware’s VMware Workstation.  Shortly after that post, I came across another virtualization package that nicely bridges the gap between Microsoft’s free-but-feature-poor solution and VMware’s feature-rich-but-not-free solution.  The new contender is Sun’s VirtualBox.

The purpose of VirtualBox is the same as VirtualPC and VMware Workstation — that is to provide you with a virtualized, isolated computer on which you can install and run any operating systems and applications you choose.  You basically get a computer within your computer (see my previous post in which I explore some of the cool things you can do with such an environment).

The most exciting thing about VirtualBox is that it is free (open-source even) yet has a number of features that were previously only available in commercial products.

USB Device Support

One of the biggest limitations of VirtualPC is that it has no USB device support.  Other than the mouse and keyboard, any USB devices you have are completely invisible to the virtual machine.  If you have a need to access a USB flash drive or printer from virtual machine, it’s critical your virtualization software have USB support.

With VirtualBox, any USB device connected to the host machine can be exposed to the virtual machine.  As long as you have the appropriate drivers installed on the virtual machine, the device should behave just as it does when connected to the host.

Backtrack - Settings (2)

In the screenshot above, I’ve got a USB WiFi adapter connected to my Linux Backtrack VM. Note that, when you “connect” a USB device to a virtual machine, it is no longer accessible to the host machine — devices are only visible to one environment at a time.

Seamless Windows

VirtualBox allows VMs that are running certain operating systems to be run in seamless window mode. With seamless windows, the application windows that would typically be displayed within the virtual machine are instead rendered as if they were running natively on the host machine.

On the Mac, I know that both VMware Fusion and Parallels Desktop support this sort of seamless window mode, but this is the first time that I’ve seen it in a virtualization product that runs on Microsoft Windows.

Here is a screenshot of a Windows XP VM running in standard mode. Note that the VM is contained completely within a window running on my Vista host desktop.  You can see that I’m running Notepad and Calculator in the virtual machine but they’re trapped within the VM window.

Program Manager

The following screenshot shows exactly the same environment running in seamless window mode. Note that the virtual machine window is gone — Notepad and Calculator now look as if they’re running on the host machine even though they’re still completely sandboxed in the VM.

Program Manager (2)

One interesting side-effect of the seamless window mode is that you end up with two taskbars: one for the host machine and one for the virtual machine. 

If you have applications from both your host machine and virtual machine that you want to run side-by-side, seamless mode can really help to make more efficient use of your desktop real estate.

Virtual Disks

All of the virtualization solutions support some form of virtual disks that can be attached to the virtual machine.  In VirtualPC, these disks are called Virtual Hard Drives and have a .vhd extension on the host system, in VirtualBox they are called Virtual Disk Images and have a .vdi extension.

In my previous post, I talked about the “Undo Disk” feature in VirtualPC and how it can be used to create a read-only virtual machine (actually, you can write changes to the virtual machine while it’s running, but all those changes are lost as soon as you shut it down). VirtualBox supports a similar feature called immutable images.

Immutable VDIs are read-only and can be attached to multiple virtual machines simultaneously. At run time, any requests to write data to the immutable disk are directed to a special “differencing disk” created on the fly by VirtualBox.  Much like VirtualPC, VirtualBox completely discards any data written to the differencing disk when the VM is shut down.

Immutable disks are handy when you don’t care about saving the state of your VM, however in certain scenarios you’ll probably want your VM to persist its state so that you can come back to it later. I have VMs I’ve created for the different development environments that I use regularly: one with IIS and Visual Studio for .NET development and one with Tomcat and Eclipse for Java development. Since I’ll have source code in these virtual machines that I’m actively working on, I wouldn’t want to configure them with immutable disks — doing so would mean that I’d lose all my code changes whenever I shut down the VM. In VirtualBox, disk images that allow write access are called “normal images”.

One of the nice features of the normal disk image is the ability to save snapshots of the state of the virtual machine.  At any time you can revert to one of your previous snapshots even if you’ve made significant changes to the virtual machine since you took the snapshot.

Once I’ve got the operating system, service packs and necessary applications installed on a virtual machine, I’ll typically take a snapshot and label it something like “Clean install w/ applications”.  That way I can always revert back to that snapshot if the VM is ever damaged by an accidental change, malicious software or other corruption.

Details of Clean Install (XP SP3 Starter)

The screenshot above shows the details of a VM snapshot I took after installing Windows XP and its associated service packs.  Even though I’ve made changes to the VM since taking this snapshot I will always be able to roll my system back to this state if needed.

You can sort of accomplish the same thing in VirtualPC by manually making copies of the .vhd file (these become your snapshots), but having this feature built into the application makes it much more user friendly.

Missing Features

Unfortunately, VirtualBox isn’t quite perfect. There are at least two features lacking that I really miss from VirtualPC: 1) Drag-n-drop support between the host and virtual machine, and 2) GUI management tools.

One of the great ease-of-use features in VirtualPC is the ability to drag-n-drop files between the host machine the virtual machine.  If you have a document or application on your host machine that you’d like to access, you simply drag it into the VM window and it will create a copy within the VM.  Similarly, moving files from the VM to the host is accomplished by simply dragging the file from the VM and dropping it on the host desktop.

With VirtualBox, the process of moving files between the host and VM isn’t nearly as straightforward. VirtualBox allows you to select a folder on the host machine which it will then expose as a network share to the virtual machine.  You can then map that network share to a drive letter and copy files back-and-forth.  It’s a bit of a hassle if you’re just looking to quickly move a file between environments.

My only other complaint about VirtualBox (and this is arguably a pretty minor one) is that many of the advanced features are only accessible via command line tools.  If you want to compact your virtual disks or configure an immutable disk, you have to go to the command line to do it.  Overall, the VirtualBox UI is very clean and usable, so it seems a bit arbitrary when you find certain features are presented nicely in the UI while others require that you go to the documentation to find the appropriate command line option.

Despite these minor faults, VirtualBox seems to be a solid product and is probably going to be taking the place of Microsoft’s VirtualPC on my systems here very quickly. I look forward to seeing what Sun does with this product in future releases.

September 14, 2008 • Posted in: tech • 2 Comments