Note: This page is still in progress.
At the moment, my focus has been to use emacs-wiki.el as the basic data engine, and planner.el to add planning capabilities on top of it. There is also integration with timeclock.el for tracking time spent on projects and tasks, and schedule.el for estimating when the day's tasks will finally be complete.
Below is the old text of this page.
The intent of the Emacs Scheduler Project is to provide a time/life management environment within Emacs that is sufficiently capable to handle the needs of most people.
There are several parts to this project; some of them represent new code, and others rely on facilities already available. They are:
- A way to maintain a database of tasks. This includes tasks that are part of a project schedule, and ordinary, "daily" tasks. (tasks.el 2.0, currently in progress)
- A project scheduler, similar to something like Microsoft Project, which can arrange scheduled tasks within the scope of a larger project, and track completion of that project over time. (project.el 2.0 and schedule.el 2.0, currently in progress)
- A way of tracking simple todo items, also called daily tasks. These are things that exist within the scope of a single day, and may or may not contribute to the completion of a larger project (taking out the garbage, for example). There only difference from scheduled tasks is that they are usually scheduled to be done on a specific date, and can be typically completed within the scope of a single day. (todo.el 2.0, currently in progress)
- A complete calendar that can offer an overview of time, showing when tasks are scheduled to be done/completed, and where the available time is for other things. (calendar, a part of Emacs)
- An appointment system to keep track of tasks/appointments that are scheduled for a specific range of time within certain days. Such a system should also alert the user when that time is approaching. (appointments, a part of Emacs)
- A contact database for tracking information about individuals: their phone numbers, e-mail addresses, web pages, etc. This database should seamlessly integrate with the other parts, so that tasks can be associated with a contact person, for example, and e-mail would be sent if major changes occurred which might affect the individual's expectations. (BBDB)
- A way of generating status reports so that past progress and short/long-term future projections can be shown to others in a concise in clear fashion. (status-report.el, currently in progress)
- A timeclock for tracking the exact amount of time spent on various tasks/projects. This information would optionally show up in the status report to show exactly how time during the week was spent, and which projects are consuming the most time. (timeclock.el 2.0, currently in progress)
- An invoice/timecard generator for billing clients according to the time spent on projects, or equipment purchases using an expense account. For hourly employees, it would generate a timecard using a printing mechanism sufficiently flexible as to create timecard that can be sent directly to accounting. (invoice.el, currently in progress)
- A financial manager that can track funds, how they are spent, for whom, how much is owed/loaned, etc. This should integrate with the other system such that expenses could be billed to certain projects, or expensed to certain individuals; or the date that bills need to be paid would show up on the daily todo page for that day. (nothing available finance.el is being planned)
- A financial analysis tool. In addition to merely tracking financial information and making sure that bills get paid, it is also valuable to be able to analyze past data for patterns, or attempt to get a handle on the future through the creation of budgets, or making fiscal projections. (nothing available fanalyze.el is being planned)
- An information catalog for recording information of any kind that might be of future value. The ISBN number of books, the location of web pages, notes on a interesting video that was viewed, etc. All kinds of otherwise miscellaneous data could be stored in a general database, accessible later via either the web, keyword search, or general content search. (bibl-mode, w3 hotlists, Emacs bookmarks)
- A way to quickly jot down reminders. Sometimes it's not convient to take the time to file away information in its correct place; what is needed is an extremely rapid input method, which is then later accessible for "processing". (remember.el)
- A scheme for filing pending information. When input arrives too quickly to be arranged, the rapid input method above allows it to be stored away for later processing. Such a scheme is not quite complete without a way to facilitate the proper filing of this information. Usually the information falls into general categories. With intelligent assistance from the computer, it should be possible to parse and process that information using just a few hints from the user. (study.el, currently in progress)
- A reminder system. When the recorded amount of data begins to grow very large, it is helpful to have some way of prompting the user while they are brainstorming and writing especially in the planning phase of a project, when some past bit of information might be extremely relevant. (the Remembrance Agent)
- Finally, a general information browser. Until now, all of the above schemes assume that you know where the information is. But what if the query is something quite general, such as "Show me everything I've recorded relating to Alice Banks." What is needed is a kind of data matrix, where the user could make queries of "all knowledge", so to speak. Such a matrix should have the option of going everywhere the user has knowledge of, such as the Web, text files on disk, the databases of particular programs, etc. But the interface would be uniform, so that one query format would suffice for searching all databases.
There are a few new modules required for this project, while other parts are available use existing technology that is either already part of Emacs itself, or freely available. There still remains some integration work to be done, but it should require little to no modification of the packages themselves.
Below is a more detailed description of these modules both new code that is being planned, and old code that is currently available.
The scheduler system for Emacs utilizes a few new modes, and integrates several others that are already fully developed and available. They are:
The basic relationships of the modules are as follows:
- Reads and writes the task data from a text-based database.
- Uses the diary, calendar, timeclock and other scheduling variables to compute when tasks will be done, according to the time available. Thus schedule is essentially a time projector.
- Provides a simple interface for tracking how much time the user spends on each task.
- A visual interface for examining and changing task data. From this interface, you can view the information hierarchically, according to a query, by importance, by urgency, etc.
- Presents the task data in a format more digestible by human readers. It takes two contiguous time periods, and shows the work that has been done for the former period, what slipped in that period, what will be done during the next period, what should have been but can't be gotten to now because of slippage, etc.
- Like status-report, but this module reports on time spent and how it was spent, rather than being task-oriented like status-report.
Tasks is a module soon to be written which records all of the task data used by the scheduler.
Schedule mode is a minor mode that expects a specially marked up outline buffer that contains all of the tasks you intend to complete, or have already completed. The amount of data recorded is growing steadily, so it's possible that this may move into a database/view arrangement, rather than the flat text format currently in use.
schedule.el can be integrated with timeclock.el so that updating of progress metrics is not so cumbersome.
timeclock.el is not designed only for keeping track of the time you spend at work; rather, it's a general time-event recording mechanism. However, in this context, it is being used to record the time that you spend on various tasks, so that your progress toward completion can be displayed.
Although not written yet, this module will use the data from schedule.el and timeclock.el to generate a full status report that can be sent to your manager, or filed away for future reference.
Also not written yet, this module will use the data from timeclock.el, and will integrate with cal-tex.el (the TeX printing system used by the Emacs calendar) to create weekly, biweekly, or monthly timecards, based on a format that can be easily tailored to your own working place's requirements.
If the data recorded by schedule.el gets too cumbersome, I will write this mode as a display/editing engine, to facilitate access to the data recorded and managed by schedule.el.
From the Emacs Info manual:
Emacs provides the functions of a desk calendar, with a diary of planned or past events. To enter the calendar, type M-x calendar; this displays a three-month calendar centered on the current month, with point on the current date. With a numeric argument, as in C-u M-x calendar, it prompts you for the month and year to be the center of the three-month calendar. The calendar uses its own buffer, whose major mode is Calendar mode.
The scheduler system uses the Emacs calendar to know when holidays are; also it can mark up the calendar based on the tasks you have left to do, so that you can see "at a glance" on which dates things will be completed. (not yet implemented)
From the Emacs Info manual:
The Emacs diary keeps track of appointments or other events on a daily basis, in conjunction with the calendar. To use the diary feature, you must first create a "diary file" containing a list of events and their dates. Then Emacs can automatically pick out and display the events for today, for the immediate future, or for any specified date.
The scheduler consults your diary to know when meetings and other appointments are going to come up that would disrupt its projected completion estimates. However, you must annotate your diary entries in order for the scheduler to know how long they will last. Use a time duration string in parentheses at the end of the appointment description for this purpose, such as 1h for a one hour long appointment.
From the Emacs Info manual:
If you have a diary entry for an appointment, and that diary entry begins with a recognizable time of day, Emacs can warn you, several minutes beforehand, that that appointment is pending. Emacs alerts you to the appointment by displaying a message in the mode line.
Appointments provide reminders of when time-critical events are fast approaching. This feature is standard with Emacs.
BBDB is the Insidious Big Brother Database. It works as a powerful address book with many convenient tie-ins to other modules within Emacs. Once you've collected some data in your BBDB database, you can quickly visit home pages, complete e-mail addresses when composing mail, notice changes in people's addresses while reading mail, etc.
From the Info manual for bibl-mode, by Bryan O'Sullivan:
Bibliography mode (bibl-mode) is a subsystem of GNU Emacs which allows you to keep track of information on the World Wide Web and elsewhere. It is primarily intended for storing information about software packages, Web pages, mailing lists, and other data of interest to users of the Internet, but can also be used to keep references to books and papers, and can be extended to hold a heterogeneous database of most any sort of textual information.
Commands are provided to simplify the task of creating and maintaining records in the database, to access information over the Web, and to move easily through medium-sized databases. Other commands exist which allow information to be grabbed from mail and news articles, and to allow records to be pasted into other buffers.
Bibl-mode is an attempt on my part to speed up the process of adding to and searching through databases without going to too great an effort in this direction. However, if you can think of any features which could do with improving, or any useful features which are missing entirely, please get in touch with me.
Comments and suggestions are most welcome. I loathe seeing software written that functions only according to the work habits of its creator. If you have ideas, or experiences that you would care to relate, please send them to me at firstname.lastname@example.org.