danlucraft

A Plain Text Personal Organizer

April 2008

The ‘One Big Text File’ meme went around the internet a few years ago. The idea is you record all your notes, ideas, contacts and diary entries in one mammoth text file. The virtue is simplicity, but there are many drawbacks. In this article I show how to avoid those drawbacks by running your entire life out of ‘One Big Text Directory’.

One Big Text File

In 2005 there was a spate of blog posts discussing how to organize your personal data in a single text file, called the One Big Text File (OBTF). Some things that people have discussed storing in this file are to-do lists, notes, ideas, blog posts in progress, addresses, lists of books to be read, shopping lists, records of phone conversations and and web links.

The idea really is to store all of this information in a single text file. The 43 Folders Wiki does a good job of describing the advantages which include:

The drawbacks can be major however:

Other people have tried keeping their stuff in a set of text files, solving two of the drawbacks given above. But they report that this makes synchronization even more of a pain than before.

New Plan

My plan:

This solves all the problems of synchronization and backups in one go. You can keep as many files as you like with no problems and there is a complete history of your files which is essential if you are a packrat like me.

I have a copy of this repo on four machines: my server at Slicehost, my work machine, my home desktop and my laptop. I don’t have to worry about merging because git takes care of it almost automatically.

The Organizer Structure

Once the version control repositories were set up, the directory has to be laid out into a structure that contains everything you would put in a personal organizer.

And I do mean everything. I don’t want to have any residual paper organizers or use any form of software where I cannot conveniently archive my data. This really does have to be a monolithic, complete system.

Note that I do keep one of those achingly hip moleskine notebooks in my pocket for when I am not near a computer. This is the only paper organizer I have and everything in it gets transcribed into this organizer as soon as I have a chance.

At first I used a flat directory, but that quickly became too restrictive so I added sub-directories. I’m a GTD acolyte so the directory is laid out according to GTD principles.

Here is a map of the directory tree:

life/
 . inbox
 . stacks/
    . next
    . calendar
    . projects
    . someday
 . logs/
    . 80
    . 30daytrials
    . calendar
    . completed-projects
 . projects/
    . redcar
    . says-who
    . ...
 . db/
    . BashTips
    . PeopleBook
    . LemmingsCodes
    . Recipes
    . ...
 . checklists/
    . daily
    . weekly
 . tools/
    . aliases.sh

The inbox file is my GTD inbox. It has no organization or formatting. I just copy and paste random stuff in there whenever I come across it and sort it out later during processing.

Stacks

The stacks directory is for lists that stay roughly constant in size. My next action list, for instance, expands and shrinks but does not tend to infinity in length.

The next file is my ‘Next Action’ list and at the moment looks something like this:

______Next Actions

  Get _why's sandbox working.
  [Wri] Finish text of Plain Text Organizer
  Email guys in Leicester about a visit.

  (out)
  get photo taken for passport
  Pay in cheque

  (home)
  Learn how to work radiators.

___done

  Try out the example GtkWebkit app.
  Try out Phusion's Passenger
  Sort 15 MORE items of mail.

In GTD fashion, there are separate lists for each context (out, home) and the default list at the top is ‘at a computer’. The three letter codes in square brackets indicate the project that the next action is associated with.

I move the items to below ‘done’ when they are completed. I don’t simply delete them because there’s a psychological benefit to being able to see the tasks you have completed. (The ability to cross out tasks is one of the few things I miss from paper to-do lists.)

The calendar file contains my calendar in the following format:

_______Calendar

April
01/04/08 Tue | Songkick.
02/04/08 Wed | 
03/04/08 Thu | Songkick.
04/04/08 Fri | 
05/04/08 Sat | Oxford: Wizard of Oz
06/04/08 Sun | 
07/04/08 Mon | 
08/04/08 Tue | Songkick.
09/04/08 Wed | 
10/04/08 Thu | 
11/04/08 Fri | 
12/04/08 Sat | Ungraduation party.
13/04/08 Sun | 
14/04/08 Mon | Start at Songkick.
               LRUG: talk about Rak for 5 minutes.
               Put out bookcases and microwave in the evening.
15/04/08 Tue | Meet dad in town for dinner
16/04/08 Wed | 
17/04/08 Thu | 
18/04/08 Fri | London startup meeting
19/04/08 Sat | 
20/04/08 Sun | M at hen do, M at rehearsal
21/04/08 Mon | Bring in drivers license and birth certificate
22/04/08 Tue | 
23/04/08 Wed | 
24/04/08 Thu | 
25/04/08 Fri | 
26/04/08 Sat | 
27/04/08 Sun | 
28/04/08 Mon | 
29/04/08 Tue | 
30/04/08 Wed | 10am go and see I

May
02/05/08 Fri | Z birthday
03/05/08 Sat | Horsham?
23/05/08 Fri | Mr. M bday
24/05/08 Sat | H's Wedding!
25/05/08 Sun | m away
28/05/08 Wed | my birthday!

For the current month every day has a line for easy visual review, and for months in the future only days with events on are visible. I have event lines that are later than one year in the future, and there is no reason I couldn’t put a note in reminding myself to do something five years from now. Try that with a paper calendar!

The projects file contains a list of all my current open projects. At the moment it looks something like this:

______Open Projects

. MySpace application
      projects/songkick/myspace
. Redcar
      projects/redcar
. Diet
. Writing Project
      projects/writing

___backburner

. Says Who?
      projects/says-who
. Cross-Stitch
. Mastering Algorithms With C
      projects/algorithms-with-c
. Bengali
      . come up with plan
. Exercise
      . 30 day trial

I have a natural tendency to move in cycles of interest. For a while I will be super jazzed by a project, and then I will lose interest for awhile, before returning to it again a few weeks later. I’ve learned not to fight against this but to work with it. That’s why I have a ‘backburner’ project list. These are open projects that I am not actively working on at the moment. They all still have next actions defined, but it’s ok if I don’t work on them right away.

The someday file is the standard someday/maybe list from GTD. Here are some edited highlights:

____Someday/maybe

 . Grapps
 . YamlEditor
 . Ruby IRC logs
 . Learn C#
 . FuzzyClock
 . History of Political Parties Poster
 . Lolrus
 . Pyrus
 . Learn to do pixel art

Logs

The logs directory is for lists that grow unboundedly in size such as my diary, my expired calendar months and my list of completed projects.

The file 80 contains my 80 character diary. I’m always bad at sticking to writing in my diary, and I got the idea for this after reading Gretchen Rubin talk about her One-Sentence Diary. Her idea was to just write a single sentence, every day. Who couldn’t stick to that?

I copied that idea and added a twist of geek to come up with the ‘80 character diary’. A slightly edited version of the top of the diary looks like this:

       |     The 80 char diary                                                          |
80419s |First week done! Nice weekend at home now.                                      |
80418f |Machines arrive, but can't get Ubuntu working. Hacker meetup, second time round!|
80417t |More wrestling with MySpace.                                                    |
80416w |Third day at SK. Wrestling with bastard MySpace OAuth, got it working.          |
80415t |Second day at SK. Stayed for dinner.                                            |
80414m |First day at SK! Went to LRUG to give talk, didn't go so well.                  |
80413s |Cleaning up. Work on rbwebkitgtk. Have now got it working pretty well.          |
80412s |Family round for party. Made vat of chili. Everyone sang "Happy Ungraduation"!  |
80411f |Last day at Imperial. Sad, happy! Drank fizz at lunch. Bye    all.              |
80410t |Stayed home.                                                                    |

At the moment there are only 225 lines in 80 because I have been only been writing it since August. It’s an odd type of diary because ultimately each year of my life will occupy just 6 pages when printed out.

The 30daytrials file contains my Steve Pavlina-inspired list of 30 day trials I have in progress and completed. This looks something like this:

_______30 Day Trials

__No Internet crack until 9pm.

  Sunday 10th February - Sunday 16th March
  [ .x..... ....... ...xxxx .x..... ..TWTFS S] 

A . is a successful day and an x is a day where I missed my goal.

calendar is an archive of my expired calendar pages and I update completed-projects for morale.

Other logs I keep or have kept at times are: timesheet for time tracking, fitness for my exercise plan, calories for when I am on the hacker diet and so on.

Projects

Each file in this directory contains my notes about a project. A project must be fairly involved to get in here, otherwise I just keep a small set of notes in stacks/projects.

The files have a rough formatting style, but I let them vary. Each one contains a what, why, when, how section that helps me work out why I am doing the project. They may also contain plan, todo, ideas and log sections if warranted. My Phd project had all of these (when I was still studying).

The Database

The db directory is my Wiki. Each entry has its own file, named in CamelCase. I’ve got my address book, phone numbers, web links, wish lists, favourite quotes, software tips, recipes and more in here.

At the moment there is no tool for automatically linking between files, but I expect one day (as it becomes larger) to write a small server for attractively displaying the files as HTML. I am trying to use Markdown for all my entries in here in preparation for that.

The Checklists and Tools Directories

The checklists directory contains a couple of checklists for different situations. The daily checklist is my scaffold for daily working, the weekly checklist reminds me to create next actions for all my projects and review the week ahead and so on.

The tools directory contains any tools relevant to working in this repository. For instance there is a script for setting up aliases that make searching my address book easy.

Drawbacks

There are a couple of drawbacks of this system that I can think of: * Git doesn’t build on Windows. Not a problem right now, but I can see how this might be painful in future if they don’t sort it out. In the meantime I can shell into my server to use my organizer so it’s not a big problem. * You might think there’s quite a lot to keep track of. But I’m not religious about it, and I don’t have to update this every day. Each file is so simple that it takes only five minutes to work through my checklist and update my logs etc.

Text Organizer References

A bunch of people have done similar things to this. Giles Turnbull started off a wave of it in August 2005 with his post Living in text files. The 43 folder site picked up on that and discussed it here, and here. As I mentioned earlier the 43 Folders Wiki has an entry for this.

The todo.txt is a script for automatically organizing all your GTD to-do lists and projects in a single readable text file. I tried this for a while and it’s great for that, but I wanted a more flexible format.

The original wiki recommends that programmers keep a Programmers Notebook. Into this notebook goes everything relevant to your job and career development. (They have a ton of great articles about this kind of stuff.)

Matthew Cornell seems to have taken the idea most seriously. He’s got a great write-up about it here, where he shows off his very well structured OBTF and compares it to a relational database. Although I think it’s more like a document store with a light schema.

And if you want to hear the other side of this, try Putting Things Off, where they advocate ditching the computer productivity aids and going back to pencil and paper. And the dark ages.

blog comments powered by Disqus