Introduction

Event Reminder is a Macintosh OS X application that will remind you of important events such as birthdays and anniversaries in an easy to view table. You can use events from a text file, or Apple's Address Book and iCal applications. To Do items from iCal, or a text file can also be included. Event Reminder can calculate ages and will countdown days to an event. The application can display all holidays for any year you choose and it includes both a yearly and a monthly perpetual calendar. Event Reminder is extremely customizable.


Contents of this document

System Requirements

Event Reminder requires Macintosh OS X 10.4 or higher and is a Universal Binary--it will run natively on both PowerPC (PPC) and Intel Macs.

Cost

Event Reminder is donationware.

This means that while this version is completely functional and you are free to use it, please consider sending me a donation.

I have worked countless hours on making the program and it would be nice if I could be compensated for my efforts. Such donations would help encourage me to continue to work on the program, since I could certainly fill my time with activities other than programming. Donations can be made through PayPal on the web site for this program. No amount is too small.

If you don't want to make a donation, why not consider purchasing one of my screensavers which you can find at

http://www.supermagnus.com/mac/

Alternatively, at least consider letting me know what you think of the program. While I'd obviously prefer positive comments over negative ones, I'll take both. Thank you!

Upgrading from a previous version

Users who are upgrading from version 1.x to 2.x (x means that it could be any number) will have to set their preferences again. If you have any 2.x version and are upgrading to a newer version you do not need to reset your preferences--they will be updated automatically.

Important: If you delete an older version of Event Reminder and you are using a text file as a data source, make sure you don't accidentally delete your text data file in the process. Additionally, those of you who have gone into the "guts" of the program to modify it will need to copy those modifications to any new version; otherwise they could be lost. As of version 2.6, Event Reminder will warn you that you are using a new version so that you don't accidentally delete any part of the program that was customized on a previous version.

Installing Event Reminder

To install Event Reminder, simply drag the Event Reminder folder to your Applications Folder.

Basic Use of Event Reminder

To use the program, double click on the Event Reminder icon. To prevent Event Reminder from fully launching, hold down the Shift key while it starts up. Once the "Starting..." text is displayed on the splash screen, Event Reminder will immediately quit if the Shift key is held down. This may be useful if you have the program set to launch on startup but end up starting your computer more than once per day. You can also prevent specific data sources from being loaded if you hold the shift down after the "Starting..." text has disappeared but before the data source has started to load. The timing of this can be tricky, though.

After the splash screen loads you should see a window open that looks similar to the Figure below. Four columns are displayed by the program. The first (left) column displays the date of the event. The second column displays one of several things depending on what data source(s) are chosen. This can include the name of a person as well as their calculated age, the name of an iCal calendar, or can even be blank. The third column lists the name of the event, such as "Birthday" or "Rent Due". If To Do items are displayed, the source of the To Do item may be displayed in the second column and the actual To Do Item will be displayed in the third column. The fourth column displays the number of days left until the event occurs. If the event is happening on the same day that the program is launched it displays "Today" instead of a number.


Each column, as well as the window itself, is resizable and these settings are automatically remembered between each launch of the application

The bottom of the Event Reminder window has several icon buttons (above Figure), although you may not necessarily see every icon available when you run the program.

If the auto-quit timer is on you will see the stopwatch icon and the time left until quitting. Otherwise these will not appear. The stopwatch button is used if you wish to temporarily turn off the auto-quit feature. The next time you run the program it will be on again unless you change the setting in your preferences. Auto-quit is also temporarily disabled if you go to the preferences menu.

If the error window button appears it means an error has occurred during the operation of the program. To see a description of the error you can click on the button to view a small window containing a list of any errors encountered.

The ignore button allows you to ignore selected items and prevents them from being displayed in the program. It does not in any way delete the item from its original source. It should also be noted that an event is ignored only for a particular date, so if you ignore someone's birthday this year it will still show up next year. To use the button, highlight the item(s) you wish to ignore and then press the ignore button. The next time Event Reminder is launched the events will not be displayed. As of this writing, there is no undo option for ignoring an event, although if it truly is an important issue please e-mail the author for assistance in undoing it (you can simply find the item in the Preferences file and delete it).

The reload button allows you to reload data from whatever sources you have selected in your preferences. It may be useful if you change some information in your data source and wish to reload the new information into the Event Reminder table.

If left running all of the time, the program will automatically reload the data shortly after midnight. If you wish to have the program start automatically every time you turn on or restart your computer, you can make it one of the Login/Startup items which you can set from the System Preferences.

Displaying Holidays

A useful feature that Event Reminder offers is the ability to show all holidays for a specific year. This may be useful if, for example, you want to know when a certain holiday occurs when making long-range plans.

To use the feature, simply click on the Holidays (cake) icon. A small window will appear where you can enter a year. Once you press the "Go" button, Event Reminder will display all of the holidays for that year in the Event Reminder window. The holidays displayed are those chosen using the Holidays Preference (described later in this document).

Yearly and Monthly Perpetual Calendars

Both a yearly and monthly perpetual calendar are available in Event Reminder. These can be found under the "File" menu. Any year between (and including) 1 and 9999 is allowed. There are limited options for resizing the window. Additionally, the current day will be highlighted in red.

Exporting Table Data

As of version 2.8, Event Reminder offers the option to Export Table Data. The data will be saved to a text file on your Desktop. You have the option to choose a delimiter to separate the columns from one another. Using a delimiter could be useful if you want to import the data into a spreadsheet program such as Microsoft Excel. You can also choose to align the columns--doing so makes it easier to read when opening the text file, but it does add extra spaces around the text, which may not be ideal if importing the data into a spreadsheet program.

Printing Table Data

The ability to print the table data was added in version 2.8. Printing should be straightforward. Event Reminder automatically scales the table so that it fits across a single page (horizontally). However, if you have many rows in the table, the rows might spill onto more pages. It is also important to note that Event Reminder will print the table data exactly as it appears in the table. For example, if some text in one column is cut off by the column to the right, it will also be cut off when printed.

Preferences

The preferences can be accessed through the Preferences menu. There are several panes which can be accessed by clicking on the associated icon at the top of the preferences window. Some have many possible settings and others have just one. They are all explained below. It should be noted that almost all changes in the preferences only take place when the application is quit and then re-launched.

Look Ahead Preference

The "Look ahead" preference allows you to set the number of days ahead in which you want Event Reminder to display events. You can choose anywhere from 0 (the current day only) to 100 days into the future.

The option to "Show missed events since last launch" allows you to show events that you might not have seen if you only run the program occasionally. This option will mostly likely be useful for individuals who do not use the program every day or stop using it for a period of time, such as a vacation. In fact, unless you use Event Reminder only intermittently, having the "Show missed events..." optoin on will probably not change how the program behaves. The way this option works is explained in detail below.

The first thing is to define a "missed event":

A "missed event" is an event which was never displayed to a user.

Using the figure below, assume that the Event Reminder program is run at point A (January 1) and then you go away on vacation for 10 days so the next time you run the program is at point D (January 11). Also assume that you have set the "Number of days to look ahead" preference to 7 days. This is represented by point C (January 8) in the figure. Thus, when the program is run at point A, the program will warn you about every event from point A through point C. When the program is next run at point D, everything between points C and D would be a "Missed Event" since the program has never displayed those events to you even though they have already passed.

A-D = number of days between running the program (10 days)
A-C= Number of days warning (7 days)
A-B = Memory Threshold (5 days)
B-C = "forgot" period
C-D = "missed" period

Now it is time to define the "Memory Threshold":

The Memory Threshold is the number of days a user can remember an event after being warned about it.

This additional feature was added because it is quite possible that you had been notified about an approaching event, but since it was still too far into the future you forgot it and weren't able to act upon it. In those situations, it might be useful to be reminded about the event even if you had been notified about it and it has already passed.

For the purposes of this example, assume you can only effectively remember an event for 5 days after you had been warned about it. After five days, even if you had been warned of the event 5 days ago, it is likely that you have forgotten about it and may need to be reminded that it has passed. In the Figure above, this value should be point B. Thus, if you run the program at point D, then everything from points B-C could be events that you "forgot" since you had been warned about them at some point but may have since forgotten them. Everything from points C-D would be events that you "missed" since you were never warned about them. The assumption is that the events from points A-B (i.e. the limit of your "memory threshold") were fresh enough in your head after the program had been run that you were able to act upon them without forgetting.

By varying the different settings, different results can be obtained. For example, if you were to set the Number of Days Warning AND the Memory Threshold to 7, you are basically telling the program that you never forget about an event once you have been warned about it. In this case you would only be warned of events that you had truly missed (i.e. never displayed in the program). If you set the Memory Threshold to 1, then the program will warn you about every event that has occurred since the last time you ran the program in addition to warning you about the future events as it normally would.

You can't set the "Memory Threshold" to zero. That would imply that you can't even remember events that are occurring on the same day you are told about them by the program.

As was mentioned above, the situations in which this would be invoked are rare since most users would probably run the program every day or every few days. So even if the settings are "on", nothing will be different about how the program runs.

Note: Why bother doing it this way? There is more than one way to solve this problem, and none seem to be wholly effective. A different possibility would be to just warn about events within a certain time frame from when those events having passed, such as two weeks. The result of this would be that if you hadn't run the program for 4 months, for example, it would only tell you about missed events that had occurred in the past two weeks and therefore you might never see some events that could be important. The way this program is set up you should never miss an important event if you configure the program according to your needs.

Auto-Quit Preference

The auto-quit preference allows you to set the program so that it will automatically quit after a certain period of time.


You can choose anywhere from 15 seconds to 1 hour. If you have this set to Off then the program will remain active until you choose to quit it.

There is also a separate option for the program to behave differently if there are no events to display when the program is launched. If you choose to have the program quit immediately it will quit after 3 seconds (enough time to turn off the timer if you need to access the preferences).

The other option is to "Follow auto-quit preference" which means that it will simply follow the settings that it normally follows when there are events to display.

Appearance Preference

This preference option allows you to set a few aspects of how the program should look.


The text size option allows you to display the events with regular-sized text or small text, which might be useful if you have a small screen. You can also format the date in multiple ways, using different combinations of the full name or abbreviation of the month and day of the week. This should provide multiple options for you to customize the display to suit your needs.

Transparency for the main window can be set using the slider on the display preference pane. The main window will change as you move the slider so that you can see the level of transparency.

You can also choose how the time left should be displayed. The default is to show it only in days, but you can also show it in days and months. If you choose this option, anything under 30 days will be shown as days only. More than 30 days will be displayed as months. For example, 45 days will be displayed at "1.5 months".

An example of how the main window can be customized using the Display preferences can be seen below (showing the small text size):


Holidays Preference

The holidays preference allows you to display specific holidays or significant events that have been "pre-programmed" into Event Reminder. This allows for holidays/events to be displayed that might be more difficult to enter yourself, such as those that occur on certain days of the week and not a specific date. However, it is also possible for you to enter your own events, which will be described later in this section.


There are multiple ways to add holidays to Event Reminder already, such as setting them up through iCal, but the Holidays feature in Event Reminder allows those who are using simple text files to also display holidays. Many holidays recur based on specific rules, such as the third Monday every January, and the Holidays option with Event Reminder supports such rules.

Holidays are organized by category, and to have Event Reminder display a particular category you need to add it to the "Holidays to display" list. Once you have a category in the "display" list, the holidays in that category will appear at the appropriate times. The name of the holiday will appear under the "Event" column, and the category for the holiday will appear in square brackets under the "Name" column.

Displaying holidays in this manner should be simple and straightforward.

More holidays will be added as time allows. If you (the user) are able inform me of how to calculate the appropriate holidays for other countries or religions, then I could add them to the program and release them for everyone to use. You could also send me specific holiday files, as discussed below.

Holidays/events currently supported by Event Reminder

Category
Click to view
U.S. Holidays
View List
Notable U.S. Dates
View List
Canadian National Holidays
View List
Canadian Province and Territory Holidays
View List
Jewish Holidays
View List
Christian (Western) Holidays
View List
German (Deutch) Holidays
View List
Austrian (Österreich) Holidays
View List
Swiss (Schweiz) Holidays
View List
United Kingdom (UK) Bank Holidays
View List
Moon Phases
View List

Adding your own holidays / events

While the holidays and events offered by Event Reminder may be useful to many people, you may wish to add your own events to the program and have them listed by categories as well. If so, it is possible to create your own holiday file(s) for Event Reminder to use. This capability is really meant for "power" users. If you don't like editing files then you would probably be best off trying to set up your events of interest in a program like iCal. Nevertheless, if you do choose to make such a file, please share it with the author so that it can be distributed for others to use as well. Event Reminder stores the holidays in special files. Holidays are grouped in categories. The categories are what are selected in the Event Reminder Preferences window, and each category usually will include multiple events or holidays.

Location of the holiday file data

The holiday files are actually located inside of the Event Reminder application. To access the files, control-click (or right-click with a two-button mouse) on the Event Reminder application icon and choose the option to "Show Package Contents". This opens up a hidden folder inside of Event Reminder where the guts of the program are stored. From there, open up the "Contents" folder and then the "Resources" folder. You should then be able to find a folder called "Holidays". That is where the files are kept. Open the folder to look at the holiday files.

Structure of a holiday data file

All of the data files must be plain text files (not RTF files). They can have any name, since the name of the file is actually ignored by Event Reminder. However, it would make the most sense to give the file a name that describes the category well. Files should generally contain a single category, but a category could be made up of multiple files, and multiple categories can be in the same file.

The first two lines of each text file are ignored by the Event Reminder program, and the last line of the file must contain an event. If the last line of the file contains something other than an event, such a blank line, then all events in that file will likely be ignored by the program.

Each event line in the file should contain 5 items, each separated by a comma, in the form of:

CATEGORY PLURAL, CATEGORY SINGULAR, NAME, DETERMINATION, DATE

The "Category plural" is the category name read by Event Reminder and displayed as an option in the Preferences window. The "Category Singular" is the singular form of the category that is used to display in the main Events Reminder window. The two can be completely different if desired. The Event Reminder application groups all events by the "Category plural" names. Thus, if two "Category Plural" names are spelled even slightly differently, such as "U.S." and "US", then the two categories will be considered distinct.

The "Name" field is the name of the event or holiday and needs no further explanation. The "Determination" field tells Event Reminder how the event will be determined. There are 6 basic options: static, daily, weekly, monthly, yearly, and program. They must be spelled exactly that way for Event Reminder to recognize them. The "Date" field gives specifics about when the event actually takes place. If anything on a specific line was formed or written incorrectly, the specific line for that event will be ignored by the program, so it is important to ensure accuracy when creating the events.

  1. Static: Static events were given that name because the do not change. A static event occurs on the same day every year. To define a static event, simply write static in the "Determination" column" and then in the "Date" column write the event in the form of
    month-day
    such as
    4-3
    representing April 3.
    Some events might only occur on a specific year. If that is the case, then write the event in the form of
    month-day-year
    such as
    4-3-2004
  2. Daily: Daily recurring events can be added to this file, although it probably won't be very useful. Nevertheless, to add a daily event, add the word "daily" in the "Determination field" and then write the word "EACHDAY" in the "Date" field.
  3. Weekly: Weekly events are events that occur on the same day, such as Wednesday, each and every week. To add such an event, type "weekly" in the "Determination" field and then in the "Date" field enter "BYDAY=" followed by a two character abbreviation for the day of the week. There should be no spaces added. For example, every Friday would be written as:
    BYDAY=FR
    The abbreviations for the days of the week are as follows:
    SU = Sunday
    MO = Monday
    TU = Tuesday
    WE = Wednesday
    TH = Thuesday
    FR = Friday
    SA = Saturday
  4. Monthly: Monthly events are those that occur every single month either on a specific date, such as the 10th of each month, or on a specific day, such as the third Thursday of every month. To add a monthly event, type "monthly" in the "Determination" field. If you wish to have a monthly event that occurs on the same day each month, type "BYMONTHDAY=" followed by the date. For example, the 10th of every month would be written as:
    BYMONTHDAY=10
    If you would like the monthly event to be displayed in the other manner, then write "BYDAY=" followed by a number and then the day of the week. Numbers can be as follows:
    1 = first
    2 = second
    3 = third
    4 = fourth
    -1 = last
    The days of the week are based on two letter abbreviations as descibred in the "Weekly" section, above. To have en event display on the second Tuesday of each month you would write:
    BYDAY=2TU
    To have an event display on the last Sunday of each month you would write:
    BYDAY=-1SU
  5. Yearly: Yearly recurring events may be the most useful for true holidays. These events are written slightly different from the other ones since both a month and a day need to be specified. Similar to the other events, typing "yearly" into the "Determination" field will let Event Reminder know that it is a yearly event. In the day field, the event should be written as "BYMONTH=" followed by the number of the month (January = 1), then a semi-colon (";"), followed by "BYDAY=" and then the day of the week for the event as outlined in the "Monthly" section, above. For example, an event that occurs on the 3rd Thursday in August would be written as:
    BYMONTH=8;BYDAY=3TH
  6. Jewish: The Jewish calendar is determined based on complex calculations dealing with phases of the moon, etc. Even though Jewish holidays seem to fall on different days in the standard (Gregorian) calendar, they actually fall on the same days each year in the Jewish calendar. You can add other events based on the Jewish calendar by adding the word "Jewish" in the "Determination" field and then the specific day of the event in the "Date" field, in the form of:
    Month-Date
    Both the month and the date should be a number. For example, the 15th day of Nissan (which is the first month) would be written as:
    1-15
    You can look at the Jewish Holidays holiday file (included in Event Reminder) for more examples.
  7. Christian: Christian Holidays are most often calculated in relation to Easter. However, Easter varies based on a complex schedule which must be calculated for each year. Event Reminder can automatically calculate Easter. To add other events in relation to Easter, simply write the word "Christian" in the "Determination" field and in the Date field enter how many days before or after Easter the holiday or event should be added. This is done by writing either "before" or "after", followed by a semi-colon (";") and then the number of days. For example, 10 days after easter would be written as:
    after;10
    Whereas 20 days before Easter would be written as:
    before;20
    You can look at the Christian Holidays file (included in Event Reminder) for more examples.
  8. Custom Scripts: Event Reminder has the ability to run simple AppleScripts to calculate Events or determine To Do items. This feature was added in version 2.7 of the program. This means that if you know AppleScript you can write a small program to calculate an event that occurs on a complex schedule and still have it get added into Event Reminder. There are just a few things you need to know to make it work. You must let Event Reminder know that you are going to use a custom script by adding the word "custom" in the "Determination" column. All custom scripts must be stored within the Event Reminder application in a special folder called "customScripts" located within the "Resources" folder of the application "package". In the "Date" column of the holiday file, you must first tell Event Reminder what the name of the script file is (which should be located in the "customScripts" folder) as well as the name of the actual method/handler you wish to call, separated by a semicolon. For example, if you have a script file called "scriptFile" and a method called "calculateDate" (which would be based on the "on CalculateDate()" line in the script) you would add "scriptFile;calculateDate;3" to the Date column. The last item you need to add to the "Date" column, also separated by a semicolon, is the number of times the script should repeat itself. This is important because Event Reminder sometimes needs to calculate dates not only for the current year, but also for the previous or the following year as well. By adding the number 3 in the Holiday File line, you are telling Event Reminder to pass all three years (last, current, next) to the script. If you are adding a "To Do" item, you probably only want the script to run once, so you could enter a 1 on the line.

    The final things you need to know deal with how to form the script method/handler. The method should be written so that it takes as input three items: the year it should use, the Holiday Category Name, and the Holiday Name. It must then return an AppleScript list "{ }" containing a single event to return to the Event Reminder application. The list must contain three items: A date that Event Reminder should use to add to the program, the Holiday Category Name, and the Holiday. You can modify the names to anything you want inside of the method and return any text you want back to Event Reminder.

    While this may sound confusing, simply looking at a few examples provided with Event Reminder should make it more clear. Two examples are included which are used to calculate Canadian Holidays. One other example is also included which checks for how much disk space your computer's trash can is occupying and if it contains more than 10 MB of files it adds a "To Do" item to Event Reminder to empty the trash. It serves no useful purpose but does demonstrate the concept of how the custom scripts could be used. To actually make it work, you need to add the following line to any of the Holiday Files (or create a new file):

    Trash Demo, Trash Demo 1, Trash Demo 2, custom, trashWarningDemoScript;trashWarningDemo;1

    The "Trash Demo 1" and "Trash Demo 2" are simply place holders, since the script will replace them with its own text. You will still need to choose the holiday catgory (in this case "Trash Demo") before it will load, just like all other holidays.

  9. Program: Some events follow such a complicated schedule that they can't easily be added to Event Reminder in any normal way. Easter is an example that is not straightforward to determine. While it is possible to simply enter each individual year as "static" events, it is also possible to make a small program to determine the occurence of an event on each year. Unfortunately, you as users don't have access to this option since the event is actually hard-coded/programmed into the Event Reminder application. However, by adding this option, user who don't want to show an event that is programmed in can simply delete the line in the holiday file and it won't be displayed anymore.

Data File Preference

A text file is one of the possible sources of data that can be used with Event Reminder. The text file can include events that occur on a specific date as well as "to do" items.

The preference options

If the "default directory" in the preferences is selected, it means that the data file must have the name "Event Reminder Data.txt" and must be located within the same directory as the Event Reminder program. Otherwise, a data file can be selected with any name and any location. It is advisable to move the data file to some place in your personal documents folder. This will increase the chances that the data file will be backed-up and it will also prevent it from being lost in the event that the Event Reminder program is later removed.

If there are any errors in a specific line of data it will be ignored and not added to the list. If that occurs a message will be displayed in the error window.

If you wish to check your data file to see if there are any obvious errors in it, simply click on the "Verify" button. If any errors are found Event Reminder will display them for you.

The data file

The data file should be a plain TEXT file (not a rich text format, or rtf, file). The format for this text file is what is known as a comma-separated values (CSV) file, where data elements are separated by commas and one event is on each line. To see what this means simply open up the data file contained with the program. How to edit it should be immediately apparent.

The first two lines of the data file are not read by the program. Data must always be in the format of
DATE, NAME, EVENT
with each one on its own line. If there is no name then a comma must still be in place (such as DATE , , EVENT)

Events

Because the program can handle yearly recurring events, no year is necessary. However, if a year is added, the program will calculate the number of years that have passed since that time and will display the number in parentheses next to the name. This is probably most useful for birthdays (to determine age) and for anniversaries.

The day and month (and optional year) can be separated by "-", "/" or even " " (a space). If the date is written as all numbers, it must be in the order of Month/Day or Month/Day/Year such as "3/15" or "3/15/1999".

The month can also be written with a standard three letter abbreviation (e.g. "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", Dec"). If that is the case then the month can either be first or second, with the year optionally added third.

All of the following lines represent some of the valid ways to encode the data (assuming the date of March 15):

3/15,        John Doe,  Birthday
3-15,        John Doe,  Birthday
Mar-15,      John Doe,  Birthday
15-Mar,      John Doe,  Birthday
15-Mar-1999, John Doe,  Birthday
3-15-1999,   John Doe,  Birthday
3 15,        John Doe,  Birthday
Mar 15 1999, John Doe,  Birthday

Additionally, there can be spaces or tabs between the columns (easier to read if editing the data in a text editor), but each must be separated by a comma.

The events in the file can be in any order because the program will sort them. However, it is probably easiest from a user's point of view to try to keep the dates in chronological order, starting with January 1 and ending with December 31, as this will make future editing easier.

Additional Recurring Events

As of version 2.8, Event Reminder can handle a few other types of recurring events aside from the simple once-per-year events described above. For a general idea of how these events work, you can also refer to the subsection "Structure of a holiday data file" under the "Holidays Preference" section. A brief description of how to create these type of recurring events is below.

  1. Daily: A Daily event recurs every single day without ending. To add such an event, add the word "daily" in the "date" column, followed by a semicolon and then the word "EACHDAY". Make sure to use a semicolon to separate the words and not a comma. Form the rest of the line as normal, with each item such as "name" and "event" separated from each other by a comma. The "date" and "name" columns should also be separated by a comma.
    daily;EACHDAY,     John Doe,     Daily Event
  2. Weekly: Weekly events occur once per week on the same day each week. To form such an event add the word "weekly" in the "date" column, followed by a semicolon and then "BYDAY=" and a two letter abbreviation for the day of the week. For example, every Friday would be written as:
    BYDAY=FR
    The abbreviations for the days of the week are as follows:
    SU = Sunday
    MO = Monday
    TU = Tuesday
    WE = Wednesday
    TH = Thuesday
    FR = Friday
    SA = Saturday
    An example of such an event would be:
    weekly;BYDAY=FR,     Jane Doe,     Celebrate the beginning of the weekend
  3. Monthly: Monthly events are those that occur every single month either on a specific date, such as the 10th of each month, or on a specific day, such as the third Thursday of every month. To add a monthly event, type "monthly" in the "date" field, followed by a semicolon If you wish to have a monthly event that occurs on the same day each month, type "BYMONTHDAY=" followed by the date. For example, the 10th of every month would be written as:
    BYMONTHDAY=10
    If you would like the monthly event to be displayed in the other manner, then write "BYDAY=" followed by a number and then the day of the week. Numbers can be as follows:
    1 = first
    2 = second
    3 = third
    4 = fourth
    -1 = last
    The days of the week are based on two letter abbreviations as descibred in the "Weekly" section, above. To have en event display on the second Tuesday of each month you would write:
    BYDAY=2TU
    To have an event display on the last Sunday of each month you would write:
    BYDAY=-1SU
    Two examples of how to write this in the Event Reminder data file are below:
    monthly;BYMONTHDAY=5,     Jane Doe,     Celebrate the 5th of each month
    monthly;BYDAY=1TU,        John Doe,     First Tuesday of each month event
  4. Yearly: Yearly recurring events may be the most useful for true holidays. These events are written slightly different from the other ones since both a month and a day need to be specified. Similar to the other events, typing "yearly" into the "date" field, followed by a semicolon, will let Event Reminder know that it is a yearly event. Then add the actual event by typing "BYMONTH=" followed by the number of the month (January = 1), then a semi-colon (";"), followed by "BYDAY=" and then the day of the week for the event as outlined in the "Monthly" section, above. For example, an event that occurs on the 3rd Thursday in August would be written as:
    yearly;BYMONTH=8;BYDAY=3TH,     Jane Doe,     Third Thursday in August Event
To Do items

As of version 2.6 of Event Reminder, To Do items can also be added to the text file.A To Do item should be considered in a different manner than an event. An even occurs on a specific date, whereas a To Do item is something that could technically be done at any time. Event Reminder supports three types of To Do items:

  1. A To Do that is not attached to any specific date; it should always been shown until it has been done.
  2. A To Do that is attached to a specific date, meaning that it should be done at any time up until a specified due date. However, the item will continue to be displayed even after the date has passed since it must still be done.
  3. A To Do that must be done by a specific date and which expires after that date. This means that after the specific date, the To Do item should no longer be displayed regardless of whether it has been completed.

To create a To Do item that has no specific date, simply list "nodate" instead of date" and "todo" for the name. For the actual To Do details, that should be entered as the Event. When the program loads the To Do item, it will be shown at the top of the Event Reminder window without any date associated with it.

To create a To Do item that is associated with a specific date, you must list a full date (including year) in the date column. A year must be listed since a To Do item should be associated with a specific due date; otherwise you should enter it as a To Do item without any date attached. The actual To Do description should be in the third column.

The final To Do item has a specific date attached but "expires", meaning that it won't be shown after the date entered. The date must include a year. Instead of typing "todo" in the Name section, you must enter "todoexpire" to let the Event Reminder program know that this To Do should expire. The actual To Do description should be in the third column.

All of the following lines represent some of the valid ways to encode the To Do items in the data file (these can be interspersed with the Events, as shown above):

nodate,       todo,         Make the bed
3-15-2008,    todo,         Work on novel
June 25 2007, todo,         Birthday
12-Dec-2006,  todoexpire,   Finish the milk

Address Book Preference

The Address Book can be used to store contacts, birthdays, and other important events for individuals, and these birthdays and event can be displayed by Event Reminder. Users of OS X 10.2 will be able to load only birthdays from the Address Book application, whereas those using 10.3 or higher will be able to include birthdays and any other custom events that have been added.


If you set the "Load birthday from Address Book" preference to be on, Event Reminder will launch Address Book to extract the appropriate upcoming birthdays. You can choose to quit the Address Book program after loading the events, or to leave the program open after loading the events. Similar to the text file, the age will also be calculated and displayed in parentheses next the the person's name.

iCal Preference

Event Reminder can import Events and To Do items from Apple's iCal application.


iCal Events

If you choose to load Events from iCal, Event Reminder will launch iCal to get the events and then either quit iCal or leave it open, based on the chosen preference option. In the Event Reminder preferences you can select which calendars you would like to use for Event Reminder. The list of all available calendars is displayed in the table labeled "All iCal Calendars". The calendars which Event Reminder will display are in the table labeled "Calendars to display". To add a calendar to the display list, select the calendar in the "All iCal Calendars" table and then press the right arrow button. If you wish to remove a calendar from the display list, select the calendar in the "Calendars to display" table and press the left arrow button. Doing this will only remove the calendar from Event Reminder's listing and does not in any way modify the iCal calendar itself.

Events displayed in Event Reminder that come from iCal are shown in the "Event" column and the name of the calendar from which it came is displayed in square brackets in the second column from the left.

iCal To Do items

If you choose to load To Do items from iCal, Event Reminder will launch iCal if it is not already running and then obtain the To Do items. To Do items will be displayed in the third column, whereas the second column will note the iCal calendar from which it came. If no due date exists for the To Do item, then it will be displayed at the very top of the list. There will be no associated date or number of days left. If a due date does exist then it will be displayed in chronological order in the list of events based on the due date. Since a To Do item does not occur on a specific date, it will continue to be displayed until it has been checked off in iCal as being completed. Thus, aT o Do items whose due date has passed will still be shown. Additionally, To Do items that occur beyond the number of "Look Ahead" days will be shown at the bottom of the list with a ">" (greater than) symbol shown with the maximum number of days set in the preferences.

Further Customization

Multiple aspects of Event Reminder can be customized.

The appearance of the program, including font size, date format, and window transparency can be controlled via the preferences. Dates can be added via multiple methods (iCal, address Book, etc.), but even a plain text file can include both events and to do items. It is also possible to include recurring events, based on complicated schedules, via the methods outlined under the Holidays section.

Almost all of the text in Event Reminder can also be modified. This might be useful for translating it to another language (if you do, please send me the translations so I can distribute it to others as well), or customizing the text to suit your needs better. The text can be found within a plain text file inside of the Event Reminder application. Simply control-click (or right-click with a 2-button mouse) on the application and choose the option to "Show Package Contents". Inside, go to the Contents/Resources/ folder and find a file called "translationText.txt". This is the file to edit to change the text of the program. The variable names the program uses are to the left--do not modify those or the program may not function properly. Separated from the variables names is a bar ("|") and to the right of the bar is text that can be edited or modified. The only important thing to be aware of is that Event Reminder was set up to only allow a certain amount of space for each item of text. If the text you enter is too long for that space, it might appear to get cut off. Otherwise, feel free to customize the text any way you want.

Legal Disclaimer

Event Reminder is provided "as is" and no guarantee is made as to its function or any problems that occur as a result of its use.

Warranty

There is no warranty for this program.

Version History

version 2.8.10 (May 10, 2010): version 2.8.9 (February 11, 2008): version 2.8.8 (January 17, 2008): version 2.8.7 (December 21, 2007): version 2.8.6 (February 05, 2007): version 2.8.5 (September 11, 2006): version 2.8.4 (June 23, 2006): version 2.8.3 (June 05, 2006): version 2.8.2 (May 16, 2006): version 2.8.1 (December 02, 2005): version 2.8 (May 16, 2005): version 2.7 (March 28, 2005): version 2.6 (February 21, 2005): version 2.5 (December 13, 2004): version 2.4 (November 09, 2004): version 2.3 (September 13, 2004): version 2.2 (August 16, 2004): version 2.1.1 (May 25, 2004): version 2.1 (May 24, 2004): version 2.0 (April 1, 2004): version 1.6.4 (December 2, 2003): version 1.6.3 (November 24, 2003): version 1.6.2 (November 4, 2003): version 1.6.1 (October 28, 2003): version 1.6 (August 25, 2003): version 1.5.2 (June 1, 2003): version 1.5.1 (May 15, 2003): version 1.5 (April 28, 2003): version 1.4.1 (March 5, 2003): version 1.4 (March 1, 2003): version 1.3 (February 10, 2003): version 1.2 (February 3, 2003): Version 1.1 (January 24, 2003): Version 1.0 (January 12, 2003):

Other Languages

Event Reminder is currently available in two languages:

Translations

If you would like to see this program translated into a different language (and are willing to translate it), please let me know and I will let you know what needs to be done. This has already been done for the German language.

Future Directions and Limitations

From the point of view of the author (myself), Event Reminder is becoming a "mature" application. By this I mean that it has about all of the functionality that I would want in a program that is meant to be small and simple. I have added many features requested by users and it seems to work well now. There will likely be fewer versions in the future unless a compelling reason were found, such as adding a "must-have" feature or providing a bug fix.

AppleScript, for all of its power and ease of use, does unfortunately have some inherent limitations which will also likely limit the future development of the application.

I have received multiple requests for the ability to color code the text in the table, or the rows in the table, based on how close the event is to occurring. While this is a great idea, it is not possible with the current incarnation of AppleScript Studio. If that ever changes I will certainly consider supporting that feature.

Known Issues and Bugs

Several issues and problems have been identified with event reminder. These are problems to which no working solution has yet been found. If anyone experiences the similar or other problems, please report them to me so that I can try to track them down and fix them. The issues include:

AppleScript Error -- Finder got an error: An error type of -10814 has occurred. (-10814): One user reported receiving an error of "AppleScript Error -- Finder got an error: An error type of -10814 has occurred. (-10814)" when launching Event Reminder 2.3. That user was unable to load events from iCal, Address Book, or Palm Desktop, but was able to load events from the text file. Another user reported the same error with Event Reminder 2.4 Beta (on OS X 10.3.5) but noted that nothing would display until the option to load Palm Desktop data was disabled. A few users of Event Reminder 2.8.x have reported experiencing the following error: "NsReceiverEvaluationScriptError: 4(1)" when choosing menu items for Event Reminder. I have not been able to reproduce or track down the cause of this error. If you experience it and are willing to work with me to solve it, please let me know.

Holidays errors: In testing the "Holidays" feature, it appears as though it may not work if the Event Reminder program is embedded in a folder (or subfolder) that has a name longer than 31 characters. At this point I am unable to find any workaround solution to this problem. If this happens, an error will be reported that Event Reminder was not able to load the holiday files.

Non-English languages: Non-English languages may cause a problem with Event Reminder. This may be due, in part, to how AppleScript defines a word in each language. Some languages consider two words separated by a hyphen to be only a single word. Thus, the program may have difficulties loading information from the text file or from the holiday files that are included in the program. Removing the dashes in the dates may solve this problem, but it has not been thoroughly tested.

Error loading iCal event: One user reported loading birthdays from various iCal calendars. The error reported was "Error loading iCal event...". It resolved after permissions were fixed on the machine and the source of the problem was never tracked down.

Potential iCal errors: The iCal portion of Event Reminder was the most complex portion to write. Event Reminder is written with AppleScript and iCal's AppleScript interface leaves much to be desired. As such, while every effort has been made to ensure that the dates are calculated correctly, it is still possible that errors could occur under rare circumstances. Please notify the author if you think anything might be wrong. One issue that was noted is a problem where certain events might show up twice for a given day. This might occur if a recurring event is set up and then one of the events is later modified (what iCal calls a "detached event"). Additionally, due to limitations in AppleScript, the program may not be able to handle calendars beyond a certain size. If that is the case you may have to deselect it as a calendar to display with Event Reminder.

Courier Fonts: Event Reminder requires the font "Courier New" or "Courier" to be installed on your system. This should be the case by default. If it is unable to find those fonts the program will launch but you will not be able to use the Yearly or Monthly calendars--those options will be disabled.

Feedback

I would very much like to hear any feedback about problems, bugs, suggestions, complaints, etc. If you find it useful I would like to hear from you!!

If you are having problems with an aspect of the program, please give me as much detail as possible, including versions of the OS and other relevant programs, and screen shots. Also, if you are having trouble with your text file, please send me that file. If you are having a problem with iCal, please send me your calendars. The idea is for me to be able to reproduce the problem on my own machine so I can track it down and fix it.

Send e-mail to David Hanauer, david@supermagnus.com

This program can be found at http://www.supermagnus.com/mac/Event_Reminder