<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearch/1.1/' xmlns:georss='http://www.georss.org/georss' xmlns:thr='http://purl.org/syndication/thread/1.0' xmlns:gd='http://schemas.google.com/g/2005' gd:etag='W/&quot;A0cBRnczfip7ImA9WhRQEks.&quot;'><id>tag:blogger.com,1999:blog-2569837522518203910</id><updated>2011-12-07T08:44:17.986-06:00</updated><category term='install'/><category term='node.js'/><category term='sandbox'/><category term='setup'/><category term='cheat sheet'/><category term='introduction'/><category term='javascript'/><category term='nowjs'/><category term='html5'/><category term='shader'/><category term='testbed'/><category term='mjs'/><category term='tdlmath'/><category term='Mint'/><category term='github'/><category term='hosting'/><category term='buffer'/><category term='First Post'/><category term='css'/><category term='coffee script'/><category term='2D'/><category term='apptob.org'/><category term='web worker'/><category term='windows'/><category term='cimaron.net'/><category term='cake'/><category term='database'/><category term='box2d.js'/><category term='node-optimist'/><category term='ewgl'/><category term='idea'/><category term='math'/><category term='mysql'/><category term='rpc'/><category term='programming'/><category term='amino'/><category term='dnode'/><category term='language'/><category term='options parser'/><category term='webgl'/><category term='netbeans'/><category term='visual programming'/><category term='platform-as-a-service'/><category term='Canvas'/><category term='scene graph'/><category term='editor'/><category term='blogger'/><category term='multi-threading'/><category term='glmatrix'/><category term='Linux'/><category term='glsl'/><category term='closure'/><category term='tdl'/><category term='foss'/><category term='scenejs'/><category term='socket.io'/><category term='ide'/><category term='OS'/><title>HTML5 Canvas MMORPG Games</title><subtitle type='html'>HTML5 Canvas MMORPG Games Javascript Webgl Node.js Nowjs Websocket socket.io mmo</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://html5canvasmmorpggames.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2569837522518203910/posts/default?redirect=false&amp;v=2'/><link rel='alternate' type='text/html' href='http://html5canvasmmorpggames.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>george endrulat</name><uri>http://www.blogger.com/profile/05240665595263664658</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>19</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry gd:etag='W/&quot;A0cBRncyfSp7ImA9WhRQEks.&quot;'><id>tag:blogger.com,1999:blog-2569837522518203910.post-1442177398901588531</id><published>2011-12-07T07:43:00.001-06:00</published><updated>2011-12-07T08:44:17.995-06:00</updated><app:edited xmlns:app='http://www.w3.org/2007/app'>2011-12-07T08:44:17.995-06:00</app:edited><category scheme='http://www.blogger.com/atom/ns#' term='install'/><category scheme='http://www.blogger.com/atom/ns#' term='node.js'/><category scheme='http://www.blogger.com/atom/ns#' term='windows'/><title>Install Node.js in Windows</title><content type='html'>If you're like me you are forced to use windows at work, and I know that is quite a few people. &amp;nbsp;I'm not going to get into why that's a bad thing or any of the pro-linux talk, it is what it is. &amp;nbsp;I'm also not going to get into the fact that if you're a gamer chances are you're running windows at home (although I hope&amp;nbsp;&lt;a href="http://www.humblebundle.com/"&gt;http://www.humblebundle.com/&lt;/a&gt;&amp;nbsp;changes all that) as linux isn't the&amp;nbsp;preferred os for gaming, not that it isn't better or worse, again: it is what it is. &amp;nbsp;For the record, I am pro-linux.&lt;br /&gt;
&lt;br /&gt;
For most of what this blog is about is based on node.js. &amp;nbsp;So we need a way to install and use node.js in windows.&lt;br /&gt;
&lt;br /&gt;
Let's proceed to&amp;nbsp;&lt;a href="http://nodejs.org/#download"&gt;http://nodejs.org/#download&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-Ft3b5B_sdzc/Tt9vwyB5LkI/AAAAAAAABTQ/s_UcDHD0-CQ/s1600/Untitled.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="206" src="http://2.bp.blogspot.com/-Ft3b5B_sdzc/Tt9vwyB5LkI/AAAAAAAABTQ/s_UcDHD0-CQ/s320/Untitled.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
That's the windows msi installer, the one we want. &amp;nbsp;By the time you read this they might be on v1.0.0 for all I know, but I'm guessing it'll be about the same. &amp;nbsp;Currently the 0.6.5 is ~3 MB. &amp;nbsp;Let's run it.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-0sLAasHt4fk/Tt9wk4t4UzI/AAAAAAAABTY/To6PxFMk_hs/s1600/Untitled.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="249" src="http://4.bp.blogspot.com/-0sLAasHt4fk/Tt9wk4t4UzI/AAAAAAAABTY/To6PxFMk_hs/s320/Untitled.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
And click "Next".&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-P-1Q23WoOoI/Tt9w_q-L_MI/AAAAAAAABTg/8UarkOx4LLw/s1600/Untitled.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="249" src="http://1.bp.blogspot.com/-P-1Q23WoOoI/Tt9w_q-L_MI/AAAAAAAABTg/8UarkOx4LLw/s320/Untitled.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
We're almost done.&lt;br /&gt;
&lt;br /&gt;
Let's open up a text file in notepad and copy/paste this test node.js application:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;pre style="background-attachment: initial; background-clip: initial; background-color: #f4f4f4; background-image: initial; background-origin: initial; border-bottom-style: none; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-style: none; border-left-width: 0px; border-right-style: none; border-right-width: 0px; border-style: initial; border-top-style: none; border-top-width: 0px; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; overflow-x: visible; overflow-y: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; vertical-align: baseline; width: 640px;"&gt;&lt;span id="lnum1" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #606060; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;  &lt;/span&gt;require(&lt;span style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #006080; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;'http'&lt;/span&gt;).createServer(&lt;span style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: blue; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;function&lt;/span&gt;(req,res){&lt;/pre&gt;
&lt;div style="background-attachment: initial; background-clip: initial; background-color: #f4f4f4; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: 'Courier New', courier, monospace; font-size: 11px; line-height: 16px; margin-bottom: 24px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; vertical-align: baseline;"&gt;
&lt;/div&gt;
&lt;pre style="background-attachment: initial; background-clip: initial; background-color: #f4f4f4; background-image: initial; background-origin: initial; border-bottom-style: none; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-style: none; border-left-width: 0px; border-right-style: none; border-right-width: 0px; border-style: initial; border-top-style: none; border-top-width: 0px; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; overflow-x: visible; overflow-y: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; vertical-align: baseline; width: 640px;"&gt;&lt;span id="lnum2" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #606060; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;   &lt;/span&gt;     res.writeHead(200,&lt;span style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #006080; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;'text/plain'&lt;/span&gt;);&lt;/pre&gt;
&lt;div style="background-attachment: initial; background-clip: initial; background-color: #f4f4f4; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: 'Courier New', courier, monospace; font-size: 11px; line-height: 16px; margin-bottom: 24px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; vertical-align: baseline;"&gt;
&lt;/div&gt;
&lt;pre style="background-attachment: initial; background-clip: initial; background-color: #f4f4f4; background-image: initial; background-origin: initial; border-bottom-style: none; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-style: none; border-left-width: 0px; border-right-style: none; border-right-width: 0px; border-style: initial; border-top-style: none; border-top-width: 0px; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; overflow-x: visible; overflow-y: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; vertical-align: baseline; width: 640px;"&gt;&lt;span id="lnum3" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #606060; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;   &lt;/span&gt;     res.end(&lt;span style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #006080; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;'Hello World!'&lt;/span&gt;);&lt;/pre&gt;
&lt;div style="background-attachment: initial; background-clip: initial; background-color: #f4f4f4; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: 'Courier New', courier, monospace; font-size: 11px; line-height: 16px; margin-bottom: 24px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; vertical-align: baseline;"&gt;
&lt;/div&gt;
&lt;pre style="background-attachment: initial; background-clip: initial; background-color: #f4f4f4; background-image: initial; background-origin: initial; border-bottom-style: none; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-style: none; border-left-width: 0px; border-right-style: none; border-right-width: 0px; border-style: initial; border-top-style: none; border-top-width: 0px; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; overflow-x: visible; overflow-y: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; vertical-align: baseline; width: 640px;"&gt;&lt;span id="lnum4" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #606060; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;   &lt;/span&gt; }).listen(&lt;span style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #006080; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;'8080'&lt;/span&gt;);&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
Save it as server.js to your root directory C:\ or whatever it may be.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
So now we run in a command prompt/powershell:&lt;br /&gt;
You can bring that up with Windows Key + R and typing in CMD&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Your node.exe is located usually &amp;lt;root&amp;gt;\Program Files\nodejs\node.exe&lt;br /&gt;
so probably: C:\Progra~1\nodejs\node.exe&lt;br /&gt;
&lt;br /&gt;
node.exe c:\server.js&lt;br /&gt;
&lt;br /&gt;
The server.js is the one I had you create and save to your root directory earlier.&lt;br /&gt;
&lt;br /&gt;
If it's your first time doing this you'll end up with:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-pGuxPbTwehE/Tt94nFP-p5I/AAAAAAAABTo/6ITb0czIoS4/s1600/Untitled.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="263" src="http://2.bp.blogspot.com/-pGuxPbTwehE/Tt94nFP-p5I/AAAAAAAABTo/6ITb0czIoS4/s320/Untitled.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Click "Allow access"&lt;br /&gt;
&lt;br /&gt;
Now open up your browser (here I am using Chrome 17)&lt;br /&gt;
&lt;br /&gt;
And let's see if our server.js is running by following the link or typing it in:&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://localhost:8080/"&gt;http://localhost:8080/&lt;/a&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-WIa7_u_waYk/Tt96teeXNPI/AAAAAAAABT4/zZPUQJ0CrOw/s1600/Untitled.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-WIa7_u_waYk/Tt96teeXNPI/AAAAAAAABT4/zZPUQJ0CrOw/s1600/Untitled.png" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
If your results look something like this you've done it!&lt;br /&gt;
&lt;br /&gt;
Node.js is fully installed, running, and tested. &amp;nbsp;Awesome.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2569837522518203910-1442177398901588531?l=html5canvasmmorpggames.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://html5canvasmmorpggames.blogspot.com/feeds/1442177398901588531/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://html5canvasmmorpggames.blogspot.com/2011/12/install-nodejs-in-windows.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2569837522518203910/posts/default/1442177398901588531?v=2'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2569837522518203910/posts/default/1442177398901588531?v=2'/><link rel='alternate' type='text/html' href='http://html5canvasmmorpggames.blogspot.com/2011/12/install-nodejs-in-windows.html' title='Install Node.js in Windows'/><author><name>george endrulat</name><uri>http://www.blogger.com/profile/05240665595263664658</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-Ft3b5B_sdzc/Tt9vwyB5LkI/AAAAAAAABTQ/s_UcDHD0-CQ/s72-c/Untitled.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry gd:etag='W/&quot;DkMBQXc8fip7ImA9WhRQEUQ.&quot;'><id>tag:blogger.com,1999:blog-2569837522518203910.post-5002668438170603120</id><published>2011-12-06T11:52:00.001-06:00</published><updated>2011-12-06T12:00:50.976-06:00</updated><app:edited xmlns:app='http://www.w3.org/2007/app'>2011-12-06T12:00:50.976-06:00</app:edited><category scheme='http://www.blogger.com/atom/ns#' term='options parser'/><category scheme='http://www.blogger.com/atom/ns#' term='node-optimist'/><category scheme='http://www.blogger.com/atom/ns#' term='node.js'/><title>Node.js Options Parser</title><content type='html'>To put it simply options parsing is a way to pass arguments to functions in external files. &amp;nbsp;This doesn't sound like a big deal, but it is. &amp;nbsp;Let me explain.&lt;br /&gt;
&lt;br /&gt;
Lets say you have all of your game functions in one giant js file, functions for calculating attack, def, etc. &amp;nbsp;A month down the road you realize that you want to change just about anything, you'll have to either rewrite a bunch or something far worse. Non-modularity is the hallmark of hard to maintain code or the 10lbs of 'stuff' in a 5lb bag.&lt;br /&gt;
&lt;br /&gt;
Wouldn't it be much easier if we could just keep all of our functions&amp;nbsp;separate? &amp;nbsp;Pass arguments to them in a generic and modular way? &amp;nbsp;Update a 20 line file instead of a 1,000+ line file? &amp;nbsp;We can do all of that with options parsers.&lt;br /&gt;
&lt;br /&gt;
Taken from:&amp;nbsp;&lt;a href="http://www.catonmat.net/blog/nodejs-modules-optimist/"&gt;http://www.catonmat.net/blog/nodejs-modules-optimist/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote "="" blog="" http:="" nodejs-modules-optimist="" style="word-wrap: break-word;" www.catonmat.net=""&gt;
&lt;br /&gt;
&lt;div style="background-color: white; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #222222; font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif; font-size: 13px; line-height: 20px; margin-bottom: 1em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;
This time I'll introduce you to&amp;nbsp;&lt;a href="https://github.com/substack/node-optimist" rel="noreferrer" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none; vertical-align: baseline;"&gt;node-optimist&lt;/a&gt;&amp;nbsp;- the lightweight options parser library. This library is also written by&amp;nbsp;&lt;a href="http://substack.net/" rel="noreferrer" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none; vertical-align: baseline;"&gt;James Halliday (SubStack)&lt;/a&gt;, my co-founder of&amp;nbsp;&lt;a href="http://www.catonmat.net/blog/launching-browserling/" rel="noreferrer" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none; vertical-align: baseline;"&gt;Browserling&lt;/a&gt;&amp;nbsp;and&amp;nbsp;&lt;a href="http://www.catonmat.net/blog/announcing-testling/" rel="noreferrer" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none; vertical-align: baseline;"&gt;Testling&lt;/a&gt;.&lt;/div&gt;
&lt;div style="background-color: white; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #222222; font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif; font-size: 13px; line-height: 20px; margin-bottom: 1em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;
Wonder how lightweight an options parser can be? Check this out:&lt;/div&gt;
&lt;div class="highlight" style="background-color: white; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #222222; font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif; font-size: 13px; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;
&lt;pre style="background-attachment: initial; background-clip: initial; background-color: #fff7f0; background-image: initial; background-origin: initial; border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-bottom-width: 1px; border-color: initial; border-image: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(204, 204, 204); border-right-style: solid; border-right-width: 1px; border-style: initial; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-top-width: 1px; font-family: 'Courier New', Courier, monospace; font-style: inherit; line-height: 1.3em; margin-bottom: 1em; margin-left: 1em; margin-right: 1em; margin-top: 1em; overflow-x: auto; overflow-y: auto; padding-bottom: 1em; padding-left: 1em; padding-right: 1em; padding-top: 1em; vertical-align: baseline;"&gt;&lt;span class="kd" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #008800; font-family: inherit; font-style: inherit; font-weight: bold; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;var&lt;/span&gt; &lt;span class="nx" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;argv&lt;/span&gt; &lt;span class="o" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;=&lt;/span&gt; &lt;span class="nx" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;require&lt;/span&gt;&lt;span class="p" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt;&lt;span class="s1" style="background-color: #fff0f0; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #dd2200; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;'optimist'&lt;/span&gt;&lt;span class="p" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;).&lt;/span&gt;&lt;span class="nx" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;argv&lt;/span&gt;&lt;span class="p" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;;&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;div style="background-color: white; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #222222; font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif; font-size: 13px; line-height: 20px; margin-bottom: 1em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;
And you're done! All options have been parsed for you and have been put in&amp;nbsp;&lt;code style="background-attachment: initial; background-clip: initial; background-color: #fff7f0; background-image: initial; background-origin: initial; border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-bottom-width: 1px; border-color: initial; border-image: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(204, 204, 204); border-right-style: solid; border-right-width: 1px; border-style: initial; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-top-width: 1px; font-family: 'Courier New', Courier, monospace; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 3px; padding-right: 3px; padding-top: 0px; vertical-align: baseline;"&gt;argv&lt;/code&gt;.&lt;/div&gt;
&lt;div style="background-color: white; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #222222; font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif; font-size: 13px; line-height: 20px; margin-bottom: 1em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;
Here are various use cases. First off, it supports long arguments:&lt;/div&gt;
&lt;div class="highlight" style="background-color: white; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #222222; font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif; font-size: 13px; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;
&lt;pre style="background-attachment: initial; background-clip: initial; background-color: #fff7f0; background-image: initial; background-origin: initial; border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-bottom-width: 1px; border-color: initial; border-image: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(204, 204, 204); border-right-style: solid; border-right-width: 1px; border-style: initial; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-top-width: 1px; font-family: 'Courier New', Courier, monospace; font-style: inherit; line-height: 1.3em; margin-bottom: 1em; margin-left: 1em; margin-right: 1em; margin-top: 1em; overflow-x: auto; overflow-y: auto; padding-bottom: 1em; padding-left: 1em; padding-right: 1em; padding-top: 1em; vertical-align: baseline;"&gt;&lt;span class="err" style="background-color: #e3d2d2; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #a61717; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;#&lt;/span&gt;&lt;span class="o" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;!&lt;/span&gt;&lt;span class="err" style="background-color: #e3d2d2; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #a61717; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;/usr/bin/env node&lt;/span&gt;
&lt;span class="kd" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #008800; font-family: inherit; font-style: inherit; font-weight: bold; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;var&lt;/span&gt; &lt;span class="nx" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;argv&lt;/span&gt; &lt;span class="o" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;=&lt;/span&gt; &lt;span class="nx" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;require&lt;/span&gt;&lt;span class="p" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt;&lt;span class="s1" style="background-color: #fff0f0; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #dd2200; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;'optimist'&lt;/span&gt;&lt;span class="p" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;).&lt;/span&gt;&lt;span class="nx" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;argv&lt;/span&gt;&lt;span class="p" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;;&lt;/span&gt;

&lt;span class="k" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #008800; font-family: inherit; font-style: inherit; font-weight: bold; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;if&lt;/span&gt; &lt;span class="p" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt;&lt;span class="nx" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;argv&lt;/span&gt;&lt;span class="p" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;.&lt;/span&gt;&lt;span class="nx" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;rif&lt;/span&gt; &lt;span class="o" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;-&lt;/span&gt; &lt;span class="mi" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #0000dd; font-family: inherit; font-style: inherit; font-weight: bold; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;5&lt;/span&gt; &lt;span class="o" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;*&lt;/span&gt; &lt;span class="nx" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;argv&lt;/span&gt;&lt;span class="p" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;.&lt;/span&gt;&lt;span class="nx" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;xup&lt;/span&gt; &lt;span class="o" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mf" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #0000dd; font-family: inherit; font-style: inherit; font-weight: bold; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;7.138&lt;/span&gt;&lt;span class="p" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;)&lt;/span&gt; &lt;span class="p" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;{&lt;/span&gt;
    &lt;span class="nx" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;console&lt;/span&gt;&lt;span class="p" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;.&lt;/span&gt;&lt;span class="nx" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;log&lt;/span&gt;&lt;span class="p" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt;&lt;span class="s1" style="background-color: #fff0f0; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #dd2200; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;'Buy more riffiwobbles'&lt;/span&gt;&lt;span class="p" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;);&lt;/span&gt;
&lt;span class="p" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;}&lt;/span&gt;
&lt;span class="k" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #008800; font-family: inherit; font-style: inherit; font-weight: bold; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;else&lt;/span&gt; &lt;span class="p" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;{&lt;/span&gt;
    &lt;span class="nx" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;console&lt;/span&gt;&lt;span class="p" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;.&lt;/span&gt;&lt;span class="nx" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;log&lt;/span&gt;&lt;span class="p" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt;&lt;span class="s1" style="background-color: #fff0f0; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #dd2200; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;'Sell the xupptumblers'&lt;/span&gt;&lt;span class="p" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;);&lt;/span&gt;
&lt;span class="p" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;div style="background-color: white; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #222222; font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif; font-size: 13px; line-height: 20px; margin-bottom: 1em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;
Now you can run this script with&amp;nbsp;&lt;code style="background-attachment: initial; background-clip: initial; background-color: #fff7f0; background-image: initial; background-origin: initial; border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-bottom-width: 1px; border-color: initial; border-image: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(204, 204, 204); border-right-style: solid; border-right-width: 1px; border-style: initial; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-top-width: 1px; font-family: 'Courier New', Courier, monospace; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 3px; padding-right: 3px; padding-top: 0px; vertical-align: baseline;"&gt;--rif&lt;/code&gt;&amp;nbsp;and&amp;nbsp;&lt;code style="background-attachment: initial; background-clip: initial; background-color: #fff7f0; background-image: initial; background-origin: initial; border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-bottom-width: 1px; border-color: initial; border-image: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(204, 204, 204); border-right-style: solid; border-right-width: 1px; border-style: initial; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-top-width: 1px; font-family: 'Courier New', Courier, monospace; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 3px; padding-right: 3px; padding-top: 0px; vertical-align: baseline;"&gt;--xup&lt;/code&gt;&amp;nbsp;arguments like this:&lt;/div&gt;
&lt;pre style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-bottom-width: 1px; border-color: initial; border-image: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(204, 204, 204); border-right-style: solid; border-right-width: 1px; border-style: initial; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-top-width: 1px; color: #222222; font-family: 'Courier New', Courier, monospace; font-size: 13px; line-height: 1.3em; margin-bottom: 1em; margin-left: 1em; margin-right: 1em; margin-top: 1em; overflow-x: auto; overflow-y: auto; padding-bottom: 1em; padding-left: 1em; padding-right: 1em; padding-top: 1em; vertical-align: baseline;"&gt;$ ./xup.js --rif=55 --xup=9.52
Buy more riffiwobbles

$ ./xup.js --rif 12 --xup 8.1
Sell the xupptumblers
&lt;/pre&gt;
&lt;div style="background-color: white; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #222222; font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif; font-size: 13px; line-height: 20px; margin-bottom: 1em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;
I know you want to buy more riffiwobbles and sell your xupptumblers.&lt;/div&gt;
&lt;/blockquote&gt;
I'm guessing it's in order of magnitudes more complicated, but looks to be necessary.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2569837522518203910-5002668438170603120?l=html5canvasmmorpggames.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://html5canvasmmorpggames.blogspot.com/feeds/5002668438170603120/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://html5canvasmmorpggames.blogspot.com/2011/12/nodejs-options-parser.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2569837522518203910/posts/default/5002668438170603120?v=2'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2569837522518203910/posts/default/5002668438170603120?v=2'/><link rel='alternate' type='text/html' href='http://html5canvasmmorpggames.blogspot.com/2011/12/nodejs-options-parser.html' title='Node.js Options Parser'/><author><name>george endrulat</name><uri>http://www.blogger.com/profile/05240665595263664658</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry gd:etag='W/&quot;CEUGSXY8eSp7ImA9WhRQEUQ.&quot;'><id>tag:blogger.com,1999:blog-2569837522518203910.post-8753934850901854282</id><published>2011-12-06T11:15:00.001-06:00</published><updated>2011-12-06T11:23:48.871-06:00</updated><app:edited xmlns:app='http://www.w3.org/2007/app'>2011-12-06T11:23:48.871-06:00</app:edited><category scheme='http://www.blogger.com/atom/ns#' term='dnode'/><category scheme='http://www.blogger.com/atom/ns#' term='node.js'/><category scheme='http://www.blogger.com/atom/ns#' term='rpc'/><title>Server Side functions</title><content type='html'>So lets say we have a situation where we have a game where most of the player variables are stored server side, and only showed or used by the player as a "stats" page. &amp;nbsp;The actual usage of the stats, lets say for calculating the attack power or something to that effect would all take place server side, because it's quicker that way. &amp;nbsp;So how do we make these 'remote procedure calls' ?&lt;br /&gt;
&lt;br /&gt;
A Node.js module called dnode:&lt;span style="background-color: white; color: #222222; font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif; font-size: 13px; line-height: 20px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;a href="https://github.com/substack/dnode-protocol" rel="noreferrer" style="background-color: white; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif; font-size: 13px; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none; vertical-align: baseline;"&gt;dnode-protocol github repo&lt;/a&gt;&lt;span style="background-color: white; color: #222222; font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif; font-size: 13px; line-height: 20px;"&gt;.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="background-color: white; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #222222; font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif; font-size: 13px; line-height: 20px; margin-bottom: 1em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;
Here is what it is. This is the server.js:&lt;/div&gt;
&lt;div class="highlight" style="background-color: white; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #222222; font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif; font-size: 13px; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;
&lt;pre style="background-attachment: initial; background-clip: initial; background-color: #fff7f0; background-image: initial; background-origin: initial; border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-bottom-width: 1px; border-color: initial; border-image: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(204, 204, 204); border-right-style: solid; border-right-width: 1px; border-style: initial; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-top-width: 1px; font-family: 'Courier New', Courier, monospace; font-style: inherit; line-height: 1.3em; margin-bottom: 1em; margin-left: 1em; margin-right: 1em; margin-top: 1em; overflow-x: auto; overflow-y: auto; padding-bottom: 1em; padding-left: 1em; padding-right: 1em; padding-top: 1em; vertical-align: baseline;"&gt;&lt;span class="kd" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #008800; font-family: inherit; font-style: inherit; font-weight: bold; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;var&lt;/span&gt; &lt;span class="nx" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;dnode&lt;/span&gt; &lt;span class="o" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;=&lt;/span&gt; &lt;span class="nx" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;require&lt;/span&gt;&lt;span class="p" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt;&lt;span class="s1" style="background-color: #fff0f0; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #dd2200; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;'dnode'&lt;/span&gt;&lt;span class="p" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;);&lt;/span&gt;

&lt;span class="kd" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #008800; font-family: inherit; font-style: inherit; font-weight: bold; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;var&lt;/span&gt; &lt;span class="nx" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;server&lt;/span&gt; &lt;span class="o" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;=&lt;/span&gt; &lt;span class="nx" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;dnode&lt;/span&gt;&lt;span class="p" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;({&lt;/span&gt;
    &lt;span class="nx" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;mul&lt;/span&gt; &lt;span class="o" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;:&lt;/span&gt; &lt;span class="kd" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #008800; font-family: inherit; font-style: inherit; font-weight: bold; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;function&lt;/span&gt; &lt;span class="p" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt;&lt;span class="nx" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;n&lt;/span&gt;&lt;span class="p" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;,&lt;/span&gt; &lt;span class="nx" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;m&lt;/span&gt;&lt;span class="p" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;,&lt;/span&gt; &lt;span class="nx" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;cb&lt;/span&gt;&lt;span class="p" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;)&lt;/span&gt; &lt;span class="p" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;{&lt;/span&gt; &lt;span class="nx" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;cb&lt;/span&gt;&lt;span class="p" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt;&lt;span class="nx" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;n&lt;/span&gt; &lt;span class="o" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;*&lt;/span&gt; &lt;span class="nx" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;m&lt;/span&gt;&lt;span class="p" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;)&lt;/span&gt; &lt;span class="p" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;}&lt;/span&gt;
&lt;span class="p" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;});&lt;/span&gt;
&lt;span class="nx" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;server&lt;/span&gt;&lt;span class="p" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;.&lt;/span&gt;&lt;span class="nx" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;listen&lt;/span&gt;&lt;span class="p" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt;&lt;span class="mi" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #0000dd; font-family: inherit; font-style: inherit; font-weight: bold; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;5050&lt;/span&gt;&lt;span class="p" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;);&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;div style="background-color: white; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #222222; font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif; font-size: 13px; line-height: 20px; margin-bottom: 1em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;
And here is the client.js:&lt;/div&gt;
&lt;div class="highlight" style="background-color: white; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #222222; font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif; font-size: 13px; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;
&lt;pre style="background-attachment: initial; background-clip: initial; background-color: #fff7f0; background-image: initial; background-origin: initial; border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-bottom-width: 1px; border-color: initial; border-image: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(204, 204, 204); border-right-style: solid; border-right-width: 1px; border-style: initial; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-top-width: 1px; font-family: 'Courier New', Courier, monospace; font-style: inherit; line-height: 1.3em; margin-bottom: 1em; margin-left: 1em; margin-right: 1em; margin-top: 1em; overflow-x: auto; overflow-y: auto; padding-bottom: 1em; padding-left: 1em; padding-right: 1em; padding-top: 1em; vertical-align: baseline;"&gt;&lt;span class="kd" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #008800; font-family: inherit; font-style: inherit; font-weight: bold; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;var&lt;/span&gt; &lt;span class="nx" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;dnode&lt;/span&gt; &lt;span class="o" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;=&lt;/span&gt; &lt;span class="nx" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;require&lt;/span&gt;&lt;span class="p" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt;&lt;span class="s1" style="background-color: #fff0f0; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #dd2200; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;'dnode'&lt;/span&gt;&lt;span class="p" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;);&lt;/span&gt;

&lt;span class="nx" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;dnode&lt;/span&gt;&lt;span class="p" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;.&lt;/span&gt;&lt;span class="nx" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;connect&lt;/span&gt;&lt;span class="p" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt;&lt;span class="mi" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #0000dd; font-family: inherit; font-style: inherit; font-weight: bold; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;5050&lt;/span&gt;&lt;span class="p" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;,&lt;/span&gt; &lt;span class="kd" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #008800; font-family: inherit; font-style: inherit; font-weight: bold; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;function&lt;/span&gt; &lt;span class="p" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt;&lt;span class="nx" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;remote&lt;/span&gt;&lt;span class="p" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;)&lt;/span&gt; &lt;span class="p" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;{&lt;/span&gt;
    &lt;span class="nx" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;remote&lt;/span&gt;&lt;span class="p" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;.&lt;/span&gt;&lt;span class="nx" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;mul&lt;/span&gt;&lt;span class="p" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt;&lt;span class="mi" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #0000dd; font-family: inherit; font-style: inherit; font-weight: bold; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;10&lt;/span&gt;&lt;span class="p" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;,&lt;/span&gt; &lt;span class="mi" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #0000dd; font-family: inherit; font-style: inherit; font-weight: bold; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;20&lt;/span&gt;&lt;span class="p" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;,&lt;/span&gt; &lt;span class="kd" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #008800; font-family: inherit; font-style: inherit; font-weight: bold; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;function&lt;/span&gt; &lt;span class="p" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt;&lt;span class="nx" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;n&lt;/span&gt;&lt;span class="p" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;)&lt;/span&gt; &lt;span class="p" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;{&lt;/span&gt;
        &lt;span class="nx" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;console&lt;/span&gt;&lt;span class="p" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;.&lt;/span&gt;&lt;span class="nx" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;log&lt;/span&gt;&lt;span class="p" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt;&lt;span class="s1" style="background-color: #fff0f0; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #dd2200; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;'10 * 20 = '&lt;/span&gt; &lt;span class="o" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;+&lt;/span&gt; &lt;span class="nx" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;n&lt;/span&gt;&lt;span class="p" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;);&lt;/span&gt;
    &lt;span class="p" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;});&lt;/span&gt;
&lt;span class="p" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;});&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;div style="background-color: white; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #222222; font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif; font-size: 13px; line-height: 20px; margin-bottom: 1em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;
Now when you run client.js, you get the output:&lt;/div&gt;
&lt;pre style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-bottom-width: 1px; border-color: initial; border-image: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(204, 204, 204); border-right-style: solid; border-right-width: 1px; border-style: initial; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-top-width: 1px; color: #222222; font-family: 'Courier New', Courier, monospace; font-size: 13px; line-height: 1.3em; margin-bottom: 1em; margin-left: 1em; margin-right: 1em; margin-top: 1em; overflow-x: auto; overflow-y: auto; padding-bottom: 1em; padding-left: 1em; padding-right: 1em; padding-top: 1em; vertical-align: baseline;"&gt;$ node client.js
200&lt;/pre&gt;
&lt;pre style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-bottom-width: 1px; border-color: initial; border-image: initial; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(204, 204, 204); border-right-style: solid; border-right-width: 1px; border-style: initial; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-top-width: 1px; color: #222222; font-family: 'Courier New', Courier, monospace; font-size: 13px; line-height: 1.3em; margin-bottom: 1em; margin-left: 1em; margin-right: 1em; margin-top: 1em; overflow-x: auto; overflow-y: auto; padding-bottom: 1em; padding-left: 1em; padding-right: 1em; padding-top: 1em; vertical-align: baseline;"&gt;&lt;/pre&gt;
So the potential for this is great. &amp;nbsp;Computing most things server side will greatly free up client side operations.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2569837522518203910-8753934850901854282?l=html5canvasmmorpggames.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://html5canvasmmorpggames.blogspot.com/feeds/8753934850901854282/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://html5canvasmmorpggames.blogspot.com/2011/12/server-side-functions.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2569837522518203910/posts/default/8753934850901854282?v=2'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2569837522518203910/posts/default/8753934850901854282?v=2'/><link rel='alternate' type='text/html' href='http://html5canvasmmorpggames.blogspot.com/2011/12/server-side-functions.html' title='Server Side functions'/><author><name>george endrulat</name><uri>http://www.blogger.com/profile/05240665595263664658</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry gd:etag='W/&quot;CUMDRHc8fyp7ImA9WhRQEUQ.&quot;'><id>tag:blogger.com,1999:blog-2569837522518203910.post-1088750396618662936</id><published>2011-12-05T09:03:00.002-06:00</published><updated>2011-12-06T11:44:35.977-06:00</updated><app:edited xmlns:app='http://www.w3.org/2007/app'>2011-12-06T11:44:35.977-06:00</app:edited><category scheme='http://www.blogger.com/atom/ns#' term='node.js'/><category scheme='http://www.blogger.com/atom/ns#' term='github'/><title>Node.js Auto Restart on github change</title><content type='html'>Title should say it all: When you make a source code change, it will automatically restart the server. &amp;nbsp;No more manually doing this. &amp;nbsp;Wonderful for development. &lt;br /&gt;&lt;br /&gt;&lt;a href="https://github.com/remy/nodemon"&gt;https://github.com/remy/nodemon&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;From the github project:&lt;br /&gt;&lt;br /&gt;&lt;blockquote coffee-script="" github.com="" https:="" jashkenas="" style="word-wrap: break-word;" text-editor-plugins"="" wiki=""&gt;&lt;br /&gt;&lt;h1 style="background-color: #f8f8f8; border-bottom-width: 0px !important; border-color: initial !important; border-image: initial !important; border-left-width: 0px !important; border-right-width: 0px !important; border-style: initial !important; border-top-color: initial !important; border-top-style: none !important; border-top-width: initial !important; font-family: helvetica, arial, freesans, clean, sans-serif; font-size: 23px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0.25em !important;"&gt;nodemon&lt;/h1&gt;&lt;div style="background-color: #f8f8f8; font-family: helvetica, arial, freesans, clean, sans-serif; font-size: 13px; line-height: 1.5em !important; margin-bottom: 1em !important; margin-top: 1em !important; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;For use during development of a node.js based application.&lt;/div&gt;&lt;div style="background-color: #f8f8f8; font-family: helvetica, arial, freesans, clean, sans-serif; font-size: 13px; line-height: 1.5em !important; margin-bottom: 1em !important; margin-top: 1em !important; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;code style="background-color: rgb(248, 248, 255) !important; border-bottom-color: rgb(222, 222, 222) !important; border-bottom-style: solid !important; border-bottom-width: 1px !important; border-image: initial !important; border-left-color: rgb(222, 222, 222) !important; border-left-style: solid !important; border-left-width: 1px !important; border-right-color: rgb(222, 222, 222) !important; border-right-style: solid !important; border-right-width: 1px !important; border-top-color: rgb(222, 222, 222) !important; border-top-style: solid !important; border-top-width: 1px !important; color: rgb(68, 68, 68) !important; font-family: 'Bitstream Vera Sans Mono', Courier, monospace; font-size: 12px !important; line-height: normal; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px !important; padding-left: 0.2em !important; padding-right: 0.2em !important; padding-top: 0px !important;"&gt;nodemon&lt;/code&gt;&amp;nbsp;will watch the files in the directory that&amp;nbsp;&lt;code style="background-color: rgb(248, 248, 255) !important; border-bottom-color: rgb(222, 222, 222) !important; border-bottom-style: solid !important; border-bottom-width: 1px !important; border-image: initial !important; border-left-color: rgb(222, 222, 222) !important; border-left-style: solid !important; border-left-width: 1px !important; border-right-color: rgb(222, 222, 222) !important; border-right-style: solid !important; border-right-width: 1px !important; border-top-color: rgb(222, 222, 222) !important; border-top-style: solid !important; border-top-width: 1px !important; color: rgb(68, 68, 68) !important; font-family: 'Bitstream Vera Sans Mono', Courier, monospace; font-size: 12px !important; line-height: normal; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px !important; padding-left: 0.2em !important; padding-right: 0.2em !important; padding-top: 0px !important;"&gt;nodemon&lt;/code&gt;&amp;nbsp;was started, and if they change, it will automatically restart your node application.&lt;/div&gt;&lt;div style="background-color: #f8f8f8; font-family: helvetica, arial, freesans, clean, sans-serif; font-size: 13px; line-height: 1.5em !important; margin-bottom: 1em !important; margin-top: 1em !important; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;code style="background-color: rgb(248, 248, 255) !important; border-bottom-color: rgb(222, 222, 222) !important; border-bottom-style: solid !important; border-bottom-width: 1px !important; border-image: initial !important; border-left-color: rgb(222, 222, 222) !important; border-left-style: solid !important; border-left-width: 1px !important; border-right-color: rgb(222, 222, 222) !important; border-right-style: solid !important; border-right-width: 1px !important; border-top-color: rgb(222, 222, 222) !important; border-top-style: solid !important; border-top-width: 1px !important; color: rgb(68, 68, 68) !important; font-family: 'Bitstream Vera Sans Mono', Courier, monospace; font-size: 12px !important; line-height: normal; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px !important; padding-left: 0.2em !important; padding-right: 0.2em !important; padding-top: 0px !important;"&gt;nodemon&lt;/code&gt;&amp;nbsp;does&amp;nbsp;&lt;strong style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;not&lt;/strong&gt;&amp;nbsp;require&amp;nbsp;&lt;em style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;any&lt;/em&gt;&amp;nbsp;changes to your code or method of development.&amp;nbsp;&lt;code style="background-color: rgb(248, 248, 255) !important; border-bottom-color: rgb(222, 222, 222) !important; border-bottom-style: solid !important; border-bottom-width: 1px !important; border-image: initial !important; border-left-color: rgb(222, 222, 222) !important; border-left-style: solid !important; border-left-width: 1px !important; border-right-color: rgb(222, 222, 222) !important; border-right-style: solid !important; border-right-width: 1px !important; border-top-color: rgb(222, 222, 222) !important; border-top-style: solid !important; border-top-width: 1px !important; color: rgb(68, 68, 68) !important; font-family: 'Bitstream Vera Sans Mono', Courier, monospace; font-size: 12px !important; line-height: normal; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px !important; padding-left: 0.2em !important; padding-right: 0.2em !important; padding-top: 0px !important;"&gt;nodemon&lt;/code&gt;&amp;nbsp;simply wraps your node application and keeps an eye on any files that have changed.&lt;/div&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2569837522518203910-1088750396618662936?l=html5canvasmmorpggames.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://html5canvasmmorpggames.blogspot.com/feeds/1088750396618662936/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://html5canvasmmorpggames.blogspot.com/2011/12/nodejs-auto-restart-on-github-change.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2569837522518203910/posts/default/1088750396618662936?v=2'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2569837522518203910/posts/default/1088750396618662936?v=2'/><link rel='alternate' type='text/html' href='http://html5canvasmmorpggames.blogspot.com/2011/12/nodejs-auto-restart-on-github-change.html' title='Node.js Auto Restart on github change'/><author><name>george endrulat</name><uri>http://www.blogger.com/profile/05240665595263664658</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry gd:etag='W/&quot;DUcFQ38-fip7ImA9WhRQEEQ.&quot;'><id>tag:blogger.com,1999:blog-2569837522518203910.post-3219826133881606013</id><published>2011-12-05T08:46:00.001-06:00</published><updated>2011-12-05T08:56:52.156-06:00</updated><app:edited xmlns:app='http://www.w3.org/2007/app'>2011-12-05T08:56:52.156-06:00</app:edited><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='node.js'/><category scheme='http://www.blogger.com/atom/ns#' term='database'/><title>Node.js Databases</title><content type='html'>Been looking into which database to use with node.js for a mmo/rpg.&lt;br /&gt;
&lt;br /&gt;
Criteria:&lt;br /&gt;
Fast&lt;br /&gt;
Ability to quickly push/pull small bits&lt;br /&gt;
Easy to use&lt;br /&gt;
Most online literature / largest online help&lt;br /&gt;
FOSS&lt;br /&gt;
&lt;br /&gt;
Below we have a list of modules associated with node.js / databases, so these would be our options. &amp;nbsp;There's a lot going on there, a lot of information, not a lot of explanation. &lt;br /&gt;
&lt;br /&gt;
Stumbling on:&amp;nbsp;&lt;a href="http://nodejsdb.org/"&gt;http://nodejsdb.org/&lt;/a&gt;&amp;nbsp;, it looks like they promise something along the lines of 200% increase in speed, from what to what I have no idea. &amp;nbsp;But this leads to mysql as an option. &amp;nbsp;In fact quite a lot of literature out there leads to mysql as *the* option. &amp;nbsp;If you disagree, let me know in the comments.&lt;br /&gt;
&lt;h3 style="background-color: white; font-family: helvetica, arial, freesans, clean, sans-serif; font-size: 16px; line-height: 26px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 26px;"&gt;


&lt;blockquote github.com="" https:="" joyent="" modules#wiki-database"="" node="" style="word-wrap: break-word;" wiki=""&gt;
&lt;span style="font-weight: normal;"&gt;Taken from:&amp;nbsp;&lt;a href="https://github.com/joyent/node/wiki/modules#wiki-database" style="background-color: transparent;"&gt;https://github.com/joyent/node/wiki/modules#wiki-database&lt;/a&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;/h3&gt;
&lt;h3 style="background-color: white; font-family: helvetica, arial, freesans, clean, sans-serif; font-size: 16px; line-height: 26px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 26px;"&gt;



&lt;a href="https://github.com/joyent/node/wiki/modules#wiki-database" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Database&lt;/a&gt;&lt;/h3&gt;
&lt;h4 style="background-color: white; font-family: helvetica, arial, freesans, clean, sans-serif; font-size: 14px; line-height: 26px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 4px; padding-left: 0px; padding-right: 0px; padding-top: 18px; text-transform: uppercase;"&gt;



&lt;a href="https://github.com/joyent/node/wiki/modules#wiki-db-mssql" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;&lt;span class="caps" style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;SQL&lt;/span&gt;&amp;nbsp;SERVER&lt;/a&gt;&lt;/h4&gt;
&lt;ul style="background-color: white; font-family: helvetica, arial, freesans, clean, sans-serif; font-size: 14px; line-height: 19px; margin-bottom: 0px; margin-left: 2.6em; margin-right: 0px; margin-top: 1.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;
&lt;li style="margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a href="https://github.com/vivina/node-mssql" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;node-mssql&lt;/a&gt;&amp;nbsp;— A node.js MS&amp;nbsp;&lt;span class="caps" style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;SQL&lt;/span&gt;&amp;nbsp;Server native driver&lt;/li&gt;
&lt;li style="margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a href="https://github.com/pekim/tedious" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;tedious&lt;/a&gt;&amp;nbsp;— A pure Javascript implementation of the&amp;nbsp;&lt;span class="caps" style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;TDS&lt;/span&gt;&amp;nbsp;protocol, for connecting to&amp;nbsp;&lt;span class="caps" style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;SQL&lt;/span&gt;&amp;nbsp;Server databases&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 style="background-color: white; font-family: helvetica, arial, freesans, clean, sans-serif; font-size: 14px; line-height: 26px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 4px; padding-left: 0px; padding-right: 0px; padding-top: 18px; text-transform: uppercase;"&gt;



&lt;a href="https://github.com/joyent/node/wiki/modules#wiki-db-pg" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;POSTGRESQL&lt;/a&gt;&lt;/h4&gt;
&lt;ul style="background-color: white; font-family: helvetica, arial, freesans, clean, sans-serif; font-size: 14px; line-height: 19px; margin-bottom: 0px; margin-left: 2.6em; margin-right: 0px; margin-top: 1.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;
&lt;li style="margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a href="https://github.com/ry/node_postgres" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;node_postgres&lt;/a&gt;&amp;nbsp;— Beginning of bindings to libpg&lt;/li&gt;
&lt;li style="margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a href="https://github.com/brianc/node-postgres" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;node-postgres&lt;/a&gt;&amp;nbsp;— Well tested libpq binding and pure javascript PostgreSQL client&lt;/li&gt;
&lt;li style="margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a href="https://github.com/didit-tech/FastLegS" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;FastLegS&lt;/a&gt;&amp;nbsp;– PostgreSQL&amp;nbsp;&lt;span class="caps" style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;ORM&lt;/span&gt;&amp;nbsp;on top of node-postgres.&lt;/li&gt;
&lt;li style="margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a href="https://github.com/creationix/postgres-js/tree/master" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;postgres-js&lt;/a&gt;&amp;nbsp;— Postgres protocol implemented in pure JS&lt;/li&gt;
&lt;li style="margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a href="https://github.com/aurynn/postgres-js/" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;postgres-js&lt;/a&gt;&amp;nbsp;— Fork of postgres-js, adds parameterized queries and prepared statements.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 style="background-color: white; font-family: helvetica, arial, freesans, clean, sans-serif; font-size: 14px; line-height: 26px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 4px; padding-left: 0px; padding-right: 0px; padding-top: 18px; text-transform: uppercase;"&gt;



&lt;a href="https://github.com/joyent/node/wiki/modules#wiki-db-mysql" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;MYSQL&lt;/a&gt;&lt;/h4&gt;
&lt;ul style="background-color: white; font-family: helvetica, arial, freesans, clean, sans-serif; font-size: 14px; line-height: 19px; margin-bottom: 0px; margin-left: 2.6em; margin-right: 0px; margin-top: 1.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;
&lt;li style="margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a href="https://github.com/mariano/node-db-mysql/" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;db-mysql&lt;/a&gt;&amp;nbsp;– Binary driver for MySQL (using libmysql). Part of the&amp;nbsp;&lt;a href="http://nodejsdb.org/" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;Node.js DB&lt;/a&gt;&amp;nbsp;effort&lt;/li&gt;
&lt;li style="margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a href="https://github.com/Guille/node.dbslayer.js/" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;node.dbslayer.js&lt;/a&gt;&amp;nbsp;– Interface to DBSlayer (MySQL)&lt;/li&gt;
&lt;li style="margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a href="https://github.com/mscdex/node-poormansmysql" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;node-poormansmysql&lt;/a&gt;&amp;nbsp;— Asynchronous MySQL driver for node.js using the mysql command-line tool&lt;/li&gt;
&lt;li style="margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a href="https://github.com/felixge/node-mysql" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;node-mysql&lt;/a&gt;&amp;nbsp;— A node.js module implementing the MySQL protocol&lt;ul style="margin-bottom: 0px; margin-left: 1em; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;
&lt;li style="margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a href="https://github.com/Kijewski/node-mysql-pool" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;node-mysql-pool&lt;/a&gt;&amp;nbsp;— connection pool for node.js on top of Felix Geisendörfer’s MySQL client node-mysql.&lt;/li&gt;
&lt;li style="margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a href="https://github.com/guggero/node-mysql-cache" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;node-mysql-cache&lt;/a&gt;&amp;nbsp;— MySQL query cache for node.js on top of Felix Geisendörfer’s MySQL client node-mysql.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a href="https://github.com/masuidrive/node-mysql" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;&lt;del style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;node-mysql&lt;/del&gt;&lt;/a&gt;&amp;nbsp;&lt;del style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;- -Pure JavaScript MySQL async driver&lt;/del&gt;&amp;nbsp;[obsolete]&lt;/li&gt;
&lt;li style="margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a href="https://github.com/sidorares/nodejs-mysql-native" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;node-mysql-native&lt;/a&gt;&amp;nbsp;— Yet another pure JS async driver. Pipelining, prepared statements.&lt;/li&gt;
&lt;li style="margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a href="https://github.com/Sannis/node-mysql-libmysqlclient" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;node-mysql-libmysqlclient&lt;/a&gt;&amp;nbsp;— MySQL asynchronous bindings based on libmysqlclient&lt;ul style="margin-bottom: 0px; margin-left: 1em; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;
&lt;li style="margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a href="https://github.com/kreetitech/RDX" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;&lt;span class="caps" style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;RDX&lt;/span&gt;&lt;/a&gt;&amp;nbsp;– An object-relational mapper (&lt;span class="caps" style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;ORM&lt;/span&gt;) for node. Backends: node-mysql-libmysqlclient.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a href="https://github.com/koichik/node-handlersocket" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;node-handlersocket&lt;/a&gt;&amp;nbsp;— Pure JavaScript client for&amp;nbsp;&lt;a href="https://github.com/ahiguti/HandlerSocket-Plugin-for-MySQL" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;HandlerSocket Plugin for MySQL&lt;/a&gt;.&lt;/li&gt;
&lt;li style="margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a href="https://github.com/zefhemel/persistencejs" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;persistence.js&lt;/a&gt;&amp;nbsp;— An object-relational mapper (&lt;span class="caps" style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;ORM&lt;/span&gt;) for node. Backends: MySQL.&lt;/li&gt;
&lt;li style="margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a href="https://github.com/sdepold/sequelize" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;sequelize&lt;/a&gt;&amp;nbsp;– An easy-to-use MySQL Object-Relational-Mapper (&lt;span class="caps" style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;ORM&lt;/span&gt;) for Node.JS&lt;/li&gt;
&lt;li style="margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a href="https://github.com/Pollenware/moose" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;moose&lt;/a&gt;&amp;nbsp;– An&amp;nbsp;&lt;span class="caps" style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;ORM&lt;/span&gt;&amp;nbsp;for node (Currently only MySQL). Based on node-mysql&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 style="background-color: white; font-family: helvetica, arial, freesans, clean, sans-serif; font-size: 14px; line-height: 26px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 4px; padding-left: 0px; padding-right: 0px; padding-top: 18px; text-transform: uppercase;"&gt;



&lt;a href="https://github.com/joyent/node/wiki/modules#wiki-db-sqllite" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;SQL LITE&lt;/a&gt;&lt;/h4&gt;
&lt;ul style="background-color: white; font-family: helvetica, arial, freesans, clean, sans-serif; font-size: 14px; line-height: 19px; margin-bottom: 0px; margin-left: 2.6em; margin-right: 0px; margin-top: 1.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;
&lt;li style="margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a href="https://github.com/grumdrig/node-sqlite" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;node-sqlite&lt;/a&gt;&amp;nbsp;— Bindings for SQLite3. Interface conforms to the&amp;nbsp;&lt;a href="http://dev.w3.org/html5/webdatabase/#sql" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;HTML5 Web&amp;nbsp;&lt;span class="caps" style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;SQL&lt;/span&gt;&amp;nbsp;&lt;span class="caps" style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;API&lt;/span&gt;&lt;/a&gt;.&lt;/li&gt;
&lt;li style="margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a href="https://github.com/orlandov/node-sqlite" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;node-sqlite&lt;/a&gt;&amp;nbsp;— Fast asynchronous driver: New evented Node.js look, same great SQLite3 taste&lt;/li&gt;
&lt;li style="margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a href="https://github.com/developmentseed/node-sqlite3" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;node-sqlite3&lt;/a&gt;&amp;nbsp;— Full-featured, asynchronous SQLite bindings with query serialization/parallelization and verbose stack traces&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 style="background-color: white; font-family: helvetica, arial, freesans, clean, sans-serif; font-size: 14px; line-height: 26px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 4px; padding-left: 0px; padding-right: 0px; padding-top: 18px; text-transform: uppercase;"&gt;



&lt;a href="https://github.com/joyent/node/wiki/modules#wiki-db-nosql" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;NOSQL AND KEY VALUE&lt;/a&gt;&lt;/h4&gt;
&lt;h5 style="background-color: white; font-family: helvetica, arial, freesans, clean, sans-serif; font-size: 13px; line-height: 26px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 14px; text-transform: uppercase;"&gt;



&lt;a href="https://github.com/joyent/node/wiki/modules#wiki-db-nosql-mongo" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;MONGO&lt;/a&gt;&lt;/h5&gt;
&lt;ul style="background-color: white; font-family: helvetica, arial, freesans, clean, sans-serif; font-size: 14px; line-height: 19px; margin-bottom: 0px; margin-left: 2.6em; margin-right: 0px; margin-top: 1.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;
&lt;li style="margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a href="https://github.com/gett/mongojs" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;mongojs&lt;/a&gt;&amp;nbsp;— Simple driver that emulates the mongodb&amp;nbsp;&lt;span class="caps" style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;API&lt;/span&gt;&amp;nbsp;as much as possible.&lt;/li&gt;
&lt;li style="margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a href="https://github.com/orlandov/node-mongodb" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;node-mongodb&lt;/a&gt;&amp;nbsp;— Basic MongoDB client implementation in JS/C++&lt;/li&gt;
&lt;li style="margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a href="https://github.com/christkv/node-mongodb-native" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;node-mongodb-native&lt;/a&gt;&amp;nbsp;— A pure JavaScript driver for MongoDB.&lt;ul style="margin-bottom: 0px; margin-left: 1em; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;
&lt;li style="margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a href="https://github.com/guileen/node-mongoskin" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;node-mongoskin&lt;/a&gt;&amp;nbsp;— A future layer for node-mongodb-native.&lt;/li&gt;
&lt;li style="margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a href="https://github.com/idottv/node-mongodb-wrapper" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;node-mongodb-wrapper&lt;/a&gt;&amp;nbsp;— As close as possible to the command-line driver. Uses node-mongodb-native.&lt;/li&gt;
&lt;li style="margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a href="https://github.com/milewise/mongode" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;mongode&lt;/a&gt;&amp;nbsp;— Very thin wrapper around node-mongodb-native that simplifies the&amp;nbsp;&lt;span class="caps" style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;API&lt;/span&gt;&amp;nbsp;a bit.&lt;/li&gt;
&lt;li style="margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a href="https://github.com/xcambar/n-ext" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;N-Ext&lt;/a&gt;&amp;nbsp;— Use Ext.data packages in your NodeJS apps (includes a MongoDB proxy based on&amp;nbsp;&lt;a href="https://github.com/xcambar/n-ext/node-mongodb-native" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;node-mongodb-native&lt;/a&gt;)&lt;/li&gt;
&lt;li style="margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a href="https://github.com/zzdhidden/mongoq" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;mongoq&lt;/a&gt;&amp;nbsp;— MongoDB is: mongoq(‘mongodb://localhost/db’).collection(‘users’).find().toArray(function(error, docs){})&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a href="https://github.com/marcello3d/node-mongolian" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;node-mongolian&lt;/a&gt;&amp;nbsp;— Mongolian DeadBeef is an awesome Mongo DB node.js driver that attempts to closely approximate the mongodb shell&lt;/li&gt;
&lt;li style="margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a href="https://github.com/masylum/mongolia" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;mongolia&lt;/a&gt;&amp;nbsp;— Flexible wrapper for the nodejs Mongo driver. Lighter than a&amp;nbsp;&lt;span class="caps" style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;ORM&lt;/span&gt;&amp;nbsp;but easier to use than the driver.&lt;/li&gt;
&lt;li style="margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a href="http://mongoosejs.com/" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;mongoose&lt;/a&gt;&amp;nbsp;— Mongoose is a JavaScript library that makes working with MongoDB a breeze.&lt;/li&gt;
&lt;li style="margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a href="https://github.com/amark/mongous" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;mongous&lt;/a&gt;&amp;nbsp;— Mongous is a simple MongoDB driver that uses a jQuery styled syntax.&lt;/li&gt;
&lt;li style="margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a href="https://github.com/dmcquay/node-nosql-thin" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;nosql-thin&lt;/a&gt;&amp;nbsp;– Makes easier to work with MongoDB. Not an&amp;nbsp;&lt;span class="caps" style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;ORM&lt;/span&gt;. Not production ready.&lt;/li&gt;
&lt;li style="margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a href="https://github.com/semu/mongoclikker" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;mongoclikker&lt;/a&gt;&amp;nbsp;– Simple MongoDB data viewer&lt;/li&gt;
&lt;li style="margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a href="https://github.com/siddMahen/GridFS" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;GridFS&lt;/a&gt;&amp;nbsp;– Simple GridFS capabilities built on node-mongodb-native.&lt;/li&gt;
&lt;li style="margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a href="https://jira.mongodb.org/browse/SERVER-2141" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;Official driver&lt;/a&gt;&amp;nbsp;– Vote for it on 10gen’s tracker&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 style="background-color: white; font-family: helvetica, arial, freesans, clean, sans-serif; font-size: 13px; line-height: 26px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 14px; text-transform: uppercase;"&gt;



&lt;a href="https://github.com/joyent/node/wiki/modules#wiki-db-nosql-hive" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;HIVE&lt;/a&gt;&lt;/h5&gt;
&lt;ul style="background-color: white; font-family: helvetica, arial, freesans, clean, sans-serif; font-size: 14px; line-height: 19px; margin-bottom: 0px; margin-left: 2.6em; margin-right: 0px; margin-top: 1.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;
&lt;li style="margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a href="https://github.com/forward/node-hive" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;node-hive&lt;/a&gt;&amp;nbsp;— dead simple hive client using thrift api&lt;/li&gt;
&lt;li style="margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a href="https://github.com/wdavidw/node-thrift-hive" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;node-thrift-hive&lt;/a&gt;&amp;nbsp;— Hive client with multi versions support and a Readable Stream&amp;nbsp;&lt;span class="caps" style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;API&lt;/span&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 style="background-color: white; font-family: helvetica, arial, freesans, clean, sans-serif; font-size: 13px; line-height: 26px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 14px; text-transform: uppercase;"&gt;



&lt;a href="https://github.com/joyent/node/wiki/modules#wiki-db-nosql-redis" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;REDIS&lt;/a&gt;&lt;/h5&gt;
&lt;ul style="background-color: white; font-family: helvetica, arial, freesans, clean, sans-serif; font-size: 14px; line-height: 19px; margin-bottom: 0px; margin-left: 2.6em; margin-right: 0px; margin-top: 1.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;
&lt;li style="margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a href="https://github.com/chriso/redback" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;redback&lt;/a&gt;&amp;nbsp;— a high-level Redis library with support for advanced data structures such as Social Graphs and Full-text Indexes.&lt;/li&gt;
&lt;li style="margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a href="https://github.com/janl/awesome" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;awesome&lt;/a&gt;&amp;nbsp;— a Redis clone in node.js&lt;/li&gt;
&lt;li style="margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a href="https://github.com/visionmedia/nedis" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;nedis&lt;/a&gt;&amp;nbsp;— Redis server implementation written with node&lt;/li&gt;
&lt;li style="margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a href="https://github.com/bnoguchi/redis-node" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;redis-node&lt;/a&gt;&amp;nbsp;— Comprehensive, high speed Redis client&lt;/li&gt;
&lt;li style="margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a href="https://github.com/fictorial/redis-node-client/tree/master" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;redis-node-client&lt;/a&gt;&amp;nbsp;— Redis Client by Fictorial (deprecated)&lt;/li&gt;
&lt;li style="margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a href="https://github.com/mranney/node_redis/" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;node_redis&lt;/a&gt;&amp;nbsp;— Complete Redis client that works well with new node and new Redis&lt;/li&gt;
&lt;li style="margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a href="https://github.com/igo/redis2json/" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;redis2json&lt;/a&gt;&amp;nbsp;— Easily loads data from Redis into structured JS object&lt;/li&gt;
&lt;li style="margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a href="https://github.com/maritz/nohm" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;nohm&lt;/a&gt;&amp;nbsp;— Redis object relational mapper (&lt;span class="caps" style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;ORM&lt;/span&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 style="background-color: white; font-family: helvetica, arial, freesans, clean, sans-serif; font-size: 13px; line-height: 26px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 14px; text-transform: uppercase;"&gt;



&lt;a href="https://github.com/joyent/node/wiki/modules#wiki-db-nosql-couch" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;COUCHDB&lt;/a&gt;&lt;/h5&gt;
&lt;ul style="background-color: white; font-family: helvetica, arial, freesans, clean, sans-serif; font-size: 14px; line-height: 19px; margin-bottom: 0px; margin-left: 2.6em; margin-right: 0px; margin-top: 1.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;
&lt;li style="margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a href="https://github.com/dominicbarnes/node-couchdb-api" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;node-couchdb-api&lt;/a&gt;&amp;nbsp;— An easy-to-use and powerful wrapper for the CouchDB&amp;nbsp;&lt;span class="caps" style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;API&lt;/span&gt;&amp;nbsp;that follows Node.JS conventions for async code.&lt;/li&gt;
&lt;li style="margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a href="http://garrensmith.com/LazyBoy" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;LazyBoy&lt;/a&gt;&amp;nbsp;— a CouchDB&amp;nbsp;&lt;span class="caps" style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;ORM&lt;/span&gt;&amp;nbsp;thats easy to use&lt;/li&gt;
&lt;li style="margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a href="https://github.com/sixtus/node-couch/tree/master" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;node-couch&lt;/a&gt;&amp;nbsp;— a CouchDB connector&lt;/li&gt;
&lt;li style="margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a href="https://github.com/felixge/node-couchdb" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;&lt;del style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;node-couchdb&lt;/del&gt;&lt;/a&gt;&amp;nbsp;&lt;del style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;- -A full&amp;nbsp;&lt;span class="caps" style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;API&lt;/span&gt;&amp;nbsp;implementation&lt;/del&gt;&amp;nbsp;[obsolete]&lt;/li&gt;
&lt;li style="margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a href="https://github.com/rsms/node-couchdb-min" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;node-couchdb-min&lt;/a&gt;&amp;nbsp;— Light-weight client with low level of abstraction and connection pooling.&lt;/li&gt;
&lt;li style="margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a href="https://github.com/scottburch/couch-ar" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;couch-ar&lt;/a&gt;&amp;nbsp;— a active record implementation for couchDB (uses cradle)&lt;/li&gt;
&lt;li style="margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a href="https://github.com/creationix/couch-client" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;couch-client&lt;/a&gt;&amp;nbsp;— a simple wrapper around CouchDB’s http interface&lt;/li&gt;
&lt;li style="margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a href="https://github.com/landeiro/PJsonCouch" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;PJsonCouch&lt;/a&gt;&amp;nbsp;— PJs-on-Couch is a client lib for CouchDB’s&amp;nbsp;&lt;span class="caps" style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;HTTP&lt;/span&gt;&amp;nbsp;&lt;span class="caps" style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;API&lt;/span&gt;&lt;/li&gt;
&lt;li style="margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a href="https://github.com/cloudhead/cradle" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;cradle&lt;/a&gt;&amp;nbsp;— a high-level, caching, CouchDB client&lt;/li&gt;
&lt;li style="margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a href="https://github.com/ssuda/node-couch-cmd" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;couchcmd&lt;/a&gt;&amp;nbsp;— CouchDB command line utility using cradle&lt;/li&gt;
&lt;li style="margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a href="https://github.com/michael/data/" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;data.js&lt;/a&gt;&amp;nbsp;— Graph persistence for Node.js with CouchDB&lt;/li&gt;
&lt;li style="margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a href="https://github.com/cliffano/couchtato/" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;couchtato&lt;/a&gt;&amp;nbsp;— CouchDB document utility tool&lt;/li&gt;
&lt;li style="margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a href="https://github.com/dscape/nano/" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;nano&lt;/a&gt;&amp;nbsp;— Minimalistic driver for CouchDB based on mikeals/request&lt;/li&gt;
&lt;li style="margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a href="https://github.com/dgreisen/YACA" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;&lt;span class="caps" style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;YACA&lt;/span&gt;&lt;/a&gt;&amp;nbsp;— custom api for your couchdb instance generated through introspection.&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 style="background-color: white; font-family: helvetica, arial, freesans, clean, sans-serif; font-size: 13px; line-height: 26px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 14px; text-transform: uppercase;"&gt;



&lt;a href="https://github.com/joyent/node/wiki/modules#wiki-db-nosql-misc" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;NOSQL MISC&lt;/a&gt;&lt;/h5&gt;
&lt;ul style="background-color: white; font-family: helvetica, arial, freesans, clean, sans-serif; font-size: 14px; line-height: 19px; margin-bottom: 0px; margin-left: 2.6em; margin-right: 0px; margin-top: 1.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;
&lt;li style="margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a href="https://github.com/frank06/riak-js" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;riak-js&lt;/a&gt;&amp;nbsp;— Riak JavaScript client (works on node v0.1.30+)&lt;/li&gt;
&lt;li style="margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a href="https://github.com/robtweed/node-mwire" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;node-mwire&lt;/a&gt;&amp;nbsp;— Client for GT.M &amp;amp; Cache databases&lt;/li&gt;
&lt;li style="margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a href="http://pgte.github.com/alfred/" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;alfred&lt;/a&gt;&amp;nbsp;— a fast in-process key-value store for node.js that has functional indexes, streams, replication, …&lt;/li&gt;
&lt;li style="margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a href="https://github.com/chrisdew/barricane-db" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;barricane-db&lt;/a&gt;&amp;nbsp;— a transparent object persistence mechanism&lt;/li&gt;
&lt;li style="margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a href="https://github.com/stagas/chaos" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;chaos&lt;/a&gt;&amp;nbsp;— Chaos is a Node.js database&lt;/li&gt;
&lt;li style="margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a href="https://github.com/edvakf/node-tokyocabinet" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;node-tokyocabinet&lt;/a&gt;&amp;nbsp;— Tokyo Cabinet binding&lt;/li&gt;
&lt;li style="margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a href="https://github.com/waveto/node-tyrant/tree/master" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;node-tyrant&lt;/a&gt;&amp;nbsp;— An implementation of the Tokyo Tyrant network protocol for the Node.js&lt;/li&gt;
&lt;li style="margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a href="https://github.com/wezm/kyoto-client" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;kyoto-client&lt;/a&gt;&amp;nbsp;— A client for the Kyoto Tycoon key-value store&lt;/li&gt;
&lt;li style="margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a href="https://github.com/visionmedia/keys" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;keys&lt;/a&gt;&amp;nbsp;— Unified interface for key/value store clients&lt;/li&gt;
&lt;li style="margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a href="https://github.com/gasi/node-neo4j" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;neo4j&lt;/a&gt;&amp;nbsp;— Neo4j graph database driver for Node&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2569837522518203910-3219826133881606013?l=html5canvasmmorpggames.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://html5canvasmmorpggames.blogspot.com/feeds/3219826133881606013/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://html5canvasmmorpggames.blogspot.com/2011/12/nodejs-databases.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2569837522518203910/posts/default/3219826133881606013?v=2'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2569837522518203910/posts/default/3219826133881606013?v=2'/><link rel='alternate' type='text/html' href='http://html5canvasmmorpggames.blogspot.com/2011/12/nodejs-databases.html' title='Node.js Databases'/><author><name>george endrulat</name><uri>http://www.blogger.com/profile/05240665595263664658</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry gd:etag='W/&quot;DkMAQn4yfip7ImA9WhRQEEQ.&quot;'><id>tag:blogger.com,1999:blog-2569837522518203910.post-2479955774335762696</id><published>2011-12-05T08:03:00.001-06:00</published><updated>2011-12-05T08:14:03.096-06:00</updated><app:edited xmlns:app='http://www.w3.org/2007/app'>2011-12-05T08:14:03.096-06:00</app:edited><category scheme='http://www.blogger.com/atom/ns#' term='node.js'/><category scheme='http://www.blogger.com/atom/ns#' term='testbed'/><category scheme='http://www.blogger.com/atom/ns#' term='setup'/><category scheme='http://www.blogger.com/atom/ns#' term='hosting'/><title>Node.js Hosts</title><content type='html'>Let's get a good list going.&lt;br /&gt;
&lt;br /&gt;
Managed:&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="http://appfog.com/" rel="noreferrer" style="background-color: white; color: #4183c4; font-family: helvetica, arial, freesans, clean, sans-serif; font-size: 14px; line-height: 19px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left;"&gt;appfog&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://bejes.us/" rel="noreferrer" style="background-color: #f8f8f8; color: #4183c4; font-family: helvetica, arial, freesans, clean, sans-serif; font-size: 14px; line-height: 19px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left;"&gt;bejes.us&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.cloudfoundry.com/" rel="noreferrer" style="background-color: white; color: #4183c4; font-family: helvetica, arial, freesans, clean, sans-serif; font-size: 14px; line-height: 19px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left;"&gt;Cloud Foundry&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://cloudno.de/" rel="noreferrer" style="background-color: #f8f8f8; color: #4183c4; font-family: helvetica, arial, freesans, clean, sans-serif; font-size: 14px; line-height: 19px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left;"&gt;Cloudnode&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://cure.willsave.me/" rel="noreferrer" style="background-color: white; color: #4183c4; font-family: helvetica, arial, freesans, clean, sans-serif; font-size: 14px; line-height: 19px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left;"&gt;Cure&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.dotcloud.com/" rel="noreferrer" style="background-color: #f8f8f8; color: #4183c4; font-family: helvetica, arial, freesans, clean, sans-serif; font-size: 14px; line-height: 19px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left;"&gt;DotCloud&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://heroku.com/" rel="noreferrer" style="background-color: white; color: #4183c4; font-family: helvetica, arial, freesans, clean, sans-serif; font-size: 14px; line-height: 19px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left;"&gt;Heroku&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://no.de/" rel="noreferrer" style="background-color: #f8f8f8; color: #4183c4; font-family: helvetica, arial, freesans, clean, sans-serif; font-size: 14px; line-height: 19px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left;"&gt;no.de&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.nodesocket.com/" rel="noreferrer" style="background-color: white; color: #4183c4; font-family: helvetica, arial, freesans, clean, sans-serif; font-size: 14px; line-height: 19px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left;"&gt;NodeSocket&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://nodejitsu.com/" rel="noreferrer" style="background-color: #f8f8f8; color: #4183c4; font-family: helvetica, arial, freesans, clean, sans-serif; font-size: 14px; line-height: 19px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left;"&gt;Nodejitsu&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://nodester.com/" rel="noreferrer" style="background-color: white; color: #4183c4; font-family: helvetica, arial, freesans, clean, sans-serif; font-size: 14px; line-height: 19px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left;"&gt;Nodester&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://jsapp.us/" rel="noreferrer" style="background-color: #f8f8f8; color: #4183c4; font-family: helvetica, arial, freesans, clean, sans-serif; font-size: 14px; line-height: 19px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left;"&gt;JSApp.US&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Self-Managed (VPS)&lt;/div&gt;
&lt;div&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="http://www.a2hosting.com/web-development/nodejs-hosting" rel="noreferrer" style="background-color: white; color: #4183c4; font-family: helvetica, arial, freesans, clean, sans-serif; font-size: 14px; line-height: 19px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;A2 Hosting&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://aws.amazon.com/ec2" rel="noreferrer" style="background-color: white; color: #4183c4; font-family: helvetica, arial, freesans, clean, sans-serif; font-size: 14px; line-height: 19px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Amazon EC2&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.buyvm.net/" rel="noreferrer" style="background-color: white; color: #4183c4; font-family: helvetica, arial, freesans, clean, sans-serif; font-size: 14px; line-height: 19px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;BuyVM&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.dreamhost.com/hosting-vps.html" rel="noreferrer" style="background-color: white; color: #4183c4; font-family: helvetica, arial, freesans, clean, sans-serif; font-size: 14px; line-height: 19px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;DreamHostPS&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://en.gandi.net/hosting" rel="noreferrer" style="background-color: white; color: #4183c4; font-family: helvetica, arial, freesans, clean, sans-serif; font-size: 14px; line-height: 19px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Gandi&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://glesys.com/vps.php" rel="noreferrer" style="background-color: white; color: #4183c4; font-family: helvetica, arial, freesans, clean, sans-serif; font-size: 14px; line-height: 19px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;GleSYS&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://ipap.co/" rel="noreferrer" style="background-color: white; color: #4183c4; font-family: helvetica, arial, freesans, clean, sans-serif; font-size: 14px; line-height: 19px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;IPAP&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.joyent.com/services/cloudhosting" rel="noreferrer" style="background-color: white; color: #4183c4; font-family: helvetica, arial, freesans, clean, sans-serif; font-size: 14px; line-height: 19px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Joyent&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.linode.com/" rel="noreferrer" style="background-color: white; color: #4183c4; font-family: helvetica, arial, freesans, clean, sans-serif; font-size: 14px; line-height: 19px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Linode&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://prgmr.com/" rel="noreferrer" style="background-color: white; color: #4183c4; font-family: helvetica, arial, freesans, clean, sans-serif; font-size: 14px; line-height: 19px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Prgmr&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.rackspacecloud.com/" rel="noreferrer" style="background-color: white; color: #4183c4; font-family: helvetica, arial, freesans, clean, sans-serif; font-size: 14px; line-height: 19px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Rackspace Cloud&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.slicehost.com/" rel="noreferrer" style="background-color: white; color: #4183c4; font-family: helvetica, arial, freesans, clean, sans-serif; font-size: 14px; line-height: 19px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Slicehost&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.vps.net/vps-signup" rel="noreferrer" style="background-color: white; color: #4183c4; font-family: helvetica, arial, freesans, clean, sans-serif; font-size: 14px; line-height: 19px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;VPS.Net&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://w2servers.com/" rel="noreferrer" style="background-color: white; color: #4183c4; font-family: helvetica, arial, freesans, clean, sans-serif; font-size: 14px; line-height: 19px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;W2Servers&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.webbynode.com/" rel="noreferrer" style="background-color: white; color: #4183c4; font-family: helvetica, arial, freesans, clean, sans-serif; font-size: 14px; line-height: 19px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Webbynode&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://webfaction.com/" rel="noreferrer" style="background-color: white; color: #4183c4; font-family: helvetica, arial, freesans, clean, sans-serif; font-size: 14px; line-height: 19px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;WebFaction&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.zerigo.com/" rel="noreferrer" style="background-color: white; color: #4183c4; font-family: helvetica, arial, freesans, clean, sans-serif; font-size: 14px; line-height: 19px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Zerigo&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
DIY&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="http://github.com/nodejitsu" rel="noreferrer" style="background-color: white; color: #4183c4; font-family: helvetica, arial, freesans, clean, sans-serif; font-size: 14px; line-height: 19px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Nodejitsu&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://nodester.com/" rel="noreferrer" style="background-color: white; color: #4183c4; font-family: helvetica, arial, freesans, clean, sans-serif; font-size: 14px; line-height: 19px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Nodester&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2569837522518203910-2479955774335762696?l=html5canvasmmorpggames.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://html5canvasmmorpggames.blogspot.com/feeds/2479955774335762696/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://html5canvasmmorpggames.blogspot.com/2011/12/nodejs-hosts.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2569837522518203910/posts/default/2479955774335762696?v=2'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2569837522518203910/posts/default/2479955774335762696?v=2'/><link rel='alternate' type='text/html' href='http://html5canvasmmorpggames.blogspot.com/2011/12/nodejs-hosts.html' title='Node.js Hosts'/><author><name>george endrulat</name><uri>http://www.blogger.com/profile/05240665595263664658</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry gd:etag='W/&quot;CU4CRHs9eCp7ImA9WhRRF0o.&quot;'><id>tag:blogger.com,1999:blog-2569837522518203910.post-2132657020982944289</id><published>2011-12-01T15:05:00.001-06:00</published><updated>2011-12-01T15:12:45.560-06:00</updated><app:edited xmlns:app='http://www.w3.org/2007/app'>2011-12-01T15:12:45.560-06:00</app:edited><category scheme='http://www.blogger.com/atom/ns#' term='platform-as-a-service'/><category scheme='http://www.blogger.com/atom/ns#' term='foss'/><category scheme='http://www.blogger.com/atom/ns#' term='nowjs'/><category scheme='http://www.blogger.com/atom/ns#' term='node.js'/><category scheme='http://www.blogger.com/atom/ns#' term='github'/><category scheme='http://www.blogger.com/atom/ns#' term='hosting'/><title>Node.js Hosting</title><content type='html'>Just stumbled on &lt;a href="http://nodester.com/"&gt;Nodester&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
From their main page:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote "="" http:="" nodester.com="" style="word-wrap: break-word;"&gt;
&lt;span style="background-color: white; font-family: Arial, Helvetica, sans-serif; font-size: 19px; line-height: 1.9em;"&gt;Deploy your Node.JS applications on Nodester.com for FREE or deploy your apps to your own private cloud instance of Nodester running in your own datacenter or on Amazon EC2, Rackspace, or GoGrid!&lt;/span&gt;&lt;br /&gt;
&lt;div style="font-family: Arial, Helvetica, sans-serif; font-size: 19px; line-height: 1.9em; margin-bottom: 20px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;
&lt;span style="background-color: white;"&gt;Nodester is an open source Node.JS Platform-as-a-Service written in Node.JS with a RESTful API designed to run in any cloud without a VPS! It was the first of it's kind and 100% open sourced under the GNU Affero license on&amp;nbsp;&lt;a href="http://github.com/nodester" rel="noreferrer" style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;GitHub&lt;/span&gt;&lt;/a&gt;. -&amp;gt;&amp;nbsp;&lt;a class="thickbox" href="http://nodester.com/#TB_inline?height=700&amp;amp;width=980&amp;amp;inlineId=hiddenVideoContent&amp;amp;modal=true" rel="noreferrer" style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Watch the video!&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/blockquote&gt;
&lt;br /&gt;
Ok, that's a lot of crazy-go-nuts terms. &lt;br /&gt;
&lt;br /&gt;
To sum it up:&lt;br /&gt;
Host your game here for free.&lt;br /&gt;
&lt;br /&gt;
Benefits we are looking for:&lt;br /&gt;
node.js [check]&lt;br /&gt;
nowjs [check]&lt;br /&gt;
github [check]&lt;br /&gt;
FOSS [check]&lt;br /&gt;
&lt;br /&gt;
Really something to keep in mind.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2569837522518203910-2132657020982944289?l=html5canvasmmorpggames.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://html5canvasmmorpggames.blogspot.com/feeds/2132657020982944289/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://html5canvasmmorpggames.blogspot.com/2011/12/nodejs-hosting.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2569837522518203910/posts/default/2132657020982944289?v=2'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2569837522518203910/posts/default/2132657020982944289?v=2'/><link rel='alternate' type='text/html' href='http://html5canvasmmorpggames.blogspot.com/2011/12/nodejs-hosting.html' title='Node.js Hosting'/><author><name>george endrulat</name><uri>http://www.blogger.com/profile/05240665595263664658</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry gd:etag='W/&quot;CUIFRn88fCp7ImA9WhRRF0o.&quot;'><id>tag:blogger.com,1999:blog-2569837522518203910.post-7858892504422855043</id><published>2011-12-01T13:59:00.001-06:00</published><updated>2011-12-01T15:05:17.174-06:00</updated><app:edited xmlns:app='http://www.w3.org/2007/app'>2011-12-01T15:05:17.174-06:00</app:edited><category scheme='http://www.blogger.com/atom/ns#' term='tdlmath'/><category scheme='http://www.blogger.com/atom/ns#' term='ewgl'/><category scheme='http://www.blogger.com/atom/ns#' term='closure'/><category scheme='http://www.blogger.com/atom/ns#' term='tdl'/><category scheme='http://www.blogger.com/atom/ns#' term='glmatrix'/><category scheme='http://www.blogger.com/atom/ns#' term='math'/><category scheme='http://www.blogger.com/atom/ns#' term='mjs'/><title>Math Libraries</title><content type='html'>Looking for fast math libraries in js turned out to be a little harder than I thought. &amp;nbsp;If we are always trying to utilize the best&amp;nbsp;available&amp;nbsp;tools for the job than this is something to look at.&lt;br /&gt;
&lt;br /&gt;
Looking down the list of popular choices:&lt;br /&gt;
&lt;a href="http://code.google.com/p/closure-library/source/browse/#svn%2Ftrunk%2Fclosure%2Fgoog%2Fmath"&gt;closure&lt;/a&gt; (google)&lt;br /&gt;
TDLFast&lt;br /&gt;
EWGL&lt;br /&gt;
glMatrix&lt;br /&gt;
mjs&lt;br /&gt;
CanvasMatrix&lt;br /&gt;
TDLMath&lt;br /&gt;
&lt;br /&gt;
There's a benchmark for webgl matrix libraries over at:&amp;nbsp;&lt;a href="http://stepheneb.github.com/webgl-matrix-benchmarks/matrix_benchmark.html"&gt;http://stepheneb.github.com/webgl-matrix-benchmarks/matrix_benchmark.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
And that's where I derived that short list from.&lt;br /&gt;
&lt;br /&gt;
Running the benchmark (higher is better):&lt;br /&gt;
&lt;br /&gt;
Google Chrome 17.0.x&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://code.google.com/p/closure-library/source/browse/#svn%2Ftrunk%2Fclosure%2Fgoog%2Fmath"&gt;closure&lt;/a&gt;&amp;nbsp;(google): 24.32&lt;br /&gt;
&lt;a href="https://github.com/greggman/tdl"&gt;TDLFast&lt;/a&gt;: 23.53&lt;br /&gt;
&lt;a href="http://code.google.com/p/ewgl-matrices/"&gt;EWGL&lt;/a&gt;: 17.23&lt;br /&gt;
&lt;a href="https://github.com/toji/gl-matrix"&gt;glMatrix&lt;/a&gt;: 16.11&lt;br /&gt;
&lt;a href="http://blog.vlad1.com/2010/02/05/mjs-simple-vector-and-matrix-math-for-js/"&gt;mjs&lt;/a&gt;: 14.76&lt;br /&gt;
CanvasMatrix: 11.57&lt;br /&gt;
&lt;a href="https://github.com/greggman/tdl"&gt;TDLMath&lt;/a&gt;: 9.04&lt;br /&gt;
&lt;br /&gt;
Firefox 10.0&lt;br /&gt;
&lt;br /&gt;
&lt;a href="https://github.com/greggman/tdl"&gt;TDLFast&lt;/a&gt;: 10.39&lt;br /&gt;
&lt;a href="https://github.com/greggman/tdl"&gt;TDLMath&lt;/a&gt;: 9.24&lt;br /&gt;
&lt;a href="http://blog.vlad1.com/2010/02/05/mjs-simple-vector-and-matrix-math-for-js/"&gt;mjs&lt;/a&gt;: 9.00&lt;br /&gt;
&lt;a href="http://code.google.com/p/closure-library/source/browse/#svn%2Ftrunk%2Fclosure%2Fgoog%2Fmath"&gt;closure&lt;/a&gt;: 8.97&lt;br /&gt;
&lt;a href="https://github.com/toji/gl-matrix"&gt;glMatrix&lt;/a&gt;: 6.90&lt;br /&gt;
&lt;a href="http://code.google.com/p/ewgl-matrices/"&gt;EWGL&lt;/a&gt;: 6.07&lt;br /&gt;
CanvasMatrix: 4.88&lt;br /&gt;
&lt;br /&gt;
Your results will vary. &amp;nbsp;It's nice to think you have a large choice, but most of these operate in the same fashion, you're not comparing apples and oranges, you're just comparing apples that are growing on the same tree if not the same branch. &amp;nbsp;Moreover, the less code we write the better to achieve our goals, so whatever scene graph manager we choose: if it&amp;nbsp;implements a particular math lib that might not be the fastest, so be it, we're not about to reinvent the wheel.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2569837522518203910-7858892504422855043?l=html5canvasmmorpggames.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://html5canvasmmorpggames.blogspot.com/feeds/7858892504422855043/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://html5canvasmmorpggames.blogspot.com/2011/12/math-libraries.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2569837522518203910/posts/default/7858892504422855043?v=2'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2569837522518203910/posts/default/7858892504422855043?v=2'/><link rel='alternate' type='text/html' href='http://html5canvasmmorpggames.blogspot.com/2011/12/math-libraries.html' title='Math Libraries'/><author><name>george endrulat</name><uri>http://www.blogger.com/profile/05240665595263664658</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry gd:etag='W/&quot;DE8GRng_fyp7ImA9WhRRF0s.&quot;'><id>tag:blogger.com,1999:blog-2569837522518203910.post-3941054045506485251</id><published>2011-12-01T13:01:00.001-06:00</published><updated>2011-12-01T13:13:47.647-06:00</updated><app:edited xmlns:app='http://www.w3.org/2007/app'>2011-12-01T13:13:47.647-06:00</app:edited><category scheme='http://www.blogger.com/atom/ns#' term='webgl'/><category scheme='http://www.blogger.com/atom/ns#' term='scene graph'/><category scheme='http://www.blogger.com/atom/ns#' term='Canvas'/><category scheme='http://www.blogger.com/atom/ns#' term='2D'/><category scheme='http://www.blogger.com/atom/ns#' term='css'/><title>Great Webgl Canvas Scene Graph</title><content type='html'>Looks like we might have a winner here:&amp;nbsp;&lt;a href="http://labs.hyperandroid.com/animation"&gt;http://labs.hyperandroid.com/animation&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
The project is called CAAT&lt;br /&gt;
&lt;br /&gt;
From their site:&lt;br /&gt;
&lt;blockquote animation"="" http:="" labs.hyperandroid.com="" style="word-wrap: break-word;"&gt;
&lt;br /&gt;
&lt;div style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #333333; font-family: Georgia, Helvetica, sans-serif; font-size: 16px; line-height: 24px; margin-bottom: 24px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;
CAAT in essence is a multi-instance director-based Scene graph manager.&lt;br /&gt;It is multi-instance in the sense that you can set an undefined number of directors up for each web page.&lt;br /&gt;Each director is able to manage different Scenes with different timelines.&lt;br /&gt;The scenes contain a graph of different Actor and Containers which conform the animation elements.&lt;/div&gt;
&lt;div style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #333333; font-family: Georgia, Helvetica, sans-serif; font-size: 16px; line-height: 24px; margin-bottom: 24px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;
CAAT has some features out-of-the-box among which we can highlight:&lt;/div&gt;
&lt;ul style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #333333; font-family: Georgia, Helvetica, sans-serif; font-size: 16px; line-height: 24px; list-style-image: initial; list-style-position: initial; list-style-type: square; margin-bottom: 24px; margin-left: 1.5em; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;
&lt;li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;strong style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-weight: bold; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;Seamless zero-coding WebGL and CSS rendering engines.&lt;/strong&gt;&lt;/li&gt;
&lt;li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;Unlimited number of Scenes per Director.&lt;/li&gt;
&lt;li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;Unlimited number of Actors and ActorContainers per Scene.&lt;/li&gt;
&lt;li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;Hierarchycally applied affine transformations (rotations, scales and translations).&lt;/li&gt;
&lt;li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;Hierarchycally applied alpha composition.&lt;/li&gt;
&lt;li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;Unlimited number of timers per Scene.&lt;/li&gt;
&lt;li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;Ability to define complex paths for translations applied to Actors and ActorContainers.&lt;/li&gt;
&lt;li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;Easing and interpolation functions for affine transformations and alpha transparency application.&lt;/li&gt;
&lt;li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;Homogeneous coordinate system. Each contained Actor will receive correct input coordinates on its coordinate system&lt;br /&gt;regardless of its parents applied transformations.&lt;/li&gt;
&lt;li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;Abstracted input system, from mouse events to keyboard and accelerometer.&lt;/li&gt;
&lt;li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;Resource management and preloading.&lt;/li&gt;
&lt;li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;Many types of actors supported: Sprites, Shapes, Text, Path, Interpolator, etc.&lt;/li&gt;
&lt;li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;Easily extendable framework.&lt;/li&gt;
&lt;li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;a href="http://bit.ly/gkea4P" rel="noreferrer" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #743399; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;Open Source and MIT Licensed.&lt;/a&gt;&lt;/li&gt;
&lt;li style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;Performs properly in all major canvas enabled browsers. Internet explorer must be version 9 or greater.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
I'm going to add in the fact that the project looks very professional, and extremely useful. &amp;nbsp;The examples that are provided are very simple in context, and that is a good thing.&lt;br /&gt;
&lt;br /&gt;
One of the many building blocks we need for online multiplayer games is a good solid and easy scene graph&amp;nbsp;implementation. &amp;nbsp;It is one thing drawing 1000 sprites, it is a whole other thing for your game to know it only has to draw 100 of that 1000 to achieve the same results, but much better frame rates. &amp;nbsp;Or trying to propagate matrix multiplications down an unlinked chain of objects, it's like trying to hammer in a nail with your forehead without a scene graph.&lt;br /&gt;
&lt;br /&gt;
CAAT looks like something we'll be exploring in the future on here.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2569837522518203910-3941054045506485251?l=html5canvasmmorpggames.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://html5canvasmmorpggames.blogspot.com/feeds/3941054045506485251/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://html5canvasmmorpggames.blogspot.com/2011/12/great-webgl-canvas-scene-graph.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2569837522518203910/posts/default/3941054045506485251?v=2'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2569837522518203910/posts/default/3941054045506485251?v=2'/><link rel='alternate' type='text/html' href='http://html5canvasmmorpggames.blogspot.com/2011/12/great-webgl-canvas-scene-graph.html' title='Great Webgl Canvas Scene Graph'/><author><name>george endrulat</name><uri>http://www.blogger.com/profile/05240665595263664658</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry gd:etag='W/&quot;C0AERH0zcSp7ImA9WhRRF0s.&quot;'><id>tag:blogger.com,1999:blog-2569837522518203910.post-8275961999978345806</id><published>2011-12-01T11:44:00.001-06:00</published><updated>2011-12-01T11:48:25.389-06:00</updated><app:edited xmlns:app='http://www.w3.org/2007/app'>2011-12-01T11:48:25.389-06:00</app:edited><category scheme='http://www.blogger.com/atom/ns#' term='sandbox'/><category scheme='http://www.blogger.com/atom/ns#' term='webgl'/><title>Sandbox: Webgl</title><content type='html'>A nice webgl sandbox&amp;nbsp;&lt;a href="http://webglplayground.net/"&gt;http://webglplayground.net/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-9MK5EA_ZEGc/Tte92CX15BI/AAAAAAAABSo/ew2ayOMxQ_k/s1600/Untitled.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="91" src="http://3.bp.blogspot.com/-9MK5EA_ZEGc/Tte92CX15BI/AAAAAAAABSo/ew2ayOMxQ_k/s320/Untitled.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2569837522518203910-8275961999978345806?l=html5canvasmmorpggames.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://html5canvasmmorpggames.blogspot.com/feeds/8275961999978345806/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://html5canvasmmorpggames.blogspot.com/2011/12/sandbox-webgl.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2569837522518203910/posts/default/8275961999978345806?v=2'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2569837522518203910/posts/default/8275961999978345806?v=2'/><link rel='alternate' type='text/html' href='http://html5canvasmmorpggames.blogspot.com/2011/12/sandbox-webgl.html' title='Sandbox: Webgl'/><author><name>george endrulat</name><uri>http://www.blogger.com/profile/05240665595263664658</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-9MK5EA_ZEGc/Tte92CX15BI/AAAAAAAABSo/ew2ayOMxQ_k/s72-c/Untitled.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry gd:etag='W/&quot;A0EMSHczeyp7ImA9WhRRF0g.&quot;'><id>tag:blogger.com,1999:blog-2569837522518203910.post-6052821619885686649</id><published>2011-12-01T10:12:00.001-06:00</published><updated>2011-12-01T11:14:49.983-06:00</updated><app:edited xmlns:app='http://www.w3.org/2007/app'>2011-12-01T11:14:49.983-06:00</app:edited><category scheme='http://www.blogger.com/atom/ns#' term='socket.io'/><category scheme='http://www.blogger.com/atom/ns#' term='scenejs'/><category scheme='http://www.blogger.com/atom/ns#' term='multi-threading'/><category scheme='http://www.blogger.com/atom/ns#' term='nowjs'/><category scheme='http://www.blogger.com/atom/ns#' term='web worker'/><category scheme='http://www.blogger.com/atom/ns#' term='node.js'/><category scheme='http://www.blogger.com/atom/ns#' term='html5'/><category scheme='http://www.blogger.com/atom/ns#' term='box2d.js'/><category scheme='http://www.blogger.com/atom/ns#' term='cake'/><category scheme='http://www.blogger.com/atom/ns#' term='Canvas'/><category scheme='http://www.blogger.com/atom/ns#' term='buffer'/><category scheme='http://www.blogger.com/atom/ns#' term='amino'/><title>Html5 Webworkers Introduction</title><content type='html'>The idea:&lt;br /&gt;
&lt;div&gt;
Multi-threaded html5 games. Sounds easy enough...&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
A little bit more detail.&lt;/div&gt;
&lt;div&gt;
So just about any game can benefit from being multi-threaded.&lt;/div&gt;
&lt;div&gt;
As an example:&lt;/div&gt;
&lt;div&gt;
1 thread for handling client side physics. (box2d.js)&lt;/div&gt;
&lt;div&gt;
1 thread for updating the server (nowjs / socket.io / node.js)&lt;/div&gt;
&lt;div&gt;
1 thread for managing the scene graph (scenejs, amino, cake, etc)&lt;/div&gt;
&lt;div&gt;
1 thread for rendering background (ground, buildings, etc)&lt;/div&gt;
&lt;div&gt;
1 thread for rendering foreground (player, baddies, items, etc)&lt;/div&gt;
&lt;div&gt;
A main thread for pushing from the backbuffer to the front. (canvas, webgl, etc)&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
The list can go on and on, not that it should. &amp;nbsp;If a function is simple, quick, and not constantly running, chances are it shouldn't have it's own thread. &amp;nbsp;The benefit of running multiple threads is the holy grail of games: consistent frames per second under variable load. &amp;nbsp;That right there is a hallmark of great game designers. &amp;nbsp;So many times I'll pop in a game that is professionally made for a closed source single system (ps3, xbox) with very known hardware specs and at points in the game they're will be a frame per second drop (offline). &amp;nbsp;This could be debated and I'm sure it is other places.&lt;br /&gt;
&lt;br /&gt;
And here is a little FPS loop (javascript):&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;blockquote coffee-script="" github.com="" https:="" jashkenas="" style="word-wrap: break-word;" text-editor-plugins"="" wiki=""&gt;
var fps = 0, now, lastUpdate = (new Date)*1 - 1;&lt;br /&gt;
&lt;br /&gt;
// The higher this value, the less the FPS will be affected by quick changes&lt;br /&gt;
// Setting this to 1 will show you the FPS of the last sampled frame only&lt;br /&gt;
var fpsFilter = 50;&lt;br /&gt;
&lt;br /&gt;
function drawFrame(){&lt;br /&gt;
&amp;nbsp; // ... draw the frame ...&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; var thisFrameFPS = 1000 / ((now=new Date) - lastUpdate);&lt;br /&gt;
&amp;nbsp; fps += (thisFrameFPS - fps) / fpsFilter;&lt;br /&gt;
&amp;nbsp; lastUpdate = now;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; setTimeout( drawFrame, 1 );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
var fpsOut = document.getElementById('fps');&lt;br /&gt;
setInterval(function(){&lt;br /&gt;
&amp;nbsp; fpsOut.innerHTML = fps.toFixed(1) + "fps";&lt;br /&gt;
}, 1000);&lt;/blockquote&gt;
&lt;/div&gt;
&lt;div&gt;
This was taken from:&amp;nbsp;&lt;a href="http://stackoverflow.com/questions/5078913/html5-canvas-performance-calculating-loops-frames-per-second"&gt;http://stackoverflow.com/questions/5078913/html5-canvas-performance-calculating-loops-frames-per-second&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
I'm sure somewhere someone has come up with a hard fast rule about what a good fps is. &amp;nbsp;I just like to think that anything above&amp;nbsp;noticeably inconsistent and slow. &amp;nbsp;My goal is almost always 30+ FPS for the&amp;nbsp;composited flip, less than that and people will notice, less than 24 and people will really notice.&lt;br /&gt;
&lt;br /&gt;
Here is a wonderful js file for FPS&amp;nbsp;&lt;a href="https://github.com/mrdoob/stats.js"&gt;https://github.com/mrdoob/stats.js&lt;/a&gt;&amp;nbsp;as always mrdoob is saving our butts.&lt;br /&gt;
&lt;br /&gt;
So on to webworkers: a nice little tutorial:&amp;nbsp;&lt;a href="http://www.whatwg.org/specs/web-apps/current-work/multipage/workers.html"&gt;http://www.whatwg.org/specs/web-apps/current-work/multipage/workers.html&lt;/a&gt;&amp;nbsp;and here:&amp;nbsp;&lt;a href="http://www.codediesel.com/javascript/introducing-html5-web-workers/"&gt;http://www.codediesel.com/javascript/introducing-html5-web-workers/&lt;/a&gt;&lt;br /&gt;
&lt;blockquote coffee-script="" github.com="" https:="" jashkenas="" style="word-wrap: break-word;" text-editor-plugins"="" wiki=""&gt;
&lt;br /&gt;
&lt;h4 style="background-attachment: initial; background-clip: initial; background-color: white; background-image: url(http://www.codediesel.com/wp-content/themes/compositio/images/bullet01.gif); background-origin: initial; background-position: 0% 50%; background-repeat: no-repeat no-repeat; border-bottom-color: rgb(192, 192, 192); border-bottom-style: solid; border-bottom-width: 1px; font-family: Arial, Helvetica, sans-serif; font: normal normal normal 15px/19px Helvetica; margin-bottom: 3px; margin-left: 0px; margin-right: 0px; margin-top: 20px; padding-bottom: 1px; padding-left: 15px; padding-right: 0px; padding-top: 0px;"&gt;

What are Web Workers&lt;/h4&gt;
&lt;div style="background-color: white; color: #333333; font-size: 12px; font: normal normal normal 12px/19px Verdana, serif; margin-bottom: 5px; margin-top: 5px; padding-bottom: 5px; padding-left: 0px; padding-right: 0px; padding-top: 5px;"&gt;
Web Workers are basically a API specification that lets you create background JavaScript threads to process CPU intensive tasks. Normally in browsers a single thread is created to handle all the JavaScript code. So whatever JavaScript code is run in the browser is executed in that single thread; whether you are doing some calculation or updating page elements. The downside of this is that some CPU intensive piece of JavaScript can render the page unresponsive or slow it to a crawl.&lt;/div&gt;
&lt;div style="background-color: white; color: #333333; font-size: 12px; font: normal normal normal 12px/19px Verdana, serif; margin-bottom: 5px; margin-top: 5px; padding-bottom: 5px; padding-left: 0px; padding-right: 0px; padding-top: 5px;"&gt;
Web Workers alleviate this problem by letting you create multiple JavaScript threads that will run independent of each other, this will prevent one CPU intensive piece of JavaScript from interfering with the UI code.&lt;/div&gt;
&lt;/blockquote&gt;
And there you have it. &amp;nbsp;This post is just an introduction. &amp;nbsp;The eventual goal being an explanation of how to apply webworkers to just about everything. &amp;nbsp;But first I have to figure that out. ha.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2569837522518203910-6052821619885686649?l=html5canvasmmorpggames.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://html5canvasmmorpggames.blogspot.com/feeds/6052821619885686649/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://html5canvasmmorpggames.blogspot.com/2011/12/html5-webworkers-introduction.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2569837522518203910/posts/default/6052821619885686649?v=2'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2569837522518203910/posts/default/6052821619885686649?v=2'/><link rel='alternate' type='text/html' href='http://html5canvasmmorpggames.blogspot.com/2011/12/html5-webworkers-introduction.html' title='Html5 Webworkers Introduction'/><author><name>george endrulat</name><uri>http://www.blogger.com/profile/05240665595263664658</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry gd:etag='W/&quot;DkAAQ30-cCp7ImA9WhRRF0g.&quot;'><id>tag:blogger.com,1999:blog-2569837522518203910.post-4211436027093487784</id><published>2011-12-01T09:50:00.001-06:00</published><updated>2011-12-01T09:52:22.358-06:00</updated><app:edited xmlns:app='http://www.w3.org/2007/app'>2011-12-01T09:52:22.358-06:00</app:edited><category scheme='http://www.blogger.com/atom/ns#' term='cheat sheet'/><category scheme='http://www.blogger.com/atom/ns#' term='Canvas'/><title>Canvas Cheat Sheet</title><content type='html'>Looks like someone had their thinking caps on:&amp;nbsp;&lt;a href="http://blog.nihilogic.dk/2009/02/html5-canvas-cheat-sheet.html"&gt;http://blog.nihilogic.dk/2009/02/html5-canvas-cheat-sheet.html&lt;/a&gt;&lt;br /&gt;
It's the html5 canvas cheat sheet. &amp;nbsp;Great for people just starting out.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-U2zYcPgcvrA/TteihukHEmI/AAAAAAAABSg/8CxMES6_dF4/s1600/HTML5_Canvas_Cheat_Sheet%255B1%255D.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="236" src="http://1.bp.blogspot.com/-U2zYcPgcvrA/TteihukHEmI/AAAAAAAABSg/8CxMES6_dF4/s320/HTML5_Canvas_Cheat_Sheet%255B1%255D.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
This is just the tip of the&amp;nbsp;iceberg&amp;nbsp;though in terms of what you can do with canvas.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2569837522518203910-4211436027093487784?l=html5canvasmmorpggames.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://html5canvasmmorpggames.blogspot.com/feeds/4211436027093487784/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://html5canvasmmorpggames.blogspot.com/2011/12/canvas-cheat-sheet.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2569837522518203910/posts/default/4211436027093487784?v=2'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2569837522518203910/posts/default/4211436027093487784?v=2'/><link rel='alternate' type='text/html' href='http://html5canvasmmorpggames.blogspot.com/2011/12/canvas-cheat-sheet.html' title='Canvas Cheat Sheet'/><author><name>george endrulat</name><uri>http://www.blogger.com/profile/05240665595263664658</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-U2zYcPgcvrA/TteihukHEmI/AAAAAAAABSg/8CxMES6_dF4/s72-c/HTML5_Canvas_Cheat_Sheet%255B1%255D.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry gd:etag='W/&quot;Dk8NQXo4fSp7ImA9WhRRF0g.&quot;'><id>tag:blogger.com,1999:blog-2569837522518203910.post-7225464656025995510</id><published>2011-12-01T09:20:00.001-06:00</published><updated>2011-12-01T09:54:50.435-06:00</updated><app:edited xmlns:app='http://www.w3.org/2007/app'>2011-12-01T09:54:50.435-06:00</app:edited><category scheme='http://www.blogger.com/atom/ns#' term='OS'/><category scheme='http://www.blogger.com/atom/ns#' term='Mint'/><category scheme='http://www.blogger.com/atom/ns#' term='apptob.org'/><category scheme='http://www.blogger.com/atom/ns#' term='node.js'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title>Install Node.js in Linux Mint</title><content type='html'>Stub-in post for development OS.&lt;br /&gt;
&lt;br /&gt;
As a matter of fact, I personally use Linux Mint. &amp;nbsp;I'm just going to say it: it's better than anything else. &amp;nbsp;It's nice having my own blog because I can say things like that, and not have to justify or rationalize. Ha.&lt;br /&gt;
&lt;br /&gt;
So here is a wonderful sh script builder for Mint [Ubuntu]&amp;nbsp;&lt;a href="http://apptob.org/"&gt;http://apptob.org/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-yKhp1TINbOk/Ttea_P0dBGI/AAAAAAAABSQ/3uzh2irZuus/s1600/Untitled.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="243" src="http://3.bp.blogspot.com/-yKhp1TINbOk/Ttea_P0dBGI/AAAAAAAABSQ/3uzh2irZuus/s320/Untitled.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2569837522518203910-7225464656025995510?l=html5canvasmmorpggames.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://html5canvasmmorpggames.blogspot.com/feeds/7225464656025995510/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://html5canvasmmorpggames.blogspot.com/2011/12/stub-in-post-for-development-os.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2569837522518203910/posts/default/7225464656025995510?v=2'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2569837522518203910/posts/default/7225464656025995510?v=2'/><link rel='alternate' type='text/html' href='http://html5canvasmmorpggames.blogspot.com/2011/12/stub-in-post-for-development-os.html' title='Install Node.js in Linux Mint'/><author><name>george endrulat</name><uri>http://www.blogger.com/profile/05240665595263664658</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-yKhp1TINbOk/Ttea_P0dBGI/AAAAAAAABSQ/3uzh2irZuus/s72-c/Untitled.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry gd:etag='W/&quot;DkcARnY8fSp7ImA9WhRRF0g.&quot;'><id>tag:blogger.com,1999:blog-2569837522518203910.post-2085409634398405320</id><published>2011-12-01T08:16:00.001-06:00</published><updated>2011-12-01T09:40:47.875-06:00</updated><app:edited xmlns:app='http://www.w3.org/2007/app'>2011-12-01T09:40:47.875-06:00</app:edited><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='ide'/><category scheme='http://www.blogger.com/atom/ns#' term='editor'/><category scheme='http://www.blogger.com/atom/ns#' term='netbeans'/><category scheme='http://www.blogger.com/atom/ns#' term='coffee script'/><title>Coffeescript IDE</title><content type='html'>&lt;br /&gt;
So we have to choose what IDE we are going to write our coffeescript in.&lt;br /&gt;
&lt;br /&gt;
So we are looking for some basic things (in no particular order):&lt;br /&gt;
&lt;br /&gt;
syntax hilighting/coloring&lt;br /&gt;
compiling to javascript&lt;br /&gt;
live debug&lt;br /&gt;
ability to handle .coffee files/support coffeescript&lt;br /&gt;
refactoring&lt;br /&gt;
indentation support/text formatting&lt;br /&gt;
simple expansion&lt;br /&gt;
very low entry level&lt;br /&gt;
free and open source&lt;br /&gt;
Javascript support&lt;br /&gt;
&lt;br /&gt;
Let's take a look at the &lt;a href="https://github.com/jashkenas/coffee-script/wiki/Text-editor-plugins"&gt;coffee script wiki&lt;/a&gt;:&lt;br /&gt;
&lt;blockquote coffee-script="" github.com="" https:="" jashkenas="" style="word-wrap: break-word;" text-editor-plugins"="" wiki=""&gt;
&lt;br /&gt;
&lt;div id="wiki-content" style="background-color: white; font-family: helvetica, arial, freesans, clean, sans-serif; font-size: 10px; height: 1114px; line-height: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; overflow-x: hidden; overflow-y: hidden; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;
&lt;div class="wrap" style="height: 1114px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; width: 920px;"&gt;
&lt;div class="gollum-markdown-content instapaper_body" id="wiki-body" style="float: left; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; width: 920px;"&gt;
&lt;div id="template" style="font-size: 14px; margin-bottom: 40px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;
&lt;ul style="margin-bottom: 0px; margin-left: 2.6em; margin-right: 0px; margin-top: 1.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;
&lt;li style="margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;div style="margin-bottom: 1em; margin-top: 1em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;
Brewer:&amp;nbsp;&lt;strong style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;rbrcurtis&lt;/strong&gt;'s&amp;nbsp;&lt;a href="https://github.com/rbrcurtis/Brewer" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;Brewer&lt;/a&gt;&amp;nbsp;project browser based editor uses the ace editor (which cloud9 also uses) to show the compiled JS alongside your coffeescript, much like the coffeescript homepage, and runs a simple nodejs webserver on your machine to provide file manipulation functionality.&lt;/div&gt;
&lt;/li&gt;
&lt;li style="margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;div style="margin-bottom: 1em; margin-top: 1em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;
Cloud9IDE:&amp;nbsp;&lt;strong style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;tanepiper&lt;/strong&gt;'s&amp;nbsp;&lt;a href="https://github.com/tanepiper/cloud9-livecoffee-ext" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;Cloud9IDE CoffeeScript Live extension&lt;/a&gt;&amp;nbsp;- provides a live debug environment for .coffee files in Cloud9. Of course, written in CoffeeScript too!&lt;/div&gt;
&lt;/li&gt;
&lt;li style="margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;div style="margin-bottom: 1em; margin-top: 1em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;
Coda/SubEthaEdit:&lt;/div&gt;
&lt;ul style="margin-bottom: 0px; margin-left: 1em; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;
&lt;li style="margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;strong style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;nfiniteset&lt;/strong&gt;'s&amp;nbsp;&lt;a href="http://github.com/nfiniteset/CoffeeScript.mode" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;CoffeeScript Coda/SubEthaEdit mode&lt;/a&gt;&amp;nbsp;— A syntax mode that provides syntax coloring.&lt;/li&gt;
&lt;li style="margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;strong style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;parkerl&lt;/strong&gt;'s&amp;nbsp;&lt;a href="https://github.com/parkerl/CoffeeScript.codaplugin" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;CoffeeScript.codaplugin&lt;/a&gt;&amp;nbsp;- Rough support for compiling and running in Coda's preview&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;div style="margin-bottom: 1em; margin-top: 1em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;
CodeMirror:&amp;nbsp;&lt;a href="https://github.com/pickhardt/coffeescript-codemirror-mode" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;coffeescript-codemirror-mode&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li style="margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;div style="margin-bottom: 1em; margin-top: 1em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;
Emacs:&amp;nbsp;&lt;strong style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;defunkt&lt;/strong&gt;'s&amp;nbsp;&lt;a href="http://github.com/defunkt/coffee-mode" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;CoffeeScript Major Mode&lt;/a&gt;&amp;nbsp;— provides syntax highlighting, indentation support, and some bonus commands.&lt;/div&gt;
&lt;/li&gt;
&lt;li style="margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;div style="margin-bottom: 1em; margin-top: 1em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;
gedit:&amp;nbsp;&lt;strong style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;wavded&lt;/strong&gt;'s&amp;nbsp;&lt;a href="http://github.com/wavded/gedit-coffeescript" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;gedit-coffeescript&lt;/a&gt;&amp;nbsp;— provides syntax highlighting.&lt;/div&gt;
&lt;/li&gt;
&lt;li style="margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;div style="margin-bottom: 1em; margin-top: 1em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;
IntelliJ IDEA/RubyMine/PyCharm/PHPStorm/WebStorm:&lt;/div&gt;
&lt;ul style="margin-bottom: 0px; margin-left: 1em; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;
&lt;li style="margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;strong style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;yeungda&lt;/strong&gt;'s&amp;nbsp;&lt;a href="http://yeungda.github.com/coffeescript-idea/" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;coffeescript-idea&lt;/a&gt;&amp;nbsp;— provides syntax highlighting. development halted: see next item.&lt;/li&gt;
&lt;li style="margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;strong style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;netzpirat&lt;/strong&gt;'s&amp;nbsp;&lt;a href="https://github.com/netzpirat/coffee-brew" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;CoffeeBrew&lt;/a&gt;&amp;nbsp;— an extensive refactoring and improvement upon coffeescript-idea. development halted: see next item.&lt;/li&gt;
&lt;li style="margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a href="http://youtrack.jetbrains.net/issue/RUBY-5943" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;Official Support&lt;/a&gt;&amp;nbsp;is&amp;nbsp;&lt;em style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;planned&lt;/em&gt;&amp;nbsp;for RubyMine 4, using CoffeeBrew as a base. Whether or not this support will be more widely available is currently up in the air. Please add your comments to the bug tracker if you would like to see CoffeeScript support in other jetbrains products than just RubyMine, with all of the features one would expect from a jetbrains product (completion, inspections/intentions, auto-fix, go-to-definition, etc).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;div style="margin-bottom: 1em; margin-top: 1em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;
jEdit:&amp;nbsp;&lt;strong style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;dhotson&lt;/strong&gt;'s and&amp;nbsp;&lt;strong style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;balazstth&lt;/strong&gt;'s&amp;nbsp;&lt;a href="https://github.com/dhotson/coffeescript-jedit" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;coffeescript-jedit&lt;/a&gt;&amp;nbsp;— which provides syntax highlighting and indentation support in jEdit.&lt;/div&gt;
&lt;/li&gt;
&lt;li style="margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;div style="margin-bottom: 1em; margin-top: 1em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;
Kate:&amp;nbsp;&lt;strong style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;max99x&lt;/strong&gt;'s&amp;nbsp;&lt;a href="https://github.com/max99x/kate-coffeescript" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;kate-coffeescript&lt;/a&gt;&amp;nbsp;— provides syntax highlighting.&lt;/div&gt;
&lt;/li&gt;
&lt;li style="margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;div style="margin-bottom: 1em; margin-top: 1em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;
NetBeans:&amp;nbsp;&lt;strong style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;dstepanov&lt;/strong&gt;'s&amp;nbsp;&lt;a href="https://github.com/dstepanov/coffeescript-netbeans" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;coffeescript-netbeans&lt;/a&gt;&amp;nbsp;- compiles coffeescript files without Node.js, advanced syntax highlighting, error checking by background compilation and autocompilation&lt;/div&gt;
&lt;/li&gt;
&lt;li style="margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;div style="margin-bottom: 1em; margin-top: 1em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;
Notepad++:&amp;nbsp;&lt;strong style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;blakmatrix&lt;/strong&gt;'s&amp;nbsp;&lt;a href="https://github.com/blakmatrix/CoffeeScript_notepad_UDL" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;CoffeeScript_notepad_UDL&lt;/a&gt;&amp;nbsp;- provides syntax highlighting.&lt;/div&gt;
&lt;/li&gt;
&lt;li style="margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;div style="margin-bottom: 1em; margin-top: 1em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;
Sublime Text 2:&amp;nbsp;&lt;strong style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;jashkenas&lt;/strong&gt;'s&amp;nbsp;&lt;a href="http://github.com/jashkenas/coffee-script-tmbundle" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;CoffeeScript TextMate bundle&lt;/a&gt;&amp;nbsp;above provides syntax highlighting and snippet expansion.&lt;/div&gt;
&lt;/li&gt;
&lt;li style="margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;div style="margin-bottom: 1em; margin-top: 1em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;
Textadept:&amp;nbsp;&lt;strong style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;rgieseke&lt;/strong&gt;'s&amp;nbsp;&lt;a href="http://rgieseke.github.com/ta-coffeescript" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;CoffeeScript Textadept module&lt;/a&gt;&amp;nbsp;— provides snippets, additional key commands and indentation support.&lt;/div&gt;
&lt;/li&gt;
&lt;li style="margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;div style="margin-bottom: 1em; margin-top: 1em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;
TextMate:&amp;nbsp;&lt;strong style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;jashkenas&lt;/strong&gt;'s&amp;nbsp;&lt;a href="http://github.com/jashkenas/coffee-script-tmbundle" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;CoffeeScript TextMate bundle&lt;/a&gt;&amp;nbsp;— provides syntax highlighting, snippet expansion, and the ability to run bits of CoffeeScript from within TextMate itself.&lt;/div&gt;
&lt;/li&gt;
&lt;li style="margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;div style="margin-bottom: 1em; margin-top: 1em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;
Vim:&amp;nbsp;&lt;strong style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;kchmck&lt;/strong&gt;'s&amp;nbsp;&lt;a href="http://github.com/kchmck/vim-coffee-script" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;Vim CoffeeScript&lt;/a&gt;&amp;nbsp;— adds Vim syntax highlighting and indentation support.&lt;/div&gt;
&lt;/li&gt;
&lt;li style="margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;div style="margin-bottom: 1em; margin-top: 1em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;
Vim snippets collections&amp;nbsp;&lt;strong style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;carlosvillu&lt;/strong&gt;'s&amp;nbsp;&lt;a href="https://github.com/carlosvillu/coffeScript-VIM-Snippets" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;CoffeeScript Vim Snippets&lt;/a&gt;&amp;nbsp;- add snippets to be used with the snippets vim plugin.&lt;/div&gt;
&lt;/li&gt;
&lt;li style="margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;div style="margin-bottom: 1em; margin-top: 1em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;
Vim:&amp;nbsp;&lt;strong style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;claco&lt;/strong&gt;'s plugin for jasmine testing in vim with support for CoffeeScript&amp;nbsp;&lt;a href="https://github.com/claco/jasmine.vim" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;Jasmine/CoffeeSCript Vim Plugin&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li style="margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;div style="margin-bottom: 1em; margin-top: 1em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;
Vim:&amp;nbsp;&lt;strong style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;clvv&lt;/strong&gt;'s fork of&amp;nbsp;&lt;a href="https://github.com/clvv/a.vim" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;a.vim&lt;/a&gt;&amp;nbsp;- support for switching between .coffee and compiled .js files.&lt;/div&gt;
&lt;/li&gt;
&lt;li style="margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;div style="margin-bottom: 1em; margin-top: 1em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;
Visual Studio:&lt;/div&gt;
&lt;ul style="margin-bottom: 0px; margin-left: 1em; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;
&lt;li style="margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a href="https://github.com/chrisdunelm/CoffeeLite" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;CoffeeLite&lt;/a&gt;&lt;/li&gt;
&lt;li style="margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a href="http://www.mindscapehq.com/products/web-workbench" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;Mindscape Web Workbench&lt;/a&gt;&amp;nbsp;- works with CoffeeScript, Sass, and LESS. Free version provides syntax highlighting and compiles CoffeeScript files automatically on save. Pro version adds automatic minification of JavaScript files.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;div style="margin-bottom: 1em; margin-top: 1em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;
BBEdit:&amp;nbsp;&lt;strong style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;pmuellr&lt;/strong&gt;'s&amp;nbsp;&lt;a href="https://gist.github.com/1004413" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;CoffeeScript BBEdit Language Module / plist&lt;/a&gt;&amp;nbsp;- not perfect, but seems to handle most things in an acceptable fashion.&lt;/div&gt;
&lt;/li&gt;
&lt;li style="margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;div style="margin-bottom: 1em; margin-top: 1em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;
Eclipse:&amp;nbsp;&lt;a href="http://jira.appcelerator.org/browse/APSTUD-2451" rel="noreferrer" style="color: #4183c4; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;provided by Titanium (Aptana) Studio&lt;/a&gt;. For now just syntax coloring and a basic class/method outline.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/blockquote&gt;
This was ripped directly from the page itself, so I'm not claiming any rights here at all.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&lt;a href="http://www.netbeans.org/"&gt;NetBeans&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Let's run down the scorecard:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
syntax hilighting/coloring [check]&lt;br /&gt;
compiling to javascript [check] and it autocompiles in the background&lt;br /&gt;
live debug [check]&lt;br /&gt;
ability to handle .coffee files/support coffeescript [via&amp;nbsp;&lt;a href="https://github.com/dstepanov/coffeescript-netbeans"&gt;https://github.com/dstepanov/coffeescript-netbeans&lt;/a&gt;]&lt;br /&gt;
refactoring [check]&lt;br /&gt;
indentation support/text formatting [check]&lt;br /&gt;
simple expansion [check]&lt;br /&gt;
very low entry level [not so much]&lt;br /&gt;
free and open source [check]&lt;br /&gt;
Javascript support [check]&lt;br /&gt;
support for node.js [check: on linux/mac]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-p2Ke5BcF6HA/TteQ4K3VroI/AAAAAAAABSI/h7UO6-dG6Zo/s1600/screenshot2%255B1%255D.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="319" src="http://3.bp.blogspot.com/-p2Ke5BcF6HA/TteQ4K3VroI/AAAAAAAABSI/h7UO6-dG6Zo/s320/screenshot2%255B1%255D.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
It just seems like a more fleshed out IDE, although if you are use to something like c# in vs2010 it will feel lacking. &amp;nbsp;Everything on the wiki list is worth a look though, because people spent quite a bit of time developing the coffee script plugins.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://c9.io/"&gt;Cloud9 IDE&lt;/a&gt;
&lt;br /&gt;
&lt;br /&gt;
The currently most popular IDE and probably the tie for first place is&amp;nbsp;&lt;a href="http://c9.io/"&gt;Cloud9 IDE&lt;/a&gt;. &amp;nbsp;It fulfills every requirement in spades, and it's the future of IDEs, without a doubt. &amp;nbsp;My only concern is it's newness. &amp;nbsp;So that's an issue that will resolve itself. &amp;nbsp;Possibly the other concern would be no offline support. &amp;nbsp;But I'd have a hard time remembering when I wasn't connected to the internet in some fashion. &amp;nbsp;The big buzz is centered around it. &amp;nbsp;And support for new technologies is abundant.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-9a_PrvS1L6c/TtedwqRYkyI/AAAAAAAABSY/h-RHXOIrh5Y/s1600/Untitled.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="196" src="http://1.bp.blogspot.com/-9a_PrvS1L6c/TtedwqRYkyI/AAAAAAAABSY/h-RHXOIrh5Y/s320/Untitled.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
A link to the &lt;a href="https://github.com/tanepiper/cloud9-livecoffee-ext"&gt;Coffee Script Cloud9 live plugin&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Problems with very complicated IDEs I have found in the past are not with the IDE, but with myself. &amp;nbsp;The more complex something is the more of a distraction it is. &amp;nbsp;The "I need to know" syndrome. &amp;nbsp;And after years of screwing around with different IDEs or just complex software: I *don't* need to know. &amp;nbsp;I just have to realize that it is a tool and I just need the basic skills to operate the tool. &amp;nbsp;At one point I had forced myself to not use complex software for much of anything, because I had thought that it was the software's fault that I got nothing done because I had spent all of my time writing plugins or learning all of the key commands, etc. &amp;nbsp; So I had switched to a bare bones text editor. &amp;nbsp;Wow, great, focus.... so where's that one useful tool that I used 1,000 times a day... it's not there, period. &amp;nbsp;So you make due, and in the end you get more done but at the cost of 1.5x the amount of work. &amp;nbsp;That's not smart. &amp;nbsp;The solution: A complicated IDE being used as a simple IDE. &amp;nbsp;Hide everything unless you use it, but don't forget it's there. &amp;nbsp;If you need a plugin then someone else probably has written it, or you're making a mountain out of a mole hill. &amp;nbsp;I could go on and on.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you feel differently about any of this let me know in the comments.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2569837522518203910-2085409634398405320?l=html5canvasmmorpggames.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://html5canvasmmorpggames.blogspot.com/feeds/2085409634398405320/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://html5canvasmmorpggames.blogspot.com/2011/12/coffeescript-ide.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2569837522518203910/posts/default/2085409634398405320?v=2'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2569837522518203910/posts/default/2085409634398405320?v=2'/><link rel='alternate' type='text/html' href='http://html5canvasmmorpggames.blogspot.com/2011/12/coffeescript-ide.html' title='Coffeescript IDE'/><author><name>george endrulat</name><uri>http://www.blogger.com/profile/05240665595263664658</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-p2Ke5BcF6HA/TteQ4K3VroI/AAAAAAAABSI/h7UO6-dG6Zo/s72-c/screenshot2%255B1%255D.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry gd:etag='W/&quot;DE8FQHY8fCp7ImA9WhRRF0k.&quot;'><id>tag:blogger.com,1999:blog-2569837522518203910.post-5852087991018763468</id><published>2011-11-30T14:43:00.002-06:00</published><updated>2011-12-01T07:40:11.874-06:00</updated><app:edited xmlns:app='http://www.w3.org/2007/app'>2011-12-01T07:40:11.874-06:00</app:edited><category scheme='http://www.blogger.com/atom/ns#' term='blogger'/><category scheme='http://www.blogger.com/atom/ns#' term='webgl'/><category scheme='http://www.blogger.com/atom/ns#' term='cimaron.net'/><title>Blogger Client Side WebGl Test</title><content type='html'>First Blogger Webgl test code from:&lt;script type="text/javascript" src="http://cimaron.net/cwebgl/build/cWebGL.min.js"&gt;&lt;/script&gt;

&lt;script type="text/javascript" src="http://cimaron.net/cwebgl/lesson/glMatrix-0.9.5.min.js"&gt;&lt;/script&gt;


&lt;script id="shader-fs" type="x-shader/x-fragment"&gt;

    #ifdef GL_ES

    precision highp float;

    #endif



    void main(void) {

        gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);

    }

&lt;/script&gt;



&lt;script id="shader-vs" type="x-shader/x-vertex"&gt;

    attribute vec3 aVertexPosition;



    uniform mat4 uMVMatrix;

    uniform mat4 uPMatrix;



    void main(void) {

        gl_Position = uPMatrix * uMVMatrix * vec4(aVertexPosition, 1.0);

    }



&lt;/script&gt;





&lt;script type="text/javascript"&gt;



    var gl;

    function initGL(canvas) {

        try {

            gl = canvas.getContext("experimental-webgl");

            gl.viewportWidth = canvas.width;

            gl.viewportHeight = canvas.height;

        } catch (e) {

        }

        if (!gl) {

            alert("Could not initialise WebGL, sorry &lt;img src='http://cimaron.net/blog/wp-includes/images/smilies/icon_sad.gif' alt=':-(' class='wp-smiley' /&gt; ");

        }

    }





    function getShader(gl, id) {

        var shaderScript = document.getElementById(id);


        if (!shaderScript) {

            return null;

        }



        var str = "";

        var k = shaderScript.firstChild;

        while (k) {

            if (k.nodeType == 3) {

                str += k.textContent;

            }

            k = k.nextSibling;

        }



        var shader;

        if (shaderScript.type == "x-shader/x-fragment") {

            shader = gl.createShader(gl.FRAGMENT_SHADER);

        } else if (shaderScript.type == "x-shader/x-vertex") {

            shader = gl.createShader(gl.VERTEX_SHADER);

        } else {

            return null;

        }



        gl.shaderSource(shader, str);

        gl.compileShader(shader);



        if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {

            alert(gl.getShaderInfoLog(shader));

            return null;

        }



        return shader;

    }





    var shaderProgram;



    function initShaders() {

        var fragmentShader = getShader(gl, "shader-fs");

        var vertexShader = getShader(gl, "shader-vs");



        shaderProgram = gl.createProgram();

        gl.attachShader(shaderProgram, vertexShader);

        gl.attachShader(shaderProgram, fragmentShader);

        gl.linkProgram(shaderProgram);



        if (!gl.getProgramParameter(shaderProgram, gl.LINK_STATUS)) {


            alert("Could not initialise shaders");

        }



        gl.useProgram(shaderProgram);



        shaderProgram.vertexPositionAttribute = gl.getAttribLocation(shaderProgram, "aVertexPosition");

        gl.enableVertexAttribArray(shaderProgram.vertexPositionAttribute);



        shaderProgram.pMatrixUniform = gl.getUniformLocation(shaderProgram, "uPMatrix");

        shaderProgram.mvMatrixUniform = gl.getUniformLocation(shaderProgram, "uMVMatrix");

    }





    var mvMatrix = mat4.create();

    var pMatrix = mat4.create();



    function setMatrixUniforms() {

        gl.uniformMatrix4fv(shaderProgram.pMatrixUniform, false, pMatrix);

        gl.uniformMatrix4fv(shaderProgram.mvMatrixUniform, false, mvMatrix);

    }







    var triangleVertexPositionBuffer;

    var squareVertexPositionBuffer;



    function initBuffers() {

        triangleVertexPositionBuffer = gl.createBuffer();

        gl.bindBuffer(gl.ARRAY_BUFFER, triangleVertexPositionBuffer);

        var vertices = [

             0.0,  1.0,  0.0,

            -1.0, -1.0,  0.0,

             1.0, -1.0,  0.0

        ];

        gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(vertices), gl.STATIC_DRAW);

        triangleVertexPositionBuffer.itemSize = 3;

        triangleVertexPositionBuffer.numItems = 3;




        squareVertexPositionBuffer = gl.createBuffer();

        gl.bindBuffer(gl.ARRAY_BUFFER, squareVertexPositionBuffer);

        vertices = [

             1.0,  1.0,  0.0,

            -1.0,  1.0,  0.0,

             1.0, -1.0,  0.0,

            -1.0, -1.0,  0.0

        ];

        gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(vertices), gl.STATIC_DRAW);

        squareVertexPositionBuffer.itemSize = 3;

        squareVertexPositionBuffer.numItems = 4;

    }





    function drawScene() {

        gl.viewport(0, 0, gl.viewportWidth, gl.viewportHeight);

        gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);



        mat4.perspective(45, gl.viewportWidth / gl.viewportHeight, 0.1, 100.0, pMatrix);



        mat4.identity(mvMatrix);



        mat4.translate(mvMatrix, [-1.5, 0.0, -7.0]);

        gl.bindBuffer(gl.ARRAY_BUFFER, triangleVertexPositionBuffer);

        gl.vertexAttribPointer(shaderProgram.vertexPositionAttribute, triangleVertexPositionBuffer.itemSize, gl.FLOAT, false, 0, 0);

        setMatrixUniforms();

        gl.drawArrays(gl.TRIANGLES, 0, triangleVertexPositionBuffer.numItems);





        mat4.translate(mvMatrix, [3.0, 0.0, 0.0]);

        gl.bindBuffer(gl.ARRAY_BUFFER, squareVertexPositionBuffer);

        gl.vertexAttribPointer(shaderProgram.vertexPositionAttribute, squareVertexPositionBuffer.itemSize, gl.FLOAT, false, 0, 0);


        setMatrixUniforms();

        gl.drawArrays(gl.TRIANGLE_STRIP, 0, squareVertexPositionBuffer.numItems);

    }







    function webGLStart() {

        var canvas = document.getElementById("lesson01-canvas");

        initGL(canvas);

        initShaders();

        initBuffers();



        gl.clearColor(0.0, 0.0, 0.0, 1.0);

        gl.enable(gl.DEPTH_TEST);



        drawScene();

    }



window.onload = function() {

webGLStart();

}

&lt;/script&gt;



&lt;canvas id="lesson01-canvas" style="border: none;" width="500" height="500"&gt;&lt;/canvas&gt;
see anything up there? a canvas with a square and triangle? no? ha.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2569837522518203910-5852087991018763468?l=html5canvasmmorpggames.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://html5canvasmmorpggames.blogspot.com/feeds/5852087991018763468/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://html5canvasmmorpggames.blogspot.com/2011/11/first-blogger-webgl-test-code-from.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2569837522518203910/posts/default/5852087991018763468?v=2'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2569837522518203910/posts/default/5852087991018763468?v=2'/><link rel='alternate' type='text/html' href='http://html5canvasmmorpggames.blogspot.com/2011/11/first-blogger-webgl-test-code-from.html' title='Blogger Client Side WebGl Test'/><author><name>george endrulat</name><uri>http://www.blogger.com/profile/05240665595263664658</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry gd:etag='W/&quot;DE8BQ3o8eSp7ImA9WhRRF0k.&quot;'><id>tag:blogger.com,1999:blog-2569837522518203910.post-2155437053905017942</id><published>2011-11-30T14:06:00.002-06:00</published><updated>2011-12-01T07:40:52.471-06:00</updated><app:edited xmlns:app='http://www.w3.org/2007/app'>2011-12-01T07:40:52.471-06:00</app:edited><category scheme='http://www.blogger.com/atom/ns#' term='sandbox'/><category scheme='http://www.blogger.com/atom/ns#' term='webgl'/><category scheme='http://www.blogger.com/atom/ns#' term='shader'/><category scheme='http://www.blogger.com/atom/ns#' term='glsl'/><title>Sandbox: Webgl Shaders</title><content type='html'>Webgl Shader Sandbox:&amp;nbsp;&lt;a href="http://mrdoob.com/projects/glsl_sandbox/"&gt;http://mrdoob.com/projects/glsl_sandbox/&lt;/a&gt;&lt;br /&gt;Source:&amp;nbsp;&lt;a href="https://github.com/mrdoob/glsl-sandbox"&gt;https://github.com/mrdoob/glsl-sandbox&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This will let you futz around with webgl shaders. &amp;nbsp;I'll try and build a list of sandboxes for the future.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2569837522518203910-2155437053905017942?l=html5canvasmmorpggames.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://html5canvasmmorpggames.blogspot.com/feeds/2155437053905017942/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://html5canvasmmorpggames.blogspot.com/2011/11/webgl-shader-sandbox-httpmrdoob.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2569837522518203910/posts/default/2155437053905017942?v=2'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2569837522518203910/posts/default/2155437053905017942?v=2'/><link rel='alternate' type='text/html' href='http://html5canvasmmorpggames.blogspot.com/2011/11/webgl-shader-sandbox-httpmrdoob.html' title='Sandbox: Webgl Shaders'/><author><name>george endrulat</name><uri>http://www.blogger.com/profile/05240665595263664658</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry gd:etag='W/&quot;Dk8FRHk6fip7ImA9WhRRF0g.&quot;'><id>tag:blogger.com,1999:blog-2569837522518203910.post-2847207042782886453</id><published>2011-11-30T13:26:00.002-06:00</published><updated>2011-12-01T09:53:35.716-06:00</updated><app:edited xmlns:app='http://www.w3.org/2007/app'>2011-12-01T09:53:35.716-06:00</app:edited><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='coffee script'/><category scheme='http://www.blogger.com/atom/ns#' term='language'/><title>Language</title><content type='html'>Language:&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
There's quite a few to choose from, but if we are talking almost strictly web based, the first thing that comes to mind for most people is javascript. &amp;nbsp;The big trend I have been seeing a lot of lately is&amp;nbsp;&lt;a href="http://jashkenas.github.com/coffee-script/"&gt;coffee script&lt;/a&gt;.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
From their website:&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div style="background-color: #f6f6f6; color: #333333; font-family: 'Helvetica Neue', 'Lucida Grande', 'Lucida Sans Unicode', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; width: 625px;"&gt;
&lt;b&gt;CoffeeScript is a little language that compiles into JavaScript.&lt;/b&gt;&amp;nbsp;Underneath all those awkward braces and semicolons, JavaScript has always had a gorgeous object model at its heart. CoffeeScript is an attempt to expose the good parts of JavaScript in a simple way.&lt;/div&gt;
&lt;div style="background-color: #f6f6f6; color: #333333; font-family: 'Helvetica Neue', 'Lucida Grande', 'Lucida Sans Unicode', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; width: 625px;"&gt;
The golden rule of CoffeeScript is:&amp;nbsp;&lt;i&gt;"It's just JavaScript"&lt;/i&gt;. The code compiles one-to-one into the equivalent JS, and there is no interpretation at runtime. You can use any existing JavaScript library seamlessly from CoffeeScript (and vice-versa). The compiled output is readable and pretty-printed, passes through&amp;nbsp;&lt;a href="http://www.javascriptlint.com/" rel="noreferrer" style="color: #191933;"&gt;JavaScript Lint&lt;/a&gt;&amp;nbsp;without warnings, will work in every JavaScript implementation, and tends to run as fast or faster than the equivalent handwritten JavaScript.&lt;/div&gt;
&lt;div style="background-color: #f6f6f6; color: #333333; font-family: 'Helvetica Neue', 'Lucida Grande', 'Lucida Sans Unicode', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; width: 625px;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="background-color: #f6f6f6; color: #333333; font-family: 'Helvetica Neue', 'Lucida Grande', 'Lucida Sans Unicode', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; width: 625px;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="background-color: #f6f6f6; color: #333333; font-family: 'Helvetica Neue', 'Lucida Grande', 'Lucida Sans Unicode', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; width: 625px;"&gt;
&lt;span style="color: black; font-family: 'Times New Roman'; font-size: small; line-height: normal;"&gt;Honestly do yourself a favor and take a look at their website. &amp;nbsp;Coffee script will change how javascript is written in general, I have very little doubt about that.&lt;/span&gt;&lt;/div&gt;
&lt;div style="background-color: #f6f6f6; color: #333333; font-family: 'Helvetica Neue', 'Lucida Grande', 'Lucida Sans Unicode', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; width: 625px;"&gt;
&lt;span style="color: black; font-family: 'Times New Roman'; font-size: small; line-height: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="background-color: #f6f6f6; color: #333333; font-family: 'Helvetica Neue', 'Lucida Grande', 'Lucida Sans Unicode', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; width: 625px;"&gt;
&lt;span style="color: black; font-family: 'Times New Roman'; font-size: small; line-height: normal;"&gt;So I'd like to state here that any code I post on this blog will either be in javascript or coffee script, this isn't set in stone, but close.&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2569837522518203910-2847207042782886453?l=html5canvasmmorpggames.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://html5canvasmmorpggames.blogspot.com/feeds/2847207042782886453/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://html5canvasmmorpggames.blogspot.com/2011/11/language-theres-quite-few-to-choose.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2569837522518203910/posts/default/2847207042782886453?v=2'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2569837522518203910/posts/default/2847207042782886453?v=2'/><link rel='alternate' type='text/html' href='http://html5canvasmmorpggames.blogspot.com/2011/11/language-theres-quite-few-to-choose.html' title='Language'/><author><name>george endrulat</name><uri>http://www.blogger.com/profile/05240665595263664658</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry gd:etag='W/&quot;DE8MQ3k8eip7ImA9WhRRF0k.&quot;'><id>tag:blogger.com,1999:blog-2569837522518203910.post-3506897111310305985</id><published>2011-11-30T13:12:00.002-06:00</published><updated>2011-12-01T07:41:22.772-06:00</updated><app:edited xmlns:app='http://www.w3.org/2007/app'>2011-12-01T07:41:22.772-06:00</app:edited><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='visual programming'/><category scheme='http://www.blogger.com/atom/ns#' term='webgl'/><title>Threenode.js</title><content type='html'>Just found out about&amp;nbsp;&lt;a href="https://github.com/idflood/ThreeNodes.js"&gt;ThreeNodes.js&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-hs3bu54naao/TtaAbgLMZmI/AAAAAAAABSA/n4o09LnRGBc/s1600/tumblr_lurhsklPco1qbis4g%255B1%255D.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="173" src="http://2.bp.blogspot.com/-hs3bu54naao/TtaAbgLMZmI/AAAAAAAABSA/n4o09LnRGBc/s320/tumblr_lurhsklPco1qbis4g%255B1%255D.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;It's a visual Webgl interface written in javascript.&lt;br /&gt;Just link together elements and you're off and running.&lt;br /&gt;Live demo:&amp;nbsp;&lt;a href="http://idflood.github.com/ThreeNodes.js/"&gt;http://idflood.github.com/ThreeNodes.js/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;While I love the idea, any kind of visual programming where someone with little to no programming experience can pick it up, this one looks better than most. &amp;nbsp;I have played with&amp;nbsp;&lt;a href="http://waterbearlang.com/"&gt;Waterbear&lt;/a&gt;&amp;nbsp;and things like it, ThreeNodes.js is just more fun. &amp;nbsp;I do wish there was a Canvas version of ThreeNodes.... idea.&lt;br /&gt;&lt;br /&gt;I don't really want to get into why someone would use canvas over webgl or the other way around. &amp;nbsp;That's something for another post.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2569837522518203910-3506897111310305985?l=html5canvasmmorpggames.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://html5canvasmmorpggames.blogspot.com/feeds/3506897111310305985/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://html5canvasmmorpggames.blogspot.com/2011/11/just-found-out-about-threenodes.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2569837522518203910/posts/default/3506897111310305985?v=2'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2569837522518203910/posts/default/3506897111310305985?v=2'/><link rel='alternate' type='text/html' href='http://html5canvasmmorpggames.blogspot.com/2011/11/just-found-out-about-threenodes.html' title='Threenode.js'/><author><name>george endrulat</name><uri>http://www.blogger.com/profile/05240665595263664658</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-hs3bu54naao/TtaAbgLMZmI/AAAAAAAABSA/n4o09LnRGBc/s72-c/tumblr_lurhsklPco1qbis4g%255B1%255D.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry gd:etag='W/&quot;DE8NSXw6eCp7ImA9WhRRF0k.&quot;'><id>tag:blogger.com,1999:blog-2569837522518203910.post-521744049941202805</id><published>2011-11-30T12:11:00.002-06:00</published><updated>2011-12-01T07:41:38.210-06:00</updated><app:edited xmlns:app='http://www.w3.org/2007/app'>2011-12-01T07:41:38.210-06:00</app:edited><category scheme='http://www.blogger.com/atom/ns#' term='introduction'/><category scheme='http://www.blogger.com/atom/ns#' term='idea'/><category scheme='http://www.blogger.com/atom/ns#' term='First Post'/><title>First Post</title><content type='html'>Nov 30 2011:&lt;br /&gt;First test post&lt;br /&gt;&lt;br /&gt;The idea here will eventually be a working blog about web based games/gaming.&lt;br /&gt;&lt;br /&gt;Currently, as of this post, I am looking into:&lt;br /&gt;Javascript server: node.js&lt;br /&gt;Realtime communication: node.js + nowjs&lt;br /&gt;Canvas Scene Graphs: mabe cake.js?&lt;br /&gt;Canvas Physics: Box2d.js?&lt;br /&gt;&lt;br /&gt;More on all of this later, of course.&lt;br /&gt;&lt;br /&gt;If you have any suggestions about any of this let me know.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2569837522518203910-521744049941202805?l=html5canvasmmorpggames.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://html5canvasmmorpggames.blogspot.com/feeds/521744049941202805/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://html5canvasmmorpggames.blogspot.com/2011/11/nov-30-2011-first-test-post-idea-here.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2569837522518203910/posts/default/521744049941202805?v=2'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2569837522518203910/posts/default/521744049941202805?v=2'/><link rel='alternate' type='text/html' href='http://html5canvasmmorpggames.blogspot.com/2011/11/nov-30-2011-first-test-post-idea-here.html' title='First Post'/><author><name>george endrulat</name><uri>http://www.blogger.com/profile/05240665595263664658</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry></feed>