Skip to content

Instantly share code, notes, and snippets.

@pkrumins
Created July 22, 2010 10:42
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save pkrumins/485827 to your computer and use it in GitHub Desktop.
Save pkrumins/485827 to your computer and use it in GitHub Desktop.
Hi Dionysios.
Thanks for the questions. My answers appear after each of the questions.
On Thu, Jul 22, 2010 at 10:55 AM, Dionysios G. Synodinos <synodinos@infoq.com> wrote:
Hi Peter,
My name is Dionysios Synodinos, I'm an editor for InfoQ and since we're doing an article on Node.js, we'd love to have your feedback.
Here are the questions:
1. Would you like to tell us a little bit about your project? What problem does it try to solve and how does it go about it?
Our project is called StackVM and it brings virtual machines to the web. The problem we are solving is making virtual computing easily available to everyone all through web browsers.
1. What are the main components of your project, how do they interact with each other and with Node.js?
Our main component is the StackVM itself (http://github.com/pkrumins/stackvm/) which uses several other node.js modules that we have written for node.js:
* dnode (http://github.com/substack/dnode)
This module lets StackVM to communicate with other components via asynchronous remote method invocations.
* node-bufferlist (http://github.com/substack/node-bufferlist)
This module abstracts binary protocol parsing.
* node-rfb (http://github.com/substack/node-rfb)
This module uses node-bufferlist to implement RFB protocol.
* node-png (http://github.com/pkrumins/node-png)
This module takes output of node-rfb and produces PNG screen updates.
* node-jpeg (http://github.com/pkrumins/node-jpeg)
This module takes output of node-rfb and produces JPEG screen updates.
* node-video (http://github.com/pkrumins/node-video)
This module takes output of node-rfb and can record screencasts of virtual machine.
* node-base64 (http://github.com/pkrumins/node-base64)
This module takes output of node-png, node-jpeg, base64 encodes it and sends it to browser (because there is no easy way to stream binary data).
Then we also use Socket.IO (http://github.com/LearnBoost/Socket.IO) and Socket.IO-node (http://github.com/LearnBoost/Socket.IO-node) modules (we didn't write these) to communicate between browser and StackVM.
So here is how it all works. StackVM uses node-bufferlist and node-rfb to open a connection to a virtual machine's VNC port. As screen updates come in, node-rfb forwards them to node-png or node-jpeg that encodes them and send them to the browser via Socket.IO. StackVM uses Socket.IO-node on the server side to communicate to Socket.IO on the browser.
And actually all this is wrapped by dnode, which abstracts communications between Socket.IO on the browser and Socket.IO-node on the server side.
1. What were your main reasons for choosing to work with Node.js? What are the key benefits for your day-to-day work?
I was looking for an AJAX solution for application and knew Plurk.com (social networking site) had great success with node.js, so I tried it.
The key benefits are quick prototyping via javascript, and thriving online community.
1. Do you think Node.js is mature enough for mainstream adoption? What do you think about the surrounding ecosystem?
1. Are you using any other Node.js libraries/frameworks in your project or everyday work? Is there any other Node.js library/framework [besides your own] that you think is especially useful and that other developers should look into?
2. If a team wants to start working with Node.js, what are the main pitfalls that they should look out for? Any tips or “best practises”?
3. From your experience, how does a JavaScript codebase scale as a project gets bigger and bigger? What tools are you using and how good do you think tool support is for real-world Node.js projects?
4. Are there things that you think are missing and should be added to Node.js? How do you think it should evolve?
5. What is the future roadmap for your project?
I understand that you are a very busy person and I appreciate your time!
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment