Brandon Lucia
Photo by Nicki Dell.

Brandon Lucia

Computer researcher, musician (netcat)

Who are you, and what do you do?

My name is Brandon Lucia. I am currently a researcher at Microsoft Research and, starting in November 2014, I am transitioning to a new job as an assistant professor of Electrical and Computer Engineering at Carnegie Mellon University. I got my PhD in Computer Science and Engineering at the University of Washington in 2013.

I do research on computer architecture. Computer architecture is the branch of computer science that defines the boundary between hardware and software. Computer architects figure out how to organize the parts of the computer (like the memory, interconnection network, processors, etc) so that computers are fast, energy efficient, reliable, and programmable. I am particularly interested in concurrency and parallel computer systems. Recently, I've started investigating computer architectures for systems that harvest energy from their environment (like solar, RF, wind, vibration, etc).

I am also a founding member of the band netcat with David Balatero and Andrew Olmstead. We play music that combines conventional instruments (drums & cello) with electronic instruments (synthesizers, effects) and lots of custom music creation software that we wrote. With our label Table and Chairs, we just released our album 'Cycles Per Instruction' on cassette, digital, and as a functioning, loadable Linux kernel module.

What hardware do you use?

For research, I am pretty simple. I use a MacBook Pro with an 2.66 GHz Core 2 Duo, 8 GB of 1GHz DDR3 memory, a 256GB spinning platters, non-solid state harddrive, and a 13 inch screen. For my energy harvesting research, I hack on embedded devices - mainly the TI MSP430FR5969 MCU on either the TS430RGZ-48C project board or the UW WISP5 prototype board. To harvest RF energy, I use a P2110 Powerharvester component, or the WISP5 custom-built energy harvester. With those, I also use various breadboards and individual components. I have occasionally used Arduino. I have a Parallella board that I can't wait to turn into something neat when I find the time.

For netcat, there's more gear. I use my research laptop, but also another, older MacBook Pro with a 1.8GHz CPU, 4GB of RAM, and a 128GB hard drive. Most of my signals are generated by the laptops. Downstream from the laptops are a Boss SP-505 "Groove Sampling Workstation" that I use as a volume knob, effects processor, and very rarely a sampler and an Electro-Harmonix Cathedral Stereo Reverb that I usually run mono signal into. I have a piece of junk Behringer mixer that I occasionally use when I have more than 2 inputs. I have a Roland GAIA SH-01 synthsizer and an Akai MPK mini USB keyboard that I use occasionally during sets. I also use two really bright bike lights and my Samsung Galaxy S5 (in strobe light mode). I'll explain why in a sec.

And what software?

For research, again, pretty simple. I have basic needs. I am always using my Mac, so by default, I use what is available on OS X. I browse the web with Chrome (mainly pinned to Gmail + Google Calendar). I read PDFs with Preview. I usually use Grooveshark to listen to music. I prefer to do everything else in a console window. I edit text with vim. Most of my writing is in LaTex markup. I use pdfTeX from the TeX Live 2012 distribution. LaTex is a pain in the ass, but also makes things look beautiful, so I have a pretty love-hate relationship with it. To make the figures that go in my papers, I use OmniGraffle, which rules for line art. I make slides for talks in Keynote and I have a really hard time using PowerPoint -- not because it's bad, just because it's different enough to be confusing.

For programming, I'm also pretty console-focused. I prefer the 'make' buildchain. I was a longtime GCC user, but I've recently started using LLVM because I was doing some research that needed compiler support and building it to work with LLVM/Clang was much easier than for GCC. Either is OK, but I think LLVM is getting ahead of GCC a little bit. I have used Cmake for build configurations a few times and it works great. I often have to do hardware simulations. For that I have successfully used Pin, which is a dynamic binary instrumentation system. For embedded development, I have used mspgcc + MSPDebug, which work great when it works. I prefer not to use the TI-sanctioned Eclipse-based IDE.

In netcat, most of the software we use, we wrote. We do use a DAW for some things. I used Audiofile's Rax for a while, but they discontinued it. I still use it, but I really need to switch to something that's not totally unsupported. We use MainStage for some MIDI routing.

The rest is custom software. I made a new kind of musical instrument called the Chango that captures video with the computers camera and uses that signal to create sound. I play this instrument by pointing my camera at a wall and shining my bike lights on the wall to play melodies and harmonies. I also built a generative statistical language model of web text that produces English-sounding gibberish "lyrics" for our music. My friend Tony Fader built another statistical language model that analyzes the sentiment of opinions registered on the web. We use that model to generate pairs of statements with varied sentiment (i.e., one positive, one negative). For both models, we use the OS X 'say' command to generate speech. We have a special network monitoring program that we built. It captures packets with Wireshark. A scripting layer converts the packets to MIDI information and a MIDI interface layer that I built pushes the MIDI info out to a DAW (Rax/Mainstage). I also made a simple audio abstraction and synthesis layer for OS X that I used in a custom, on-off program on one of our tracks to make a sequenced, 128-voice polyphonic synth pad.

What would be your dream setup?

For research, my dream setup would be a really fast MacBook Pro with a slightly larger screen, enough RAM that it never needs to think very hard, and a 4GHz processor. Then, to do experiments that often take a long time, it would be awesome to have a bunch of tricked out servers somewhere -- terabytes of RAM, infinite storage, all that. Those should probably run Linux. For the embedded stuff, I really just want a dufflebag full of WISP5s or P2110's installed on breadboards, with antennas, ready to connect to a fleet of MSP430s. It would be cool to have a stash of Xilinx Zynq-7000 FPGA/SoC boards, too. I think parallel computers with programmable hardware, like FPGAs, mixed in are going to be a pretty important kind of system in the future.

For the band, I have wanted a Dave Smith Instruments Prophet 12 since my friend Rob bought his. It would be cool to expand my effects rig, too. I'd probably get a high-quality chorus and delay box. Software-wise, I wish I would get off my butt and finish implementing the Chango AudioUnit plugin, so I can use the Chango in a DAW. Other than that, I just need a white wall and a room dark enough to play the Chango without ambient light interference.