SlideShare une entreprise Scribd logo
1  sur  154
Télécharger pour lire hors ligne
NodeWay
dovchar 2013
dovcharitweekend2013
Aboutme
✦ 7 years in IT
dovcharitweekend2013
Aboutme
✦ 7 years in IT
✦ 3 years in SoftServe
dovcharitweekend2013
Aboutme
✦ 7 years in IT
✦ 3 years in SoftServe
✦ 7 months Application Architect
dovcharitweekend2013
Aboutme
✦ 7 years in IT
✦ 3 years in SoftServe
✦ 7 months Application Architect
✦ Main language: Javascript
dovcharitweekend2013
Aboutme
✦ 7 years in IT
✦ 3 years in SoftServe
✦ 7 months Application Architect
✦ Main language: Javascript
✦ Hobby language: Go
dovcharitweekend2013
Aboutme
✦ 7 years in IT
✦ 3 years in SoftServe
✦ 7 months Application Architect
✦ Main language: Javascript
✦ Hobby language: Go
✦ Pacemaker conference
dovcharitweekend2013
Aboutme
✦ 7 years in IT
✦ 3 years in SoftServe
✦ 7 months Application Architect
✦ Main language: Javascript
✦ Hobby language: Go
✦ Pacemaker conference
✦ Script’n’Code meet-up
dovcharitweekend2013
Aboutme
✦ 7 years in IT
✦ 3 years in SoftServe
✦ 7 months Application Architect
✦ Main language: Javascript
✦ Hobby language: Go
✦ Pacemaker conference
✦ Script’n’Code meet-up
✦ Open source (typescript grails, clio
go, sonar qunit)
dovcharitweekend2013
Aboutme
dovcharitweekend2013
Agenda
NodeWay in my project
dovcharitweekend2013
Agenda
NodeWay in my project NodeWay in my dreams
dovcharitweekend2013
Agenda
NodeWay in my project NodeWay in my dreams
✦Nodejs
✦Installation
✦My Project
✦Architecture
✦Project statistics
✦Code health goal
✦Before
✦After
✦Development process
✦Conclusion
dovcharitweekend2013
Agenda
NodeWay in my project NodeWay in my dreams
✦Nodejs
✦Installation
✦My Project
✦Architecture
✦Project statistics
✦Code health goal
✦Before
✦After
✦Development process
✦Conclusion
dovcharitweekend2013
✦What is Sails
✦Features
✦Get Started
✦MVC Structure
✦Routers
✦Assets
✦Policies
✦Deployment
✦Sockets
✦Conclusion
Agenda
NodeJSdovcharitweekend2013
«Node.js is a software platform that is used to build scalable network (especially server-
side) applications. Node.js utilizes JavaScript as its scripting language, and achieves
high throughput via non-blocking I/O and a single-threaded event loop.
Node.js contains a built-in HTTP server library, making it possible to run a web server
without the use of external software, such as Apache or Lighttpd, and allowing more
control of how the web server works.»
Wikipedia
NodeJSdovcharitweekend2013
«Node.js is a software platform that is used to build scalable network (especially server-
side) applications. Node.js utilizes JavaScript as its scripting language, and achieves
high throughput via non-blocking I/O and a single-threaded event loop.
Node.js contains a built-in HTTP server library, making it possible to run a web server
without the use of external software, such as Apache or Lighttpd, and allowing more
control of how the web server works.»
Wikipedia
‣Original author(s): Ryan Lienhart Dahl
‣Stable release: 0.10.18 / September 4, 2013
‣Preview release: 0.11.7 / August 21, 2013
‣Development status: Active
‣Written in C++, JavaScript
‣Operating system: Mac OS X, Linux, Solaris,
FreeBSD, OpenBSD, Windows (older versions
require Cygwin), webOS
‣Type: Event-driven networking
‣License: MIT
‣Website: nodejs.org
NodeJSdovcharitweekend2013
«Node.js is a software platform that is used to build scalable network (especially server-
side) applications. Node.js utilizes JavaScript as its scripting language, and achieves
high throughput via non-blocking I/O and a single-threaded event loop.
Node.js contains a built-in HTTP server library, making it possible to run a web server
without the use of external software, such as Apache or Lighttpd, and allowing more
control of how the web server works.»
Wikipedia
‣Original author(s): Ryan Lienhart Dahl
‣Stable release: 0.10.18 / September 4, 2013
‣Preview release: 0.11.7 / August 21, 2013
‣Development status: Active
‣Written in C++, JavaScript
‣Operating system: Mac OS X, Linux, Solaris,
FreeBSD, OpenBSD, Windows (older versions
require Cygwin), webOS
‣Type: Event-driven networking
‣License: MIT
‣Website: nodejs.org
Installationdovcharitweekend2013
Install on OSX
Using a package:
Simply download Macintosh Installer
Using homebrew:
brew install node
Using macports:
port install nodejs
Installationdovcharitweekend2013
Install on Linux
Ubuntu, Mint
Example install:
sudo apt-get install python-software-properties python g++ make
sudo add-apt-repository ppa:chris-lea/node.js
sudo apt-get update
sudo apt-get install nodejs
It installs current stable Node on the current stable Ubuntu. Quantal (12.10) users may need to install the software-properties-commonpackage for the add-apt-
repository command to work: sudo apt-get install software-properties-common
As of Node.js v0.10.0, the nodejs package from Chris Lea's repo includes both npm and nodejs-dev.
There is a naming conflict with the node package (Amateur Packet Radio Node Program), and the nodejs binary has been renamed fromnode to nodejs. You'll need to
symlink /usr/bin/node to /usr/bin/nodejs or you could uninstall the Amateur Packet Radio Node Program to avoid that conflict.
Installationdovcharitweekend2013
Install on Windows
Using a package:
Simply download Windows Installer.
Using chocolatey to install Node:
cinst nodejs
or for full install with NPM:
cinst nodejs.install
AboutProjectdovcharitweekend2013
AboutProjectdovcharitweekend2013
AboutProjectdovcharitweekend2013
AboutProjectdovcharitweekend2013
AboutProjectdovcharitweekend2013
AboutProjectdovcharitweekend2013
AboutProjectdovcharitweekend2013
AboutProjectdovcharitweekend2013
AboutProjectdovcharitweekend2013
AboutProjectdovcharitweekend2013
AboutProjectdovcharitweekend2013
AboutProjectdovcharitweekend2013
Architecturedovcharitweekend2013
Architecturedovcharitweekend2013
Architecturedovcharitweekend2013
ProjectStatisticsdovcharitweekend2013
ProjectStatisticsdovcharitweekend2013
✦ 2 years development
ProjectStatisticsdovcharitweekend2013
✦ 2 years development
✦ 10 scrum teams
ProjectStatisticsdovcharitweekend2013
✦ 2 years development
✦ 10 scrum teams
✦ 59 modules
ProjectStatisticsdovcharitweekend2013
✦ 2 years development
✦ 10 scrum teams
✦ 59 modules
✦ 3200 javascript files
ProjectStatisticsdovcharitweekend2013
✦ 2 years development
✦ 10 scrum teams
✦ 59 modules
✦ 3200 javascript files
✦ 200.000 lines of code
ProjectStatisticsdovcharitweekend2013
✦ 2 years development
✦ 10 scrum teams
✦ 59 modules
✦ 3200 javascript files
✦ 200.000 lines of code
✦ 1.826 total violations
ProjectStatisticsdovcharitweekend2013
✦ 2 years development
✦ 10 scrum teams
✦ 59 modules
✦ 3200 javascript files
✦ 200.000 lines of code
✦ 1.826 total violations
✦ 28.3% average coverage
ProjectStatisticsdovcharitweekend2013
✦ 2 years development
✦ 10 scrum teams
✦ 59 modules
✦ 3200 javascript files
✦ 200.000 lines of code
✦ 1.826 total violations
✦ 28.3% average coverage
✦ >5000 unit tests
What is Node.js doing here?!
dovcharitweekend2013
Code health goal 90%
dovcharitweekend2013
CodeHealthdovcharitweekend2013
Source
CodeHealthdovcharitweekend2013
Source
Architecture &
Design
CodeHealthdovcharitweekend2013
Source
Architecture &
Design
Duplications
CodeHealthdovcharitweekend2013
Source
Architecture &
Design
Duplications
Unit tests
CodeHealthdovcharitweekend2013
Source
Architecture &
Design
Duplications
Unit tests
Complexity
CodeHealthdovcharitweekend2013
Source
Architecture &
Design
Duplications
Unit tests
Potential bugs Complexity
CodeHealthdovcharitweekend2013
Source
Architecture &
Design
Duplications
Coding rules Unit tests
Potential bugs Complexity
CodeHealthdovcharitweekend2013
Source
Comments
Architecture &
Design
Duplications
Coding rules Unit tests
Potential bugs Complexity
Beforedovcharitweekend2013
Beforedovcharitweekend2013
✦ A lot of manual work
Beforedovcharitweekend2013
✦ A lot of manual work
✦ More than 5 different sources for analysis and counting
Beforedovcharitweekend2013
✦ A lot of manual work
✦ More than 5 different sources for analysis and counting
✦ JSTD: js test driver for running tests on CI
Beforedovcharitweekend2013
✦ A lot of manual work
✦ More than 5 different sources for analysis and counting
✦ JSTD: js test driver for running tests on CI
✦ Strange custom ruby scripts (still have no idea what they
were used for :)
Beforedovcharitweekend2013
✦ A lot of manual work
✦ More than 5 different sources for analysis and counting
✦ JSTD: js test driver for running tests on CI
✦ Strange custom ruby scripts (still have no idea what they
were used for :)
✦ Sonar showed only back-end code
Beforedovcharitweekend2013
✦ A lot of manual work
✦ More than 5 different sources for analysis and counting
✦ JSTD: js test driver for running tests on CI
✦ Strange custom ruby scripts (still have no idea what they
were used for :)
✦ Sonar showed only back-end code
✦ Code coverage was to get in a separate application which
made the automatic analysis even more complicated
Beforedovcharitweekend2013
✦ A lot of manual work
✦ More than 5 different sources for analysis and counting
✦ JSTD: js test driver for running tests on CI
✦ Strange custom ruby scripts (still have no idea what they
were used for :)
✦ Sonar showed only back-end code
✦ Code coverage was to get in a separate application which
made the automatic analysis even more complicated
✦ Code health was counted in exel with its magic formulas that
mysteriously worked hiding the real problems
Total CRAP...
dovcharitweekend2013
Afterdovcharitweekend2013
Afterdovcharitweekend2013
✦ We’ve refused from everything we had before but the
existing tests
Afterdovcharitweekend2013
✦ We’ve refused from everything we had before but the
existing tests
✦ We’ve decided to switch to node.js for non-functional
requirements
Afterdovcharitweekend2013
✦ We’ve refused from everything we had before but the
existing tests
✦ We’ve decided to switch to node.js for non-functional
requirements
✦ We’ve chosen grunt.js for running node.js tasks (running
unit tests, counting code coverage, creating reports for
Sonar, checking the code semantics and complexity: jshint)
Afterdovcharitweekend2013
✦ We’ve refused from everything we had before but the
existing tests
✦ We’ve decided to switch to node.js for non-functional
requirements
✦ We’ve chosen grunt.js for running node.js tasks (running
unit tests, counting code coverage, creating reports for
Sonar, checking the code semantics and complexity: jshint)
✦ We’ve excluded any manual intervention: sided
applications for code coverage, exel creepy files, etc.
Afterdovcharitweekend2013
✦ We’ve refused from everything we had before but the
existing tests
✦ We’ve decided to switch to node.js for non-functional
requirements
✦ We’ve chosen grunt.js for running node.js tasks (running
unit tests, counting code coverage, creating reports for
Sonar, checking the code semantics and complexity: jshint)
✦ We’ve excluded any manual intervention: sided
applications for code coverage, exel creepy files, etc.
✦ We’ve put counting code health on Sonar’s shoulders for
back-end as well as UI
Afterdovcharitweekend2013
✦ We’ve refused from everything we had before but the
existing tests
✦ We’ve decided to switch to node.js for non-functional
requirements
✦ We’ve chosen grunt.js for running node.js tasks (running
unit tests, counting code coverage, creating reports for
Sonar, checking the code semantics and complexity: jshint)
✦ We’ve excluded any manual intervention: sided
applications for code coverage, exel creepy files, etc.
✦ We’ve put counting code health on Sonar’s shoulders for
back-end as well as UI
✦ We’ve fastened unit testing on CI
Afterdovcharitweekend2013
✦ We’ve refused from everything we had before but the
existing tests
✦ We’ve decided to switch to node.js for non-functional
requirements
✦ We’ve chosen grunt.js for running node.js tasks (running
unit tests, counting code coverage, creating reports for
Sonar, checking the code semantics and complexity: jshint)
✦ We’ve excluded any manual intervention: sided
applications for code coverage, exel creepy files, etc.
✦ We’ve put counting code health on Sonar’s shoulders for
back-end as well as UI
✦ We’ve fastened unit testing on CI
✦ We’ve prevented the developers from failed builds and
have given them the clear system for code quality analysis
and correction
Exampledovcharitweekend2013
Developmentprocessdovcharitweekend2013
Conclusiondovcharitweekend2013
Conclusiondovcharitweekend2013
Conclusiondovcharitweekend2013
+
Conclusiondovcharitweekend2013
+
Conclusiondovcharitweekend2013
+ +
Conclusiondovcharitweekend2013
+ +
Conclusiondovcharitweekend2013
=
+ +
Conclusiondovcharitweekend2013
=
+ +
Nodejsframeworksdovcharitweekend2013
Nodejsframeworksdovcharitweekend2013
Nodejsframeworksdovcharitweekend2013
Nodejsframeworksdovcharitweekend2013
Nodejsframeworksdovcharitweekend2013
Nodejsframeworksdovcharitweekend2013
Nodejsframeworksdovcharitweekend2013
Nodejsframeworksdovcharitweekend2013
Sailsdovcharitweekend2013
What is Sails.js?
Sailsdovcharitweekend2013
Sails.js make it easy to build custom, enterprise-grade Node.js
apps. It is designed to mimic the MVC pattern of frameworks
like Ruby on Rails, but with support for the requirements of
modern apps: data-driven APIs with scalable, service-oriented
architecture. It's especially good for building chat, realtime
dashboards, or multiplayer games.
What is Sails.js?
Featuresdovcharitweekend2013
Featuresdovcharitweekend2013
✦ Sails.js is database agnostic. Its ORM, Waterline, provides a
simple data access layer that works, no matter what database
you're using.
Featuresdovcharitweekend2013
✦ Sails.js is database agnostic. Its ORM, Waterline, provides a
simple data access layer that works, no matter what database
you're using.
✦ Sails.js automatically generates a RESTful JSON API for your
app. That means you don't have to write any backend code to
build simple database apps.
Featuresdovcharitweekend2013
✦ Sails.js is database agnostic. Its ORM, Waterline, provides a
simple data access layer that works, no matter what database
you're using.
✦ Sails.js automatically generates a RESTful JSON API for your
app. That means you don't have to write any backend code to
build simple database apps.
✦ Realtime Socket.io requests are routed to your controllers the
same way as everything else: with resourceful conventions and
URL mappings.
Featuresdovcharitweekend2013
✦ Sails.js is database agnostic. Its ORM, Waterline, provides a
simple data access layer that works, no matter what database
you're using.
✦ Sails.js automatically generates a RESTful JSON API for your
app. That means you don't have to write any backend code to
build simple database apps.
✦ Realtime Socket.io requests are routed to your controllers the
same way as everything else: with resourceful conventions and
URL mappings.
✦ Sails.js provides basic security and role-based access control
by default, and you can add as many custom policies as you like.
Featuresdovcharitweekend2013
✦ Sails.js is database agnostic. Its ORM, Waterline, provides a
simple data access layer that works, no matter what database
you're using.
✦ Sails.js automatically generates a RESTful JSON API for your
app. That means you don't have to write any backend code to
build simple database apps.
✦ Realtime Socket.io requests are routed to your controllers the
same way as everything else: with resourceful conventions and
URL mappings.
✦ Sails.js provides basic security and role-based access control
by default, and you can add as many custom policies as you like.
✦ Because Express and Socket.io share the same configurable
session store, all of your security policies are reused for realtime
WebSocket requests as well.
Featuresdovcharitweekend2013
✦ Sails.js is database agnostic. Its ORM, Waterline, provides a
simple data access layer that works, no matter what database
you're using.
✦ Sails.js automatically generates a RESTful JSON API for your
app. That means you don't have to write any backend code to
build simple database apps.
✦ Realtime Socket.io requests are routed to your controllers the
same way as everything else: with resourceful conventions and
URL mappings.
✦ Sails.js provides basic security and role-based access control
by default, and you can add as many custom policies as you like.
✦ Because Express and Socket.io share the same configurable
session store, all of your security policies are reused for realtime
WebSocket requests as well.
✦ Sails.js has automatic asset minification. With Sails, you just
put your files in the proper folder and they are automatically
included in your layout. Then, when you're ready to go into
production, they are minified and gzipped to preserve as much
bandwidth as possible.
GetStarteddovcharitweekend2013
GetStarteddovcharitweekend2013
npm install -g sails
GetStarteddovcharitweekend2013
npm install -g sails
GetStarteddovcharitweekend2013
npm install -g sails
GetStarteddovcharitweekend2013
npm install -g sails
GetStarteddovcharitweekend2013
npm install -g sails
GetStarteddovcharitweekend2013
npm install -g sails
GetStarteddovcharitweekend2013
npm install -g sails
GetStarteddovcharitweekend2013
npm install -g sails
GetStarteddovcharitweekend2013
npm install -g sails
GetStarteddovcharitweekend2013
npm install -g sails
Controllerdovcharitweekend2013
Controllerdovcharitweekend2013
Controllerdovcharitweekend2013
Controllerdovcharitweekend2013
Controllerdovcharitweekend2013
Controllerdovcharitweekend2013
✦ req.param()
Controllerdovcharitweekend2013
✦ req.param()
✦ req.isSocket
Controllerdovcharitweekend2013
✦ req.param()
✦ req.isSocket
✦ req.isAjax
Controllerdovcharitweekend2013
✦ req.param()
✦ req.isSocket
✦ req.isAjax
✦ req.isJson
Controllerdovcharitweekend2013
✦ req.param()
✦ req.isSocket
✦ req.isAjax
✦ req.isJson
✦ res.view()
Controllerdovcharitweekend2013
✦ req.param()
✦ req.isSocket
✦ req.isAjax
✦ req.isJson
✦ res.view()
✦ res.send()
Controllerdovcharitweekend2013
✦ req.param()
✦ req.isSocket
✦ req.isAjax
✦ req.isJson
✦ res.view()
✦ res.send()
✦ res.json()
Controllerdovcharitweekend2013
✦ req.param()
✦ req.isSocket
✦ req.isAjax
✦ req.isJson
✦ res.view()
✦ res.send()
✦ res.json()
✦ res.redirect()
Controllerdovcharitweekend2013
✦ req.param()
✦ req.isSocket
✦ req.isAjax
✦ req.isJson
✦ res.view()
✦ res.send()
✦ res.json()
✦ res.redirect()
✦ res.viewExists
Modeldovcharitweekend2013
Modeldovcharitweekend2013
Modeldovcharitweekend2013
Modeldovcharitweekend2013
Modeldovcharitweekend2013
✦ Attributes
Modeldovcharitweekend2013
✦ Attributes
✦ Validations
Modeldovcharitweekend2013
✦ Attributes
✦ Validations
✦ Instance Methods (save, destroy,
toObject, toJSON)
Modeldovcharitweekend2013
✦ Attributes
✦ Validations
✦ Instance Methods (save, destroy,
toObject, toJSON)
✦ Custom Defined Instance Methods
Modeldovcharitweekend2013
✦ Attributes
✦ Validations
✦ Instance Methods (save, destroy,
toObject, toJSON)
✦ Custom Defined Instance Methods
✦ Lifecycle callbacks
Modeldovcharitweekend2013
✦ Attributes
✦ Validations
✦ Instance Methods (save, destroy,
toObject, toJSON)
✦ Custom Defined Instance Methods
✦ Lifecycle callbacks
✦ Custom tables name
Modeldovcharitweekend2013
✦ Attributes
✦ Validations
✦ Instance Methods (save, destroy,
toObject, toJSON)
✦ Custom Defined Instance Methods
✦ Lifecycle callbacks
✦ Custom tables name
✦ Adapters
Modeldovcharitweekend2013
✦ Attributes
✦ Validations
✦ Instance Methods (save, destroy,
toObject, toJSON)
✦ Custom Defined Instance Methods
✦ Lifecycle callbacks
✦ Custom tables name
✦ Adapters
✦ Associations
Modeldovcharitweekend2013
✦ Attributes
✦ Validations
✦ Instance Methods (save, destroy,
toObject, toJSON)
✦ Custom Defined Instance Methods
✦ Lifecycle callbacks
✦ Custom tables name
✦ Adapters
✦ Associations
✦ Automatic schema creation
Modeldovcharitweekend2013
✦ Attributes
✦ Validations
✦ Instance Methods (save, destroy,
toObject, toJSON)
✦ Custom Defined Instance Methods
✦ Lifecycle callbacks
✦ Custom tables name
✦ Adapters
✦ Associations
✦ Automatic schema creation
✦ Data manipulation: create, findOne,
find, dynamic finders (i.e findByName),
update, destroy,
Modeldovcharitweekend2013
✦ Attributes
✦ Validations
✦ Instance Methods (save, destroy,
toObject, toJSON)
✦ Custom Defined Instance Methods
✦ Lifecycle callbacks
✦ Custom tables name
✦ Adapters
✦ Associations
✦ Automatic schema creation
✦ Data manipulation: create, findOne,
find, dynamic finders (i.e findByName),
update, destroy,
✦ Migrations
dovcharitweekend2013
View/Assets
Routersdovcharitweekend2013
Routersdovcharitweekend2013
✦ If the URL is not specified in config/routes.js, the default route for a
URL is: /:controller/:action/:id where :controller, :action, and the :id
request parameter are derived from the url.
✦ If the requested controller/action doesn't exist: - if a view exists ( /
views/:controller/:action.ejs), Sails will render that view - if no view
exists, but a model exists, Sails will automatically generate a JSON API
for the model which matches :controller. - if no view OR model exists,
Sails will respond with a 404.
Routersdovcharitweekend2013
✦ If the URL is not specified in config/routes.js, the default route for a
URL is: /:controller/:action/:id where :controller, :action, and the :id
request parameter are derived from the url.
✦ If the requested controller/action doesn't exist: - if a view exists ( /
views/:controller/:action.ejs), Sails will render that view - if no view
exists, but a model exists, Sails will automatically generate a JSON API
for the model which matches :controller. - if no view OR model exists,
Sails will respond with a 404.
Underthehuddovcharitweekend2013
Underthehuddovcharitweekend2013
✦ Policies
✦ Custom adapters
✦ Deployment
✦ Configurations
✦ Database support
✦ Sockets
Conclusiondovcharitweekend2013
Linksdovcharitweekend2013
Linksdovcharitweekend2013
✦ Node.js
Linksdovcharitweekend2013
✦ Node.js
✦ Sonarqube
Linksdovcharitweekend2013
✦ Node.js
✦ Sonarqube
✦ grunt, bower, yeoman
Linksdovcharitweekend2013
✦ Node.js
✦ Sonarqube
✦ grunt, bower, yeoman
✦ pacemaker, script’n’code
Linksdovcharitweekend2013
✦ Node.js
✦ Sonarqube
✦ grunt, bower, yeoman
✦ pacemaker, script’n’code
✦ Sails.js
Facebook Twitter Linkedin Gmail
Questionsdovcharitweekend2013
Questions?
dovcharitweekend2013

Contenu connexe

Tendances

Grunt.js and Yeoman, Continous Integration
Grunt.js and Yeoman, Continous IntegrationGrunt.js and Yeoman, Continous Integration
Grunt.js and Yeoman, Continous IntegrationDavid Amend
 
Integrating Browserify with Sprockets
Integrating Browserify with SprocketsIntegrating Browserify with Sprockets
Integrating Browserify with SprocketsSpike Brehm
 
REST to JavaScript for Better Client-side Development
REST to JavaScript for Better Client-side DevelopmentREST to JavaScript for Better Client-side Development
REST to JavaScript for Better Client-side DevelopmentHyunghun Cho
 
Building Isomorphic Apps (JSConf.Asia 2014)
Building Isomorphic Apps (JSConf.Asia 2014)Building Isomorphic Apps (JSConf.Asia 2014)
Building Isomorphic Apps (JSConf.Asia 2014)Spike Brehm
 
System webpack-jspm
System webpack-jspmSystem webpack-jspm
System webpack-jspmJesse Warden
 
Build Your Own CMS with Apache Sling
Build Your Own CMS with Apache SlingBuild Your Own CMS with Apache Sling
Build Your Own CMS with Apache SlingBob Paulin
 
The Evolution of Airbnb's Frontend
The Evolution of Airbnb's FrontendThe Evolution of Airbnb's Frontend
The Evolution of Airbnb's FrontendSpike Brehm
 
Build RESTful API Using Express JS
Build RESTful API Using Express JSBuild RESTful API Using Express JS
Build RESTful API Using Express JSCakra Danu Sedayu
 
Packing for the Web with Webpack
Packing for the Web with WebpackPacking for the Web with Webpack
Packing for the Web with WebpackThiago Temple
 
Webpack
Webpack Webpack
Webpack DataArt
 
Server Side Apocalypse, JS
Server Side Apocalypse, JSServer Side Apocalypse, JS
Server Side Apocalypse, JSMd. Sohel Rana
 
RESTful web apps with Apache Sling - 2013 version
RESTful web apps with Apache Sling - 2013 versionRESTful web apps with Apache Sling - 2013 version
RESTful web apps with Apache Sling - 2013 versionBertrand Delacretaz
 
RESTful Web Applications with Apache Sling
RESTful Web Applications with Apache SlingRESTful Web Applications with Apache Sling
RESTful Web Applications with Apache SlingBertrand Delacretaz
 
Секретный доклад о React Router - OdessaJS 2014
Секретный доклад о React Router - OdessaJS 2014Секретный доклад о React Router - OdessaJS 2014
Секретный доклад о React Router - OdessaJS 2014Andrey Listochkin
 
DEV208 - ASP.NET MVC 5 新功能探索
DEV208 - ASP.NET MVC 5 新功能探索DEV208 - ASP.NET MVC 5 新功能探索
DEV208 - ASP.NET MVC 5 新功能探索Will Huang
 
Module, AMD, RequireJS
Module, AMD, RequireJSModule, AMD, RequireJS
Module, AMD, RequireJS偉格 高
 
Running Node.js in Production using Passenger
Running Node.js in Production using PassengerRunning Node.js in Production using Passenger
Running Node.js in Production using Passengerdavidchubbs
 

Tendances (20)

Grunt.js and Yeoman, Continous Integration
Grunt.js and Yeoman, Continous IntegrationGrunt.js and Yeoman, Continous Integration
Grunt.js and Yeoman, Continous Integration
 
Integrating Browserify with Sprockets
Integrating Browserify with SprocketsIntegrating Browserify with Sprockets
Integrating Browserify with Sprockets
 
REST to JavaScript for Better Client-side Development
REST to JavaScript for Better Client-side DevelopmentREST to JavaScript for Better Client-side Development
REST to JavaScript for Better Client-side Development
 
Building Isomorphic Apps (JSConf.Asia 2014)
Building Isomorphic Apps (JSConf.Asia 2014)Building Isomorphic Apps (JSConf.Asia 2014)
Building Isomorphic Apps (JSConf.Asia 2014)
 
System webpack-jspm
System webpack-jspmSystem webpack-jspm
System webpack-jspm
 
Build Your Own CMS with Apache Sling
Build Your Own CMS with Apache SlingBuild Your Own CMS with Apache Sling
Build Your Own CMS with Apache Sling
 
Nuxt.js - Introduction
Nuxt.js - IntroductionNuxt.js - Introduction
Nuxt.js - Introduction
 
The Evolution of Airbnb's Frontend
The Evolution of Airbnb's FrontendThe Evolution of Airbnb's Frontend
The Evolution of Airbnb's Frontend
 
Nuxt Talk
Nuxt TalkNuxt Talk
Nuxt Talk
 
Build RESTful API Using Express JS
Build RESTful API Using Express JSBuild RESTful API Using Express JS
Build RESTful API Using Express JS
 
Packing for the Web with Webpack
Packing for the Web with WebpackPacking for the Web with Webpack
Packing for the Web with Webpack
 
Webpack
Webpack Webpack
Webpack
 
Server Side Apocalypse, JS
Server Side Apocalypse, JSServer Side Apocalypse, JS
Server Side Apocalypse, JS
 
RESTful web apps with Apache Sling - 2013 version
RESTful web apps with Apache Sling - 2013 versionRESTful web apps with Apache Sling - 2013 version
RESTful web apps with Apache Sling - 2013 version
 
RESTful Web Applications with Apache Sling
RESTful Web Applications with Apache SlingRESTful Web Applications with Apache Sling
RESTful Web Applications with Apache Sling
 
Секретный доклад о React Router - OdessaJS 2014
Секретный доклад о React Router - OdessaJS 2014Секретный доклад о React Router - OdessaJS 2014
Секретный доклад о React Router - OdessaJS 2014
 
Nodejs web,db,hosting
Nodejs web,db,hostingNodejs web,db,hosting
Nodejs web,db,hosting
 
DEV208 - ASP.NET MVC 5 新功能探索
DEV208 - ASP.NET MVC 5 新功能探索DEV208 - ASP.NET MVC 5 新功能探索
DEV208 - ASP.NET MVC 5 新功能探索
 
Module, AMD, RequireJS
Module, AMD, RequireJSModule, AMD, RequireJS
Module, AMD, RequireJS
 
Running Node.js in Production using Passenger
Running Node.js in Production using PassengerRunning Node.js in Production using Passenger
Running Node.js in Production using Passenger
 

Similaire à NodeWay in my project & sails.js

Hybrid Application Development
Hybrid Application DevelopmentHybrid Application Development
Hybrid Application DevelopmentYagiz Nizipli
 
Lecture02web 140phpapp01
Lecture02web 140phpapp01Lecture02web 140phpapp01
Lecture02web 140phpapp01letuan9999
 
Cross-platform Desktop application with AngularJS and build with Node-webkit
Cross-platform Desktop application with AngularJS and build with Node-webkitCross-platform Desktop application with AngularJS and build with Node-webkit
Cross-platform Desktop application with AngularJS and build with Node-webkitWittawas Wisarnkanchana
 
Introduction to Node.js
Introduction to Node.jsIntroduction to Node.js
Introduction to Node.jsRob O'Doherty
 
Introduction to React Native
Introduction to React NativeIntroduction to React Native
Introduction to React NativeWaqqas Jabbar
 
Node, express & sails
Node, express & sailsNode, express & sails
Node, express & sailsBrian Shannon
 
Web Development: Making it the right way
Web Development: Making it the right wayWeb Development: Making it the right way
Web Development: Making it the right wayYagiz Nizipli
 
An Introduction To Android
An Introduction To AndroidAn Introduction To Android
An Introduction To Androidnatdefreitas
 
Nodejs Native Add-Ons from zero to hero
Nodejs Native Add-Ons from zero to heroNodejs Native Add-Ons from zero to hero
Nodejs Native Add-Ons from zero to heroNicola Del Gobbo
 
Pender presentation 2.0
Pender presentation 2.0 Pender presentation 2.0
Pender presentation 2.0 PhoneGap
 
Metasepi team meeting #8': Haskell apps on Android NDK
Metasepi team meeting #8': Haskell apps on Android NDKMetasepi team meeting #8': Haskell apps on Android NDK
Metasepi team meeting #8': Haskell apps on Android NDKKiwamu Okabe
 
Multi-stage Docker builds to make building easy!
Multi-stage Docker builds to make building easy!Multi-stage Docker builds to make building easy!
Multi-stage Docker builds to make building easy!Milindu Sanoj Kumarage
 
WordPress automation and CI
WordPress automation and CIWordPress automation and CI
WordPress automation and CIRan Bar-Zik
 

Similaire à NodeWay in my project & sails.js (20)

How to Enterprise Node
How to Enterprise NodeHow to Enterprise Node
How to Enterprise Node
 
Go Revel Gooo...
Go Revel Gooo...Go Revel Gooo...
Go Revel Gooo...
 
Hybrid Application Development
Hybrid Application DevelopmentHybrid Application Development
Hybrid Application Development
 
Ionic best practices
Ionic best practicesIonic best practices
Ionic best practices
 
Ionic best practices
Ionic best practicesIonic best practices
Ionic best practices
 
Introduction to NodeJS
Introduction to NodeJSIntroduction to NodeJS
Introduction to NodeJS
 
NodeJS and what is actually does
NodeJS and what is actually doesNodeJS and what is actually does
NodeJS and what is actually does
 
Lecture02web 140phpapp01
Lecture02web 140phpapp01Lecture02web 140phpapp01
Lecture02web 140phpapp01
 
Cross-platform Desktop application with AngularJS and build with Node-webkit
Cross-platform Desktop application with AngularJS and build with Node-webkitCross-platform Desktop application with AngularJS and build with Node-webkit
Cross-platform Desktop application with AngularJS and build with Node-webkit
 
Introduction to Node.js
Introduction to Node.jsIntroduction to Node.js
Introduction to Node.js
 
Introduction to React Native
Introduction to React NativeIntroduction to React Native
Introduction to React Native
 
Node, express & sails
Node, express & sailsNode, express & sails
Node, express & sails
 
Web Development: Making it the right way
Web Development: Making it the right wayWeb Development: Making it the right way
Web Development: Making it the right way
 
An Introduction To Android
An Introduction To AndroidAn Introduction To Android
An Introduction To Android
 
Nodejs Native Add-Ons from zero to hero
Nodejs Native Add-Ons from zero to heroNodejs Native Add-Ons from zero to hero
Nodejs Native Add-Ons from zero to hero
 
Nodejs overview
Nodejs overviewNodejs overview
Nodejs overview
 
Pender presentation 2.0
Pender presentation 2.0 Pender presentation 2.0
Pender presentation 2.0
 
Metasepi team meeting #8': Haskell apps on Android NDK
Metasepi team meeting #8': Haskell apps on Android NDKMetasepi team meeting #8': Haskell apps on Android NDK
Metasepi team meeting #8': Haskell apps on Android NDK
 
Multi-stage Docker builds to make building easy!
Multi-stage Docker builds to make building easy!Multi-stage Docker builds to make building easy!
Multi-stage Docker builds to make building easy!
 
WordPress automation and CI
WordPress automation and CIWordPress automation and CI
WordPress automation and CI
 

Dernier

Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024The Digital Insurer
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century educationjfdjdjcjdnsjd
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slidevu2urc
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfsudhanshuwaghmare1
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Enterprise Knowledge
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
Tech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdfTech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdfhans926745
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherRemote DBA Services
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
 

Dernier (20)

Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Tech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdfTech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdf
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 

NodeWay in my project & sails.js