METHOD AND APPARATUS FOR CALENDARING REMINDERS
An electronic calendar includes such features as recurring reminders, dividing unpredictable work loads into equal pieces, template free parsing, a reminders scheduling algorithm to reduce spikes, dynamic delivery and recovery algorithms, methods for splitting the work load between controllers and workers and for monitoring progress, all within the context of a calendar architecture for a large enterprise.
1 .- 7 . (canceled)
8 . A method for delivering messages that are composed of standard reminder content and event-specific content, comprising the steps of:
storing all standard content for reminders in a set of template files;
specifying in each template file all standard content for a specific reminder; and
including in each template a set of directives that indicate where a substitution of event-specific content should occur.
9 . The method of claim 8 , further comprising the steps of:
at runtime, loading a template file into a cache when it is first needed; and
pre-parsing said template file when said template is first loaded into said cache by dissecting said template into an array of hard coded string constants and variable names.
10 . The method of claim 9 , further comprising the steps of:
assembling final reminder content by walking said array of hard coded string constants and variable names once;
appending string constants to final message content; and
using template variable names as a lookup into a dictionary of keyvalue pairs for a particular reminder.
11 . A reminders scheduling method for reducing spikes in delivery volume, comprising the steps of:
spreading a load of reminder deliveries across time without delivering said reminders too late or too early by weighing one or more factors in deciding when to schedule a reminder for delivery, where said factors may comprise any of an intent of a user and a destination device.
12 . The method of claim 11 , further comprising the step of:
inferring said intent of said user by examining a lead time of said reminder, where lead time is a difference between a time an event occurs and a time for which a reminder for said event occurs, wherein the shorter a lead time for a reminder, the less accuracy is required in its delivery.
13 . The method of claim 12 , further comprising the step of:
assigning each reminder to a priority class based on the lead time of said reminder;
wherein each priority class has a delivery window during which reminders of that class may be delivered; and
wherein size of a window varies according to urgency of a priority class, measured backwards from an ideal delivery time.
14 . The method of claim 11 , further comprising the step of:
clustering reminders into different priority classes based upon any of lead time and destination device.
15 . The method of claim 11 , further comprising the step of:
providing a dynamic priority queue; and
using a dynamic prioritization scheme to determine which reminders to deliver;
wherein reminders with similar delivery properties are grouped into units of work referred to as jobs.
16 . The method of claim 15 , wherein jobs in said dynamic priority queue are prioritized by their delivery urgency as follows:
jobs that are not yet late are always preferred over jobs that are late;
for jobs that are not late, the closer to late they are, the more urgent they are;
for jobs that are already late, the less late a job is, the more urgent the job is; and
in the event of a tie, prefer a job with the smallest delivery window.
17 . The method of claim 15 , further comprising the step of:
delivering jobs which have less accurate delivery requirements earlier.
18 . A method for splitting a large workload, for executing said workload at a specific time, and for finishing said execution within a small period of time, comprising the steps of:
providing a controller for starting a job as a worker on a different worker machine to distribute said workload evenly across a plurality of worker machines, depending upon said worker machines' capacity and current usage; and
said controller dividing a large job into smaller jobs by grouping records within said large job by a distribution ID that is randomly assigned to each record upon its creation, and by assigning a range of distribution IDs to a job.
19 . The method of claim 18 , further comprising the step of:
removing a worker machine on the fly should said worker machine fail or need to be taken down;
wherein said controller does not start any new work on said worker machine.
20 . The method of claim 18 , further comprising the step of:
said worker starts executing a job that is sorted by a distribution ID; and
said worker updating said controller at a regular interval with its progress, measured in terms of said distribution ID.
21 . The method of claim 18 , wherein if a worker fails to complete a job, then said controller identifying said failure and restarting a new job that only does work that was not completed by a previous worker, thereby reducing redundant work.
22 . The method of claim 18 , further comprising the step of:
running of a backup controller which keeps an eye on a primary controller and takes charge when said primary controller is not able to do its job to safeguard against any single point of failure.
23 . The method of claim 18 , further comprising the steps of:
adding a new worker machine on the fly; and
said controller assigning new work on said new machine.