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.
Realizing the promise of Apache® Hadoop® requires the effective deployment of compute, memory, storage and networking to achieve optimal results. With its flexibility and multitude of options, it is easy to over or under provision the server infrastructure, resulting in poor performance and high TCO. Join us for an in depth, technical discussion with industry experts from leading Hadoop and server companies who will provide insights into the key considerations for designing and deploying an optimal Hadoop cluster.
Sponsored by AMD
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.
Sponsored by ActiveState
| Containers—Not Virtual Machines—Are the Future Cloud | Jun 17, 2013 |
| Lock-Free Multi-Producer Multi-Consumer Queue on Ring Buffer | Jun 12, 2013 |
| Weechat, Irssi's Little Brother | Jun 11, 2013 |
| One Tail Just Isn't Enough | Jun 07, 2013 |
| Introduction to MapReduce with Hadoop on Linux | Jun 05, 2013 |
| Android's Limits | Jun 04, 2013 |
- Containers—Not Virtual Machines—Are the Future Cloud
- Lock-Free Multi-Producer Multi-Consumer Queue on Ring Buffer
- Linux Systems Administrator
- Introduction to MapReduce with Hadoop on Linux
- Senior Perl Developer
- Technical Support Rep
- UX Designer
- Weechat, Irssi's Little Brother
- One Tail Just Isn't Enough
- Android's Limits
- http://www.pldhs.com/
13 min 55 sec ago - Free is costly
1 hour 29 min ago - Bought photoshop CS5 for developing a website :(
1 hour 45 min ago - Reply to comment | Linux Journal
2 hours 33 min ago - Reply to comment | Linux Journal
2 hours 34 min ago - Replica Watches
4 hours 59 min ago - Reply to comment | Linux Journal
9 hours 9 min ago - on the path to understanding
9 hours 13 min ago - As a fisher,we know that a
1 day 4 hours ago - All I Say Is Worth Share!
1 day 5 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.