Vincent Woo - Bay native, soe founder, fan of unkempt hairstyles.
What inspired CoderPad?I do a lot of interviews. It's actually one of my quirks. Even while I was working at Everlane, I interviewed for a lot of other positions. It's so much fun! I like talking about myself. I like trying to figure out the ins and outs of other people's hiring processes. I like seeing how people think. Interviews are stressful environments for both candidates and interviewers. I like applying pressure to the interviewer, and seeing how they react.
I also found these other crazy kids. They're in some midwestern schools, I forget. I'm doing them grave injustice by not remembering their names right now.
[Ed note: The project is Doppio by CJ Carey, Jez Ng, John Vilk, and Jonny Leahey.]
Some people would have liked that.[we laugh]
Some people would have liked that and I would have liked that too if it was even remotely feasible. We're not in that age yet and there's all these other concerns, like various libraries and so forth. How do you dynamically pull those down? You can't do it. Basically you can't do it at scale right now. Anyway, I ended up transitioning it - the new code uses Docker.
Docker's great! It's been gaining a lot of popularity. Can you summarize it and talk about how you use it?Docker is basically cgroups and linux containers sandboxing and standardization. You can restrict privileges. It's perhaps not as thorough as BSD's jailing, but Docker containers present this unified way to think about the world. That's the critical point with Docker. That's the genius innovation. In three years we're all going to be deploying software with Docker. We just don't know it yet. It's definitely coming. This is a tidal wave.
Vincent again, showcasing another unkempt hairstyle.
How far can you stretch your current setup? Does it, say, allow for running multi-threaded or multi-process programs?Totally. Docker is actually very good at containerizing multiple processes per image. It's very flexible in this regard. A lot of other languages will run a compiler and then execute a binary. They do multi-step stuff. A lot of the other REPLs will execute this Ruby code and then shell me into a REPL instance with the same context as the code that I just ran. You can run some code with x=10 and then immediately after, CoderPad will give you a REPL where you can play with the value of x in real time. It's still 10. That' the magic. No one else really has this voodoo for maintaining state.
For instance, I have this MySQL mode. In MySQL mode, I have some default schema set up in MySQL database. I run the MySQL daemon and then I also run the MySQL CLI so that the user can play on a live MySQL CLI, querying a live data set in real time.
Have you seen any interesting or really novel use-cases from this?I saw a guy program a videogame in CoderPad. It was a roguelike MMO -- text-based. He would interact with standard in and out to move his character around. He built the whole thing in CoderPad. This CoderPad was live for days. He just kept coming back to the tab and using the same code. Ordinarily I would say that a product like Nitrous.IO is much better suited to this application, but I've been really surprised at just how far people can take it. It can do pretty much anything that you need to do at this point. A lot of people use it for pair programming and tutoring. That's another big use case.
Has anyone broken through CoderPad's isolation yet - exhausting resources, assumed root, anything? Even though the processes are run in Docker, your monitoring seems to be a bit ad-hoc.As far as I can tell, no one's managed to break CoderPad's isolation.
With the stack you've built so far, are you going to being focused on this narrow set of use-cases that you've figured out? Or do you want to do other stuff like, say, classroom-wide code execution guidance, general pairing, etc?Let me tell you a funny story.
You know how one of the things that makes Stripe great is the quality of their documentation, right? Especially all their code examples. A lot of those are so good that you can actually paste them into an IRB console! But, I wondered - what if you could just hit a button and it would run all that code in the console, and you could see the output?
So I just went ahead and built it. I hacked together this static HTML page that connected to my back end. It looked nice. I broke into the Stripe holiday party, grabbed as many people as I could and made them look at it, and got their emails.They debated internally briefly, and they just told me "no." I never really figured out why.
That kind of hurt me inside a little bit as a person. Not really, I'm dramatizing. But I've wanted to revisit this idea because I think there's a lot of potential here for API-heavy companies who live and die by getting developers on board their platform to have more interactive API exploration.
I think there are some companies pursuing this - Runnable and Apiary, for example. But none of them have high-fidelity, real time experiences. You can't just hit a button and get dropped into a console. You could with CoderPad, of course.
Posted by Vaibhav Mallya on May 18, 2014. Don't forget to subscribe to our list to stay up-to-date!