REMEMBER
REMEMBER
CEDAR 5.2 — FOR INTERNAL XEROX USE ONLY
CEDAR 5.2 — FOR INTERNAL XEROX USE ONLY
Remember
Release as [Indigo]<Cedar®>Documentation>RememberDoc.tioga, .press
By
 Warren Teitelman
Last edited
 By Ken Pier on March 13, 1984
Last edited by Pavel Curtis on June 11, 1984
Last edited by Rick Beach, August 15, 1984

© Copyright 1984 Xerox Corporation. All rights reserved.
Abstract: Remember is a calendar minder for Cedar. Users may enter events either from a command or a mail message that will occur some time in the future. Times for events may be given in almost any reasonable phrasing. Remember posts reminders when the corresponding time arrives as an appropriately shaped blinking inconic viewer that contains the information. Extensive user profile entries control the behavior of Remember.
XEROX  Xerox Corporation
   Palo Alto Research Center
   3333 Coyote Hill Road
   Palo Alto, California 94304


For Internal Xerox Use Only
Overview
Remember is a system for allowing the user to enter an event that will occur at some specified time in the future, and to be reminded of the event when the corresponding time arrives. The form of the reminder is an appropriately shaped, blinking, iconic viewer called a reminder notice, or simply, a reminder. The viewer contains the information associated with the event, e.g. either a text string supplied by the user, or the contents of a Walnut or Peanut message. The user can destroy the reminder notice ("I have seen it"), reset it for some future time via a menu button ("Remind me again later"), or simply turn off the blinker but leave the reminder around ("I'll get it to it soon").
Events can be entered into the system either by typing a command, for example "Call library at 4pm", "Remember to see personnel Monday", or via the Remind menu button on a Walnut message viewer or Peanut control window, or by editing a special event file. The latter technique can also be used to delete an event that was previously entered, or to change some of its parameters. In the future, we intend to integrate the reminder system with the Hickory calendar system so as to provide alternative methods for examining events. The event file is named ``///RememberEvents.txt'' by default, but this can be changed using the Remember.EventFile user profile option described below.
Background
In July, 1982, Paul Rovner sent a message to the Cedar community announcing: "Nifty Cedar application available for testing: Cedar users need never miss or be late for meetings or appointments again!!" His reminder system was a "modest (2 pages) but useful program ... that reads a text file named Reminders.txt and FORKs a process to post notices as flashing, iconic viewers at or after the specified time."
Imitation is the sincerest form of flattery, and Remember system owes a great historical debt to Paul's original efforts, although it is currently almost three times the size (not counting the fancy date and time parser which is itself larger than the reminder system), and very little of Paul's original code has survived.
Remember retains the basic idea of a process which posts notices at specified times, although there are a great variety of options associated with the posting of reminder notices, and also in what the user can do once a reminder notice has been posted. The principal difference in this system vis a vis the previous system is in the user interface, i.e. how the user enters events. In the original system, the user entered events by editing a file. Each event was specified in the file via a stylized template. Although in many cases, this template could be obtained by copying a previous entry and suitably modifying it, it still required opening the file, making the edits, saving the file, etc. Furthermore, the user had to specify the time and date of the event fully and unambiguously, e.g. May 11, 1983 10:00 am.
Remember, on the other hand, strives to allow the user to enter an event as easily and informally as scribbling a note, e.g. "Remember lunch with Larry, wednesday noon". To this end, a very powerful date and time parser has been developed. Furthermore, for electronic messages announcing Forum, Dealer, hiring meetings, etc., the user can usually enter the event by simply clicking a menu button. The corresponding reminder notice will include the contents of the original electronic message.
Entering an Event
Entering an event using the executive
Remember registers the command Remember for use in the CommandTool. For example, "Remember to meet with Ralph at 1pm" will register an event which will be posted at 1pm today (or 1pm tomorrow if it is already past 1pm today), and whose text will consist of the given string. The time of the event is obtained from the text using the Tempus date and time parser, which can handle partially specified times such as "in 20 minutes", "Thursday 4pm", "a week from tomorrow", etc. If the parser is unable to find a date and time, the Remember command will give an appropriate error message, the event can then be reentered with the time specified more fully.
If '/' appears in the command, the text of the reminder is the command line up to that point, and anything following `/' is interpreted as parameters for the reminder (see discussion of Remember Options below). For example, "Remember Dealer Wednesday 1:15pm / Repeat Weekly Duration 60" will register an event which will be posted every Wedneday at 1:15pm with duration 60 minutes.
Whenever an event is successfully registered, the event file will be rewritten so that if the user boots or rolls back newly entered reminders will not be lost.
Entering an event using the Remind menu button
Remember allows users of either the Walnut or Peanut mail system to enter an event that is described in an electronic message by simply clicking the Remind menu button. When both Walnut and Remember system are loaded (in either order), each Walnut message viewer will contain a Remind menu button. Clicking this button will cause an event to be entered the contents of whose reminder will consist of the corresponding walnut message. The time for this event is obtained by parsing the Subject field of the message using the time the message was sent as the base time. For example, if the subject is: "CSL Seminar at 1:30", then the event will be entered for 1:30 pm on the day the message was sent.
The contents of the Subject field can be augmented for the purposes of Remember by selecting additional material. This material is effectively prepended onto the Subject field for the purposes of obtaining the time. For example, if the subject of the message is: "CSL Seminar in the Commons" and the Remind button is clicked, the message window will flash "Specify (select) a time for the event". If the phrase "Thursday 2nd June at 1.30" appears somewhere in the message (or elsewhere), then selecting these characters and clicking Remind will cause the event to be entered for the corresponding time.
As with the Remember command, if '/' appears in the selected text ('/' in the Subject field is ignored), the material that follows the '/' is interpreted as parameters for the event. For example, if the subject of the message is "Rob Pike / Blit Tape 1:30 today", and the user selects: "/ LeadTime 30" and clicks Remind, then the event will be entered for 1:00pm.
When both Peanut and Remember are loaded (in either order), the Remind menu button is posted in the Peanut control window. To enter a Peanut message as a reminder, first place the selection anywhere inside of the corresponding message, and then click the Remind menu button located in the Peanut control window. As with Walnut, the contents of the selection are effectively prepended to the Subject field for the purpose of specifying the time of the event and other parameters.
"Testing, testing, one, two..."
If you want to see whether an event you entered will really be posted at the right time with all the right options, you can tell Remember to pretend its some time in the future for the purposes of posting reminders by using the PretendIts command. For example, "Remember Dealer Wednesday 1:15pm / Repeat Weekly Duration 60", followed by "PretendIts Wednesday 1:15pm" will post the corresponding reminder notice. If you destroy a reminder that was posted as a result of a PretendIts command, it is not removed from the system, since it is assumed that you were only just testing things out. However, you can remove such an event by using the Forget button described below.
If you want to see a range of events, such as all the reminders that will be posted tomorrow, you can tell Remember to pretend its some range of times in the future by using the ShowReminders (also called ShowRem) command. For example, "ShowReminders now UpTo noon Thursday" if its Tuesday morning at 9 AM will show all the reminder events (as if PretendIts had been called for each of them) from Tuesday morning at 9 AM until Thursday at 1200 hours. Or, ShowRem April UpTo May will show you all the reminders to be displayed in the month of April.
Once a Reminder Notice is Posted
As mentioned earlier, a reminder notice consists of a blinking icon. The icon will continue to blink indefinitely unless a duration has been specified for the corresponding event, in which case the icon will automatically self-destruct when the indicated interval has elapsed. The user can also explicitly destroy the icon or viewer, which also has the effect of removing the corresponding event from the Remember system (unless the event is a repeated event). In other words, if a reminder is posted which the user destroys, and then the user reboots or rolls back, the same reminder will not be posted again.
For repeated events, e.g. "Dealer Wednesday 1:15pm REPEAT Weekly", destroying the icon or viewer only affects this instance of the event; a new reminder will be posted when the next time rolls around. (However, repeated events can be removed from the system via the Forget menu button described below, or by editing the event file.)
Although most reminder icons have distinctive shapes, the underlying document in all cases is simply a Tioga document. Thus, if you open a reminder icon, you will see an ordinary Tioga viewer, but one whose second menu line contains various reminder-related operations: Blinker, Relabel, 15min/hour/day, NewTime, and Forget. The Blinker button is a toggle switch for turning on/off the blinking of the icon. The 15min/hour/day and NewTime buttons are used to reset the event for a new time as described below. The reminder can then be deleted and a new reminder will be posted at the indicated time. The Forget menu button explicitly deletes the corresponding event from the reminder system.
Blinker Toggle switch for turning blinker for icon on/off.
15min/hour/day left click = 15min, middle click = hour, right click = 1 day.     Reset the event time for t + corresponding interval, where t = MAX[now, eventTime].    If the shift key is depressed while button is clicked, event time is decremented by the corresponding amount, i.e. reset the event time for t - corresponding interval. The new time is displayed in the message window.
For example, if the reminder was posted at Wedesnday, 1pm but you were out of your office, and it is now 1:30, and you left click this button, the reminder will be reposted for 1:45. If you click the button again, it will be reposted for 2pm. Right clicking followed by middle clicking while holding the shift key down, will then reset the reminder for 1pm on Thursday. Note that you can always reset the reminder for an arbitrary time using the NewTime button.
NewTime The current selection is parsed as a time, using the current event's startTime as the base time, and the event is reset to the new time.
Forget remove this event from the Remember system. Note that destroying the viewer or icon also forgets the event except if it is a repeated event. The Forget button will forget repeated events. Right-clicking Forget will also destroy the viewer.
User Profile Options
Remember.Keywords: TOKEN ← NIL
The Remember system recognizes a variety of parameters in connection with the posting of a reminder notice, such as Duration, Repeat, IconFlavor, etc. These are listed and explained in the section on Reminder Parameters below. However, typically the user does not specify such parameters explicitly, i.e. by typing or selecting them when an event is entered, but instead specifies them implicitly by the appearance of various keywords in the text of the event. These keywords are defined via the Remember.KeyWords entry of the user's profile. Whenever a keyword is encountered in the text for an event, the corresponding default parameters are implicitly specified, i.e. will be used unless the parameter is also explicitly specified in the event. For example, including in the Remember.KeyWords entry in your profile: "Meeting: Duration: 60, IconFlavor: Meeting" means for each event containing the word `Meeting' (where containing means in the case of an exec command that the word appears in the command line, and in the case of an event entered via the Remind button, that the word appears either in the Subject field of the message, or in the selected material), use a Duration of 60 minutes and the IconFlavor Meeting, unless of course these parameters are also specified explicitly via the '/' mechanism.
Below is the Remember.KeyWords entry contained in Remember.Profile. It is intended that the user add to, delete from, or otherwise modify this entry to suit his own tastes.
Remember.KeyWords: "
Meeting: Leadtime: 15, IconFlavor: Meeting, IconLabelType: Prev
Attend: Leadtime: 15, IconFlavor: Meeting, IconLabelType: Next
Forum: Leadtime: 15, IconFlavor: Meeting, IconLabel: Forum, Time: \"Thursday, 3:45pm\"
MDG:  Leadtime: 15, IconFlavor: Meeting, IconLabel: MDG
Dealer:  Leadtime: 15, IconFlavor: Meeting, IconLabel: Dealer, Time: \"Wednesday, 1:15pm"\
Call: Leadtime : 0, IconFlavor: Phone, IconLabelType: Next
Phone:  Leadtime: 0, IconFlavor: Phone, IconLabelType: Next
See:   IconFlavor: Conversation, IconLabelType: next
Write:   IconFlavor: Envelope, IconLabelType: next
SoftBall:  IconFlavor: SoftBall
Menu:   IconFlavor: Lunch, Repeat: WeekDays, Time: NOON
"
Remember.Duration: INT ← -1
Specifies the default duration for events, in minutes. If no duration is specified in the event, or via a keyword contained in the event, then this duration is used. -1 means infinite duration.
Remember.LeadTime: INT ← 0
Specifies the default leadtime for events, in minutes. If no leadtime is specified in the event, or via a keyword contained in the event, then this leadtime is used.
Remember.EventFile: TOKEN"///RememberEvents.txt"
Specifies the name of the file in which Remember should look for its events and on which it should write new ones. Remember.EventFile must be the full path name of a file on the local disk. Non-full names can cause problems depending upon what directory Remember is in when started up and remote files cannot be written on using FS.
Remember.CreateLog: BOOLFALSE
If TRUE, each reminder that is posted or deleted is also written to the log file named by Remember.LogFile.
Remember.LogFile: TOKEN"///RememberEvents.log"
If Remember.CreateLog is FALSE, then each reminder that is posted or deleted is also written to this log file.
RegisteredIcons: TOKENNIL
Defines the mapping between an IconFlavor and the corresponding icon. (This profile option is actually implemented by the IconRegistry package, of which Remember is a client.) For example, if the keyword Forum specifies the IconFlavor Meeting, then Meeting might be defined by including Meeting: Remember.Icons 3 in the RegisteredIcons entry in your profile.
Here is the RegisteredIcons entry contained in Remember.Profile. It assumes that Remember has been brought over to the Commands subdirectory.
RegisteredIcons: "
Remember.defaultIcon: ///Commands/Remember.icons 11 -- a calendar
Phone: ///Commands/Remember.Icons 0 -- pushbutton handset
Conversation: ///Commands/Remember.Icons 1 -- two people talking over a desk
Meeting: ///Commands/Remember.Icons 3 -- one person talking to a group of several
Envelope: ///Commands/Remember.Icons 4 -- an envelope
SoftBall: ///Commands/Remember.icons 6
Lunch: ///Commands/Remember.icons 7
Cookies: ///Commands/Remember.icons 13
"
Note that the icon file need not be on your local disk, e.g.
VolleyBall: [Ivy]<Beach>Icons>Sports.Icons 0
Bicycle: [Ivy]<Beach>Icons>Sports.Icons 3
Reminder Parameters
Remember recognizes a number of parameters associated with the posting of notices. These parameters can be specified when the event is entered, using '/' as described earlier in the section on Entering Events, or by associating them with keywords defined in the user's profile, as described in the section on User Profile Options.
A parameter is specified by a name/value pair, i.e. name: value, where the : is optional, and the case of the `name' is ignored. Values are single tokens, in the IO.GetToken sense. To specify a value that contains spaces or other separating characters, wrap "'s around the value, e.g. IconLabel: "PARC Forum".
The parameters that are currently implemented are:
REPEAT value = {HOURLY, DAILY, WEEKDAYS, WEEKLY, MONTHLY, YEARLY, or a rope that can be parsed by Tempus.Parse, e.g. "15 minutes", "3 days"}
DURATION value is life time of the reminder notice in number of minutes, i.e. automatically kill the notice after this duration
UNTIL value is a rope literal time (e.g. "3:45 PM"). automatically kill the notice after this time
LEADTIME value is number of minutes. Post reminder this number of minutes prior to the indicated time. Primarily for use in conjunction with remind button, where the time of the event is specified by the message itself.
NAGTIME value is number of minutes. After this number of minutes from the time that the reminder is posted, if the reminder has not been reset, or destroyed, then more drastic steps are taken.
ICONFLAVOR the name of the flavor of icon to be used. The mapping from name to file is defined via the RegisteredIcons entry in the user profile. The corresponding icon flavor is obtained via the IconRegistry. If for some reason the corresponding icon flavor cannot be found or created, the icon named Remember.defaultIcon will be used, if any, otherwise document.
ICONLABEL the label for the icon. If not present, the text of the notice will be used.
ICONLABELTYPE value = {prev, next, this}. provides a way of specifying an icon label in terms of the position of a keyword in the text (and is therefore not especially useful except in conjunction with keywords). For example, `next' means use the word following the keyword as the icon label, e.g. "Call Library in 10 minutes" would post a reminder whose icon label was Library.
The Event File
The event file contains the events that have been entered into the system. It is a vanilla text file, i.e. cannot contain Tioga formatting, since the Remember system rewrites this file whenever an event is entered. The format of file is a sequence of events separated by a blank line. Each event begins with a time and ends with the text string for a reminder. In between are entries of the form
parameter: value
The : is optional and case is ignored. Editing the event file will cause it to be rescanned.
Getting started
Cedar users that bringover the standard command environment will have all the files necesary. Otherwise bring over the most recent version of Remember.DF from the release or post-release directory.
Follow the instructions in Remember.Profile for editing your user profile. Then simply type the command ``Remember'', with no arguments, to the CommandTool. Ignore the (there are unbound imports) message - it is a result of the fact that Walnut or Peanut has not been loaded. Ignore the message "Could not find <EventFile name>: no events logged". It simply warns you that there are no events entered, which there aren't, since this is the first time you are using the system. Finally, also ignore the message ``No Time Specified'' -- this is a harmless side-effect of invoking the command without any arguments.
If you want to see if everything is working, try typing to the executive "Remember to call home in 10 minutes to see if it worked". Then type "PretendIts ten minutes from now". You should see a blinking phone icon. Note: if you have started Walnut and read some mail, it is a good idea to delete any existing message viewers, since the Remind button will only appear on those message viewers created subsequently to the time that you run Remember.
If you previously used Reminder, the file Reminders.txt can be read by Remember, so you need only copy it to whatever name you've specified in your Remember.EventFile entry in the user profile. If your Reminders.txt contains Tioga formatting, you'll have to remove it first. However, Remember will not use the various icon flavors unless you go in and edit the event file by hand.
Program interface
If you want to write programs which enter events from a program, e.g. implement your own menu buttons, Remember exports an interface, RememberDefs, which should allow you to do all (most?) of what you want. For examples of how this interface is used, look at RememberOpsImpl.mesa, which implements the Remember command and the Remind button using this interface.