What is The Memex?

This is a set of instructions for setting up and maintaining a central repository for all your information - todo lists, reference notes, calendar, journal, checklists, process documentation. Everything is stored in a single plain text document which is split into topics. It supports internal links between topics and also contains links to richer media such as images, online URLs, books, paper notes, scanned documents, spreadsheets etc. It’s designed to be trivial to get started, with a gradual and incremental path to more advanced use, very low effort to maintain, efficient, resilient, fault tolerant and extremely flexible in terms of both tools required and tailoring to personal needs.

Getting Started

Open a blank document in a text editor. I use Sublime Text on Ubuntu Linux because it’s powerful and lets me do all sorts of fancy things to make my life easier but something simple like Notepad on Windows will be absolutely fine. Certainly plenty good enough for your first few weeks of use.

The overall structure is ‘one thought per line’ grouped into topics. Topics are separated from each other with a blank line. Each topic is given a topic title.

First important yet not obvious point: topics don’t have to be put in any particular order. When your memex gets big (mine’s 40,000 lines long at the moment) you won’t be able to find things by scrolling through it looking for them. Instead you’ll be using your text editor’s search facilities to find them. We automate all the things here. Using search means we can put stuff wherever we want and be able to find it just as easily. Want to add a new topic? Just add it wherever you are in the document - at the top, the bottom, in the middle, next to a related topic - it doesn’t really matter because we can find it wherever it is.

So, here is a bare bones memex that just contains some notes about llamas (cos it’s about time we got started on our dream of owning a llama herd yeah?):

  Llamas
  Not the same as lamas
  Not the same as alpacas either
  Domesticated camelid from South America
  Very soft wool free of lanolin
  Great pack animals

Now this is all very well but some of our notes are a bit vague; a bit tempting, a bit in need of some more exposition. In what ways do llamas and lamas differ for example? So you might be tempted to change the lamas thought to something like:

  Not the same as lamas who are Tibetan Buddhist teachers

which would be fine but it’s kind of straying off-topic - we’re not interested in lamas here, merely in the fact that they’re not the same as llamas, and we’ve conveyed this already in our original notes. Stuff about lamas lives in a separate topic, so let’s create one:

  Llamas
  Not the same as lamas
  Not the same as alpacas either
  Domesticated camelid from South America
  Very soft wool free of lanolin
  Great pack animals

  Lamas
  Not the same as llamas
  Tibetan Buddhist teachers

Cool. We like separation of concerns. But we don’t like concerns to be too separated. The two things are different but they are related. If we’re reading about llamas we see a mention of lamas but we have no idea that we’ve also got a topic about lamas. And if we had a huge memex the lamas topic might well be thousands of lines away from the llamas topic and we’d stand little chance of just happening upon it. So let’s relate them explicitly.

We can do this by using internal links similar to the internal links you find in many web pages. Stick an @d= in front of the topic titles to indicate that they’re link destinations and stick an @s= in front of the link sources that point to them as follows (I prefer to capitalise my link sources as well so they stand out a bit more and so I can do a more focused case sensitive search for them):

@d=Llamas
Not the same as @s=Lamas
Not the same as alpacas either
Domesticated camelid from South America
Very soft wool free of lanolin
Great pack animals
@d=Lamas
Not the same as @s=Llamas
Tibetan Buddhist teachers

Now I can search for llamas to find all references to llamas (including finding any instances which should probably be changed to link sources), I can search for @d=Llamas to find my core notes specific to llamas or I can search for @s=Llamas to find anything that references llamas without being specifically about them. On top of all this, if I for some reason forget that llamas is spelled llamas and assume it’s spelled lamas, I’ll quickly find myself reading about Tibetan Buddhist teachers, realise the error of my ways and find a link to the correctly spelled llamas topic I’m after.

Right. On with the dream. We’d better buy some llamas. We need a todo item. These are just normal thoughts prefixed with an @t tag:

@t Buy some llamas

We can add this to our Llamas topic to end up with:

@d=Llamas
Not the same as @s=Lamas
Not the same as alpacas either
Domesticated camelid from South America
Very soft wool free of lanolin
Great pack animals
@t Buy some llamas
@d=Lamas
Not the same as @s=Llamas
Tibetan Buddhist teachers

And that’s about it for getting started creating your own memex. Create some topics, add some links between them and add some todo items. Check the following sections for specific use cases once you’ve got comfortable with the basics and before you add too much stuff. And if something feels a bit ‘off’ or you’re not quite sure how you should be doing something, definitely check them out because there’s probably a right way to do what you want to do.

Todo Lists

Where’s My Todo List?

You might be wondering why we add our todo items to the topic it relates to rather than having a separate todo list. After all, we want to be able to see all the things we have to do in one place rather than having to go scrolling through the whole file to find them. Well, this is where you get to discover dynamically created content. Oooh le fancy!

Completing Todo Items

Change the @t tag to an @done= tag with the current date and time. I’ve written a script to do this automatically to save typing (I just hit f5) and reduce errors when entering the date incorrectly. Marking todo items as complete contributes to the creation of a journal.

External Resources

Link to external files and online resources by copying their filenames/URLs into the memex e.g.:

@done=20201231 Photos of New Year's Eve with Obama the Llama at C:/Documents/photos/2020/12/31
More info on llama trekking at https://www.llamas.wales/

References and Citations

If you want to attach a simple reference to a single thought then just add it on to the end but where a reference applies to more than one thought it’s usually worth creating an extra topic for it and using internal links to it with the @s= tag. When making notes on a large or complex source (e.g. a book) I tend to create a topic for the source, add todo items and info about the book itself in there and then link to it using @s= tags from whichever topics the notes end up in. I prefer to keep notes on a source in the subject topics rather than in the source reference topic.

Journals

Add items to topics with a prefixed @done= dated tag to act as journal entries. This is a great way to document things you’ve done that don’t appear as a result of completing todo items. Then use @done= tags (both those created explicitly as journal entries and those created by marking todo items as complete) as a search source to dynamically create content that can be sorted to form a chronological list of journal entries.

Calendars

You can combine dynamically created content with deferred todo items to create a calendar.

Big Memexes

Next Actions

One of the first things you’ll notice when you start getting a big memex is that you’ll end up with a lot of todo items. I’ve got over 5500 in my memex. Am I ever going to get round to doing them all? No way. I expect that number to keep increasing with time. The point is that these are things that I could do when and if I decide to do some work on a particular topic. They’re not things that I have to do. And they’re certainly not things that I’m actively thinking about doing. So how do you filter out the things that you do want to be actively thinking about doing? Whenever you find an @t tag that you want to make ‘active’ you change it to an @na tag (short for next action). Then you filter out your @na tags using the dynamic content method.

HMFIC

At some point you’ll start noticing some kind of structure to your memex. Mine is definitely like a tree. I create topics which branch into sup-topics which further branch into sub-sub-topics and so on. I’ve probably gone down about 10 levels in total at the deepest part but I do like to keep things pretty granular. It’s not strictly a tree because I do have some links making what’s officially known as a cyclic graph but it’s broadly tree-like. So, extending this metaphor I also have a root topic which everything kind of branches off. This topic has the grandiose title of “Head Mother Fucker In Charge”. If I can’t find something, I know I can start looking here and get to it pretty quickly by following links to child topics. You may choose to have a similar root topic. Or you may choose to have several ‘jumping off points’ from which you can start to search for things, for example, you may have several topics each of which have several children that form a unique view into a specific facet of your memex. As usual, there are no memex police.

Deferred Todo Items

What if you’ve got a next action (@na tag) that you can’t do until a specific date? Phoning a friend to wish them happy birthday or renewing your insurance, or buying a prize llama at the next breeder’s event for example. Add a date to the @na tag as follows:

@na=20210403 Buy Llamas at International Llama Fancier's Show

You might also have next actions that are waiting on other events to take place at some unspecified date. For example you want to setup a llama farm but you need to wait till you’ve bought that new house with the field next door:

@na=housebought Setup llama farm

None of these @na tags can be actioned right now but they are more ‘active’ than your hundreds or thousands of back-burner @t tags so they do warrant an @na tag rather than an @t tag. When you generate your next action list using dynamic content creation you can create a list using @na= to include these or create a list using @na (note the trailing space) to exclude them and show only the ones without pre-conditions that you can actually do right now.

Tactics

Plain Text

No colour, no formatting, no font sizes, no bold, no bullet points, no indentation. It just doesn’t help.

Top Tips

Keep it simple. I’ve tried adding various things over the years over and above what’s listed here and never stuck with any of them. The beauty of this system is its lightness. It doesn’t interfere with your life. You can start tracking estimated and actual hours on your todo items and writing fancy scripts to track performance and generate weekly goal lists and progress charts and all sorts of other bollocks but the pay back isn’t enough in my experience. Double clicking on links should select the whole link which makes it quicker to search for it. Use searching and sorting as much as you possibly can. Copy and paste (particularly links) to reduce transcription errors and typing. Automate things as much as you can.

What Should I Keep?

That’s up to you. If you try to make a note of every little detail in your life, you’ll soon get paralysed. Even though the memex is a lightweight process with very low overhead, you can still easily bog yourself down in keeping pointless notes on things you’ll never need to refer to again. On the other hand it’s impossible to get stuff back once it’s gone from your memory and from your memex. There are no memex police. Just have a play and adjust as you see fit or as the mood takes you. I have sections of very detailed notes on some trips I’ve made and I have other trips that barely get a mention.

Formalities

Dates And Times

I use ISO8601 format dates and date/times because they’re unambiguous across national borders but more importantly because they sort in chronological order when sorting alphabetically. They’re structured as a 4 digit year, 2 digit month, 2 digit day number, date/time separated with the letter ‘T’, two digit hour (24 hour format), two digit minute, two digit seconds and a ‘.’ character followed by fractional parts of seconds should I need that level of precision (I sometimes use this if I’m auto-generating multiple dates at once to ensure unique time stamps). So a full example would be 20210428T182336.5621

Dynamically Created Content

Essentially this involves using tools to filter your memex, possibly extracting content, removing duplicate items and sorting it either alphabetically or chronologically.

Exactly how you do this kind of thing will depend on what tools you’re using but I’ll run you through the way I do it. One of the plugins for my text editor (SubGrep for Sublime Text) allows me to get a list of all the lines containing a particular string of characters. So, if I want to create a todo list I select @t somewhere in my memex and hit ctrl-shift-g to open a new tab showing every line from the file with an @t tag attached. Instant todo list. You could do this from a command line with grep or whatever equivalent you have available but being able to do things like this is essentially the main reason why I think you really REALLY need a good quality text editor in your life.