students occasionally ask how i do my computing, so here is a brief summary (as of november 2019). i might update this page occasionally, but my setup has not changed much in recent years, so i don't expect this page to change very often.
whenever possible (read: whenever it is not too inconvenient), i prefer to use machines that only run Free/Libre Software.
my main desktop computer is a D16 Workstation, purchased from Vikings. although this machine is old, its main appeal is its ability to run Libreboot, a freedom-respecting replacement for proprietary boot firmware. i use a Buckling Spring keyboard from Unicomp, and a "vertical" mouse from Evoluent.
the server powering hz.mit.edu is a Talos II from Raptor Computing Systems. to my knowledge, it's the most modern/powerful machine that does not rely on proprietary boot firmware.
my main laptop computer is a Librebooted Lenovo Thinkpad X200. i own a number of copies of this machine, purchased from Libiquity and Ministry of Freedom. i also own a Librebooted Thinkpad X200T tablet, which i use occasionally.
i run Debian GNU/Linux on all my machines. i typically stick to the "stable" version, but i occasionally jump ahead to "testing." with two machines as exceptions1, i do not enable the "contrib" or "non-free" repositories, as those include non-free software.
while i spend most of my time in a terminal, i usually do so from an X11 environment. i use the Openbox window manager with some custom keybindings, and i use GNOME terminal as a terminal emulator. i use the tako shell, and the hzeep font.
a good amount of my time is spent editing text in one form or another, and i use Vim for those tasks (although i do configure things so that a number of Emacs keybindings are available, primarily because i prefer Emacs's movement commands).
i use Mutt for reading e-mails, Vim for composing e-mails, and msmtp for sending e-mails. i work with local copies of my e-mails, and i use offlineimap to keep those copies in sync with each other. roughly once per semester, i back my e-mails up to a Git repository, so that my actual IMAP mailboxes remain small.
i self-host a server for my personal e-mails, using Postfix and Dovecot.
i view e-mail as an asynchronous form of communication. i do not receive notifications when new e-mails arrive; rather, i manually check for e-mails when it is convenient to do so. in the case where i am expecting an urgent e-mail, i use a Python script to poll for incoming messages.
although i dabble in other languages, my go-to programming language for practical use is Python. i use Vim to write programs (i do not use an IDE), and i pretty much exclusively use print for debugging. i prefer Mercurial over Git for version control, but i routinely use both.
i am strongly opposed to github, and i am also opposed to other forms of centralized repository hosting (though more moderately so). i prefer using simple decentralized tools like self-hosted repositories and e-mail for coordinating software development.
my lecture slides are primarily created using LaTeX or conTeXt, using a preprocessor that allows me to programmatically generate pieces of the source, to include figures from Metapost and Matplotlib, and to create animations and include video files. i use a small Python program to project my slides. i typeset written exams and problem sets using a similar system.
perhaps not shockingly, CAT-SOOP is my learning management system of choice.
1 i do own and use two machines that run non-free software: a desktop computer that i use for games, and a Lenovo Thinkpad X1 Carbon (which requires non-free drivers for wifi and ethernet), which i use for giving lectures, among other things (after an "upgrade," the projectors in most MIT classrooms do not support any screen resolutions that the X200 can handle).