Hotkey Access to Google Chrome Bookmarks Bar

I’ve recently made the switch to Google Chrome, thanks in no small part to my taking on Pinboard as my bookmarks engine. Something I miss from Safari (about the only thing!) is the keyboard shortcuts for my first 10 bookmarks in my bookmarks bar. (CMD+1 through CMD+0)

Here’s a series of Applescripts that do exactly that: Click your first 10 bookmarks. You can take these scripts and use your tool of choice to add hotkeys.

Unlike Safari’s, this will work whether or not your bookmarks bar is visible. You can even use it outside of Chrome and it will bring Chrome to the front and then click the bookmark. Fancy!

And yes, this would make much more sense as a Chrome extension. Unfortunately, that extension has been built, and it doesn’t seem to work very reliably.

Written on March 14, 2011

Keynote Whore for Google Chrome

Occasionally there will be, say, an Apple keynote speech, that is live-blogged from multiple sources. Rather than wear out your CMD+R fingers reloading tons of tabs and windows to get the absolute latest liveblog updates every second, you can use Keynote Whore to automatically refresh Google Chrome windows and tabs every 30 seconds, ensuring you’re always looking at the latest and greatest.

Why Chrome? Well, I use Safari primarily, so Chrome makes for a nice background browser that’ll sit and run. But don’t worry, if Chrome’s your main browser, the applet will let you select specific windows to refresh. (All that windows’ tabs will refresh each time.)

Now you can rest easy, knowing that you’re going to be the very first geek to know about the latest iWhatever! (Well, first geek outside of the live keynote…)

Written on March 7, 2011

Nik's Picks: XShelf

XShelf is a freeware application that provides a “shelf” in the Finder, much like the legacy NeXTStep shelf, or the shelf in Path Finder.

The shelf acts as a temporary place to hold files while you move and copy them in the Finder. So you can move one or more files to the shelf, navigate to the folder you want to move the files to, and then drag the files from the shelf to the folder. This is fantastic for smaller screens, or when you’re gathering multiple files and copying or moving them to a single location.

As if that wasn’t enough, XShelf also provides a command line utility to add items to the shelf, as well as a system-wide service to do the same.

It’s a great, simple, utility that makes navigating the Finder tremendously easier. And it’s free. What could be better?

You can learn more and download XShelf here.

Written on January 13, 2011

Quick Tip: How to Figure Out if You've Already Purchased an App from iTunes

The iTunes App Store will let you re-download an application that you’ve already purchased. What it does not do, is let you see in advance whether you’re going to be charged for it. If you make a mistake, you’ll end up purchasing an app that you thought you were downloading for free!

The work-around is simple, but not obvious: Click on “Write a Review” on the app’s listing. You can only write a review if you’ve already purchased the app!

Hope that saves you some money! Thanks to Jmalley on the forums for this great trick!
Written on December 12, 2010

Backup doesn't get better than CrashPlan 3

I wrote some time ago about metadata and the state of metadata management with existing file copying and backup utilities. At that time, ChronoSync and SuperDuper were the only games in town for automated backup and copying – and neither are proper backup/archiving programs.

However, the lovely folks at CrashPlan have released a new version that gets through the metadata test suite with flying colors. In fact, the only failure it had against Nate Gray’s Backup Bouncer suite was that it failed to preserve extended attributes on symbolic links. (I’m fairly certain nothing currently stores metadata on symlinks, but just in case, I’ve submitted a support request with CrashPlan)

I’m using CrashPlan (and the online “CrashPlan Central” service – similar to Carbonite/Mozy/BackBlaze/etc.) for a few weeks now, and I like it a lot. It manages backups from computer-to-computer (even over the Internet!), to hard disks or folders, network drives, and to their aforementioned online service. It does a great job, provides block level, de-duplicated backups, too, so your years of archives take only a minuscule amount of additional space. (Unlike, say, Time Machine, which keeps an extra copy of a file each time you change it – hence the trouble with VMWare images and Entourage’s mail archive.) It also keeps differentials going back forever, has “real time backup” for constant backups (more or less like Time Machine), encrypts the bejeezus out of everything (yes, you can have your own private encryption keys and passwords without sharing ANYTHING with CrashPlan), and (thank goodness!) automatically checks the fidelity of the backup. In other words, enterprise-grade backup for $25/year. (Or free if you don’t mind missing a few features and can put up with ads)

So now I have to give my nod to a single backup tool to use for anything other than imaging. CrashPlan cannot make a bootable clone of a drive, nor can it handle a “bare metal” restore. For that, you’ll want something like SuperDuper, Carbon Copy Cloner or (my favorite) ChronoSync. CrashPlan also cannot back up to optical media or drive sets, just logical drives. Given the price of drives and the size of files, I don’t see this as a problem. Internet backup is quickly taking the place of shuttling around optical media.

Written on December 8, 2010

Using HTML Forms With AppleScripts

What if you could use an HTML form in place of an AppleScript dialog box?

AppleScript dialogs are terribly limited, which often forces a scripter to chain together a dizzying series of sequential dialogs and alerts. The alternatives either require additional software, or to tackle XCode and the newer and more complicated AppleScript Studio.

But thanks to AppleScript’s ability to take advantage of URL handlers, you can use an HTML form to pass values to your AppleScript.

Rather than try to explain it in too much detail, I’ve attached a demonstration to download and try out. This is an application that writes a simple “thank you” letter to a relative. Just open it to run the script. You can fill out a form to create the letter, and then you can just click links to have the letter read out loud, edit in in TextEdit, or erase it and start over.

Under the hood, what’s happening is:

1. The applet registers the “thankyou://” URL scheme

3. It opens up an HTML page in it’s bundle’s resources folder. The HTML page sends requests using “thankyou://” URLs (the form is sending a GET request, so it does the same)

4. The applet receives these events, parses the URL, and then acts on them depending on the “location” of the URL

The first step is well documented at Step 2 is straightforward HTML form building and a little AppleScript in the “run” handler to open the bundled HTML file. The last step is straight AppleScript, using an “open location” handler to receive and parse the incoming URL.

The parsing is the really tricky part, but as luck would have it, I’ve taken care of this for you.

If you open the script in AppleScript Editor, you can see the bundle contents and take the script apart. The complicated part is the “newURI()” handler and associated script object. It breaks down the “thankyou://write?n=Jimmy…” style URL into an object with useful properties, such as location and a record set of arguments. This handler can be pulled unmodified from this script and put into your own applications – it’s entirely agnostic as to the URL scheme or individual arguments it receives.

The rest is just taking the properties of that object and passing them to an if/else tree that checks the “location” of the URL and acts accordingly.

This is, of course, a frivolous example, but it demonstrates how powerful a tool this can be. With a little more complexity on the HTML side of things, a little javascript could work to pull in data from other sources, create more dynamic forms, and provide up-front data validation.

The one limitation of this method, compared to traditional dialog boxes, is that you cannot put any forms in-line with the script’s execution. But for scripters who just want some up-front configuration, this can be a very flexible tool.

If you have any comments or feedback on this, sound off in the MacScripter forums.

Written on October 21, 2010

OnStar: Yet Another Example of Why GM Can't Compete

I recently purchased a Pontiac (rip) Vibe. I’m not a fan of domestic cars, but in this case, I made an exception, since the Vibe’s really a Toyota Matrix with a different logo.

The car came with a three month trial of OnStar, GM’s all purpose safety service that will help you out if your keys are locked in the car, you get in a wreck and are unresponsive, or if you need a tow or a tank of gas. Think high-tech triple-A. You can also use it as a phone, provided you’re willing to pay in the ballpark of $1.20 per minute.

I’ve been playing with OnStar since I got it, and I gotta say, it’s nothing but proof that GM doesn’t have their poop in a group.

Here’s the thing: All OnStar is, is a built in cell phone that has a one-touch dial to a call center just outside of Detroit. Plus a GPS and some sensors. That’s it. When your car wrecks (identified by sensors noticing frame damage or the airbags deploying), it places a call, and they check in to see if you need help. If you need a tow, you make the call yourself. Keys locked in the car? You call them on your mobile phone and they take care of you. They’ll even give you directions if you’re lost.

Now don’t get me wrong, this is a pretty good hack. All they did was install a phone, and pay the salary of a bunch of phone jockeys, and they can sell it as a high tech safety service. But it’s a hack. This would work fine in 2003, but these days, we expect automation, computer screens, and immediate service. I’ve got better technology in my pants. (Don’t look at me that way… I’m talking about my iPhone!)

Here’s my experience with OnStar:

Scenario 1: Keys Locked in Car

I call OnStar. Phone tree asks for my home phone number (my ID with OnStar), and walks me through a phone tree. Yes, I need emergency services. beep (This counts as an emergency, as opposed to billing questions or customer service) Okay, yes, my car’s locked. beep No, there aren’t any animals or people locked in the car. beep Please hold…

After a very brief wait (I’ve never experienced more than 30 seconds on hold, they’ve got that down pat.), I get a nice lady on the phone, who asks me for the same information I gave through the phone tree, then sends the unlock signal, and waits on the phone until I confirm the car’s unlocked – which happens almost instantly. She then asks me how my service was, how I’m doing, etc.. Finally I get her off the phone, lock my car, and go back into the house.

This is a cool trick, and it’ll be a real life saver for me one of these days. I’m terrible about locking up my keys. That said, why did I need to talk to a person? Why not punch in my ID, my secret code, and press 1 to unlock my car. Then there’s no hold time (presumably that’s why they ask whether there’s a living creature trapped in the car – to put you at the front of the queue), and no need for pleasantries. (I’m a geek, I’d rather not talk to people.)

All in all, great service, but the execution needs polish.

Scenario 2: Make a Phone Call

My OnStar system also works as a speaker phone. Keep in mind, that’s all it really is. It doesn’t, however, work with MY phone, so I have to buy minutes at exorbitant fees (over $1.20 per minute!), and call from an entirely different phone number from usual. Here’s how it goes.

beep! OnStar Activated

Me: “Call Number”

Car: “I didn’t understand that.”

Me: “Call Number”

Car: “Virtual Assistant. Say yes or no.”

Me: “No”

Car: “Please repeat that.”

Me: “NO!” (shouting)

Car: “Please repeat that.”

beep (I manually hang up)

blee boop (I hold down the big button on my iPhone)

Me: “Call [My Wife’s Name] Mobile”

iPhone: “Calling [My Wife’s Name, mis-pronounced], Mobile”

In other words, awful. Awful in every way. Yeah, maybe it’s worth having a spare phone in an emergency, but this isn’t worth ten cents a minute. For my $100 to buy minutes, I can get a swell bluetooth speakerphone and call it a day.

Scenario 3: Voice Guided Directions

For my trial period, I get directions. Now, I was expecting turn-by-turn GPS stuff, but as with everything OnStar, what I actually got was a nice phone receptionist… eventually.

beep! OnStar Ready! Connecting to OnStar advisor!

Advisor: “Thank you for calling OnStar”

Me: “Hi. I need directions to Coopersmith’s pub in Fort Collins, Colorado.”

Advisor: “What?”

Me: “I need directions to Coopersmith’s in Fort Collins.”

Advisor: “Huh?”


Advisor: “Okay… Let me look that up.”

(typing sounds)

Advisor: “Is that a business name?”

Me: “Yes.”

Advisor: “What?”

Me (shouting): “YES, IT IS A BUSINESS NAME!”

(at this point, I decide to always shout, since obviously the speaker can’t keep up with the road noise as I drive down I-25)

Advisor: “Okay, I think I’ve found it.” (“I think”???)

Me: “OKAY…”

beep! beep! beep!

WTF??? This is the standard OnStar hold sound. Maybe he’s loading up my GPS or something. I wait.

Advisor (a different one): “Did you need directions?”


Advisor: “Okay… That’s Super…? What?”

Me (screaming at the top of my lungs): “COOPERSMITHS! C-O-O-P-E-R-S-M-I-T-H-S!”

Advisor: “Okay… Just a second…”

beep! Your OnStar call has ended.

At this point, I was just curious whether I’d ever get directions. I clicked the button again and quickly got an advisor. I’ll skip the details, but she seemed to hear me okay (I was still yelling) and quickly looked up the business.

Advisor: “I can’t get a street address for that. Do you know if it’s at the intersection of Linden and Walnut?”

Me: “Yes, it is.” (I guess. I’m actually not sure those roads intersect.)

Advisor: “Great. It’s just a few turns, but if you’d like, you can download them to your car.”

Me: “Sounds good.”

Advisor: “Press the blue button.”


Me: “Done.”

Advisor: “Here are the directions…” (she reads them)

Advisor: “Now you can press the button again.”


Me: “Done.”

Advisor: “Great. To play back the directions, press the phone button, then say ‘Virtual Advisor’ and then say ‘Play.’ If you need to pause it, just press the phone button. When you call up the virtual advisor again, it will ask if you want to play, which starts over, or resume.”

Me: “Great! Thanks.”

Advisor: “Have a great day. Call us back if you need anything or have trouble finding it.”

beep! Your OnStar call has ended!

Me: “Virtual Advisor”

Car: “I don’t understand…”


All told, this took me 20 miles to complete. Good thing I was getting directions to a place that was 40 miles away, or else I would have shot past it an hour before.

Once again, OnStar proves the limitations of just being a phone. Well, a phone that can record your call. My turn by turn navigation is playing back a recording and stopping it after every turn until the next one comes up, and then hitting “play” again.

Are you serious?

This whole package, not including phone minutes, is $30/month. That’s pretty darn steep, but possibly worth it just for the emergency services. (Which costs $20 without the directions service) But overall, it’s a sad statement on GM’s technological capabilities.

I can see two ways to go with this service. One option is to just make it cheaper, and treat it like a triple-A subscription. Emergency services, $100/year. Or whatever. It would probably be worth it.

The other approach would be to just use the OnStar Advisors as what they are, people with computers that are one button away. Let them help you with more than just directions and phone numbers (for while, I have it on good authority, they just use Google Maps), and just look stuff up on the Internet, or even make some phone calls for you to find a laundromat that can press your suit before the wedding you’re attending.

Would I pay for that service? You bet! It would be a GM Concierge. Sure, it’ll require a GM car, but it would give everyone the admin assistant they’ve always wanted.

In the meantime, I’ll drive my Pontiyota (Toyotiac?), which I like a lot, and I know my wife will sleep easier knowing that if my airbags deploy, I’ll get emergency service promptly and automatically, even if I’m knocked out cold. But I have to say that it galls me to pay so much for so little.

Written on August 27, 2010

Quick response on Interarchy

True to form, Matthew Drayton of Nolobe got an Interarchy bug fix out a few hours ago. Most, if not all, of the bugs have been addressed. This might be a good argument for the widespread use of public betas these days.

The new app is pretty slick. Running processes on remote servers is a killer feature if ever there was one. Having a terminal session open next to your FTP program does the same thing, but having it integrated so you can select files and pass them to the process is something else entirely.

Written on August 6, 2010

Interarchy 10, Interarchy 9 all over again

Interarchy, my long-time FTP (and SFTP, and S3, etc…) client, just got a major upgrade. Now it’s at version 10. Among its many improvements is the ability to create plugins that run programs on the server you’re connected to! So you can, for example, edit your Apache virtual hosts files, and then bounce Apache without leaving Interarchy. Extremely cool stuff.

Unfortunately, it’s chock full of bugs!

These bugs range from irritations to full on crash the application bugs, and most are the kind that seem like they should have been detected in a very modest QA check. (One button in the preferences simply kills the app if it’s running under Snow Leopard!)

Interarchy 9 had an equally spotty release. I’m assuming that a 10.1 update will be here soon, but until then, there’s a painfully buggy program out there. On the up side, of course, I can keep using version 9, and wait until 10.1 to buy the upgrade. (if I choose to do so… Transmit’s looking great these days and has a lot to recommend itself)

Written on August 5, 2010