Remind: The Ultimate Personal Calendar

If you have trouble remembering where you are going, this clever program can help you find your way.
PostScript and HTML Output

Figure 3. PostScript Output

In addition to issuing reminders on standard output or with pop-up windows, Remind can create high-quality PostScript and HTML calendars. The actual Remind “engine” knows nothing about PostScript or HTML. Rather, if invoked with a command-line option, it prints out reminders in a format convenient for back ends to process. The Rem2PS back end produces PostScript output (Figure 3) and rem2html produces HTML output. Remind itself can produce a passable text-only monthly calendar.

Remind uses classic UNIX pipes to communicate with back ends. In fact, TkRemind is a pure Tcl script which uses pipes to communicate with a background Remind process. In this way, all the hairy date-calculation code is contained in Remind, and the pretty GUI and formatting code in the appropriate back end. It should be fairly straightforward to write GNOME and KDE equivalents to TkRemind.

In addition to sending normal reminders to back ends, Remind can transmit “out-of-band” data which makes the back end do something magical. Currently, special mechanisms are defined for drawing moon phases and shading calendar blocks. The PostScript, Tk and HTML back ends all respect these mechanisms. Additional back ends can easily extend the mechanism for special purposes.

Francais, Español, Deutsch...

Not everyone speaks English. While you wouldn't know this from most software, things are changing and software authors are internationalizing their software. Remind is no exception; it has been translated into twelve different European languages. Unfortunately, this was done with a customized mechanism which does not recognize or respect the POSIX locale functions. You have to specify a language for Remind at compile time.

Different languages have different rules for forming plurals, expressing times and expressing time intervals. This makes simple message translation impossible; in some cases, the code for a language is specific to that language alone.

Remind has been designed so translators can port it to another language fairly easily; please see the source code for details. If anyone would like to make Remind recognize and respect the LC_* locale environment variables, that would be a great project.

The Kitchen Sink

Because I like to know when Jewish holidays fall, I included Remind functions for dealing with the Hebrew calendar. If anyone would like to contribute code for the Chinese and Muslim calendars, I'm open to input.

Two last bits of scripting. Suppose you want to be reminded of something every Friday the 13th. This does not work:

REM Fri 13 MSG Black Cat

because it would be issued on the first Friday on or after the 13th of every month. Try this instead:

REM 13 SATISFY [wkdaynum(trigdate()) == 5] MSG\
Black Cat.
The SATISFY keyword causes Remind to iterate through all possible “13ths of the month” until it hits one where the weekday is Friday. This powerful mechanism makes very complex reminders quite simple.

Finally, here's some Remind code to figure out when a blue moon occurs. A blue moon is the second full moon in a calendar month. (Blue moons are quite rare.)

FSET isFirstFull(date) \
           monnum(moondate(2, date)) == \
                monnum(moondate(2, moondate(2, date)+1))
REM 1 SATISFY isFirstFull(trigdate())
        set blue moondate(2, moondate(2,\
        trigdate())+1)\
MSG Next blue moon is [trigger(blue)]

Running this script through Remind shows that the next blue moon will take place on October 31, 2001. The one after that is July 31, 2004.

I defy you to get Microsoft Schedule to warn you of an upcoming blue moon.

And Still More...

I've barely scratched the surface of Remind. For more exciting esoteric things like system variables, priority, SCHED and WARN, TAG and DURATION, the substitution filter, safe movable OMITs, security features, the OMIT context, expressions, functions, debugging features, and so on, please download Remind. It's free—covered by the GPL—and can be found at ftp://ftp.doe.carleton.ca/pub/remind-3.0/. Although Remind is quite full of features, it's a rather slim 20K lines of code and should compile and install easily on Linux and any other UNIX-like system.

May you never forget another birthday.

David F. Skoll (dfs@doe.carleton.ca) is the founder of Roaring Penguin Software Inc., a Linux consultancy firm (www.roaringpenguin.com). He spends so much time tinkering with Remind that he often forgets his appointments.

______________________

Comments

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.

Big fan of Remind - can I use

Anonymous's picture

Big fan of Remind - can I use it with CalDav or will I have to use rem2ics as well?

Dan

The initiative taken for the

tanygeo's picture

The initiative taken for the concern is very serious and need an attention of every one. This is the concern which exists in the society and needs to be eliminated from the society as soon as possible. The people are loosing their moral while becoming modern. The society needs to be attentive that moral value.
=================================================
Personal Finance Bible

Remind

Anonymous's picture

That piece of software is worth its its bytecode-size in gold.

I´ve been configuring my calendar for about 6 hours and still finding new stuff to try out.

The only thing I´m missing is a omit for multiple days for like having holidays integrated. But maybe I will find something.

Great tool

Kenny Meyer's picture

I thought the calendar tool was good... but `remind' is actually better! It's really sophisticated (I was reading the man pages...), but you can keep it simple.
BTW this is a great HOW-TO... Thanks to your article `remind' convinces me now!

Cheers,
Kenny

Remind article

Anonymous's picture

What a great sounding tool. I wish I had run into it earlier.

The Remind Home Page

David F. Skoll's picture

The Remind home page is now http://www.roaringpenguin.com/penguin/open_source_remind.php.

-- David.

White Paper
Linux Management with Red Hat Satellite: Measuring Business Impact and ROI

Linux has become a key foundation for supporting today's rapidly growing IT environments. Linux is being used to deploy business applications and databases, trading on its reputation as a low-cost operating environment. For many IT organizations, Linux is a mainstay for deploying Web servers and has evolved from handling basic file, print, and utility workloads to running mission-critical applications and databases, physically, virtually, and in the cloud. As Linux grows in importance in terms of value to the business, managing Linux environments to high standards of service quality — availability, security, and performance — becomes an essential requirement for business success.

Learn More

Sponsored by Red Hat

White Paper
Private PaaS for the Agile Enterprise

If you already use virtualized infrastructure, you are well on your way to leveraging the power of the cloud. Virtualization offers the promise of limitless resources, but how do you manage that scalability when your DevOps team doesn’t scale? In today’s hypercompetitive markets, fast results can make a difference between leading the pack vs. obsolescence. Organizations need more benefits from cloud computing than just raw resources. They need agility, flexibility, convenience, ROI, and control.

Stackato private Platform-as-a-Service technology from ActiveState extends your private cloud infrastructure by creating a private PaaS to provide on-demand availability, flexibility, control, and ultimately, faster time-to-market for your enterprise.

Learn More

Sponsored by ActiveState