BDay

The super simple birthday and anniversary reminder program.

Main Window

BDay is a simple program to help you track birthdays and anniversaries. It runs when you start or log in to your computer, displays any events that are coming up, and then exits when you click OK. It does not hang around in the system tray or as a background process taking up your computer’s resources. If there are no events to be displayed, then you wont even see BDay run.

Download

bday-win32-2.0.exe 1.2 MB Windows self-installing executable.
bday-linux-i386-2.0.tar.gz 1.1 MB Linux 32-bit executable
bday-2.0-1.i586.rpm 976 KB Linux 32-bit executable RPM

See the all downloads page for source code, 64-bit Linux and other package formats.

Support

Support is available either via the Issue Tracker hosted at Google Code or Evan’s Software Google Group/Mailing List.

License

This program is licensed under the GNU General Public License v3.

Event Files

Events are stored in a simple text file. Each line in the text file lists one event which may be displayed. Here is an example showing a couple of events:

    1 Apr 1980 John's birthday
    25 Apr ANZAC Day

So a simple event is defined by the day, then the month (3 letters), the year and the event. The year is optional, and if defined then the number of years is displayed with the event. (e.g., John will be 29 on his birthday in 2009, so the number “29” is displayed in parenthesis after the event.)

Main Window

Lead Time

By default, events are displayed from five days before they occur. You can change this for a specific event by specifying the number of days warning after the year. For example, if you had 1 Apr 1980 10 John's birthday then on the 25th of March you would see:

main_window_lead_time.png

If you want to use a default lead time other than five days, you can change it by putting the following in the event file:

    lead time n

Where “n” is the number of days lead time you want by default. All events specified after this line will have the new lead time by default.

A Note About February 29th

If you put an event such as 29 Feb Fred & Wilma's Anniversary it will only show up every leap year. Instead, put in -1 Feb Fred & Wilma's Anniversary to display on the last day of February, every year.

See Advanced Event Formats for more details on advanced event formats.

A Day of the Week

If you want an event on, say the first Sunday of a month, then you can specify an event like this:

    Sun Sep Fathers' Day

You specify the day of the week, the month, the year if you want it, and the event.

If you wanted an event on the second Sunday of the month instead, you would specify it like so:

    Sun+2 May Mothers' Day

Again, you specify the day of the week, but this time you include a plus two to indicate you wanted the second Sunday, not the first. It is important that there be no spaces around the plus sign. (Note that “Sun” and “Sun+1” are equivalent.)

If instead, you wanted an event on the last Friday of the month, you could specify it like so:

    Fri-1 Jan-Dec Balance accounts.

So a negative number indicates the last of the specified day in the month. Likewise the second last Friday would be “Fri-2”.

Note that we also specified a range of months for this event, so the event will occur on the last Friday within the specified range (every month in this case). See Advanced Event Formats for more details on advanced event formats.

Editing Event Files

There are two event files available for editing:

User Events File
Event file for each user, only seen by each user.
System Events File
A single event file shared by all users.

You can edit these files from the Edit menu.

main_window_editing_events.png

See Events File Locations for the locations in the file system where these files are stored.

Running BDay on Start Up/Log In

Windows

Under the File menu you will see a menu item labelled, “Run on Startup”. Selecting this item will toggle whether BDay will run when the computer starts or the current user logs in.

main_window_run_on_startup.png

Linux

BDay can be run in “quick” mode in one of two ways:

  1. Running with the “-q” or
    --quick” command-line parameter.
  2. Running by calling “bdayquick”, which is a
    symbolic link to the bday main program.

In quick mode, if there are no events to be displayed then BDay will exit immediately.

You typically want to run this when the user logs into the computer. Unfortunately, this is dependant on which window management system you are using. For instance, for KDE you could put a symbolic link into the ~/.kde/Autostart folder with a command such as:

    ln -s /usr/bin/bdayquick ~/.kde/Autostart

(Depending on the distribution of Linux and the version of KDE being used, the relevant folder may be ~/.kde4/Autostart”.)

For Gnome, you must open the System Preferences or Control Centre, select Sessions and then add an entry in the Start Programs tab.

Another option is to run BDay at a scheduled time using cron. To edit your cron schedule, enter the following command at your terminal/console prompt:

    crontab -e

The following line would configure cron to run BDay at 5AM every morning, so if there are events to be displayed, they will be there waiting for you when you arrive at your computer in the morning:

    0 5 * * * bdayquick

Advanced Event Formats

Each event is on a single line, comprised of the following components:

    day mon [year] [lead_time] text

The first component is either the day of the month or the day of the
week, followed by the month. This is followed optionally by a year, and
an optional lead time, and finally by the text of the event.

Day of the Month

For the day of the month, it can be either:

Day of the Week

For the day of the week, it will be one of Mon, Tue, Wed, Thu, Fri, Sat or Sun
to indicate the day of the week, followed by either a positive or
negative number to indicate which week in the month in which the
 event occurs.

Examples:

The first Monday of the month.

Mon

Also first Monday of the month.

Mon+1

The second Monday of the month.

Mon+2

The last Friday of the month.

Fri-1

The second last Friday of the month.

Fri+2

It is important that there be no spaces between the day name and the number following it.

If you specify the fifth day of the week in a month, such as the
fifth Monday of the month, and the month only contains four Mondays in
the current year, the event will not be displayed for that year.

Month

The month is one of Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov or Dec, indicating which calendar month the event occurs.

It is possible to have an event that occurs in more than one month,
either by specifying a range, or as discreet list. For example:

An event occurring on the last Friday in March, June, September and
 December:

Fri-1 Mar,Jun,Sep,Dec Prepare quarterly reports

An event that occurs in the first day of the month for the first half of

 the year:

1 Jan-Jun This is the first half of the year

An event that occurs on the first Monday in January, February, March and
 August

Mon Jan-Mar,Aug The odd event

Again, no spaces should be between the months, only commas or hyphens.

Year

If a year is specified, then the number of years between the current
year and the year of the event is displayed in parenthesis.

Example: For the event:

    1 Apr 1980 John's birthday

In the year 2009, it would be displayed with a “29” in parenthesis:

Main Window

If you wanted an event that only occurred in a specific year, put a “+1” after the year (no spaces). For example:

    27 Dec 2009+1 Public holiday for Christmas

If you wanted an event to only occur for two years in a row, you could put a “+2”, a “+3” for three years, and so on.

Lead Time

By default, events are displayed from five days before they occur.
You can change this for a specific event by specifying the number of
days warning after the year. For example, if you had 1 Apr 1980 10 John's birthday then on the 25th of March you would see:

main_window_lead_time.png

If you want to use a default lead time other than five days, you can change it by putting the following in the event file:

    lead time n

Where “n” is the
number of days lead time you want by default. All events specified
after this line will have the new lead time by default.

Event Text

This is simply the text to be displayed for the event. It can pretty
much be anything, although it is probably a good idea to avoid starting
the event text with a number or it could get misinterpreted as a year
or the desired lead time.

Events File Locations

The location of events files depends on the operating system.

Microsoft Windows

The user events file is stored at:

C:\Documents and Settings\user\Application Data\bday.txt

Where “user” is the user’s log in ID.

The system events file is stored at:

C:\Documents and Settings\All Users\Application Data\bday.txt

A third events file is also available in Microsoft Windows, the application events file. It is stored in the same folder as the bday.exe program (usually C:\Program Files\bday”.)

Linux

The user events file is stored the user’s home directory:

~/.bdayrc

The system events file is stored at:

/etc/bdayrc

Note that BDay also creates the directory “~/.bday” to hold certain application properties.

Including Other Event Files

You can include another events file by entering the following line in one of the above include files:

    include filename

Where “filename” is the full path and name of the file to be included.

The Itch That Was Scratched

Ages ago I whipped up a little program in Borland C++ Builder to help me keep track of important dates like birthdays and anniversaries.

It proved to be a popular little program with a few of my friends and family. I think part of its charm was that entering events was as simple as editing a text file, and the fact that it didn’t hang around in the system tray, tying up resources. It did its job and then got out of the way.

Time moved on and I moved from running Windows as my main desktop to running Linux, so I stopped using BDay personally. But every now and again someone would mention what a useful little program it was, and so I wanted to give it a bit of an update, as well as make it cross-platform so I could run it on Linux and others could still use it on Windows.

This also gave me the opportunity to learn a little bit of wxWidgets, a cross-platform GUI library written in C++, but with interfaces for many programming languages.

So enter version 2, with the ability to edit files inside the program (instead of just opening notepad) and some fancier event formats like day of the week.