Remind: The Ultimate Personal Calendar
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.
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.
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.
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.
Today’s modular x86 servers are compute-centric, designed as a least common denominator to support a wide range of IT workloads. Those generic, virtualized IT workloads have much different resource optimization requirements than hyperscale and cloud applications. They have resulted in a “one size fits all” enterprise IT architecture that is not optimized for a specific set of IT workloads, and especially not emerging hyperscale workloads, such as web applications, big data, and object storage. In this report, you will learn how shifting the focus from traditional compute-centric IT architectures to an innovative disaggregated fabric-based architecture can optimize and scale your data center.
Sponsored by AMD
Built-in forensics, incident response, and security with Red Hat Enterprise Linux 6
Every security policy provides guidance and requirements for ensuring adequate protection of information and data, as well as high-level technical and administrative security requirements for a system in a given environment. Traditionally, providing security for a system focuses on the confidentiality of the information on it. However, protecting the data integrity and system and data availability is just as important. For example, when processing United States intelligence information, there are three attributes that require protection: confidentiality, integrity, and availability.
Learn more about catching the bad guy in this free white paper.
Sponsored by DLT Solutions
| Making Linux and Android Get Along (It's Not as Hard as It Sounds) | May 16, 2013 |
| Drupal Is a Framework: Why Everyone Needs to Understand This | May 15, 2013 |
| Home, My Backup Data Center | May 13, 2013 |
| Non-Linux FOSS: Seashore | May 10, 2013 |
| Trying to Tame the Tablet | May 08, 2013 |
| Dart: a New Web Programming Experience | May 07, 2013 |
- New Products
- Making Linux and Android Get Along (It's Not as Hard as It Sounds)
- A Topic for Discussion - Open Source Feature-Richness?
- Drupal Is a Framework: Why Everyone Needs to Understand This
- Home, My Backup Data Center
- What's the tweeting protocol?
- New Products
- Readers' Choice Awards
- RSS Feeds
- Dart: a New Web Programming Experience
- Reply to comment | Linux Journal
11 hours 46 min ago - Reply to comment | Linux Journal
14 hours 19 min ago - Reply to comment | Linux Journal
15 hours 36 min ago - great post
16 hours 11 min ago - Google Docs
16 hours 33 min ago - Reply to comment | Linux Journal
21 hours 22 min ago - Reply to comment | Linux Journal
22 hours 8 min ago - Web Hosting IQ
23 hours 42 min ago - Thanks for taking the time to
1 day 1 hour ago - Linux is good
1 day 3 hours ago





Comments
Big fan of Remind - can I use
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
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
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
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
What a great sounding tool. I wish I had run into it earlier.
The Remind Home Page
The Remind home page is now http://www.roaringpenguin.com/penguin/open_source_remind.php.
-- David.