Todo.txt

Rationale

Apparently like many people, for many years and through many different types of jobs, I have struggled to find a good system for organizing tasks/to-dos, events, projects, etc. I have tried everything from expensive, complicated enterprise systems to open-source things and the iCalendar standard. Being unhappy with everything I have tried for various reasons, and because I have some knowledge of computer programming and databases, I have created my own format, which is described here.

I chose text files as the way of storing this information, for the following reasons:

  • text editors are ubiquitously available on most every device and operating system,
  • textual character encodings exist for every major language on Earth, and many have been internationally standardized in Unicode,
  • text compresses well and is easily encrypted,
  • text is easy to modify and search,
  • text is highly portable,
  • text does not require the involvement of third parties (e.g., Web hosting or software companies), and
  • structured text formats can be programmatically parsed or generated (e.g., multiple people’s files could be easily combined).

Files and their structure

The system contains the following files:

  1. todo.txt – where the event/task (hereafter just “task”) information is stored
  2. A notes/ folder, containing serially numbered text files, zero-padded if desired (e.g., 00000, 00001, 00002, etc.). As shown below, notes files are associated with one or more tasks, and have a certain structure.
  3. A projects/ folder, containing text files named after projects (e.g., SELF_2017taxes). Project text files have the same structure as notes files, but regard the project overall instead of specific tasks.
    1. The projects folder contains an ARCHIVE folder, with sub-folders for each year. When a project is finished, its text file is moved to the appropriate year in the ARCHIVE folder.

Todo.txt

The todo.txt file is the core/heart of the system and is the most complex.

Overall, it is organized as a timeline, from the distant future at the top to the distant past at the bottom, with the present somewhere in the middle. This layout was chosen, because humans experience time in a linear way, and it allows for many different calendar types (e.g., Buddhist, Chinese, Christian/Gregorian, Hindu, Jewish, Julian, Mayan, etc.) and timezones to be combined in a single file. To go to the present, simply search for (or scroll down to), the “# present” section.

Each line represents a task, with a few lines for defining calendar types, timezones, and sections. Section titles, like comments in a Unix bash/shell script, always begin with “#”. Here is an example of the definitions sections at the top of the file:

timezones: E=US.easternTime, S=SriLanka.standardTime, L=localTime
defaultTimezone: UTC
calendars: CE=ChristianEra, HE=HinduEra
defaultCalendar: SinhalaBuddhist
## definitions ##

In my todo.txt file, there are the following sections, from top-to-bottom (i.e., future-to-past): definitions, date unknown, date known, soon, frequent routines, present (which is always an empty section), frequent routines, date known, and date unknown.

Note that, because this is a timeline, like the dates of tasks, the section titles radiate out from the present moment, which is in approximately the middle of the file. Hence, for things in the future, which are read from bottom-to-top, the section titles come below the things they describe.

Also note that the fields of this file are space-delimited (i.e., there is one space between the status, date, time, etc.). For this reason, camelCase is used throughout, as putting spaces between words would break the file’s structure. A different delimiter and writing style could be used, but might make the file less compact and easy to read.

Format of task lines

The task lines follow a common structure, of this form:

status(ACTION ITEMS) YYYY-MM-DDdow{repetitionPattern} time task(requirements)[location]{aboutWhy} associatedNoteFile [associatedProjectFile]

For example:

i(CALL HER) 2018CE-03-11su{1982CE(++1)-03-11} 1800 me.pers.fam.pamela.party(cake)[herHouse]{birthday} 00032 [birthdays]

That example would be read in this way:

  • in progress,
  • with the action item that someone needs to call her,
  • on 2018 (in the Common Era / Gregorian calendar) March 11, which was a Sunday,
  • repeating annually since 1982 (her birth year) on March 11,
  • at 1800 (6 p.m.) in the default timezone,
  • within my personal to-do list, for a family member named Pamela, a party, requiring a cake, at her house, on the occasion of her birthday,
  • with notes kept in notes file 00032,
  • associated with a project called “birthdays”.

Status codes and action items

Status codes can be whatever you wish. I recommend the following codes:

‘-‘ for not yet started and needs action,
‘~’ for a tentative task that is not yet started and might need action,
‘i’ for in-progress/process,
‘x’ for finished,
‘c’ for canceled, and
‘ ‘ (an empty space) for tasks that require no action from you.

Action items (i.e., actions that need to be taken related to this task) are written in ALL CAPS, so that they stand out to the eye. I separate action items with periods / full stops, and list them in the order in which they need to be done. If there are many action items, the (parens) can be broken onto multiple lines. Resist the temptation to write notes in/after the action items, because this file will become cluttered and hard to read. Put notes in the notes files.

Dates and times

The date is in ISO format, followed by an optional abbreviation for the day of the week, with a repetition pattern inside {curly braces}. The calendar can be of any type, with the type indicated by an abbreviation after the year, which you may define however you wish at the top of the file (described in detail below). If there is no abbreviation after the year, the default calendar type, which is defined at the top of the file, is used.

Here are some example/suggested repetition patterns:

1982CE(++3)-**-** means every three years beginning from 1982 in the Common Era, on every month and every day that year.

****-**-2ndMonday means every year, every month, on the second Monday.

****-(03,06)-** means every year, the third and sixth months, on every day of those months.

2562BE-11-?? means in 2562 in the Buddhist Era, November, on an as-yet-unknown day.

Throughout this file, (parens) are used for groups/sets or numerical patterns. In addition to the above examples, fam.(joan,chris,mary).visit[theirHouse] means family members — Joan, Chris, and Mary — visit them at their house.

The time can be written in any format, though I recommend being consistent for ease of reading. As with dates, if no timezone is specified by an abbreviation after the time, the default timezone is used.

Within the “date unknown” and “soon” sections, task lines lack a date or time, but are otherwise the same as described above.

Task names

The task name format is similar to the dot notation of object-oriented programming languages, or the reverse of a Web URL. From left-to-right, it is a general-to-specific hierarchical classification of someone or something, with the last element of the classification being the action taken by, to, for, etc. that someone or something. The meanings of (parens), [square brackets], and {curly braces} are also similar to Java’s using them for function/method requirements, data locations, and blocks of multiple commands, respectively. For example:

me.pers.gov.us.mo.dmv.answer{canDriversLicensesBeRenewedOnlineYet?} could mean this: within my personal calendar, a government, of the US, of Missouri, the Department of Motor Vehicles, then seek an answer for/about the question “can driver’s licenses be renewed online yet?”

pd.biz.vend.allstate.deadline{renew(policy)} could mean this: within Pam Dawson’s business calendar, a vendor, the AllState insurance company, a deadline about renewing an insurance policy she has with them.

When only one or two people use this system, how they choose to categorize the aspects of their life is up to them and can be very fluid/loose. Of course, if this system were generalized to a larger group of people, it would be good to standardize the elements of task names. For example, there could be databases/spreadsheets of which initials represent which person, and into which categories to divide people’s business or personal lives. For example, I sort my personal life into these categories: acad.admin (academic administration), acad.research (academic research), acad.teaching (academic teaching), acad.service (academic service), fam (family), frnd (friends), corp.cust (corporate customers), corp.vend (corporate vendors), gov (governmental), nfp.cust (not-for-profit customers), nfp.vend (not-for-profit vendors), and self (myself). For holidays and natural events, I also have categories related to the holiday’s origin, for example: ancientRome, Hindus, nature, and westernChristians. My business’s categories are acct (accounting), cust (customers), exec (executive), it (IT), lgl (legal), mktg (marketing), rnd (R&D), and vend (vendors).

Task groups and conditions

For grouping tasks, this system uses project names. For example, all tasks having to do with doing this year’s taxes could have a [SELF_2017taxes] project label. If you find that a task should have sub-tasks, I recommend making that task a project. If a project has multiple levels of sub-tasks, I recommend keeping track of that hierarchical structure in the project’s notes file, and using only one serial-numbered notes file per task.

Sometimes you want to say, “if a certain thing happens, do these tasks.” I recommend the following syntax:

}
  …
  – task2
  – task1
if fam.mom.visits {

That means: if family member Mom visits, do these tasks. The tasks go upwards, because they go into the future.

Note and project files

Both note and project files have the same structure, but note files contain notes about individual tasks, and project files contain notes about projects overall. Each file has this structure:

  • On the first line, if it is a note file, there is the name of the task with which it is associated; if it is a project file, there is the name of the project or a list of all of the tasks with which it is associated (though such a list would be redundant with the project labels in the todo.txt file). This is done so that there is no confusion about with which task(s) this file is associated.
  • The top half of the file is for a blog-like history of notes, with a date and author name at the beginning of each line, with the newest note at the top and the oldest at the bottom. This section is where to put dated things related to this task, for example notes from phone calls or meetings. If a project has multiple sub-tasks, I recommend making sections for each sub-task within section, such as by indenting lines to indicate sub-tasks.
  • The bottom half of the file is for research and free-form notes, such as brainstorming outlines, summaries of Web research, etc.

I recommend separating the two notes sections with a 10-dashes horizontal line (“———-“), and, if you wish to create sub-sections of these sections, use a horizontal line with fewer dashes.

A typical workflow

  1. When a new task comes in, create a line for it wherever is most appropriate in the todo.txt file.
  2. If the task is completed or canceled, change its status to ‘x’ or ‘c’, and move the task line to the top of the “date known” section in the past (because the date of completion or cancelation are known or can be guessed), so that there is a record of past tasks. If its outcome was complicated, write a note about it in the notes file, creating a new notes file if necessary and appending its number to the task line per the above syntax.
  3. If the task had a repetition pattern, calculate one or more future occurrences and create new tasks up in the future section of the calendar.
————————-
– Example todo.txt file –
————————-

timezones: E=US.EasternTime, L=localTime
defaultTimezone: UTC
calendars: CE=ChristianCommonEra, HE=HinduEra
defaultCalendar: SinhalaBuddhist

## definitions ##

i self.house.make(goBag) [SURVIVAL_KIT]
– [INVESTING_coins]

## date unknown ##

  5120HE-11-07we{lookup} * hindus.holiday.diwali
– 2562-09-18tu{****-09-18} * self.body.get(fluVaccine) 00038 [VACCINATIONS]
  2018CE-07-02mo…16mo{1877CE(++1)-oneWeekAfterTheLastMonInJune-twoWeeks} * world.sport.tennis.wimbledon
– 2562-05-06su{****-05-06} * corp.vend.verizon.expires(voicePlan) 00055
i(CALL DENTIST. FILL OUT INTAKE DOCUMENTS.) 2561-04-01su{****-04-01} * self.body.schedule(dentalCleaning) 00042
  2018CE-03-31sa{****-03-lastSunday} * gov.uk.begins{BritishSummerTime}
  2561-03-20tu{lookup} * nature.equinox

## date known ##

– self.body.schedule(eyeExam) 00003

## soon ##

****-**-(mo,we,fr) evening self.body.take(medicine){thyroid}

## frequent routines ##

##### present #####

## frequent routines ##

****-**-(tu,th,sa) evening self.body.take(iron)

## date known ##

c(2561-03-06tu doing as needed) 2561-03-06tu{2561-07-18(++7)} * corp.vend.mobilePhones.(checkBalance,topup) 00039
x 2561-02-09fr…25su * world.sport.olympics.winter[SouthKorea.Pyeongchang]
x 2561-02-20tu 1900E fam.mom.call

———————–
– Examples notes file –
———————–

2560-02-03mo * corp.vend.insuranceCo.get(refund){homeOwnersInsurance} [SELF_*Move]

2560-02-05 she acknowledged receipt
2560-02-03 emailed them to the representative. she’s out of the office.
2560-02-01 scanned home sale settlement docs

———-

rep’s contact info and website: …

directions to the rep’s office: …

————————
– Example project file –
————————

2560_self.travel[Thailand]

(optional notes for the project overall here)

———-

## packing list

clothes:
x shoes
x sleep mask

tech:
i(see 2560-06-28 * corp.vend.amazon.order(plugAdapters) 00084) electricity plug adapters
x(see 2560-07-03 1800 corp.vend.at&t.visit[store] 00085) unlocked cellphone

## emergency contact info
US embassy: …
Local emergency numbers: …

## itinerary
… (flight and train schedules, events, sites, etc.)

## restaurants
… (a list of local restaurants)

Advertisements

Business idea: any-local-recipient donation pick-up and drop-off service

Donations today often involve a lot of work for the donater, which might discourage people from donating. Not only do you have dig the stuff out of your basement or closet, but you have to find and load up a large enough vehicle, drive it to a donation center, maybe unload the vehicle for them, maybe return the vehicle if you rented/borrowed it, and then find your way home.

What if, for a small fee, a van or truck service would drive around picking up people’s stuff, taking it to whomever/wherever they want it donated in the local region (e.g., a particular non-profit organization, a friend or relative, etc.), and scanning any receipts (for tax deductions) from the receiving person/organization and electronically returning them to the customer?

In case the recipient isn’t available, or doesn’t want, to receive the donation, the service might need a secure warehouse for temporary storage, might need good theft and damage insurance, etc. This idea might be quite future-proof as well (for the business’s owner). The delivery vehicles might become self-driving, the warehouses might become automated, and people probably will always accumulate more stuff than they want/need and occasionally will want to donate some of it.

(This idea is released under a Creative Commons Attribution 4.0 International license. It may be used commercially.)

The time since/at something we all share

GMT/UTC has a British imperial past (i.e., the time at Greenwich) and was colonialistically imposed on the world. Many countries seem to prefer to measure time with respect to themselves. I wish we could think of something that all of humanity shares, and measure universal time with respect to that.

Time (e.g., seconds and multiples thereof) since the Big Bang, or some other large astronomical event, is perhaps the most universal and future-proof idea. Big Bang time is not yet possible, because humanity’s best astronomy instruments currently can measure when the Big Bang happened to a precision of only about ±21 million years. Whenever it becomes possible, perhaps only the last few digits could be used, for convenience.

The time at the center of the Earth, or at some location that is administered by an open-member international committee, is another idea. The poles probably wouldn’t work, because the sun rises and sets there only once per year. Time runs slightly slower at the center of the Earth than at the surface, due to Earth’s gravity well and time dilation, but I have read it is only about one year slower for every billion years. I understand that GMT/UTC is local mean solar time, meaning the apparent position of the sun relative to a fixed point on a sphere. Even if the sphere was much smaller, one still would have to pick a point on it.

Can you think of anything else that all of humanity (going into the future) shares with respect to which we could measure time?

Idea: Sanghas for disabled people

For people who want a Buddhist monastic lifestyle, but who can’t be regular/full monastics for some reason (e.g., a health disability that makes them unable to be healthy while following all of the precepts, or a long-term responsibility to care for a disabled family member). Such people probably don’t want marriage, but they still need a committed and reliable/robust network of helpers/caretakers as they and their immediate family get old, and they might find commitment and solidarity from others who are in a similar situation. They might have a hard time living on donations, because Buddhists often associate disability with negative past karma, but they could hold whatever jobs they can manage, and they could split costs or share resources.

War with sport

If only we could convince people to fight battles with sports. The losers would only have to be submissive to the winners until next year’s re-match, and no one would have to experience the hell of war. Diplomacy (e.g., negotiating the stakes of sports matches and the terms of winning/surrender), school athletics programs, and defensive police-type forces might receive more funding.

Idea: family journals

Something I wish would exist, or become more organized, is a tradition of families making and passing down records of the views and wisdom that individuals in the family had, and the reasons why certain family members made certain important decisions. It wouldn’t need to be lengthy autobiographies — just a journal that preserves important insights. Personal letters and diaries often don’t survive, possibly because individuals might not want their private thoughts, romantic letters, etc. shared so broadly. But a family journal could preserve a less intimate or embarrassing, yet still insightful, account. If every family kept more-or-less the same kind of journal, the tradition might become more organized than the proverbial shoebox of photos and recipes that many families hand down now. History records migrations, wars, social movements, etc., but individuals are not necessarily/completely defined by society. What kinds of people were my ancestors, and why did my family do what they did?