The Missing Sync for Palm OS 4.0

Posted by Scott Laird Wed, 04 Aug 2004 21:33:07 GMT

Mark/Space is one of those fascinating little niche software companies that show up all over the Mac landscape. Mark/Space’s niche is PDA sync software–they sell products for syncing with various Palms, PocketPCs, and have Danger Sidekick software perpetually under development, waiting for Danger to finish the last bit of work (I suspect that my ex-sidekick-using co-workers will tell them not to hold their breath on that one).

When I first bought my current palm, and ancient Sony Clie T615C, I was surprised to find out that it wasn’t completely supported by Palm Desktop on the Mac. Sony doesn’t want anything to do with Macs, and Palm didn’t want to bother helping Sony, so Mac users were left in the lurch. Fortunately, Mark/Space stepped in and offered their Missing Sync for Sony Clie which unobtrusively closed the gap between Palm’s software and Sony’s hardware.

Early this year, when PalmSource announced that they weren’t going to support syncing Macs and PalmOS “Cobalt” handhelds, Mark/Space stepped into the gap again, pre-announcing a new version of their software that would make the new (so new, they still aren’t out 7 months later) Palms work with OS X.

Well, the handhelds may not be out yet, but the sync software arrived late last week. The Missing Sync for Palm OS 4.0 is available now. It’s a huge change from their previous products–before, they sold 3 or 4 different PalmOS sync products, one for each major brand of handheld, and they really only bridged the gap between Palm Desktop’s Hotsync Manager and the hardware itself. Now, all of the PalmOS handhelds running PalmOS 4 and up have been rolled up into a single product.

The bigger change is that the new Missing Sync completely replaces the Palm Desktop Hotsync Manager, while still maintaining support for all of the old Palm conduits on the market. So iSync, Life Balance, and Documents to Go still sync correctly, but the really irritating bugs and shortcomings in the old Hotsync Manager are gone. Most specifically, the bug that required the hotsync window to have the keyboard focus before Life Balance could sync is now completely gone. It also supports bluetooth and TCP/IP syncing, which were never in the Mac version of Palm Desktop.

Installing The Missing Sync was painless–just run the installer and then reboot, and it worked perfectly out of the box. It looks like a perfect drop-in replacement for the old sync manager.

At this point I’m all set, waiting for someone to come along and make a Palm that I actually want to buy. PalmOne? Tapwave? Sony? Anybody?

Posted in ,  | Tags , , ,  | no comments

Asterisk, the OS X Address Book, and cheap calls without dialing '1'

Posted by Scott Laird Fri, 09 Apr 2004 08:23:06 GMT

I am a happy man. I have, after four years of trying, achieved nerdvana. I am down to one single address book, accessible everywhere. It’s shared between my computer, my cell phone, my palm, my wife’s Mac, her phone, and finally, as of yesterday, our home phone. I can add new contacts anywhere, and they show up everywhere automatically.

It’s actually even more pervasive then that; the same address book entries re-write incoming caller ID and control our home phone’s ringer, so we can tell the difference between friends and telemarketers without even looking at the caller ID display. The best part is that it all just works. Setting it up in the first place took a bit of work, but once it’s running, all I have to do is drag cards around inside of the OS X Address Book, and everything else follows along on its own.

The first part of this whole operation was to get data out of the OS X Address Book and into a form that I could work with on one of my servers at home. Towards that end, I wrote ab2vcard, a simple tool that extracts vCards for every address book entry and stores them in a directory. If you set up Subversion and use the right flags on ab2vcard, then all of your vCards will be checked into Subversion and automatically replicated onto the Subversion server. I run ab2vcard from cron, so every two hours, all of my addresses are automatically sent to my server at home.

Next, I wrote asterisk-vcard-cid so I could use the names in my Address Book for Caller ID instead of the nasty stuff that Verizon sends me. If you copy the ‘vcardcid-cron.sh’ file that comes with it onto your Asterisk server and run it every couple hours, then it’ll do all of the hard work of checking changes out of Subversion and shoving them into Asterisk. The way I have it set up, I have 5 groups in my Address Book:

  • Home CallerID
  • Home Ring 1
  • Home Ring 2
  • Home Ring 3
  • Home Ring 4

Any contacts in the ‘Home CallerID’ group will automatically be added to the caller ID DB in Asterisk. Anyone in one of the ‘Home Ring’ groups will have ‘distinctive ring’ turned on when they call. That was really easy with Asterisk. All I had to do was add a macro like this:

[macro-setalertinfo]
  exten => s,1,DBGet(ALERT_INFO=distinctivering/${CALLERIDNUM})

Then, I make sure that all incoming calls use this macro. Here’s my complete outside line macro:

[macro-outsideline]
  exten => s,1,SetCDRUserField(Outside (${CHANNEL}))
  exten => s,2,LookupCIDName
  exten => s,3,SetMusicOnHold(random)
  exten => s,4,Macro(setalertinfo)
  exten => s,5,LookupBlacklist
  exten => s,6,Dial(${PHONES},13,Ttmr)
  exten => s,7,Answer
  exten => s,8,Goto(outside-ivr,s,1)
  exten => s,106,Wait(3600)
  exten => s,107,Hangup

This handles caller-ID rewriting, blacklisting, distinctive rings, adds extra logging, and sends unanswered calls to voicemail.

One little note on distinctive ring: the way I’m using it, it probably only works right with Cisco SIP phones, although other SIP phones that support distinctive ring will work with a few changes to the vcardcid-cron script.

Finally, I’ve added a mechanism for tying the same set of vCards into the speed dial directory on Cisco SIP phones. I’m using the 7940, but the 7905, 7912, 7920, 7960, and 7970 should all work. Each of these phones has the ability to download XML programming objects over HTTP. There aren’t a lot of great references out there, but this one is fairly complete and seems accurate so far.

The directory tool that I wrote, cisco-phone-directory, runs as a CGI on a web server. If you set up the Cisco phone right, every time you select ‘external directory’ from the directory menu, you’ll be prompted with a search screen. Enter a few letters from the name that you’re looking for, and you should get a nice, short list of names to choose from. At this point, it works with almost no fuss, and almost no user training.

Er, except for one little problem. All of the numbers in my address book look like (206)-555-1212. Once you strip the punctuation, you’re left with 10 digits. The problem is that I need to dial a ‘1’ before I call long distance numbers, and it’s not really obvious which numbers are long distance and which aren’t. I can dial most numbers in the 206 area code for free, and about half of the numbers in 425, but there’s no simple way to tell which numbers are which. Since I’m cheap, I want to send toll-free calls out over a real phone line, because it doesn’t cost me anything, while I send toll calls to NuFone over the Internet, because they cost about half as much per minute.

In order to do that, I need to know which numbers are local, given my phone’s area code and exchange. So, enter yet another tool: asterisk-lca-map. If your home number was (425)-488-1212, then you’d run it from the command line like this:

$ asterisk-lca-map.rb 425 488 1212 'Macro(dialanalog)'

and it’ll produce a dial plan that sends all local calls out ‘Macro(dialanalog)’, like this:

exten => _206200XXXX,1,Macro(dialanalog)
exten => _206202XXXX,1,Macro(dialanalog)
exten => _206203XXXX,1,Macro(dialanalog)
exten => _206204XXXX,1,Macro(dialanalog)
exten => _206205XXXX,1,Macro(dialanalog)
exten => _206208XXXX,1,Macro(dialanalog)
exten => _206210XXXX,1,Macro(dialanalog)
exten => _206213XXXX,1,Macro(dialanalog)
exten => _206214XXXX,1,Macro(dialanalog)
exten => _206215XXXX,1,Macro(dialanalog)

You can then add a couple extra rules at the bottom to handle 800 numbers and toll calls:

exten => _888NXXXXXX,1,Macro(dialanalog1)
exten => _1888NXXXXXX,1,Macro(dialanalog)
; continue on with 877, 866, 855, and 800

exten => _NXXNXXXXXX,1,Macro(dialnufone1)
exten => _1NXXNXXXXXX,1,Macro(dialnufone)

The ‘dialanalog1’ and ‘dialnufone1’ macros prepend a ‘1’ to the number that they’re calling. When all of this is done, dialing ‘2062001111’ goes out the POTS line as-is, while dialing ‘2125551212’ goes out NuFone as ‘12125551212’. Everything Just Works, and users don’t have to know when to dial a 1 and when not to. They never actually need to dial the 1 at all, although if they do, it’ll still work. And that’s what I’m aiming for–the back end is complex, because it has to interact with complex parts of the real world. The front end is dead simple, though, because I can handle all of the hard bits without bothering the user. They can just dial the phone number, and I’ll route it out the cheapest connection automatically.

Posted in , , ,  | Tags , , , , , ,  | 13 comments

OS X 10.3.3 and Clie Syncing

Posted by Scott Laird Tue, 16 Mar 2004 08:51:34 GMT

I upgraded to 10.3.3 over lunch today, and everything seemed to go well. The network browsing support in the Finder is nice, and things seem slightly zippier across the board.

It took me a couple hours to notice the first problem: I can no longer sync my palm (Sony Clie T615c) via the cradle. Something, somewhere is missing, and the palm times out without connecting to the sync software on the computer. Google is nice, but it’s worthless when you’re looking for problems in software that’s only 2 hours old.

Fortunately, the cradle problem isn’t fatal–my PowerBook is old enough that it still has an IR port, so I can use it for syncing. It’s slower, but it works well enough, and I’ve done it before, when I’ve forgotten to drag the cradle home from work. It’s aggravating, though.

At this point, I’m just counting the days until Palm introduces something exciting enough to get me to replace this old Sony. What I want is a union of the Tungsten C and the Tungsten T3. Bluetooth and 802.11, a big screen and a keyboard, and the fast CPU and big RAM that the two share.

Posted in ,  | Tags , , ,  | no comments

Hmm. Address Book syncing via ab2vcard?

Posted by Scott Laird Thu, 11 Mar 2004 09:20:42 GMT

I had a weird thought a couple hours ago. Suppose you set up two Macs with ab2vcard, both syncing to the same Subversion repository, and then added a bit of extra magic to handle conflicts and deletes. Then hand conflicts and remote updates off to Address Book and let it handle it on its own (that was one of the improvements in Panther–the Address Book has a merge dialog).

Wham, instant version-controlled shared address book. Have a nice day.

Of course there are a few little details that need to be handled. Most of them involve tracking deletions and doing the Right Thing. ab2vcard’s current deletion tracking is hokey, but it works when it owns the vCard repository. In a shared environment, you need better logic. It’s not rocket science, though.

Posted in  | Tags , ,  | 3 comments

The point of PDAs

Posted by Scott Laird Tue, 10 Feb 2004 11:09:35 GMT

As part of my current organization kick, I’ve been thinking about what I want in a portable computer (PDA, handheld computer, smartphone, tablet PC, whatever). I’m a geek and a bit of a gizmo freak, but I try to be at least a bit practical–do I really want a Linux-based PDA that’s going to need ongoing sysadmin work just to be usable?

My experience with the Windows-based Motorola MPx200 smartphone rammed home another point–an organizer that can’t sync reliably is useless.

Finally, playing with Life Balance and ReaderWare has demonstrated that organization applications with both a PDA and a desktop component can be more useful then either component would be on its own.

Three simple points that most of us already know, but they’re easy to forget when faced with gratuitously cool new hardware. In short, the purpose of computers is to run software, and the point of software is to give you access to information, and if your handheld can’t run your software, or it can’t access your information, then it’s really just a cool paperweight with a nice display.

Since I’m running OS X on my primary computer, it stands to reason that I’d be best-served by a handheld that syncs with the Mac, and has as many applications as possible that can sync application-specific data between the Mac and some PDA application. And, since I want to run Life Balance, I’d be best served by a handheld that can actually run it. In every case, the best choice is some flavor of Palm, either a traditional one from PalmOne, a Sony Clie, or a PalmOS-based phone.

Now that I’ve finally answered the question “what do I want a PDA for?” I can stop looking at PocketPC handhelds, Zauruses, and whatever else is out there, because they aren’t going to do what I want them to do. It’s a nice realization, and I guess I have Motorola to thank for that, mostly. Who knows where I’d be now if they could build a battery that worked :-).

Now, if only PalmOS 5 didn’t suck so bad…

Posted in  | Tags , , , ,  | no comments