Keeping a Lab Book

Tags: howtos, research, academia

Published on
« Previous post: Some nice and accurate CMake tips — Next post: Software Engineering for Academia »

When I joined my new lab at the beginning of this year, I was very happy to see that researchers in the biomedical sciences already do what every scholar needs to do, namely keeping a lab book. It is not only a good way to structure your thoughts, it will also give you an opportunity to go back in time, track your work, and even provide summaries of your work day to your supervisor.

My setup

I actually keep two lab books. One is a “Moleskine Classic Notebook” that I use to scribble down thoughts, write out proof ideas, sketches, and anything else that tickles my fancy. The advantage of this old-school way of keeping notes is that I am independent of any technology, making it possible to quickly jot down something in almost any situation. Doing anything electronically here would just raise the bar for taking down an idea or a sketch. If I need my notes in a searchable form, I can always scan and OCR them—but so far, there was never a need for that, and I fear that most OCR software would be unable to decipher my handwriting even if I endeavour to write well.

For the second lab book, I use a Markdown document. While there is technically not a formal specification of this format, it is reasonably simple to parse, easy to look at (even if your editor is incapable of parsing it directly) and can be transformed into a variety of other formats. Being a big proponent of LaTeX, the idea of separating content and layout (or rendering) resonates well with me. I keep this second document under version control using git, which is another bonus of text-only formats. Even after a few weeks on the road, I can thus easily synchronize any changes to other computers.

The format

Most of my entries are roughly arranged based on their corresponding project. Hence, all first-level headers in my lab book are project names. I also have special section “Dormant” for projects that are, well, dormant. The second-level headers are dates, specified in YY-MM-DD format. This makes it easy for me to figure out what I did on a specific date. Apart from that, I use sub-sub-sections and so on whenever I deem it appropriate. This is how it might look:

Project 1


Added `foo` widget. Refactored code for `bar` class, but ran into
troubles with function `baz()`.

Project 2


Read paper on topic 1. Checked out for some additional
results. Loss term in appendix is not sufficiently explained. Need
to follow up on this.

vim integration

If you are a vim user, there are several plugins that make working with Markdown easier. The obvious choice for syntax highlighting is Tim Pope’s vim-markdown. The one I found most useful is VOoM. This plugin gives you a second pane for many document types (not only Markdown!) in which you can easily see the document structure, jump to specific sections, and so on. To make VOoM detect the file type automatically, add this to your .vimrc:

let g:voom_ft_modes = {'markdown': 'markdown'}

This will make the plugin aware of any Markdown document. Use the command :Voom to create an outline of your document. This can be toggled with :VoomToggle.

That’s it—a short and simple way of keeping a lab book. Until next time!