Fog Creek

dev.life – Interview with Peteris Krumins

In dev.life, we chat with developers about their passion for programming: how they got into it, what they like to work on and how.

Today’s guest is Peteris Krumins, co-founder and CEO of Browserling, an online cross-browser testing service. He’s also the author of ‘Perl One-Liners‘, a book about getting things done quickly on the command line with Perl. He writes regularly about software development on his blog.


Peteris Krumins
Location: San Francisco, US
Current Role: CEO of Browserling

How did you get into software development?

I’ve been playing with computers since around the age of 6 when I first got access to a 386 or 486 computer at Mom’s work. The first time I sat at a computer I was completely hooked. From then on I was dreaming every day to have my own computer. It took me a while to get a computer and until I did I tried to get access anywhere I could. I made a ton of friends who were interested in computers and used their computers. I even pretended to be a student at several universities while being just a kid to gain access to the Internet!

I actually got a laptop first. I had a friend called Zombie and he was this amazing sysadmin. Somehow he had a spare laptop and he gave it to me for free. I still have it. The IBM Butterfly laptop (ThinkPad 701CS). It had 8 MB of RAM, 800MB disk, and I dual booted Windows 95 and OpenBSD on it. I later upgraded it to 40MB of RAM. It also had a thinnet PCMCIA network adapter card and my first home network was 10Mbit/s thinnet. For those of you who haven’t heard of thinnet, it’s Ethernet over coaxial cable, aka 10BASE2.

ibm

I finally got my own computer much later though at the age of 15. It was a killer machine running a 400Mhz Celeron with 256MB of RAM, 8GB hard drive, a 3D Blaster Banshee 16MB video card, and a 17” 75Hz 1024×768 CRT screen. The computer was running Windows 98 that just had come out.

I’m 100% self-taught. I started with a bunch of languages at once. When I got my Celeron computer I already had a clear understanding of what I wanted to do. I wanted to make web pages so on the first day that I got the computer I started writing in HTML, JavaScript, and CSS. At first I didn’t quite understand how websites operated and didn’t know about server-side languages so it took me some time to understand that I needed a web server to run websites. I was hosting my sites at Angelfire at first but later I set up my own Linux Slackware web server with PHP and MySQL. I also wanted to be a hacker so I learned C and Assembly. I spent ridiculous amounts of time on IRCNet, so I learned mIRC scripting as well and created my own IRC client in Visual Basic.

Tell us a little about your current role

My current role is CEO of Browserling. I started Browserling in 2011 in the Bay Area together with a friend. My typical day involves writing a lot of code, managing servers, working with my customers and my employees. I love what I do and I currently can’t imagine myself doing anything else than running a software company. I was a huge Paul Graham fan and his essays encouraged me to start a startup.

I’m currently 100% focused on growing the business. I don’t do any side projects and have stopped writing books as that would shift my focus away from the company. The number one rule of building a successful company is having 100% product focus. I’m currently growing revenue and building an international remote team at Browserling. I just hired a great engineer in Ukraine and I’m expanding the company to non-English markets.

I’m also solving a lot of technical problems, such as how to efficiently stream browsers running on virtual machines to clients and how to capture hundreds of browser screenshots per second. I love working with servers and I’m planning to move the server stack from EC2 and Rackspace cloud instances to real hardware. Cloud servers are great when you just start but once you get to a certain point it makes a lot of sense to switch to your own hardware. It saves a lot of money and increases performance.

When are you at your happiest whilst coding?

I’m happiest when I’m in the zone and when I get things done. I’m able to get into zone quite often and I can share my secret. I’m up during the night and I sleep all day. Nighttime is the perfect time for being in the zone. Night eliminates all distractions and keeps you alert and focused. Another secret to being in the zone is closing Twitter, Facebook, Skype, GTalk, and G+. When you’re in the zone, you don’t want be disturbed by sudden sound alerts or messages.

new

What is your dev environment?

I have a dual Windows/Linux setup. I use Windows 7 on my primary workstation and I SSH into my Linux servers. I just built a brand new workstation last month. I got an Intel i7 4790K and overclocked it to 4.7Ghz.

Then I have a Linux firewall server, a Linux file server and a Linux development server. I mount the Linux file server on Windows over Samba, and it runs a bunch of drives in RAID6, which allows for two drive failures. All these Linux servers run Slackware. I love the simplicity of Slackware. I go with minimalistic installs and then add only the packages that I need. So for example the firewall doesn’t have much more than Bash, Vim and Iptables. The file server has Bash, Vim, Cryptsetup and Samba. And the development server has everything I need for development.

I use Vim on Windows and Linux, and gVim and Visual Studio on Windows. I can’t imagine doing Windows application programming in an environment without IntelliSense. I have a highly customized Vim and I use two dozen plugins, such as:

  • surround.vim (quickly edit surrounding text)
  • repeat.vim (repeat surround commands)
  • matchit.vim (extend what % key matches)
  • snipmate.vim (code snippets)
  • nerd_tree.vim (explore filesystem from vim)
  • a.vim (alternate C and H files)
  • ragtag.vim (mappings for editing HTML)
  • tabular.vim (aligning text)
  • bufexplorer.vim (working with buffers)
  • python.vim (better python support)
  • exchange.vim (exchange text quickly)
  • abolish.vim (substitute words)
  • speeddating.vim (increment dates)

and many others.

On Windows, I couldn’t live without:

  • Total Commander (file manager)
  • Visual Studio (can’t beat IntelliSense)
  • SQLyog (GUI manager for MySQL databases)
  • SQLiteSpy (GUI manager for SQLite databases)
  • pgAdmin (GUI manager for Postrgres databases)
  • WinSCP and SecureFX (secure FTP clients)
  • Putty and SecureCRT (SSH clients)
  • KeePass (password manager)
  • ClipX (clipboard manager)
  • Launchy (program launcher)
  • Locate32 (file indexer)
  • allSnap (window manager)
  • AutoHotkeys (automate tasks and programs)
  • Virtual CloneDrive (mount disk images)
  • IsoBuster (extract disk images)
  • ImgBurn (image burner)
  • Enounce MySpeed (speedup or slow down videos)
  • Hex Workshop (hex editor)
  • VMWare Workstation (virtual machines)
  • Cygwin (unix tools)
  • UltraMon (multi-screen support)
  • Beyond Compare (diffing tool)
  • Tclock2 (better clock)
  • Fineprint (printer proxy)
  • SumatraPDF (better PDF viewer)
  • AviSynth (edit videos programmatically)
  • ffmpeg (convert videos)
  • VirtualDub (convert and edit videos)
  • WinDirStat (disk space visualization)
  • clink (better cmd.exe)
  • IDA Pro (debugging)
  • Photoshop
  • Sysinternals tools

On Linux, I couldn’t live without:

  • samba (mounting Linux on Windows)
  • tmux and screen (persistent shell sessions)
  • all the standard UNIX utilities (awk, sed, grep, head, tail, uniq, sort, etc.)
  • perl (rapid prototyping, quick hacks, one-liners)
  • iptables and nftables (firewalling)
  • htop (better top)
  • mtr (better traceroute)
  • multitail (tail multiple files in multiple windows)
  • nc (netcat, TCP/IP swiss army knife)
  • iftop (bandwidth monitor)
  • ack (better grep)
  • ipcalc (network address calculator)
  • pv (pipe viewer – UNIX pipe progress bar)
  • rsync (backups)
  • ncdu (disk space visualization)
  • curl (http client)
  • nmap (network scanner)
  • tcpdump and wireshark (for network debugging)
  • sysdig (strace + lsof + tcpdump combined)
  • youtube-dl (downloading all online videos)

and many more tools.

I code sitting. I’ve never tried coding standing or walking. That just seems too weird. When I’m in the zone, I listen to Vocal Trance stream from di.fm. But only if I’m in the zone. Otherwise music is too distracting. I couldn’t code without a Microsoft Natural keyboard. I’ve had mine for over 10 years. It still works well but is showing age.

I take a lot of notes when trying to figure something out. As soon as I have a more complicated problem, I try to break it up into smaller sub-tasks that can be easily solved. Then I create a ToDo list for the tasks, get them done one by one, and cross them out. Actually I’ve several ToDo lists of long-term tasks (next 1-2 years), mid (next few months) and short-term tasks that I’m doing right now.

What are your favorite books/resources about development?

I’m crazy about computer books and science books in general. Every few months I spend a day researching the latest literature and buying the most interesting titles. I’ll list my top 5 coding, development and computer books.

  • The New Turing Omnibus
    A must read for anyone interested in computers. This excellent book contains 66 short essays on the most important and interesting computing topics, such as compression, Turing machines, formal grammars, non-computable functions, and neural networks. The writing style of this book is casual and it contains almost no math. It’s my favorite book of all time.
  • The Little Book of Semaphores
    This book teaches how to think about multithreaded execution and how to solve synchronization problems. I highly recommend it, especially if you’re self-taught. It leads the reader step by step through a series of classical and not so classical synchronization problems. It’s great fun to work through the problems and I’ve been recommending it to everyone ever since I found it.
  • Programming Pearls and More Programming Pearls.
    Classic programming books. Jon Bentley knows how to write clearly and enthusiastically about algorithms. These books are timeless and they teach you how to reason about problems, break them apart, and efficiently implement the solutions. You’ll pass the Google interview if you read these two books.
  • The Little Schemer
    The Little Schemer teaches you a little bit of LISP in the most fun style ever. The book is a dialogue between you and the authors about hundreds of tiny Scheme programs and it teaches you to think recursively. This book will make you think and will stretch your mind a little. It’s one of the most fun programming books ever written.
  • The Elements of Style and The Elements of Programming Style
    The Elements of Style is not exactly a development or coding book but a book on writing. To be a great programmer you need to communicate clearly and writing skills are essential. It’s 100 pages long and you can read it in one evening.
    The Elements of Programming Style is a classic programming book by Kernighan and the form of this book is strongly influenced by The Elements of Style. It’s an old book but mostly everything it teaches still applies today. It contains 70 rules of programming such as Write clearly – don’t be too clever. Say what you mean simply and directly. Choose a data representation that makes the program simple. Let the data structure the program.

And I just got started. I could easily do my top 100 favorite books. Message me if you need book advice or want to talk books with me!

bookshelf

What technologies are you currently trying out?

I’m a big Visual Studio fan so I just downloaded Visual Studio 2015 Preview and have been playing with it. I also just installed Windows 10 Preview on a virtual machine. Since I do so much cross-browser testing, I’m really looking forward to see what Microsoft’s new browser called Spartan will offer.

Google just open-sourced Kythe, that should be a way better code indexer and explorer than anything else out there. I heard about it last year already from a Googler friend and I have been impatiently waiting for it. I’ll be trying it on Linux Kernel’s source this weekend.

If I had more time, I’d combine Oculus Rift with a motion platform to build a true virtual reality rig.

When not coding, what do you like to do?

I like to keep myself in shape. I do track and field. I’ve found that sprint workouts are better than coffee. On the days when I do 10x60m sprints I get energized for 10-12 hours and I code like a beast all night long. I also like to compete in track meets. 400m sprint and 800m race are my favorite distances.

What advice would you give to a younger version of yourself starting out in development?

I can think of four bits of advice for my younger self:

  • Get things done quickly, efficiently and move on.
  • Don’t do things that don’t create value.
  • Start a programming blog much earlier.
  • Release early and often.

This post is also available in Chinese, Portuguese and Russian.

Thanks to Peteris for taking the time to speak with us. Have someone you’d like to be a guest? Let us know @FogCreek.

Recent dev.life Interviews

Antirez
Salvatore Sanfilippo
hakim
Hakim El Hattab
phil_sturgeon
Phil Sturgeon
leah_culver
Leah Culver