Ever since I was a little child, I've always loved watching
progress. I could spend hours at the shore of lake Balaton watching the waterdrops on my flip-flops dry up in the sunshine, I loved the now-ridiculous loading times of the games on my C64 as that meant I could watch the bits slowly moving on the screen, one of my first computer programs was an algorithm looking for
perfect numbers, which, of course, provided detailed feedback about what it's doing at the moment, and I was crazy about the first DC++ and BitTorrent clients not because they brought me music and movies I couldn't get otherwise but because they had -- oh, the beauty -- 10+ fancy progress bars on screen all showing me
The Progress.
Fast forward ten years, and here I am, writing my Master's thesis. As every proper nerd, I'm writing it using LaTeX (OK, I'm old and lazy, so I'm actually using LyX), and as every proper nerd (
and also as award-winning science-fiction author Cory Doctorow) I'm version controlling it using git. From the very beginning I knew I want to
watch it grow. But how could I do that? There enters git, ImageMagick and some shell scripting.
My document is version controlled, so reproducing a step during its creation is a matter of a single
git checkout, that's easy. Fortunately LyX can be used from the command line as well, so a
lyx -pdf thesis.lyx generates the PDF from the version at the current commit. ImageMagick is our next tool after that: a
convert thesis.pdf thesis.png produces us PNG files for all pages in the PDF. ImageMagick has an other handy tool called
montage: it grabs the given bunch of images and aligns them on a single image. It's all pretty straightforward after that: get the list of all revisions with
git rev-list, iterate through them and create the picture of the document at that point and when you're finished, combine them into a single animated GIF. And then you can wach
progress:

I think I've already spent more time watching this animation than I've spent with proof-reading the thing and it's still three weeks 'till the deadline.
You can grab the shellscript
here -- it has ugly hacks, the filenames and paths are hardcoded into it but it could be used as a starting point if you want to do something similar.