Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
dcjq[5] Node.js: What Is It, How Does It Work, and What Can I     Use It For Tomorrow?             April 28, 2011         ...
what we’ll cover• What node is• Why node is the way it is• What you can do with it• Set up a running framework to build we...
node.js is:•   A non-browser Javascript toolkit/    framework started by Ryan Dahl•   Available for *nix-based systems: Li...
node.js is:•   A non-browser Javascript toolkit/framework started by Ryan Dahl•   Available for *nix-based systems: Linux,...
node.js is:•   A non-browser Javascript toolkit/framework started by Ryan Dahl•   Available for *nix-based systems: Linux,...
node.js is:•   A non-browser Javascript toolkit/framework started by Ryan Dahl•   Available for *nix-based systems: Linux,...
node.js is:•   A non-browser Javascript toolkit/framework started by Ryan Dahl•   Available for *nix-based systems: Linux,...
node.js is:•   A non-browser Javascript toolkit/framework started by Ryan Dahl•   Available for *nix-based systems: Linux,...
node.js is:•   A non-browser Javascript toolkit/framework started by Ryan Dahl•   Available for *nix-based systems: Linux,...
so what does code look like?
node.js script to determine if         a file exists          Running it yields:
whoa, back up: asynchronous?•   Core trait of the framework•   Provides scalability• Long-running operations do not block ...
whoa, back up: asynchronous?• Core trait of the framework• Provides scalability• Long-running operations do not block your...
whoa, back up: asynchronous?• Core trait of the framework• Provides scalability• Long-running operations do not block  you...
whoa, back up: asynchronous?• Core trait of the framework• Provides scalability• Long-running operations do not block your...
code looks odd?• node:                                                      • jQuery:var sys = require(sys),              ...
node: up and running•   node.js and its ecosystem still    evolves very fast•   Highly recommended to not put any of it in...
node: up and running• node.js and its ecosystem still evolves very fast•   Highly recommended to not put    any of it in y...
node: up and running•   node.js and its ecosystem still evolves very fast• Highly recommended to not put any of it in your...
be careful for:•   Highly recommended not to    install node in “system”    locations yet•   Uncertain security/threat mod...
be careful for:• Highly recommended not to install node in    “system” locations yet•   Uncertain security/threat model• H...
be careful for:• Highly recommended not to install node in    “system” locations yet•   Uncertain security/threat model•  ...
be careful for:• Highly recommended not to install node in    “system” locations yet•   Uncertain security/threat model• H...
basic components•   node.js itself• nave: manages multiple versions of node• npm: node package manager. Like ruby’s gem or...
basic components•   node.js itself•   nave: manages multiple versions    of node•   npm: node package manager. Like ruby’s...
basic components•   node.js itself• nave: manages multiple versions of node•   npm: node package manager.    Like ruby’s g...
managing versions-nave•   Again, node.js and its libraries    move fast• Like python’s virtualenv or ruby’s rvm, there are...
managing versions-nave•   Again, node.js and its libraries move fast•   Like python’s virtualenv or    ruby’s rvm, there a...
managing versions-nave•   Again, node.js and its libraries move fast• Like python’s virtualenv or ruby’s rvm, there are   ...
managing versions-nave•   Again, node.js and its libraries move fast• Like python’s virtualenv or ruby’s rvm, there are   ...
managing versions-nave•   Again, node.js and its libraries move fast• Like python’s virtualenv or ruby’s rvm, there are   ...
install node.js via nave•   node.js must be built from    source•   nave handles this for you. Examples:      nave use sta...
install node.js via nave•   node.js must be built from source•   nave handles this for you.    Examples:      nave use sta...
install node.js via nave•   node.js must be built from source• nave handles this for you. Examples:      nave use stable  ...
installing nave• Adapted from https://gist.github.com/  579814#file_use_nave.sh    mkdir ~/.nave    pushd ~/.nave    wget h...
nave installing a version...Several thousand lines of build output deleted...
npm: node package manager•   Handles easy installation of node    packages• Databases: mysql, postgresql, sqlite, mongodb,...
npm: node package manager• Handles easy installation of node packages• Databases: mysql, postgresql, sqlite, mongodb, etc•...
install npmcurl http://npmjs.org/install.sh | sh          That’s it, there is no step 2!
it’s alivejonathan@ubuntu:~$ node --versionv0.4.7jonathan@ubuntu:~$ npm --version1.0.3jonathan@ubuntu:~$
installing node packages    Some more output deleted...
let’s write a web appvar sys = require(sys),  http = require(http);http.createServer(function(req, res) {     res.writeHea...
let’s run the web app  jonathan@ubuntu:~/src/dcjq_5_nodejs$ nave use stable  Already installed: 0.4.7  using 0.4.7  jonath...
and visit our webpage
now let’s debug the web app•   node-inspector is an npm package for debugging node over http!    jonathan@ubuntu:~/src/dcj...
and see us stop at a breakpoint!
advantages of node•   Javascript makes callback-based    (“event”) programming familiar• Fast: framework says take operati...
advantages of node• Javascript makes callback-based (“event”) programming familiar• Fast: framework says take operations  ...
advantages of node• Javascript makes callback-based (“event”) programming familiar• Fast: framework says take operations t...
advantages of node• Javascript makes callback-based (“event”) programming familiar• Fast: framework says take operations t...
advantages of node• Javascript makes callback-based (“event”) programming familiar• Fast: framework says take operations t...
sample web development stack •   node-inspector: debugging •   express (and connect): web framework, middleware, routing, ...
examples/sample app• See https://github.com/jonathana/dcjq_5_nodejs for the  example code used in this presentation and a ...
appendix: Resources•   Ryan Dahl: (http://tinyclouds.org/, https://github.com/ry)•   Ryan’s jsconf 2009 presentation: http...
Upcoming SlideShare
Loading in …5
×

Dcjq node.js presentation

Node.js: What Is It, How Does It Work, and What Can I Use It For Tomorrow?

Related Books

Free with a 30 day trial from Scribd

See all

Related Audiobooks

Free with a 30 day trial from Scribd

See all
  • Be the first to comment

Dcjq node.js presentation

  1. 1. dcjq[5] Node.js: What Is It, How Does It Work, and What Can I Use It For Tomorrow? April 28, 2011 Jonathan Altman http://async.io/ @async_io
  2. 2. what we’ll cover• What node is• Why node is the way it is• What you can do with it• Set up a running framework to build web apps• Dissect a simple node web application
  3. 3. node.js is:• A non-browser Javascript toolkit/ framework started by Ryan Dahl• Available for *nix-based systems: Linux, OS X, OpenSolaris (and Windows)• Built on top of Google’s V8 Javascript engine• Compatible with many common Javascript libraries out of the box via CommonJS support (http://www.commonjs.org/)• A batteries-included framework: HTTP and socket support baked into the core of the framework• A framework that is easy to build tooling on top of• Most importantly: asynchronous from the ground up
  4. 4. node.js is:• A non-browser Javascript toolkit/framework started by Ryan Dahl• Available for *nix-based systems: Linux, OS X, OpenSolaris (and Windows)• Built on top of Google’s V8 Javascript engine• Compatible with many common Javascript libraries out of the box via CommonJS support (http://www.commonjs.org/)• A batteries-included framework: HTTP and socket support baked into the core of the framework• A framework that is easy to build tooling on top of• Most importantly: asynchronous from the ground up
  5. 5. node.js is:• A non-browser Javascript toolkit/framework started by Ryan Dahl• Available for *nix-based systems: Linux, OS X, OpenSolaris (and Windows)• Built on top of Google’s V8 Javascript engine• Compatible with many common Javascript libraries out of the box via CommonJS support (http://www.commonjs.org/)• A batteries-included framework: HTTP and socket support baked into the core of the framework• A framework that is easy to build tooling on top of• Most importantly: asynchronous from the ground up
  6. 6. node.js is:• A non-browser Javascript toolkit/framework started by Ryan Dahl• Available for *nix-based systems: Linux, OS X, OpenSolaris (and Windows)• Built on top of Google’s V8 Javascript engine• Compatible with many common Javascript libraries out of the box via CommonJS support (http://www.commonjs.org/)• A batteries-included framework: HTTP and socket support baked into the core of the framework• A framework that is easy to build tooling on top of• Most importantly: asynchronous from the ground up
  7. 7. node.js is:• A non-browser Javascript toolkit/framework started by Ryan Dahl• Available for *nix-based systems: Linux, OS X, OpenSolaris (and Windows)• Built on top of Google’s V8 Javascript engine• Compatible with many common Javascript libraries out of the box via CommonJS support (http://www.commonjs.org/)• A batteries-included framework: HTTP and socket support baked into the core of the framework• A framework that is easy to build tooling on top of• Most importantly: asynchronous from the ground up
  8. 8. node.js is:• A non-browser Javascript toolkit/framework started by Ryan Dahl• Available for *nix-based systems: Linux, OS X, OpenSolaris (and Windows)• Built on top of Google’s V8 Javascript engine• Compatible with many common Javascript libraries out of the box via CommonJS support (http://www.commonjs.org/)• A batteries-included framework: HTTP and socket support baked into the core of the framework• A framework that is easy to build tooling on top of• Most importantly: asynchronous from the ground up
  9. 9. node.js is:• A non-browser Javascript toolkit/framework started by Ryan Dahl• Available for *nix-based systems: Linux, OS X, OpenSolaris (and Windows)• Built on top of Google’s V8 Javascript engine• Compatible with many common Javascript libraries out of the box via CommonJS support (http://www.commonjs.org/)• A batteries-included framework: HTTP and socket support baked into the core of the framework• A framework that is easy to build tooling on top of• Most importantly: asynchronous from the ground up
  10. 10. so what does code look like?
  11. 11. node.js script to determine if a file exists Running it yields:
  12. 12. whoa, back up: asynchronous?• Core trait of the framework• Provides scalability• Long-running operations do not block your server• Coding looks odd for server writers
  13. 13. whoa, back up: asynchronous?• Core trait of the framework• Provides scalability• Long-running operations do not block your server• Coding looks odd for server writers
  14. 14. whoa, back up: asynchronous?• Core trait of the framework• Provides scalability• Long-running operations do not block your server• Coding looks odd for server writers
  15. 15. whoa, back up: asynchronous?• Core trait of the framework• Provides scalability• Long-running operations do not block your server• Coding looks odd for server writers
  16. 16. code looks odd?• node: • jQuery:var sys = require(sys), $(.station_map).live("pagecreate", function() { path = require(path),     if(navigator.geolocation) { fs = require(fs);       navigator.geolocation.getCurrentPosition(function(position){         initializeMap(position.coords.latitude,position.coords.longitvar fileName = process.ARGV[2]; ude);path.exists(fileName, function(exists) {       }); if (!exists) {     } sys.puts(fileName + not found);   }); return; // snippet taken from https://github.com/mikeymckay/Capital- } Bikeshare/blob/master/capitalbikeshare.js sys.puts(w00t! + fileName + exists!);});// https://github.com/jonathana/dcjq_5_nodejs/blob/master/node_async_example.js Doesn’t the code look just like the event-driven javascript DHTML- based web apps have been written in for years?
  17. 17. node: up and running• node.js and its ecosystem still evolves very fast• Highly recommended to not put any of it in your system paths• We’ll use ~/local (lots of examples do so...)
  18. 18. node: up and running• node.js and its ecosystem still evolves very fast• Highly recommended to not put any of it in your system paths• We’ll use ~/local (lots of examples do so...)
  19. 19. node: up and running• node.js and its ecosystem still evolves very fast• Highly recommended to not put any of it in your system paths• We’ll use ~/local (lots of examples do so...)
  20. 20. be careful for:• Highly recommended not to install node in “system” locations yet• Uncertain security/threat model• Hide behind a reverse proxy
  21. 21. be careful for:• Highly recommended not to install node in “system” locations yet• Uncertain security/threat model• Hide behind a reverse proxy
  22. 22. be careful for:• Highly recommended not to install node in “system” locations yet• Uncertain security/threat model• Hide behind a reverse proxy
  23. 23. be careful for:• Highly recommended not to install node in “system” locations yet• Uncertain security/threat model• Hide behind a reverse proxy• Everything in this presentation could be wrong by now!
  24. 24. basic components• node.js itself• nave: manages multiple versions of node• npm: node package manager. Like ruby’s gem or python’s easy_install
  25. 25. basic components• node.js itself• nave: manages multiple versions of node• npm: node package manager. Like ruby’s gem or python’s easy_install
  26. 26. basic components• node.js itself• nave: manages multiple versions of node• npm: node package manager. Like ruby’s gem or python’s easy_install
  27. 27. managing versions-nave• Again, node.js and its libraries move fast• Like python’s virtualenv or ruby’s rvm, there are nave and nvm for node• Let’s use nave• Allows us to have a “stable” environment• Allows us to test newer versions without risking “stable”
  28. 28. managing versions-nave• Again, node.js and its libraries move fast• Like python’s virtualenv or ruby’s rvm, there are nave and nvm for node• Let’s use nave• Allows us to have a “stable” environment• Allows us to test newer versions without risking
  29. 29. managing versions-nave• Again, node.js and its libraries move fast• Like python’s virtualenv or ruby’s rvm, there are nave and nvm for node• Let’s use nave• Allows us to have a “stable” environment• Allows us to test newer versions without risking “stable”
  30. 30. managing versions-nave• Again, node.js and its libraries move fast• Like python’s virtualenv or ruby’s rvm, there are nave and nvm for node• Let’s use nave• Allows us to have a “stable” environment• Allows us to test newer versions without risking “stable”
  31. 31. managing versions-nave• Again, node.js and its libraries move fast• Like python’s virtualenv or ruby’s rvm, there are nave and nvm for node• Let’s use nave• Allows us to have a “stable” environment• Allows us to test newer versions without risking “stable”
  32. 32. install node.js via nave• node.js must be built from source• nave handles this for you. Examples: nave use stable nave use latest nave use 0.4.6• nave downloads, builds, and installs the node version you asked for!
  33. 33. install node.js via nave• node.js must be built from source• nave handles this for you. Examples: nave use stable nave use latest nave use 0.4.6• nave downloads, builds, and installs the node version you asked for!
  34. 34. install node.js via nave• node.js must be built from source• nave handles this for you. Examples: nave use stable nave use latest nave use 0.4.6• nave downloads, builds, and installs the node version you asked for!
  35. 35. installing nave• Adapted from https://gist.github.com/ 579814#file_use_nave.sh mkdir ~/.nave pushd ~/.nave wget http://github.com/isaacs/nave/raw/master/ nave.sh ln -s $PWD/nave.sh ~/local/bin/nave
  36. 36. nave installing a version...Several thousand lines of build output deleted...
  37. 37. npm: node package manager• Handles easy installation of node packages• Databases: mysql, postgresql, sqlite, mongodb, etc• DOM: jsdom• web frameworks: e.g. express, connect, spark/spark2• DOM manipulation: YUI3, jQuery• Utility libraries: backbone/spine, underscore, socket.io• Templating: mustache, handlebars, ejs, etc• Testing: vows, expresso, nodemock, nodeunit
  38. 38. npm: node package manager• Handles easy installation of node packages• Databases: mysql, postgresql, sqlite, mongodb, etc• DOM: jsdom• web frameworks: e.g. express, connect, spark/spark2• DOM manipulation:YUI3, jQuery• Utility libraries: backbone/spine, underscore, socket.io• Templating: mustache, handlebars, ejs, etc• Testing: vows, expresso, nodemock, nodeunit
  39. 39. install npmcurl http://npmjs.org/install.sh | sh That’s it, there is no step 2!
  40. 40. it’s alivejonathan@ubuntu:~$ node --versionv0.4.7jonathan@ubuntu:~$ npm --version1.0.3jonathan@ubuntu:~$
  41. 41. installing node packages Some more output deleted...
  42. 42. let’s write a web appvar sys = require(sys), http = require(http);http.createServer(function(req, res) { res.writeHead(200, {Content-Type: text/html}); res.write(<h1>Hello World</h1>); res.end();}).listen(8000);sys.puts(Server running at http://127.0.0.1:8000/);//https://github.com/jonathana/dcjq_5_nodejs/blob/master/helloworld.js
  43. 43. let’s run the web app jonathan@ubuntu:~/src/dcjq_5_nodejs$ nave use stable Already installed: 0.4.7 using 0.4.7 jonathan@ubuntu:~/src/dcjq_5_nodejs$ PATH=$PATH:`npm bin` jonathan@ubuntu:~/src/dcjq_5_nodejs$ node helloworld.js Server running at http://0.0.0.0:8000/• That PATH= command is for npm-installed executables
  44. 44. and visit our webpage
  45. 45. now let’s debug the web app• node-inspector is an npm package for debugging node over http! jonathan@ubuntu:~/src/dcjq_5_nodejs$ node-inspector & [1] 6274 visit http://0.0.0.0:8080/debug?port=5858 to start debugging jonathan@ubuntu:~/src/dcjq_5_nodejs$ node --debug helloworld.js debugger listening on port 5858 Server running at http://0.0.0.0:8000/• The webkit javascript debugging engine works really well with this. Debugging in Chrome FTW!
  46. 46. and see us stop at a breakpoint!
  47. 47. advantages of node• Javascript makes callback-based (“event”) programming familiar• Fast: framework says take operations that normally block webserver and make them asynchronous• Same language on client and server• Same libraries on client and server• Long-running connections to lots of clients: Comet
  48. 48. advantages of node• Javascript makes callback-based (“event”) programming familiar• Fast: framework says take operations that normally block webserver and make them asynchronous• Same language on client and server• Same libraries on client and server• Long-running connections to lots of clients: Comet
  49. 49. advantages of node• Javascript makes callback-based (“event”) programming familiar• Fast: framework says take operations that normally block webserver and make them asynchronous• Same language on client and server• Same libraries on client and server• Long-running connections to lots of clients: Comet
  50. 50. advantages of node• Javascript makes callback-based (“event”) programming familiar• Fast: framework says take operations that normally block webserver and make them asynchronous• Same language on client and server• Same libraries on client and server• Long-running connections to lots of clients: Comet
  51. 51. advantages of node• Javascript makes callback-based (“event”) programming familiar• Fast: framework says take operations that normally block webserver and make them asynchronous• Same language on client and server• Same libraries on client and server• Long-running connections to lots of clients: Comet
  52. 52. sample web development stack • node-inspector: debugging • express (and connect): web framework, middleware, routing, controllers • spark2: nice front-end for controlling node servers • ejs templates: embedded javascript, for views • connect-mongodb: mongoDB-backed sessions • mongoose: mongoDB-based object mapper for models • test: yeah, you should pick some packages and use them • jsdom: manipulate html DOMs server-side • jquery and/or YUI3: do cool stuff server side with the DOM
  53. 53. examples/sample app• See https://github.com/jonathana/dcjq_5_nodejs for the example code used in this presentation and a heavily- commented simple web app built using many of the packages on the previous slides
  54. 54. appendix: Resources• Ryan Dahl: (http://tinyclouds.org/, https://github.com/ry)• Ryan’s jsconf 2009 presentation: http://s3.amazonaws.com/four.livejournal/ 20091117/jsconf.pdf• Simon Willison’s blog post re: node.js: http://simonwillison.net/2009/Nov/23/node/• node.js home: http://nodejs.org/, git repo: https://github.com/joyent/node/• node modules: https://github.com/joyent/node/wiki/modules• Isaac Schlueter: (npm and nave) https://github.com/isaacs/, http://blog.izs.me/• Dav Glass’ mind-bending demonstration of using YUI server-side: http:// developer.yahoo.com/yui/theater/video.php?v=glass-node• Nice list of some apps built using node.js + express: http://expressjs.com/ applications.html

×