A couple of years ago I posted about Theory Life Hacks. “Life” might be a bit too grand, but what I really mean are technological tools that can help in the day to day work. In the last two years, perhaps because of taking more responsibilities, I found myself using more technology and so I thought thought I’d post what I’m using these days, and most importantly hope to hear from readers.
Running courses
I am now teaching a large course at Harvard with a staff of about 18 people. I use slack for communication with the staff, Piazza for communication with the students, Gradescope for submitting student work and grading exams, while the course data is kept in a private GitHub repository (see below).
Markdown
These days I use markdown for almost everything. For me it is basically plaintext where I can also write math between dollar signs. I use markdown to write my all my lecture notes including my 500+ pages intro to TCS book. I use it to write short technical notes and emails: in particular the Markdown Here extension lets me write math in gmail, and Hackmd is a good way to share short notes. Finally, I am also using it to produce presentations for my courses. (For one-off presentations such as talks, I still prefer PowerPoint.)
For much of these I use pandoc to transform markdown into various formats, including latex/pdf, html, and html slides. I still use Atom as my main editor, and it’s only become better over time. I use the sync-setting package to synchronize settings between machines and autosave to avoid losing my work. It took me forever to figure out how to enable spell checking using the spell-check package on Windows. The trick is to enable the SPELLCHECKER_PREFER_HUNSPELL
environment variable.
Text extenders and clipboard managers
Two apps that save me a ton of time are Breevy (a text expander) and Ditto (a clipboard manager). A clipboard manager simply remembers all the things you copied. For example, if you are filling out a recommendation or review form and need to copy stuff from your text file, you can copy all the fields first and then paste them one by one. A text expander allows you to expand short pieces of text into longer ones. For example, these days I am co director of undergraduate studies at Harvard and find often the need to write the same email again and again. For example, if I type :dusadmit
in any window, it automatically expands to
Dear X,
Thanks for your email and your interest in Harvard. For information about admission to the Harvard undergraduate program, please see the admissions website, https://college.harvard.edu/admissions, which has information about the application process and requirements. Some additional information for international students is at https://college.harvard.edu/admissions/application-process/international-applicants.
Information for prospective undergrads interested in the School Engineering and Applied Sciences (SEAS) is at https://www.seas.harvard.edu/audiences/prospective-undergraduates, and some information about Computer Science is at https://www.seas.harvard.edu/programs/computer-science and https://cs50.harvard.edu/guide.
Please note that the Computer Science Directors of Undergraduate Studies are not directly involved in the Harvard admissions process, and so questions about admissions should be directed to the admissions office.
Best and good luck,
Boaz Barak
Gordon McKay Professor of Computer Science
John A. Paulson School of Engineering and Applied Sciences
Harvard University
The text expander even stops to ask me for the name so X
above is replaced with it. This way I answer with pertinent and helpful information without spending all my time typing. For mass personalized emails, I use the Mail Merge for Gmail add on.
I also use the text expander for various other goals. For example, no matter in which program I am, if I type \bits
it always expands to \{0,1\}
. (Indeed I find myself using less and less custom latex commands these days.) I also use it to automate my workflow with git, which is still my favorite version control system. If I type :gitsub
it gets expanded to git submodule foreach 'git add -A ; git commit -m wip ; git pull --rebase ; git push'; git add -A ; git commit -m wip ; git pull --rebase ; git push
which basically updates my repository in full. I use it also to remember folder names: if I type :cs121
then it expands to C:\DBOX\WORK\Courses\CS121\
Version control, websites
As mentioned above, I use git for keeping track of papers, courses, and many other projects. You can host git repositories on GitHub, Bit Bucket, or Gitlab, and there are other services as well. I like to put my git repositories inside my dropbox folder even though you are not supposed to do that. The way I handle it is that I have for each project two subfolders Laptop
and Desktop
that contain two copies of the same repository. I only use Laptop
on my laptop and Desktop
on my desktop and so I never touch the same folder from two computers. So far it seems to work.
Netlify is a great service that allows you to keep a website updated from a repository. It works well together with Hugo, which is a website generator that allows you to write your website using.. you guessed it .. markdown.
Windows specific tools
These days I find myself in the command line a lot for compiling markdown, pushing things to git etc.., cmder is a nice console app for Windows. Sumatra is still my favorite pdf viewer. For drawing quick doodles using the surface pen, the sketchpad app that comes with Windows (“Windows Ink Workspace”) is actually quite nice. I sometimes need to write some code snippets – anaconda and jupyter lab are really nice (and not windows specific). And of course I use MikTex.
Anyway, that’s it about my technology use.. would be curious to learn what other people are using to save time and effort.
Thanks for sharing! I am using similar tools (e.g. Slack + Piazza + Git/ Git + Dropbox, Markdown + HackMD) but am a Mac user so some of the differences are due to that: Vim (editor), Jekyll/Github Pages + Twitter Bootstrap + Mathjax (webpages from Git for my homepage, classes, blogging), Overleaf + Skype (remote collaboration).
Thanks! I should have mentioned that I also use overleaf/writelatex. They will eventually merge but right now I slightly prefer the latter
Thanks for sharing, indeed. Here is a couple more:
– Trello, for keeping track of tasks that need to be done —either by the course staff or by the research team.
– Google Photos: For posting my whiteboard after each class. Works really well. The picture uploads automatically via the phone app; then I just need to add it to the course album. The boards are much easier to scroll through than if you had them in a generic shared folder. (example: https://goo.gl/photos/7zxL5CiLsHLsRey6A).
Thanks for the interesting list. Do you know AutoHotKey? It can automate pretty much anything, including repetitive emails, string expansion, etc. I wrote some code that lets me enter basic latex commands in openoffice impress, which saved me a lot of time when doing my slides. (I hear recent versions of powerpoint also support in-line latex, but I haven’t tried them.)
Thanks! I didn’t know of AutoHotKey – will look it up! I wrote a blog post once about math in powerpoint – it’s pretty good and does allow much of the standard latex syntax – see https://windowsontheory.org/2013/01/31/alt-equals/
Since you are using a clipboard manager I have to ask you: are you, by any chance, also using a password manager (as you should, see e.g. https://www.troyhunt.com/password-managers-dont-have-to-be-perfect-they-just-have-to-be-better-than-not-having-one/)?
In that case be careful, since you might be inadvertently storing passwords unencrypted in the hard disk.
Good point. I do use a password manager, and regardless I think copy pasting passwords does happen occasionally.
Probably worth the trade-off to me. Maybe eventually the clipboard managers will get smart enough to recognize passwords and not store them.