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 Whirlpool.net.au forums for this great trick!
Written on July 19, 2010

Send Google Reader Items to OmniFocus

Google Reader has a nifty “Send To…” feature that lets you push reader items to other services – such as social networks, Instapaper, and so forth.

I have recently set up a Send To service that will send your Google Reader articles to OmniFocus, provided you’re using version 1.8 or later. (Currently in beta, download it here) (Props and full credit goes to Gokubi for setting this up for version 1.7 – I just polished it up a bit and used the native URI handler in OF 1.8)

Setup is pretty simple. In Google Reader, go to your Reader Settings (upper right corner), and click on the “Send To” tab. Then you just have to add a new service, and use the following settings:

Name: OmniFocus

Send to URL: http://omnifocus.nik.me?name=${title}&note=From+${source}%3A+${short-url}

Icon URL: http://omnifocus.nik.me/OmniFocus-16.png

Then just go back to Google Reader, and choose Send To on an article (or type Shift + T), and select OmniFocus.

Again, this only works with OmniFocus 1.8, which is in beta right now. If you want the same functionality without having to switch to a potentially untrustworthy version of OF, you can use Gokubi’s original setup, which leverages my URI handler for OF 1.7 and earlier.

Written on July 16, 2010

I got my iPhone 4G early... and it's labeled 3G!

Now that jailbreaks are available for iOS 4 (what, no iOS X 10.4?), I went ahead and updated my phone. A couple .plist edits later, and my plain-old 3G gets background pictures and multi-tasking. Installed MyWi, which gives me tethering (without canceling my unlimited plan, thank you very much!) Thanks to iVideoCamera, I can capture video, and Vlingo gives me voice dialing.

So basically, I’ve got the functions of a 3GS, without the extra speed. Not bad for the price.

Now I’m dithering over whether to sell this phone on eBay (I figure an unlocked and contractless 16GB 3G with all these bonus features could be worth at least a few hundred bucks) and get a shiny new iPhone 4; or whether I’m better off staying the course, enjoying life without a contract (even switch carriers – if only T-Mobile’s 3G network worked with the iPhone), and maintaining the freedom to jailbreak and hack to my heart’s content.

Heck, if YOU want it, sound off in the comments. I figure $300 – the cost of the higher-trim-level iPhone 4 – is my “buy it now” price.

Written on June 23, 2010

Procrastinate Better With an Untrustworthy Clock

Sometimes I run late. Late to meetings, late to go home, late to pick up kids… I know I’m not alone, too. So I fixed this problem with a handy little script I call “Procrastinators Friend”. This script is pretty simple, it just sets your clock ahead by a random amount, between 5 and 15 minutes. I then set this up to run every hour, so I’ll never quite know how fast my clock is running. In order to prevent this from going crazy, it also syncs up your time with a network time server before adjusting it, so you’ll never be too fast or slow.

Naturally, the buyer should beware, here. System tools that rely on modification dates to do stuff will be thrown off by this little script. But maybe that’s worth it to be on time, every time.

Use cron or launchd to run it regularly.

Written on June 1, 2010

AppleScript tricks: What to Do When the Frontmost Window Isn't Frontmost

The Problem: Scripts often target the current document window of an application. This is usually easily handled with something like…

Tell application “Finder” to get window 1

The problem with this approach is that it returns a useless window if the wrong kind of window is in front. In the Finder, this will often be a Get Info window, folder options window, or preferences. Some applications have special classes of windows to make this easier, but many do not. To find the frontmost window of these applications, you need to do this manually.

To make this work, you need to loop through your windows until you find one of the right type. You could do this by the name of the window (e.g. find Finder windows whose names don’t contain “Finder Preferences”), but that requires you to catalog the names of every non-standard window, and can cause problems if, for example, you have a folder named “Finder Preferences.”

A better approach is to identify a property that only the right kind of windows contain. So, for Finder windows, you can look for the folder of the window, as in…

Tell application “Finder”
set theFolder to (path to desktop folder as alias)
repeat with i from 0 to (count of windows)
get folder of window i
set theFolder to result as alias
exit repeat
end try
end repeat
end tell

In this code, the “try” handler gracefully handles windows without the “folder” property. Likewise, by setting theFolder to the Desktop to begin with, it also handles the situation where there are no open windows.

Using this technique, the following script will open the current Finder window in a new tab in the frontmost Terminal window. If there isn’t a terminal window available, it opens a new window. The code gets pretty involved for the Terminal (including having to go to UI scripting to make a new tab), but it avoids the pitfalls of multiple open windows in each application, not all of which are useful folder or terminal windows.

on run
get quoted form of POSIX path of my getCurrentFolder()
my termScriptInNewTab(“cd ” & result)
end run

on termScriptInNewTab(cmd)
tell application “Terminal”
set termWins to count of windows
set frontWin to 0
repeat with i from 1 to (count of windows)
set tabCount to count of tabs of window i
set frontWin to i
exit repeat
end try
end repeat
if frontWin is 0 then
do script cmd
set frontmost of window frontWin to true
tell application “System Events” to tell (first application process whose name is “Terminal”) to keystroke “t” using {command down}
set xi to 0
repeat until (count of tabs of window 1) is (tabCount + 1)
if xi ≤ 4 then – don’t wait more than one second
delay 0.25
set xi to -1
exit repeat
end if
end repeat
if xi is not -1 then
do script cmd in (last tab of window 1)
do script cmd
end if
end if
end tell
end termScriptInNewTab

on getCurrentFolder()
tell application “Finder”
set theFolder to (path to desktop folder as alias)
repeat with i from 0 to (count of windows)
get folder of window i
set theFolder to result
exit repeat
end try
end repeat
return theFolder as alias
end tell
end getCurrentFolder

Extra credit: How can you adapt the termScriptInNewTab handler to run the command in the first tab that isn’t busy, rather than a new tab?

Written on May 26, 2010

Cleaning House, Fixing Bugs...

Did some cleaning up of this site.

First off, downloads should all work now. Sorry they’ve been variously broken for so long. I finally tracked down the problem. (Turns out it was obvious, but I was dumb. So it goes.)

I also deleted about 500 comments, all of which were spam-ish. Many, I’m sure, were not. So I’m sorry if your comment got deleted. There’s also still some comment spam. Dang.

Oh. New site look. Using the Wabi Drupal theme. I like it. I keep the orange, but it’s a lot less ugly.

Look for more updates to the site in the future. And, as always, thanks for reading. Both of you. You know who you are.

Written on April 21, 2010

How I'm using TextExpander

I’ve always had a problem remember my TextExpander shortcuts, to the point that I wouldn’t use it at all. (The only way I ever found it useful was if I used very obvious shortcuts, but that ran into its own problems when the shortcuts would expand accidentally) With Version 3, I’ve managed to come up with a workflow that meets my need for memorable shortcuts, and that also takes best advantage of its new features.

The first thing I did was changed the delimiter to only be tab. That’s it. No expansions at the end of words or sentences. This makes it work pretty much like auto-complete shortcuts in many text editors. It also lets me put in extremely obvious expansions, so I remember them. (e.g. “rep” creates an AppleScript repeat block, and now I don’t have to worry about expanding when I want to reference a customer service rep in my script’s comments)

The second thing I did was made similar expansions have the same prefix. So the various repeat block snippets for AppleScript, all begin with “rep”. This lets me take advantage of TextExpander’s new “Suggest Matching Abbreviations” feature to quickly pick from many similar options. So I can type “rep” and hit option-V (you can set the shortcut in TE’s preferences), and I’ll get a nice drop down menu letting me select from among Repeat n Times, Repeat Until x, and Repeat with x in y. (Each of which also have fill-ins to make it even cooler) Of course, I can also just type, say, “repw” to get “repeat with x in y”, but I don’t have to remember it.

The one downside of this approach is that I lose the benefit of auto-correction dictionaries that fix common typos and capitalization errors. But I consider this a small price to pay for my increased productivity.

Written on April 14, 2010

Markdown to Microsoft Word Service

Markdown to Word is a ginchy little service that will take Markdown-formatted text, and put it into Microsoft Word, making use of Word’s style sheets to do so.

This is in all ways identical in function to my previous TextMate script which does the same thing, except that this also auto-formats once in Word.

You may notice some funniness in the conversion. Lists, in particular, sometimes don’t convert perfectly. This is part of Apple’s textutil program, which is very handy, but sometimes a little… er… special in how it handles things. I take neither blame nor credit for its output.

IMPORTANT! This service relies on the setfile utility, included with Apple’s free “XCode” developer tools. You’ll need to have those installed (at least the developer applications).

And, of course, this program wouldn’t exist were it not for John Gruber’s “Markdown.” Mr. Gruber retains all copyright, etc., to said code. Disclaimers can be read below and are included with the Zip archive.


I am eternally grateful to Mr. Gruber for giving me Markdown. Without it, I’d probably be writing in LaTEX or something. Ugh.

Written on November 9, 2009

Why You're All Wrong About the Insurance Debate!

I’ve always kept this blog as something of a geek-only site, but the current situation with the insurance overhaul is driving me nuts. The government is being accused of death panels, care rationing, raising our taxes, and more – even though these are EXACTLY the same things our private insurers are ALREADY DOING! So I’m taking my own little stand and sharing my thoughts with both of my readers.

First, the basics:

Insurance companies are funded by member premiums and investments that increase the value of the banked premium fees. (And private investment, but let’s leave that out for now) The insurance company is profitable provided that it earns more money from these two revenue streams than it has to pay out to pay back medical providers, and cover its overhead costs.

There are three major points of risk here:

Medical cost increases: If the cost of health care rises too much, the insurance company’s profit will decline accordingly.

Unexpectedly high pay-outs: If the overall payout for member medical bills is higher than expected, it will eat into the insurance company’s cash pool, and force them to cash out longer term investments, which can get expensive fast.

Investment Losses: Insurance companies rely HEAVILY on the revenue they earn from their various investments. If those investments sour, it’s a short ride to bankruptcy.

Are we good on the basics, here? Okay, now let’s look at how an insurance company manages those risks, and how those would affect the proposed public insurance plan, and see which has the most advantages:

Aggregated risk: By taking on lots of subscribers, insurance companies aggregate risk and create a hedge against extraordinary payouts. While a few subscribers may have large medical bills that exceed what they’ve paid in, other subscribers subsidize this care through their own premiums, since they pay in more than the insurer has to pay out. The public option would work in the same way, with members paying the premiums. (And, it’s worthwhile to note that this is the same way taxes, social security, medicare, medicaid, pension plans and many other public and private institutions are run – there’s nothing new here).

WINNER: To-be-determined. Whichever insurerer has the most members will have the greatest degree of risk aggregation. If the Republicans are right, and the public plan ends up taking over the insurance business, then the public plan will be the big winner.

Negotiated Pricing: Insurance companies negotiate fixed rates for various medical procedures. This is why your “out of network” coverage is costlier than “in network” coverage among physicians that have agreed to these pricing agreements. The government already does this in its medicare and medicaid programs, and would continue to do so with a public plan. Doctors, as always, will be free to not join a given insurance network, probably including the public plan (they can not join medicaid/care if they wish), so there’s no real strong-arm tactics there.


Rationing care: Insurance companies often place restrictions on what care is covered for any particular subscriber. Some plans, for example, don’t cover maternity care, others require physicians to only use certain procedures, even if there are comparable treatments available, and many (most?) plans restrict subscribers to generic drugs. These restrictions sometimes conflict with the physicians’ recommendations, and we may infer from this that it conflicts with the patients’ best interests. There is no reason to believe that the public option will be any different in this regard.


Death panels: Okay, it’s an absurd term, but I couldn’t resist. Insurance companies avoid paying out excessive amounts by dropping subscribers with or without cause, and/or refusing to cover new subscribers who have pre-existing conditions. And, as above, they may also refuse necessary treatments to extend or save the lives of gravely ill/injured subscribers. The public plan would not be permitted to drop a subscriber nor deny coverage due to pre-existing conditions or long-term care needs.

WINNER: Public option, as it will provide care indiscriminately.

Higher premiums: Charge more at the door, and you have more money for paying out, investing, and giving bonuses to the CEO. (Cheap shot, sorry) Since the public plan won’t have the option of denying care to really sick people, it may actually end up costing MORE than an equivalent private plan. On the other hand, since it’s not-for-profit and won’t be paying equivalent salaries or shareholder dividends, it will have a higher share of the premiums to cover costs. Of course, the more you pay, the better coverage you get, so we really need to know the structure of all the involved plans before we can judge.

WINNER: To be determined. Quite possibly a tie.

Higher taxes: Two things, here: First, higher premiums may as well be higher taxes, it’s money out of your pocket either way. You’re already paying higher premiums because your insurance company has to pay the physician’s higher prices since the physician is providing service to uninsured people who will never pay their bills. (See how many people at the ER have less-than-emergency conditions, but are still get $100 tubes of Neosporin). The same will be true of the public plan.

Taxes come in directly if the public plan can’t cover its tab, then we might have to shore it up with tax money – which may be drawn from other programs, rather than a direct hit at your pocketbook.

Of course, we ALREADY subsidize our private insurance through taxes, so what does it matter? Not only do we pay interest (funded with taxes – yay!) on the treasury bonds insurers invest in, but you may have noticed that we recently paid out a pretty hefty sum of money to the banks holding these investments and a huge portion of that money went directly to insurance companies. AIG got nearly $200 BILLION from us taxpayers!!! As for the public plan, well, it’s supposed to be self-funding, but it will also invest money (by lending government bonds, among other things) to fund itself, so it will be victim to the same market forces.

WINNER: Let’s call it a tie. What’s a few hundred billion dollars between friends?

Consumer choice: Yep, insurance companies benefit GREATLY from consumer choice! How? Well, if you have employer-paid insurance, you get to choose WHATEVER PLAN YOUR EMPLOYER OFFERS! Hooray! Want to pick a physician? You get to pick WHICHEVER PHYSICIAN YOUR INSURANCE COMPANY PICKS FOR YOU! Hooray! Looking for private insurance as an individual? Congratulations, you can ONLY receive highly restricted, minimal coverage plans, unless you shit solid gold bricks and eat platinum covered Wheaties for breakfast every morning. That’s right, REGULAR MARKET FORCES DO NOT APPLY IN THE INSURANCE INDUSTRY! Well, at least not in the sense of consumer choice. Consumers have, effectively, NO CHOICE WHATSOEVER.

The public plan, on the other hand, will publicize everything it does and be answerable directly to The People and their government representatives. It may be just as restrictive and shitty as any other plan, and it might only be a plan of last resort for people who can’t get anything better. So I wouldn’t be too worried that it’ll create anything approaching a free and competitive market.

WINNER: I’d say the public plan is the winner, but there’s no reason to believe that it will be a good plan, or that it won’t screw its subscribers just as much as the private plans.

In conclusion, as consumers, we’re fucked.

Insurance is a very high stakes game of roulette for the companies involved, and even higher stakes for individuals. Everybody’s hoping that they pay out less than they get in return.

Insurance companies have the advantage in these games, with multiple sources of income and the ability to aggregate risk and reward across a huge scale. You, on the other hand, have your own health and money to gamble with. The odds are that you’re better off paying out of pocket, because MOST insurance subscribers pay more than they get in return – that’s how the insurance companies stay in business, after all. But then, statistics only apply to the population, not to the individual. You wouldn’t dare aggregate your risk by letting your daughter die of lukemia so that you can afford to pay for your wife’s heart surgery.

When I got laid off many months ago, I investigated private insurance, and learned that it was out of the question to cover me, due to pre-existing conditions, and my family’s plans to have another child would need to be put on hold, because I couldn’t get maternity coverage at ANY price. I’m, thankfully, employed and covered by my employer’s insurance plan. But those premiums just went up by more than $500/month, and I have no control over whether they’ll go higher.

Did I mention that I’m also paying to cover the losses our various insurance companies took? Yeah, they did get into the pick-who-gets-to-live question, and our lovely government has a public option to insure the insurers and the companies that hold their investments. Apparently they’re Too Big to Fail, even if I’m Too Little to Insure on my own dime. So I’m really looking forward to paying taxes on all that bailout money and watching inflation soar over the rest of my lifetime.

Is the public plan a panacea? Not hardly. Fully socialized insurance would provide some benefit in greater risk aggregation, and the removal of the profit motive. But, then, it may also just go bankrupt, as Canada’s public health system nearly did, or provide terrible coverage. At least in a competitive market I have a choice, right?

No, I don’t. Neither do you.

I probably got a lot of this wrong, so please sound off in the comments and let me know why I’m misguided, stupid, or a communist.

Written on October 12, 2009

Evernote Services

Updated October 2, 2009!

Just a note: These work great in Lion and Mountain Lion. It’s not just for Snow Leopard.

With Snow Leopards new services support, I’ve updated the old “Send to Evernote” service to include three services:

  • Clip Text to Evernote: This is the original “Send to Evernote” service, with the improvements provided by Snow Leopard. This service takes selected text and turns it into an Evernote note. It will also grab the name of the frontmost window for the title of the note so that you’ll remember where you clipped it from.

  • Clip URLs to Evernote: This takes any selected URLs, and downloads the contents of those URLs into Evernote. Very handy if you have a reading list of URLs and want to save them for later.

  • Clip Files to Evernote: This will accept files and folders and attempt to clip them to Evernote. In some cases this will fail if the file isn’t supported by Evernote (although premium users can attach anything they want). If it is a supported file type, the document’s contents will become the note, rather than just attaching as a file.

Installation’s easy. Just unzip the archive, and put the services you wantin your ~/Library/Services/ folder (make one if it doesn’t already exist).

This will also let you get rid of the little elephant in your menu bar if you like.

Written on October 2, 2009