Matt Might

Matt Might

CS Professor (University of Utah)

Posted Photo by David Van Horn.

Filed under:

Who are you, and what do you do?

I'm Matt Might (@mattmight, matt.might.net), a professor in the School of Computing at the University of Utah. My research focuses on creating software that can think deeply about and predict the behavior of other software. (Usually, that's to improve performance and guarantee security.) But, when I'm recognized, it's usually as the author of The Illustrated Guide to a Ph.D.

In short, I research, I write, I teach, I lecture, I organize, I blog and I tweet.

The guiding philosophy behind my setup is to make it easy to do the things I should be doing, and hard to do the things I shouldn't.

What hardware do you use?

I travel a lot, so size is the dominant factor for my primary computer--a maxed-out 2011-model 11" MacBook Air. It docks with a 27" ThunderBolt display and a Harmon Kardon Soundsticks speaker/subwoofer system.

A 512 MB RAM, 36 GB linode powers might.net and my personal cloud.

A 2010-model Mac Mini drives Netflix, iTunes, Hulu and Amazon Video to the TV. A bluetooth Apple Magic TrackPad and Apple Keyboard pair serves as remote control from the couch, while VNC does the job from elsewhere.

I carry a 16 GB iPhone 4 with me to kill dead time with email, take notes, play Spotify over bluetooth in my car and not get lost. I use a 64 GB 3G iPad 2 to peer review papers and edit my own while I work out. On my desk, it's a search and reference device. For travel where these may become my only net-connected devices, I bring a bluetooth Apple Keyboard.

Every computer has a large dedicated external hard drive for backups. Currently, I'm partial to the Western Digital Elements series.

I use a Linksys E2500 Dual-Band router, with SSH and VNC port-forwarded to allow remote access to the home network. After its predecessor--a 2 TB Time Capsule--died, I realized it's better to split the functions of household file server and router among two devices.

You can pry my Kensington remote from my cold, dead, ergonomic grip.

To teach my sister-in-law about computing, I had her assemble a 2.6 GHz, 2 GB RAM, 100 GB frankensystem from about $80 in parts bought at surplus. We installed Ubuntu on it, she used it for a summer, and now it's slated to become the nerve center for the home security and automation system.

You will find 85 Watt MagSafe laptop power adapters (sometime two) pre-installed everywhere we frequent in my house: the couch (x 2), the kitchen desk, the home office (x 2), the rocking chair and the bed. Another lives permanently in my travel bag.

When I travel, I always carry a portable power strip for airports and a HyperShop HyperJuice external battery for long plane flights.

I can't afford time off work to exercise, so I attached a Table Mate II couch desk to a Marcy Recumbent Mag Cycle, and moved it next to the desk in my home office. Honestly, I'm more productive on the bike than off.

We don't have cable, and I keep news websites blocked, so I read dead-tree newspapers: the Wall Street Journal in the morning and the New York Times in the afternoon. No eReader matches the experience.

Atmosphere is critical to my creativity, so my home office has a view of the towering Wasatch mountains and the six pet chickens I raise for eggs wobbling innocently about my backyard. The juxtaposition of grandeur and responsibility keeps me grounded and focused.

And what software?

To me, Unix is digital clay, readily sculpted into any form or function.

I ran Red Hat Linux for about seven years before switching to the Mac. I've been using OS X for about six years now.

My only regret in switching from Linux to OS X is giving up the raw efficiency of tiling window managers like ion. ShiftIt makes up some of the difference. To make up some more, I pin applications to one of six desktops: (1) terminal and text-editing; (2) real-time communication; (3) browsing; (4) organization and planning; (5) reading; and (6) media and games. Each desktop captures one frame of mind.

The linode for might.net and my personal cloud runs Ubuntu. Its current uptime is 218 days, and its record uptime exceeds two years.

My iOS devices run many single-purpose, one-off native-style apps that I roll from HTML, JavaScript and CSS. My top three regular iOS apps are Spotify for music, Amazon for eliminating errands and Skype for calling. (Skype is my home phone.)

Most software finds its way onto my systems through MacPorts on OS X and the apt package management system for Ubuntu.

When it's imperative that a page renders properly in Internet Explorer, Windows XP and Windows 8 running in VMWare Fusion get the job done.

I used emacs (Aquamacs) for eleven years for editing text and code. To get a sense of what vim was like, I switched last year (MacVim). I haven't switched back, but I've customized vim to accept all of the emacs keybindings in insertion mode.

I spend a lot of the time at the console, so I wrote scripts to automatically adapt my shell to the tasks I execute most frequently. Since I also do a lot of writing and editing, I also wrote shell scripts that catch bugs in my writing.

My personal site and blog run off a homebrewed, slowly-evolved collection of shell scripts, Makefiles, HTML, CSS and JavaScript.

For creating technical and scientific documents, I use exclusively LaTeX, and manage all of my citations with citeulike exporting to BibTeX.

For giving presentations, I use Keynote 09 with LaTeXiT. For talks based on a research paper, the ability to copy and paste vector-scalable graphics from PDFs in Preview into Keynote is a killer feature. It is worth investing the time to master Keynote animations and transitions, so that style and substance in your talks reinforce one another.

I used to use LaTeX plus beamer, but this setup makes the right things hard (capturing and conveying the essence of an idea visually) and the wrong things easy (flagellating the audience with unparseable mathematics).

For charts (like this one), OmniGraphSketcher for OS X is a joy to use. For rendering graphs based on data, GraphViz creates beautiful images. For graphs constructed by hand, OmniGraffle is perfect.

I've managed to avoid using Microsoft Office when someone sends me a Word or Excel file all but once in the past decade through a combination of Google docs and OpenOffice.

I use LeechBlock on Firefox and StayFocusd on Chrome to permanently block all timewasting sites. Analog newspapers are more efficient for news.

For debugging web sites, I love firebug. I use Greasemonkey to automate my web experience (example 1, example 2) in the same way that I use shell scripts to automate my console experience.

For task management, I use OmniFocus on my MacBook Air, my iPhone and my iPad. The shared database lives on my linode and syncs over WebDAV.

My wife and I keep our phones, laptops and iPads synced with about six different Google Calendars, so that we can play secretary for each other. I'm a fan of the appointment-scheduling feature of Google Calendar, which lets students sign up for my office hours without much hassle to me.

I use DropBox to sync low-security files between devices, and I run a secure WebDAV server on my linode for syncing high-security files over SVN.

My hand-rolled personal note-taking wiki on my linode has been replaced by Evernote on my MacBook Air, iPhone and iPad.

For collaboration within my research group, my linode also hosts an SVN repository exported over WebDAV, but we are currently transitioning to git over WebDAV.

I use TweetDeck for my twitter client, and I use SMS instead of instant messaging. I take advantage of the scheduled tweet feature in TweetDeck to stay active, particularly while I travel.

For IRC, I'm nostalgic for the customizability of mIRC. It's the only program I miss from Windows. My linode runs a bip IRC proxy that I connect to via Colloquy. Before bip, I used irssi and a screen session on my linode.

Google Analytics and live searches on twitter are invaluable in figuring out how readers engage my blog, and how to tailor my content to their needs.

My favorite shell commands are ssh, screen, grep, find, awk, sed, cut, sort, and pbcopy, pbpaste.

In any given month, I'll write code in about a dozen different programming languages, but the languages I use the most are Racket, JavaScript, bash, LaTeX, Scala, C, PHP, Perl, Python, C++ and Haskell. I write all my code in vim, with the exception of Racket, for which I use DrRacket.

One should always choose the programming language that reduces the impedance mismatch between a problem and its solution.

What would be your dream setup?

When I was young, I dreamed about building a "nerd cave" full of fast hardware, big monitors, sleek software and cool gadgets.

I see now that technology can only nip at the margins of happiness, creativity and productivity relative to the effect of having sharp colleagues, good friends and close family nearby.

I have many sharp colleagues that double as good friends.

And, there's an outside chance that in the next two or three years both of my brothers and all three of my sisters-in-law (each of whom is like an actual sister to me) will have joined me and my wife in Utah.

I hope it happens.

That's my dream setup.