For a long time I was using Windows Live Sync to synchronize a few folders between my MacBook & MacBook Pro, however it no longer seems to work in Snow Leopard.

I was also using Dropbox to create a shared folder although I wasn’t really using it as a synchronization tool. Dropbox only lets you share a single folder rather than selecting any folders you want to synchronize.

What I didn’t realize is that you can put a symbolic link to another folder inside your dropbox folder to synchronize it. A finder alias will NOT work; you have to use the command ‘ln -s’ in the terminal to create a symbolic link. Thanks to that little known feature, I’m able to use it to synchronize my entire documents folder, my source code, and several other folders.

For a long time I’ve been using a Drobo connected to my Airport Extreme base station as a backup drive for Time Machine. I know it’s not a supported configuration, but it’s a lot more practical than having to keep an external drive plugged in to my MacBook Pro, which I often move around so I can work in different rooms. There is no good reason it shouldn’t work the same way a Time Capsule does. I don’t like the Time Capsule because it uses a single drive and can’t be expanded like the Drobo.

It works most of the time, but after a while it gets very slow and once in a while it corrupts my backup sparse image. After using it for several months, a single backup often takes longer than a day and if I put my MacBook Pro to sleep when it’s preparing or finishing a backup, that backup fails. The last few times it took over a week to successfully complete a single backup.

After my backup image got completely trashed and couldn’t be repaired, I decided to look for other backup options. CrashPlan is the best backup solution I’ve found for several reasons. Like Time Machine, CrashPlan runs continuously in the background. CrashPlan maintains multiple versions of files and can restore a particular version.

Unlike many other backup programs such as Mozy which are tied to a particular online service, CrashPlan gives you several options for backing up. In addition to CrashPlan’s own CrashPlan Central online backup service, you can back up to any folder (including a mounted server volume such as my Drobo) or another computer running CrashPlan. You can also invite friends to back up to your computer or back up to a friend’s computer. You can even back up to multiple destinations at the same time.

After trying it for a few days, I upgraded to CrashPlan+, which backs up continuously instead of once a day. I’m still on my 30-day free trial of CrashPlan Central, but I will probably opt for their $100/year family plan, which will let me back up multiple computers.

Although there was no announcement, a developer release of Google Chrome for the Mac is now available for download here. It’s not finished. When you run it for the first time, it will give you the option to import your bookmarks from Safari or Firefox, although the import doesn’t work yet.

Jul 312009

I’ve made some fixes to my Post To Tumblr script to make it more reliable. I found that many newsfeeds don’t have a summary property, so I’m using description instead, which is more correct. I’m also testing the existence of all properties before I use them.

Here’s the updated script. You can also download it here.

on urlencode(x)
	set TheCode to do shell script "python -c 'import sys, urllib; print urllib.quote(sys.argv[1])' " & quoted form of (x)
	return TheCode
end urlencode

tell application "NetNewsWire"
	if title of selectedHeadline exists then
		set q_title to my urlencode(title of selectedHeadline)
	else
		set q_title to "Untitled"
	end if

	if permalink of selectedHeadline exists then
		set q_url to my urlencode(permalink of selectedHeadline)
	else
		set q_url to ""
	end if

	if description of selectedHeadline exists then
		set q_content to my urlencode(description of selectedHeadline)
	else
		set q_content to ""
	end if

	set tumblr to "http://www.tumblr.com/share?v=3&u=" & q_url & "&t=" & q_title & "&s=" & q_content
	open URL in new tab with tumblr

end tell

Jul 302009

I use Tumblr to collect & share clippings from NetNewsWire & other items too small for a blog post. With the previous version of NetNewsWire, when I added an item to my clippings, the RSS feed from NewsGator was automatically imported into Tumblr.

Since that feature is gone in the NetNewsWire beta, I came up with another way to share items in Tumblr. Here’s an AppleScript that opens a new tab to post the currently selected headline in Tumblr in a way similar to the Tumblr bookmarklet.

on urlencode(x)
	set TheCode to do shell script "python -c 'import sys, urllib; print urllib.quote(sys.argv[1])' " & quoted form of (x)
	return TheCode
end urlencode

tell application "NetNewsWire"
	set item_title to (title of selectedHeadline)
	set item_url to (permalink of selectedHeadline)
	set item_content to (summary of selectedHeadline)

	set q_title to my urlencode(item_title)
	set q_url to my urlencode(item_url)
	set q_content to my urlencode(item_content)

	set tumblr to "http://www.tumblr.com/share?v=3&u=" & q_url & "&t=" & q_title & "&s=" & q_content
	--display dialog tumblr
	open URL in new tab with tumblr

end tell

Download the script here and drop it in NetNewsWire’s script folder.

You can follow my Tumblr at mike3k.tumblr.com.

NetNewsWire has always been my favorite desktop newsreader, but as much as I love it, I really hated Newsgator Online, which it syncs with. I always preferred Google Reader and would rather sync with it. My wish has been granted – a new NetNewsWire beta which syncs with Google Reader was released today.

It’s a beta and it still has a few rough edges, but I’m thrilled to finally be rid of NewsGator and be able to use NetNewsWire with Google Reader. This change was necessary since NewsGator is discontinuing NewsGator online for end users on August 31.

NetNewsWire for iPhone will also be updated to use Google Reader.

Things Ripoff

Macintosh, Web Comments Off
Jul 292009

There’s a new web app called 2dooo Things which is a direct ripoff of Cultured Code’s wonderful Things task management application. In fact their home page shows a screenshot of the actual Things app.

2dooo Things

If you actually sign in, you’ll see that the main screen is identical to things on the Mac. For some strange reason, a new account gets 6 items in the trash.

Things desktop app
Things
2dooo Things web app
2dooo Things Main Screen

If Cultured Code isn’t involved with this and didn’t explicitly give them permission to copy Things, they should take action against 2dooo.

One of my favorite desktop applications, Delicious Library, is now available on the iPhone. The iPhone app is free, although it requires the desktop app since you can’t enter data on the iPhone.

If you have the latest version of Delicious Library on your Mac, when you open the iPhone app it will automatically connect and give you a code to enter. Once you’re connected, it will show a very familiar screen that lets you sync with the iPhone.

Delicious Library sync with iPhone

After you sync your library to your iPhone, you can take your library with you anywhere to browse. The iPhone app is just as beautiful as the desktop app.

Delicious Library on iPhone

Jun 102009

I’ve been using Quicken 2006 and earlier versions for my personal finances for a long time. Recently it started corrupting my data files every few days. Thankfully Time Machine saved me when that happened.

Since that version is 3 years old, I thought I should probably upgrade to the newest version, so I checked quicken.com and found that the latest Mac version is 2007, although a much-delayed update is due later this year. The 2007 version doesn’t have many major changes, so I didn’t bother upgrading.

Quicken still isn’t Intel native, which will be a problem with Snow Leopard, since Rosetta isn’t installed by default. Attempting to open Quicken 2006 in Snow Leopard results in the following alert. I’d rather keep my Mac pristine and not pollute it with Rosetta.

Screenshot on 2009-06-10 at 2.20.36 PM.png

I researched several alternatives and found iBank & MoneyDance to be the most promising. Both claim to import QIF files exported from Quicken.

First I tried iBank and found that it imported everything from different accounts in the QIF file into a single account, so I gave up on it.

MoneyDance imported my QIF file cleanly, but I found that it wasn’t compatible with my bank’s online service, so I gave up on it.

I was very reluctant to trust my finances to an online service, but based on Chuq’s recommendation I decided to try Mint. I found that I really like it a lot. It feels almost as snappy as a desktop app and always has up-to-date information from all of my financial institutions. I ended up creating a Mint Fluid desktop app, which loads faster than the non-native Quicken and feels just as nice as any of the desktop apps I’ve tried.

Jun 042009

Unfortunately I have to be home next week, so I’ll be missing out on WWDC. I did get a chance to walk by Moscone West and take photos of Apple’s preparation for the event.

DSC_6193

Could this be a prediction of a 32GB iPhone?

DSC_6206

See the full gallery here.

Jun 012009

Daniel Jaikut asked why the default keychain in OS X keeps getting changed, which I’ve also noticed, as have a few other people. It seems to be related to XCode and usually manifests itself as a code signing error. If you look at the provisional profiles tab in XCode’s organizer window, you’ll see a warning about a missing certificate.

I found a very simple manual fix for it. Add the following script to XCode’s script menu:


#!/bin/sh
/usr/bin/osascript - < <***
tell application "Keychain Scripting"
	set current keychain to keychain named "mike.keychain"
end tell
***

If XCode complains about a missing certificate, run that script from the menu and you’ll be OK.

May 192009

Although I fell in love with The Hit List‘s beauty & simplicity, I find that I really need the ability to sync with my iPhone, so I took another look at Things and ended up switching back.

Now that I understand the proper use of areas vs. projects, I can live without folders or nested outlines. I had been avoiding areas of responsibility and creating projects for everything, which became difficult to manage without folders.

Areas of responsibility can be used to group related projects as well as individual tasks. A project should be used for something that can be completed, such as releasing an application, or preparing for a trip. An area, on the other hand, is used for an ongoing activity such as work or blogging.

Although Things doesn’t let you simply drag an email or URL to create a task, you can still link them to the notes field of a task. The ability to sync with my iPhone and share tasks with team members more than make up for The Hit List’s nicer user interface.

One reason I use Google Reader is to share interesting articles in my shared items page. However, I find that I’m more productive when I use NetNewsWire, since I’m in control of how & when it fetches new items, so I spend less time reading news.

I’ve been looking for a way to share items in Google Reader from NetNewsWire. One way I did it was by subscribing to my NetNewsWire clippings feed, which I make publicly visible in Reader. It doesn’t appear in my shared items, though.

I’ve found a better solution, although it still isn’t perfect. This AppleScript is based on Google’s “Note in Reader” bookmarklet. It should be placed in NetNewsWire’s script folder. You can then choose ‘Post to reader’ in NetNewsWire’s script menu to open the selected news item in Safari and open a box to post it to your shared items.

tell application "NetNewsWire"
	set u to URL of selectedHeadline
end tell
tell application "Safari"
	make new document with properties {URL:u}
	delay 2
	do JavaScript "var  b = document.body;
var  GR________bookmarklet_domain = 'http://www.google.com';
if (b && !document.xmlVersion) {
    void(z = document.createElement('script'));
    void(z.src = 'http://www.google.com/reader/ui/link-bookmarklet.js');
    void(b.appendChild(z));
} else {}" in document 1
end tell

Staying in sync

Macintosh Comments Off
May 152009

I’ve found that my MacBook Pro is better as a desktop system, while my MacBook is more pleasant to travel with, so I’ve been looking for a good way to keep them in sync. After trying several sync utilities, I was surprised to find that Windows Live Sync is my favorite.

Windows Live Sync runs continuously in the background and syncs files as soon as they’re changed. In most cases it “just works”, so you can work normally without having to think about it. Live Sync is the only sync utility that’s completely free. It’s limited to 20 directories with 20,000 files in each directory. I haven’t run into any storage space limitations.

ChronoSync with ChronosAgent is a close second. Rather than running continuously and syncing files as they’re changed, it runs at scheduled times (or manually) and does a full sync of everything that changed since the last time it ran. If you’re syncing a large folder such as your home directory, it can take a long time. ChronoSync is great if you want to do a full sync before leaving with your laptop and again when you return.

SugarSync looks promising, but there are a few things I don’t like. It also syncs continuously like Windows Live Sync, plus it lets you access your files from the web. However, the sync application isn’t a background process. You need to actually run their SugarSync Manager application at all times if you want it to sync. Also, the free service is limited to 2GB. Other plans are available from 30GB for $4.99/month through 250GB for $24.99/month.

If you only want to synchronize a single folder, Dropbox is great. Like SugarSync, the free service is limited to 2GB, although more storage is available at extra cost. Since it’s limited to a single folder, it isn’t really a complete synchronization solution.

May 112009

I own both Things and The Hit List (which I purchased as part of MacHeist 3), but I’ve been using The Hit List exclusively. With the release of Things 1.1.2 today I decided to take another look at it. After a short time I went back to The Hit List.

Things has two major advantages over The Hit List: it’s available for the iPhone and can sync with it, and it lets you add other team members to share task lists with.

The Hit List is a lot more attractive and just feels generally nicer. It has several features I use heavily which are missing from Things, including subtasks, time estimates, folders, and the ability to create new tasks by dragging an email or URL to a list. Hopefully there will be an iPhone version soon.

An application that I’m working on uses a SOAP web service to send user registration data to a server, which I implemented using Web Services Core Framework. After the user enters his details, I create a SOAP request to send it to the server:


	NSDictionary* headers = [NSDictionary dictionaryWithObjectsAndKeys: soapaction, @"SOAPAction",  "text/xml; charset=utf-8", @"Content-Type", nil];

	fRef = WSMethodInvocationCreate((CFURLRef) url, (CFStringRef) method, (CFStringRef) kWSSOAP2001Protocol);
	WSMethodInvocationSetProperty(fRef, kWSHTTPExtraHeaders, headers);
	WSMethodInvocationSetProperty(fRef, kWSSOAPBodyEncodingStyle, kWSSOAPStyleDoc);
	WSMethodInvocationSetProperty(fRef, kWSSOAPMethodNamespaceURI, Namespace);
        WSMethodInvocationSetParameters(fRef, (CFDictionaryRef)params, nil);
	fResult = (NSDictionary*)WSMethodInvocationInvoke(fRef);

This works perfectly unless the user enters multi-byte Asian characters. I immediately suspected that I was assuming somewhere that characters are one byte, but it turned out to be crashing deep inside CFNetwork code.
Continue reading »

Vampire Weekend’s self-titled debut was my favorite album last year, with its catchy blend of afro-pop with ska, classical, and indie pop sounds. This blog post offers some details and a great new song called White Sky. The new song is recognizable as Vampire Weekend’s style and sounds like a lost track from “Graceland”. I’m really looking forward to this album.

Apr 202009

My favorite iPhone twitter application, Tweetie, is now available for the Mac. It’s replaced Twhirl & Nambu as my favorite Twitter client.

Tweetie’s user interface is clean & gorgeous. It has the features I want in a Twitter client: separate views for friend’s tweets, replies, and direct messages, and makes it easy to track new tweets by maintaining the proper scroll position to show current tweets until you explicitly scroll.

Atebits paid a lot of attention to detail. Animation effects are a nice touch, without being annoying. Double clicking brings up the user’s profile or all tweets in the reply threads. Most importantly, Tweetie doesn’t get in your face, so you can concentrate on work without being distracted, unlike many other twitter clients that demand your attention, yet you can easily see when new tweets arrive.

The only features Tweetie is missing are groups, saved searches, and trends.

Apr 092009

XCode provides several ways to make your work easier by cutting down on repetitive typing. The simplest (from a usage standpoint) is text macros. You simply type an abbreviation and hit Escape to substitute it. A text macro can have variable substitutions where you can add text.

I’ve seen a few contradictory articles telling how to add your own text macros, which don’t work in XCode 3.1, but here’s how I was able to get it to work.

First, open /Developer/Applications/Xcode.app/Contents/PlugIns/ and look for TextMacros.xctxtmacro. Make a copy of TextMacros.xctxtmacro and place it in ~/Library/Application Support/Developer/Shared/XCode/Specifications. You may need to create the Specifications folder if it doesn’t exist.

In the copy of TextMacros.xctxtmacro, go to Contents/Resources and edit any of the .xctxtmacro files such as C.xctxtmacro (anything defined there also works in C++ and Objective-C). Any changes here will override the version in XCode. If you only modify one of the macro files, you can delete the others from the copy.

My development team is supposed to add a standard copyright header to each source file. I created a macro that allows me to type ‘stdcopy’ and have it expand to the entire header, with highlighted items that I can tab to and add text. I also added a ‘history’ macro which adds a history comment below the standard copyright block.

For those two macros, I added the following definitions to C.xctxtmacro:

        {
            Identifier = c.stdcopy;
            BasedOn = c;
            IsMenuItem = YES;
            Name = "Standard Copyright Header";
            TextString = "//---------------------------------------------------------------------\n// Copyright (c) $(YEAR) $(ORGANIZATIONNAME).  All rights reserved.\n// Reproduction or transmission in whole or in part, in any form or\n// by any means, electronic, mechanical or otherwise, is prohibited\n// without the prior written consent of the copyright owner.\n//\n// < #summary#>\n//\n// < #remarks#>\n//\n// Date\t\t\tRelease\t\t\tTask\t\tWho\t\tSummary\n// =====================================================================\n// < #date#>\t\t< #release#>\t\t< #task#>\t\t< #who#>\t\t< #summary#>\n//---------------------------------------------------------------------\n";
            CompletionPrefix = stdcopy;
            IncludeContexts = ( "xcode.lang.c", "xcode.lang.java" );    // this works in Java too
        },

        {
             Identifier = c.history;
             BasedOn = c;
             IsMenuItem = YES;
             Name = "History Comment";
             TextString="// < #date#>\t\t< #release#>\t\t< #task#>\t\t< #who#>\t\t< #summary#>\n";
             CompletionPrefix = history;
             IncludeContents = ( "xcode.lang.c", "xcode.lang.java" );
        },

Scripts, which are listed in the script menu, are more powerful & flexible since they can use shell scripts, AppleScript, Perl, Ruby, or any other scripting language.

Since I’m working with CFPlugin bundles, I need to deal with UUIDs. In most cases, you would use CFUUIDGetConstantUUIDWithBytes to specify a UUID, which requires a list of byte values. The shell command ‘uuidgen’ returns a string, so converting it for use with CFUUIDGetConstantUUIDWithBytes involves some tedious editing. With a script, you can simply insert the properly formatted UUID byte values.

Here’s my ‘Insert UUID as bytes’ script:

#! /usr/bin/perl -w
my $re = "\(..\)\(..\)\(..\)\(..\)-\(..\)\(..\)-\(..\)\(..\)-\(..\)\(..\)-\(..\)\(..\)\(..\)\(..\)\(..\)\(..\)\n";
my $uuid = `uuidgen`;

my $bytes = $uuid;
$bytes =~ s/$re/0x$1, 0x$2, 0x$3, 0x$4, 0x$5, 0x$6, 0x$7, 0x$8, 0x$9, 0x$10, 0x$11, 0x$13, 0x$14, 0x$15, 0x$16/;

print "// UUID: ".$uuid;
print "CFUUIDGetConstantUUIDWithBytes(NULL, ".$bytes.")";

I’m sure there’s a more elegant way to do it in a single line of Perl :)

The Hit List

Macintosh Comments Off
Apr 072009

The Hit List is the latest entry in the crowded field of GTD software for the Mac. The most notable thing about The Hit List is its beautiful, elegant user interface, simplicity, and speed. It has become one of my favorite applications because it just “feels right”.

The Hit List.jpg

The interface looks just like a note pad. To create a new task, you simply hit return and start typing. Despite the apparent simplicity, it has some sophisticated features such as sub-tasks, which can be created as an outline, and time estimates. The Hit List can sync with iCal, and they promise an iPhone app, although it isn’t available yet.

The Hit List was the main reason I bought the MacHeist bundle; I prefer to think of it as a $10 discount on The Hit List with the other applications as a bonus.

Before I got The Hit List, I was using Things, which is also a powerful & sophisticated task management application. Although Things also has an attractive user interface, after using The Hit List, it just feels kind of clunky. Instead of hitting return to create a new task, you hit Cmd-N, which brings up a quick entry window.

Things Quick Entry.jpg

Things also lacks the outline structure with sub-tasks. One current advantage is that there’s also a Things app for the iPhone. Unfortunately they have to sync on the local network.

Update: It was pointed out on Twitter that you can create a new task in Things by simply hitting the spacebar, which creates a task inline without the popup.

© 2010 /dev/random Suffusion WordPress theme by Sayontan Sinha

/dev/random is Digg proof thanks to caching by WP Super Cache