Sychronizing Remember? to iCal on Mac OS X
Introduction
Here was my problem:
- I use Dave Warker's Remember? application as my calendar. I've used it for years and rely on it utterly.
- After a long time as a Luddite, using only an old mobile phone of my daughter's, I succumbed to a new Nokia System 40 phone (the 3710 Fold). It's a nice phone and suits me well. One of its attractions is its calendar: I no longer have to say to people when I'm at a meeting "My diary is on my laptop; I'll let you know later."
- The totally free application SyncMate synchronizes iCal calendars with Nokia System 40 phones (among others).
- So it looked as if I had to switch to using iCal to be able to synchronize with my phone. But I didn't want to.
Here is my solution:
- With some guidance from the scripts that came with Remember?, much searching of the web, plus some trial-and-error, I wrote an AppleScript application which will synchronize Remember? to an iCal calendar.
- Now I can use Remember? as my main calendar/diary; synchronize it to an iCal calendar, and then synchronize that (via SyncMate) to my phone. A little tedious, perhaps, but worth it to be able to keep using Remember?.
Note the direction of the arrows: my script synchronizes from Remember? to iCal. New events added to iCal don't get added to Remember?.

(What if you want events added to your phone to be copied to Remember? I'm working on it...)
Issues
There are some issues, unfortunately (aren't there always?).
- Remember? and iCal have a number of differences. In particular, one of the things I like about Remember? is that you can have different kinds of occasion with different priorities, all of which you can define for yourself. iCal doesn't have this feature.
My solution: My script puts a special prefix, e.g. "B:" for a "Birthday" occasion, at the start of the generated iCal event. - Remember? doesn't have finish times for events; iCal does.
My solution: If the Remember? occasion's description starts with a hyphen followed by a 24-hour time (e.g. -17:30), my script uses that as the finish time, otherwise it gives all events an arbitrary length. - iCal has a well-known 'feature' (i.e. a bug) whereby it doesn't handle all-day events according to the ICS standard. Internally, it stores the end time of all-day events as the next day. So unless special handling is implemented, all-day events last a day too long when Apple's iCal is synchronized with some other developer's calendar system. (This is what happens on my phone using SyncMate, which at present doesn't implement a work-around for the Apple 'feature', although they know about it.)
My solution: My script makes all-day events occur between two specific 'odd' times (e.g. starting at 5:01 am) instead of being genuinely 'all day'. - Remember? doesn't support time zones; iCal does, but does not provide access to this feature via AppleScript.
My solution: Don't run the synchronization unless the computer is set to the same time zone as the one in which the Remember? occasions were created.
The Software
If it's of any use to you, you're welcome to download and use the AppleScript application -- it's freeware. I make no guarantees that it works, nor do I offer support (though you can try e-mailing me!).
To install, follow these instructions. You do need to read them!
- Download the zipped AppleScript application Sync Remember? to iCal (v1.3). Double-click to unzip. It doesn't matter where you put it.
- Download Andrew Tetley's My Progress Bar application and unzip it. (You don't need his script; it's included in my application.) A sensible place to put My Progress Bar is in the Utilities folder of your Applications folder. Don't attempt to run it; nothing appears to happen but it will be left running in the background. It will be controlled by Sync Remember? to iCal.
- You can use Sync Remember? to iCal as it is; see (4) below. However, ideally you should customize it to suit the particular kinds of occasion that you use. This is explained in the next section. I suggest you try it as it is first of all, so that you can see what it does. You need to have created a named calendar in iCal before you begin.
The first time you run Sync Remember? to iCal, it will ask you for some settings. These are then saved for the future. You can force it to ask you again by holding down the option key when you start it up. The settings are:
- The name of the calendar to which Remember? occasions will be synchronized. The calendar should already exist (i.e. you should have opened iCal and created an empty calendar with some suitable name, like "My Phone").
- Whether all day occasions should be given dummy start and end times to avoid Apple's iCal 'feature' which is explained above. If you aren't going to synchronize with another device, you can say "no". If you are, you probably need to say "yes".
- If you answered "yes" above, then you will be asked for dummy start and end times. Input them using the 24 clock in the HH:MM format, e.g. 05:01.
- The default duration of an event in minutes. If no finish time can be detected, all events will be made of this length.
- The number of months of Remember? occasions to be synchronized to the iCal calendar.
Customizing
You can, of course, make any changes you like to the script. If you can manage to speed it up, let me know. (It's particularly slow if you have an older Mac and/or a lot of occasions in Remember?.)
However, you will probably want to alter the way it handles different kinds of occasion. This is how you do it.
- I suggest you make a copy of Sync Remember? to iCal before you begin.
- Open the AppleScript Editor application. In older versions of OS X it's called Script Editor. It's usually somewhere in the Utilities folder.
- Drag Sync Remember? to iCal onto the Script Editor icon in the Dock; this will open the text of the script.
- Search for the string "= setPrefix =" (without the quotes). Even if you're not a programmer, it should be fairly easy to edit the code to fit with the kinds of occasion you use. Don't change the bit after the "else", but feel free to change or add "else if" sections. Changing 'pre' sets the prefix inserted before the description of the occasion. Setting 'pre' to null means that an occasion of that type is ignored. The long line with "(no time)" in it inserts "(no time)" when a 'dummy' all-day event is constructed, to get round the iCal 'feature' discussed above.
- Finally, save your changed version and test it.