Murphy bed projects08 August 16. [link] PDF version
People in sitcoms have jobs. They have a routine that allows similar things to happen every week. If people in movies have jobs, the job is an irrelevance mentioned in passing, or they are full-time spy assassin hunters.
I want my work narrative to be about projects rather than a continuous stream of existence with no set ending. People in movies lead more interesting lives.
I've made a real effort to switch over to project-oriented thinking all the time, and it does feel better. I sit down to work, and I see a set of finite things to build, not a never-ending slog. Everything (including the admin stuff) is in its own repository to check out as needed.
Murphy bed projects
To give another metaphor: the Murphy beds you find in tiny studio apartments. Once the bed is folded down from the wall, it covers the space and there is nothing to do but be in bed; once the bed is folded back up into its closet, you don't think about the bed at all. I've had the joy of sleeping in a few, and I think they're great.
It clearly dovetails with the project-centric life. Work on the project until you hit your stopping point, then put up the Murphy bed, pack up the tool box, fold up the tent, or whatever other physical metaphor you want, and move on.
My home directory, conceptual view. via
If you leave the cat on the Murphy bed when you fold it up, you will know. The process of being ready to fold everything away forces the discipline of stopping to ask what needs cleaning away, what threads of thought are still open, and what is to be done about it all.
If I'm going to check out the project fresh every morning, I need a makefile
describing every setup detail—that's a good thing. It should have a
target to throw out the things I know are temp files or that can be regenerated—that's
useful. I'm using revision control, which tracks some files and doesn't track
others, so I have to decide early whether a given file is important enough to
track, and what to do about it if not—that's so much better than my old
routine of getting up to my ears in semi-important files and then feeling
overwhelmed and shoving them into a temp directory I never look at again.
There's a definite trend toward being able to fold even up the entire virtual computer, which is stored in The Cloud or on your repository of virtual images. Personally, I'm not there yet, because even on an æsthetic level this isn't doing much for me beyond the usual PC-as-server setup that I have. I mean, you're always going to be typing into something. Without The Cloud, I'm going to have the usual home directory and an archive of projects from which I can pull.
What's in my home directory? An archive directory, a temp directory, and that's it.
My home directory, actual view
The archive directory holds all those project repositories, a library of PDFs and data sets, items from my history.
I'm trying to get rid of the temp directory but can't let go yet. I thought it was weird when Lisa Rost said she used her desktop as her temp directory, but now I see that she makes a lot of sense. At the end of the day, if there are stray temp files in my home, they are blatantly present and I want to destroy them.
As a half-digression, I've taken to keeping one (1) text file with all my little side-notes on all of my projects. The notes use Org mode, which is a common standard for writing outlines. My text editor vim, with the orgmode plugin folds the inactive outline segments out of view, so I get the same Murphy bed effect of starting with a near-blank slate, unfolding the current project's notes, and leaving everything else hidden away. This text file of side-notes has massively cut down on my count of stupid two-line text files, and also serves as my index of all in-progress projects.
So, setup is easy: when I want to work on a project, I open a new terminal (actually,
I make a new work session in tmux), git clone a copy from the bare repository in the
archive directory, unfold the segment in my notes, go. When I want to shut down the
project for the day,
rm -rf the directory, close the tmux session, fold away the notes, go
make some tea.
Perhaps you tensed up as much as I do at the part where I
rm -rf the directory.
In fact, with version control there are several ways to lose data beyond just deleting
- Yes, I could delete an untracked file.
- I could have a stash that gets deleted.
- I could have diffs that I haven't committed.
- I could have everything committed locally but not pushed to the archive.
So I wrote a script to check for all of these things. People have told me that some DVCS GUIs do some number of these things. It's turned out to be useful to have a command that I can call quickly, because I can call it all the time to check the state of things (even when I have terminal-only access).
I named the script git-isclean, and posted it on Github at that link. If it gives me green check marks, I'm done; else it will (with the
-a flag) automatically help me with the next step in cleanup. It depends
on the interactive status script I wrote before, because it makes perfect sense to
use it; if you don't want to use that script, change the use of
git istatus to
Given my goal of keeping my home directory empty save for the one project I am working on right now, the need for this script is obvious. But it is useful even in less sparse workflows, because it provides a little to-do list of loose ends, worth having any time.
I hope something there was useful to you or gave you some ideas. Last time I wrote a navel-gazing post about my workflow was in 2013. Maybe I'll do another one in 2019.