Tell me a little bit about yourself and how you got into development
I remember, I think I was 10. My mom bought me a computer and that was the end of it. I had heard about “keygens” and how people use them for various things. I thought, “how do people make those and how do you crack software”. I wanted to learn how to make my own “keygens” and so I started learning Assembly as my first language, and then I learned C. I then moved to coding electronic boards. I played with a tiny bit of web, but wasn’t very good at it.
I went to Colombia where I got a PhD in systems programming. I mainly learned about kernel programming (I learned a ton about the linux kernel). I then got into web more seriously, learned Ruby on Rails, and contributed to the community. After that I went back to systems. So I’ve kind of been up and down the entire stack.
So, why did you create tmate?
Sometimes I’ll have to provide support or trouble shoot because people tell me that something isn’t working. I would tell them to try this or that, or give them commands to run to try and help solve their problem. It’s a really slow back and forth process.
I thought it would be much easier if I could just share a terminal with them and show them how they can debug their machine. I wanted to be able to share terminals without having to ask for SSH keys and stuff because many people wont even know what that means.
I also found times where I would want to share my terminal with friends, to show them something. I do a lot of pair programming and there wasn’t a really good solution for this, so
tmate was very ideal for this.
Really, I wanted to build a tool to allow people to share their terminal in the quickest way possible. I thought, “what is the fewest number of keystrokes we can get to have people share a terminal”. Security is also very important to me. I figured the best way to get everything I wanted was to just use
tmux and add the functionality I wanted.
I first prototype took about 2 weeks. I put it out there and people got really excited about it. I noticed that someone from DigitalOcean “starred” the project on Github so I reached out to them and asked if they would sponsor me. They agreed, and so now
tmate is hosted, by them, for free.
Since then I’ve added a few more servers for lower latency, and a web interface.
tmate is completely open source, you don’t make any money from it?
Thats right. My goal with it wasn’t to make money, I just wanted to help people. I wanted to make a really reliable service. If
tmate crashes it tries to reconnect. I feel like a really good tool should work as expected and get out of the way as quick as possible.
Not long ago I was contacted by Travis CI to help integrate
tmate internally for them. So I did make a little money then, but that wasn’t part of my goal with
I’ve had to put
tmate on hold for a bit as I’ve gotten busy with a new job, but I still have many features that I plan to add. I hope some day to create a web interface where you can see all your current active terminals. I also want to add end-to-end encryption at some point.
With all of your programming experience, what is your favorite layer in the stack?
Huh, thats a good question…
They are all fun, and all different. Ultimately, I think higher level is more interesting to me now but only because it’s easier to talk about with people. When your deep in the kernel it’s hard for others to understand what you’re doing. I’m not able to talk to anyone about what I’m doing and I don’t like that. I like to share what I do. That aspect is interesting to me. Something closer to the end user is a little more appealing because anything too complicated is going to be difficult to talk about.
I really like ruby community. I feel like the people are nice. It’s all about the people. Coding in a vacuum doesn’t work for me. If I can hang out, and talk to cool people, I’m happy.
You mentioned some contributions to the Ruby community, what were they?
I build my own database ORM for RethinkDB called NoBrainer. It’s similar to
activerecord. I was frustrated with
mongoid, and didn’t like mongoDB, and there were parts of
activerecord that I thought didn’t make sense, so I made my own.
What are you favorite languages?
Great question. I like Ruby, Elixir, and C.
I think Ruby is very cool because you can do things really fast in an elegant way. Elixir is super cool because it’s like Ruby on steroids (for expressiveness), and nothing beats the Erlang VM for concurrency. I really like C because I feel like you can do anything, and are really able to optimize it.
If I had another language to play with it would probably be Rust. I looked at Golang but wasn’t really interested. But, I still need to hone my skills in Elixir before I move on to anything else.
What advice would you give to developer, or some piece of knowledge you’d pass on?
My number one frustration with developers is that they don’t take time to really understand. When code works, they don’t know why, and so when it breaks they don’t know how to fix it. They go too fast. Once something works they stop thinking about it.
I fell like they need to get down to it and figure it out. If something doesn’t feel right, they need to deep dive and explore and figure it out by themselves. Don’t just go to StackOverflow. There is a valuable learning experience when trying to figure something out. Try to reach a deep understanding.
Second, always try to keep the big picture in mind. At the end of the day, you need to deliver value. Sometimes you need to cut corners, but that can be done by cutting features and not quality. I see people cutting corners, but not in the right way, and this causes huge issues.