SlideShare a Scribd company logo
Node.js
Workshops
npm init
it creates basic package.json file
name: heroes
name: heroes
version: 1.0.0
name: heroes
version: 1.0.0
description: heroes app
name: heroes
version: 1.0.0
description: heroes app
entry point: index.js
name: heroes
version: 1.0.0
description: heroes app
entry point: index.js
test command: [ENTER]
name: heroes
version: 1.0.0
description: heroes app
entry point: index.js
test command: [ENTER]
git repository: [ENTER]
name: heroes
version: 1.0.0
description: heroes app
entry point: index.js
test command: [ENTER]
git repository: [ENTER]
keywords: [ENTER]
name: heroes
version: 1.0.0
description: heroes app
entry point: index.js
test command: [ENTER]
git repository: [ENTER]
keywords: [ENTER]
license: [ENTER]
Is it ok?: [ENTER]
Let's install our first module!
npm install express --save
{
"name": "node-workshop",
"version": "1.0.0",
"description": "heroes app",
"main": "index.js",
"scripts": {
"test": "echo "Error: no test specified" && exit 1"
},
"author": "ssuperczynski <ss@espeo.eu> (espeo.eu)",
"license": "ISC",
"dependencies": {
"express": "^4.13.4"
}
}
Our module has been successfully installed
In package.json we pointed index.js
This is our inital script
So! Let's create it
touch index.js
So! Let's create it
touch index.js
Open index.js
var express = require('express');
var app = express();
Open index.js
var express = require('express');
var app = express();
app.get('/', function (req, res) {
res.send('viewing single offer');
});
Open index.js
var express = require('express');
var app = express();
app.get('/', function (req, res) {
res.send('viewing single offer');
});
app.listen(3003);
Open browser and go to:
localhost:3003
Open browser and go to:
localhost:3003
var express = require('express');
var app = express();
app.get('/', function (req, res) {
res.send('viewing single offer');
});
app.listen(3004, function () {
console.log("server started at 3004 port");
});
But we don't know if
server works or not
Much better
but hey, I like colors
 npm install terminal-colors --save
but hey, I like colors
Oh yea!
Let's refactor index.js
var express = require('express');
var app = express();
app.get('/', getOffer);
function getOffer(req, res) {
res.send('viewing single offer');
}
app.listen(3004, function () {
console.log("server started at 3004 port");
});
index.js
Let's refactor index.js further 
function getOffer(req, res) {
res.send('viewing single offer');
}
module.exports = getOffer;
controller/OfferController.js
Let's refactor index.js further 
var express = require('express');
var app = express();
var getOffer = require('./controllers/OfferController');
app.get('/', getOffer);
app.listen(3004);
index.js
Nice!
Looks like we have basic node.js structure
Nice!
Looks like we have basic node.js structure
Let's interact with
some database
npm install pg pg-hstore --save
But wait, let's not install
Postgres locally
Let's use Docker!
Let's use Docker!
docker-machine start default
eval $(docker-machine env default)
docker-machine start default
eval $(docker-machine env default)
vi docker-compose.yml
docker-machine start default
eval $(docker-machine env default)
version: '2'
services:
postgres:
image: postgres
ports:
- "5432:5432"
environment:
POSTGRES_PASSWORD: mypassword
vi docker-compose.yml
docker-machine start default
eval $(docker-machine env default)
version: '2'
services:
postgres:
image: postgres
ports:
- "5432:5432"
environment:
POSTGRES_PASSWORD: mypassword
vi docker-compose.yml
docker-compose build
docker-compose up
You know what?
We have postgres!!
For postgress we
need some config
So, let's use 
sequelize-cli to
configure it
Creating our model using
npm install sequelize --save
npm install sequelize-cli --save
node_modules/sequelize-cli/bin/sequelize init
Creating basic schema
node_modules/sequelize-cli/bin/sequelize model:create
--name Offer
--attributes "content:string, title:string"
Update database
node_modules/sequelize-cli/bin/sequelize db:migrate
Let's add more methods to
OfferController.js 
function getOffer(req, res) {
models.Offer.findAll()
.then((offers) => { res.send(offers); })
.catch(() => {res.send('Error')});
}
module.exports = getOffer;
controller/OfferController.js
But what does
models.Offer.findAll()
mean?
But what does
models.Offer.findAll()
var sequelize = new Sequelize('postgres://user:pass@example.com:5
var Offer = sequelize.define('Offer', {
title: {type: sequelize.STRING, allowNull: false},
content: {type: sequelize.STRING, allowNull: false}
}, {});
export default Offer;
models/offer.js
mean?
But what does
models.Offer.findAll()
mean?
function createOffer(req, res) {
models.Offer.create({
content: req.body.content,
title: req.body.title
})
.then((offer) => { res.send(offer); })
.catch(() => {res.send('Error')});
}
module.exports = getOffer;
controller/OfferController.js
Add new method to index.js 
var express = require('express');
var app = express();
var indexAction = require('./controllers/OfferController');
app.get('/', getOffer);
app.post('/', createOffer);
app.listen(3004);
index.js
Add new method to index.js 
function createOffer(req, res) {
Offer.create({
content: req.body.content,
title: req.body.title
})
.then((offer) => { res.send(offer); })
.catch((err) => {res.send(err)});
}
controller/OfferController.js
And send something using
Postman
We should get
Alright.
But come back to index.js
What does 
 
require('babel-core/register');
mean?
It means
we can use ES6
instead of ES5
import express from 'express';
import OffersController from './OffersController';
import UsersController from './UsersController';
let router = express.Router();
router.use('/offers', OffersController);
router.use('/users', UsersController);
module.exports = router;
index.js
import express from 'express';
var express = require('express');
export default router;
module.exports = router;
Offer.create({
content: req.body.content,
title: req.body.title
})
.then(offer => res.send(offer))
.catch(err => res.send(err));
Offer.create({
content: req.body.content,
title: req.body.title
})
.then(function(offer) { res.send(offer); })
.catch(function(err) { res.send(err)});
.then((user) => {
return user.get({token: token});
}
.then(user => user.get({token}))
Let's create some
authentication
npm install passport passport-http-bearer
passport-local bcrypt-nodejs --save
Create User model
node_modules/sequelize-cli/bin/sequelize model:create
--name User
--attributes "email:string, password:string, token:string"
Create Middleware
mkdir middleware
cd middleware
touch passport.js
Register passport strategy
 
import passport from 'passport';
import local from 'passport-local';
passport.use('local', new local.Strategy(options, callback));
export default passport;
import bcrypt from 'bcrypt-nodejs';
import Promise from 'Bluebird';
instanceMethods: {
comparePassword: function (hash) {
var userPassword = this.password;
var user = this;
return new Promise((resolve, reject) => {
Promise.promisify(bcrypt.compare)(hash, userPassword)
.then((result) => {
resolve([result, user]);
}, (err) => {
reject(err);
});
});
}
},
Update User model
hooks: {
beforeCreate: (user, options, cb) => {
Promise.promisify(bcrypt.genSalt)(10)
.then((salt) => {
return Promise.promisify(bcrypt.hash)(user.password, salt,
})
.then((hash) => {
user.password = hash;
cb(null, options);
});
}
}
Update User model
/// ....
 
 
import { User } from '../models';
import Promise from 'bluebird';
var options = {
usernameField: 'email',
passwordField: 'password'
};
var onLogIn = (email, password, done) => {
User.findOne({where: {email}})
.then(user =>
user ?
user.comparePassword(password) : Promise.reject(new Promise.Cancellation
)
.spread((isMatch, user) =>
isMatch ?
done(null, user) : Promise.reject(new Promise.CancellationError('Wrong e
)
.catch(Promise.CancellationError, info => done(null, false, info))
.catch(err => done(err));
};
 
Add callback to strategy
 
//controllers/UsersController.js
import express from 'express';
import {User} from '../models';
import passport from 'passport';
let router = express.Router({mergeParams: true});
router.post('/signUp', signUp);
router.post('/logIn', logIn);
export default router;
Create login and register endpoints
function signUp(req, res) {
User.create({
email: req.body.email,
password: req.body.password
}).then(user => res.send({email: user.email }))
.catch(err => res.send(err));
}
function logIn(req, res, next) {
passport.authenticate('local', (err, user, info) => {
if (err) {
return res.send(err);
}
if (!user) {
return res.send(info.toString());
}
return res.send({user});
})(req, res, next);
}
Add child router to main router
// controllers/index.js
import UsersController from './UsersController';
router.use('/users', UsersController);
import passport from './middleware/passport';
app.use(passport.initialize());
Register passport as a middleware:
app.js
Bearer token
strategy
Add token helper
// helpers/token.js
import crypto from 'crypto';
import Promise from 'bluebird';
export default function generate() {
return new Promise((resolve, reject) => {
Promise.promisify(crypto.randomBytes)(48).then((buff) => {
resolve(buff.toString('hex'));
}).catch(err => reject(err));
});
}
Modify local-login strategy
User.findOne({where: {email}})
.then((user) => {
return user ? user.comparePassword(password) : Promise.reject(new Promise
}
)
.spread((isMatch, user) =>
isMatch ?
generateToken()
.then(token => user.update({token}))
.then(() => done(null, user.token))
: Promise.reject(new Promise.CancellationError('Wrong email or password')
)
.catch(Promise.CancellationError, info => done(null, false, info))
.catch(err => done(err));
Modify UsersController
function logIn(req, res, next) {
passport.authenticate('local', (err, token, info) => {
if (err) {
return res.send(err);
}
if (!token) {
return res.send(info.toString());
}
return res.send({token});
})(req, res, next);
}
 
 
// middleware/passport.js
import generateToken from '../helpers/token';
import token from 'passport-http-bearer';
passport.use('token', new token.Strategy((token, done) => {
User.findOne({where: {token}})
.then(user => user ? done(null, user, {scope: 'all'}) : done(n
.catch(err => done(err));
}));
export var tokenAuthentication = passport.authenticate('token', {session: f
Add token strategy
 
function singleOffer(req, res) {
Offer.findById(req.params.id)
.then(offer => res.send(offer))
.catch(err => res.send(err));
}
function RespondToOffer(req, res) {
OfferResponse.create({
OfferId: req.body.id,
email: req.body.email,
content: req.body.content
})
.then(response => res.send(response))
.catch(err => res.send(err));
}
router.get('/:id', singleOffer);
router.post('/respond', RespondToOffer);
Add new Offer endpoints
//controllers/OffersController.js
import {tokenAuthentication} from '../middleware/passport';
router.post('/respond', tokenAuthentication, RespondToOffer);
Restrict access to some route
// controllers/UsersController.js
function logOut(req, res) {
User.findOne({ where: {token: req.user.token}})
.then((user) => {
return user.update({token: null});
})
.then(() => {
res.send('Logged out.');
})
.catch(err => res.send(err));
}
router.delete('/logOut', tokenAuthentication, logOut);
Add log out endpoint
Testing
deps
npm install --save-dev
supertest expect.js mocha
package.json
"scripts": {
"start": "node bin/index.js",
"build": "gulp",
"test": "npm run test-integration",
"test-integration": "NODE_ENV=test mocha --compilers js:babel-c
},
test folder
mkdir integrationTest
cd integrationTest
touch offers.js
integrationTest/offers.js
 
var request = require('supertest');
var expect = require('expect.js');
var app = require('../bin/index');
var Bluebird = require('bluebird');
var models = require('../models');
describe('offerController', function () {
beforeEach(function () {
return Bluebird.all([
models.Offer.destroy({truncate: true}),
models.OfferResponse.destroy({truncate: true}),
models.User.destroy({truncate: true})
]);
});
it('should have /all endpoint and return with 200', function (don
request(app).get('/offers').expect(200, done);
});
});
it('should login and respond to the offer', function (done) {
var token = '';
var newUser = { email: 'julian@espeo.pl', password: 'test' };
models.User.create(newUser).then(() => {
request(app).post('/users/logIn')
.type('form')
.send(newUser)
.expect(200, (err, result) => {
token = result.body.token;
createSomeOffer();
});
});
function createSomeOffer() {
return request(app).post('/offers/')
.type('form')
.send({content: 'you have to code in XML', title: 'some programmer'})
.expect(200, respondToOffer);
}
...
function respondToOffer(err, result) {
if (err) done(err);
request(app).post('/offers/respond')
.set('Authorization', 'Bearer ' + token)
.type('form')
.send({id: result.body.id, email: 'julian@espeo.pl', content: 'i want thi
.expect(200, onResponseCreate);
}
function onResponseCreate() {
request(app).get('/offers').expect(200, function (err, result) {
if (err) done(err);
expect(result.body[0].OfferResponses[0].email).to.be('julian@espeo.pl');
expect(result.body[0].OfferResponses[0].content).to.be('i want this job')
done();
});
}
});
Frontend
git checkout newerstuff frontend gulpfile.js
Serving static files
import path from 'path';
app
.use(bodyParser.urlencoded({extended: true}))
.use(bodyParser.json())
.use(passport.initialize())
.use('/', router)
.use('/static', express.static('static'));
Serve index.html
// controllers/index.js
router.get('/', (req, res) => res.sendFile(path.join(__d
Add some logging stuff
npm install --save morgan
winston
Log requests
 
 
import morgan from 'morgan';
import fs from 'fs';
var accessLogStream = fs.createWriteStream(__dirname + '/acc
app
.use(morgan('dev', {stream: accessLogStream}))
.use(morgan('dev'))
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798

More Related Content

What's hot

Node.js API 서버 성능 개선기
Node.js API 서버 성능 개선기Node.js API 서버 성능 개선기
Node.js API 서버 성능 개선기
JeongHun Byeon
 
Nodejs Explained with Examples
Nodejs Explained with ExamplesNodejs Explained with Examples
Nodejs Explained with Examples
Gabriele Lana
 
Node js presentation
Node js presentationNode js presentation
Node js presentationmartincabrera
 
Node.js - A Quick Tour
Node.js - A Quick TourNode.js - A Quick Tour
Node.js - A Quick Tour
Felix Geisendörfer
 
node.js: Javascript's in your backend
node.js: Javascript's in your backendnode.js: Javascript's in your backend
node.js: Javascript's in your backend
David Padbury
 
All aboard the NodeJS Express
All aboard the NodeJS ExpressAll aboard the NodeJS Express
All aboard the NodeJS Express
David Boyer
 
"Swoole: double troubles in c", Alexandr Vronskiy
"Swoole: double troubles in c", Alexandr Vronskiy"Swoole: double troubles in c", Alexandr Vronskiy
"Swoole: double troubles in c", Alexandr Vronskiy
Fwdays
 
Angular 1 + es6
Angular 1 + es6Angular 1 + es6
Angular 1 + es6
장현 한
 
introduction to node.js
introduction to node.jsintroduction to node.js
introduction to node.js
orkaplan
 
Test-Driven Puppet Development - PuppetConf 2014
Test-Driven Puppet Development - PuppetConf 2014Test-Driven Puppet Development - PuppetConf 2014
Test-Driven Puppet Development - PuppetConf 2014
Puppet
 
A million connections and beyond - Node.js at scale
A million connections and beyond - Node.js at scaleA million connections and beyond - Node.js at scale
A million connections and beyond - Node.js at scaleTom Croucher
 
Infrastructure as code - Python Saati #36
Infrastructure as code - Python Saati #36Infrastructure as code - Python Saati #36
Infrastructure as code - Python Saati #36
Halil Kaya
 
Future Decoded - Node.js per sviluppatori .NET
Future Decoded - Node.js per sviluppatori .NETFuture Decoded - Node.js per sviluppatori .NET
Future Decoded - Node.js per sviluppatori .NET
Gianluca Carucci
 
Hopping in clouds: a tale of migration from one cloud provider to another
Hopping in clouds: a tale of migration from one cloud provider to anotherHopping in clouds: a tale of migration from one cloud provider to another
Hopping in clouds: a tale of migration from one cloud provider to another
Michele Orselli
 
CUDA by Example : CUDA C on Multiple GPUs : Notes
CUDA by Example : CUDA C on Multiple GPUs : NotesCUDA by Example : CUDA C on Multiple GPUs : Notes
CUDA by Example : CUDA C on Multiple GPUs : Notes
Subhajit Sahu
 
Matthew Eernisse, NodeJs, .toster {webdev}
Matthew Eernisse, NodeJs, .toster {webdev}Matthew Eernisse, NodeJs, .toster {webdev}
Matthew Eernisse, NodeJs, .toster {webdev}.toster
 
The State of JavaScript (2015)
The State of JavaScript (2015)The State of JavaScript (2015)
The State of JavaScript (2015)
Domenic Denicola
 
Node.js - async for the rest of us.
Node.js - async for the rest of us.Node.js - async for the rest of us.
Node.js - async for the rest of us.
Mike Brevoort
 
Non-blocking I/O, Event loops and node.js
Non-blocking I/O, Event loops and node.jsNon-blocking I/O, Event loops and node.js
Non-blocking I/O, Event loops and node.js
Marcus Frödin
 

What's hot (20)

Node.js API 서버 성능 개선기
Node.js API 서버 성능 개선기Node.js API 서버 성능 개선기
Node.js API 서버 성능 개선기
 
Nodejs Explained with Examples
Nodejs Explained with ExamplesNodejs Explained with Examples
Nodejs Explained with Examples
 
Node js presentation
Node js presentationNode js presentation
Node js presentation
 
Node.js - A Quick Tour
Node.js - A Quick TourNode.js - A Quick Tour
Node.js - A Quick Tour
 
node.js: Javascript's in your backend
node.js: Javascript's in your backendnode.js: Javascript's in your backend
node.js: Javascript's in your backend
 
All aboard the NodeJS Express
All aboard the NodeJS ExpressAll aboard the NodeJS Express
All aboard the NodeJS Express
 
Express node js
Express node jsExpress node js
Express node js
 
"Swoole: double troubles in c", Alexandr Vronskiy
"Swoole: double troubles in c", Alexandr Vronskiy"Swoole: double troubles in c", Alexandr Vronskiy
"Swoole: double troubles in c", Alexandr Vronskiy
 
Angular 1 + es6
Angular 1 + es6Angular 1 + es6
Angular 1 + es6
 
introduction to node.js
introduction to node.jsintroduction to node.js
introduction to node.js
 
Test-Driven Puppet Development - PuppetConf 2014
Test-Driven Puppet Development - PuppetConf 2014Test-Driven Puppet Development - PuppetConf 2014
Test-Driven Puppet Development - PuppetConf 2014
 
A million connections and beyond - Node.js at scale
A million connections and beyond - Node.js at scaleA million connections and beyond - Node.js at scale
A million connections and beyond - Node.js at scale
 
Infrastructure as code - Python Saati #36
Infrastructure as code - Python Saati #36Infrastructure as code - Python Saati #36
Infrastructure as code - Python Saati #36
 
Future Decoded - Node.js per sviluppatori .NET
Future Decoded - Node.js per sviluppatori .NETFuture Decoded - Node.js per sviluppatori .NET
Future Decoded - Node.js per sviluppatori .NET
 
Hopping in clouds: a tale of migration from one cloud provider to another
Hopping in clouds: a tale of migration from one cloud provider to anotherHopping in clouds: a tale of migration from one cloud provider to another
Hopping in clouds: a tale of migration from one cloud provider to another
 
CUDA by Example : CUDA C on Multiple GPUs : Notes
CUDA by Example : CUDA C on Multiple GPUs : NotesCUDA by Example : CUDA C on Multiple GPUs : Notes
CUDA by Example : CUDA C on Multiple GPUs : Notes
 
Matthew Eernisse, NodeJs, .toster {webdev}
Matthew Eernisse, NodeJs, .toster {webdev}Matthew Eernisse, NodeJs, .toster {webdev}
Matthew Eernisse, NodeJs, .toster {webdev}
 
The State of JavaScript (2015)
The State of JavaScript (2015)The State of JavaScript (2015)
The State of JavaScript (2015)
 
Node.js - async for the rest of us.
Node.js - async for the rest of us.Node.js - async for the rest of us.
Node.js - async for the rest of us.
 
Non-blocking I/O, Event loops and node.js
Non-blocking I/O, Event loops and node.jsNon-blocking I/O, Event loops and node.js
Non-blocking I/O, Event loops and node.js
 

Similar to Guide to Node.js: Basic to Advanced

Everything as a Code / Александр Тарасов (Одноклассники)
Everything as a Code / Александр Тарасов (Одноклассники)Everything as a Code / Александр Тарасов (Одноклассники)
Everything as a Code / Александр Тарасов (Одноклассники)
Ontico
 
Everything as a code
Everything as a codeEverything as a code
Everything as a code
Aleksandr Tarasov
 
Automating Front-End Workflow
Automating Front-End WorkflowAutomating Front-End Workflow
Automating Front-End Workflow
Dimitris Tsironis
 
Get Grulping with JavaScript Task Runners (Matt Gifford)
Get Grulping with JavaScript Task Runners (Matt Gifford)Get Grulping with JavaScript Task Runners (Matt Gifford)
Get Grulping with JavaScript Task Runners (Matt Gifford)
Future Insights
 
Infrastructure = code - 1 year later
Infrastructure = code - 1 year laterInfrastructure = code - 1 year later
Infrastructure = code - 1 year later
Christian Ortner
 
Parse cloud code
Parse cloud codeParse cloud code
Parse cloud code維佋 唐
 
DevOps Workflow: A Tutorial on Linux Containers
DevOps Workflow: A Tutorial on Linux ContainersDevOps Workflow: A Tutorial on Linux Containers
DevOps Workflow: A Tutorial on Linux Containers
inside-BigData.com
 
How to Write Node.js Module
How to Write Node.js ModuleHow to Write Node.js Module
How to Write Node.js Module
Fred Chien
 
Continous Delivery to Kubernetes using Helm
Continous Delivery to Kubernetes using HelmContinous Delivery to Kubernetes using Helm
Continous Delivery to Kubernetes using Helm
Bitnami
 
Zero Downtime Deployment with Ansible
Zero Downtime Deployment with AnsibleZero Downtime Deployment with Ansible
Zero Downtime Deployment with Ansible
Stein Inge Morisbak
 
Railsconf2011 deployment tips_for_slideshare
Railsconf2011 deployment tips_for_slideshareRailsconf2011 deployment tips_for_slideshare
Railsconf2011 deployment tips_for_slidesharetomcopeland
 
Heroku pop-behind-the-sense
Heroku pop-behind-the-senseHeroku pop-behind-the-sense
Heroku pop-behind-the-sense
Ben Lin
 
Puppet at Opera Sofware - PuppetCamp Oslo 2013
Puppet at Opera Sofware - PuppetCamp Oslo 2013Puppet at Opera Sofware - PuppetCamp Oslo 2013
Puppet at Opera Sofware - PuppetCamp Oslo 2013
Cosimo Streppone
 
20160905 - BrisJS - nightwatch testing
20160905 - BrisJS - nightwatch testing20160905 - BrisJS - nightwatch testing
20160905 - BrisJS - nightwatch testing
Vladimir Roudakov
 
Bare Metal to OpenStack with Razor and Chef
Bare Metal to OpenStack with Razor and ChefBare Metal to OpenStack with Razor and Chef
Bare Metal to OpenStack with Razor and Chef
Matt Ray
 
Jeroen Vloothuis Bend Kss To Your Will
Jeroen Vloothuis   Bend Kss To Your WillJeroen Vloothuis   Bend Kss To Your Will
Jeroen Vloothuis Bend Kss To Your Will
Vincenzo Barone
 
Practical Chef and Capistrano for Your Rails App
Practical Chef and Capistrano for Your Rails AppPractical Chef and Capistrano for Your Rails App
Practical Chef and Capistrano for Your Rails App
SmartLogic
 
How to create your own hack environment
How to create your own hack environmentHow to create your own hack environment
How to create your own hack environment
Sumedt Jitpukdebodin
 
Crafting Beautiful CLI Applications in Ruby
Crafting Beautiful CLI Applications in RubyCrafting Beautiful CLI Applications in Ruby
Crafting Beautiful CLI Applications in Ruby
Nikhil Mungel
 
2017-03-11 02 Денис Нелюбин. Docker & Ansible - лучшие друзья DevOps
2017-03-11 02 Денис Нелюбин. Docker & Ansible - лучшие друзья DevOps2017-03-11 02 Денис Нелюбин. Docker & Ansible - лучшие друзья DevOps
2017-03-11 02 Денис Нелюбин. Docker & Ansible - лучшие друзья DevOps
Омские ИТ-субботники
 

Similar to Guide to Node.js: Basic to Advanced (20)

Everything as a Code / Александр Тарасов (Одноклассники)
Everything as a Code / Александр Тарасов (Одноклассники)Everything as a Code / Александр Тарасов (Одноклассники)
Everything as a Code / Александр Тарасов (Одноклассники)
 
Everything as a code
Everything as a codeEverything as a code
Everything as a code
 
Automating Front-End Workflow
Automating Front-End WorkflowAutomating Front-End Workflow
Automating Front-End Workflow
 
Get Grulping with JavaScript Task Runners (Matt Gifford)
Get Grulping with JavaScript Task Runners (Matt Gifford)Get Grulping with JavaScript Task Runners (Matt Gifford)
Get Grulping with JavaScript Task Runners (Matt Gifford)
 
Infrastructure = code - 1 year later
Infrastructure = code - 1 year laterInfrastructure = code - 1 year later
Infrastructure = code - 1 year later
 
Parse cloud code
Parse cloud codeParse cloud code
Parse cloud code
 
DevOps Workflow: A Tutorial on Linux Containers
DevOps Workflow: A Tutorial on Linux ContainersDevOps Workflow: A Tutorial on Linux Containers
DevOps Workflow: A Tutorial on Linux Containers
 
How to Write Node.js Module
How to Write Node.js ModuleHow to Write Node.js Module
How to Write Node.js Module
 
Continous Delivery to Kubernetes using Helm
Continous Delivery to Kubernetes using HelmContinous Delivery to Kubernetes using Helm
Continous Delivery to Kubernetes using Helm
 
Zero Downtime Deployment with Ansible
Zero Downtime Deployment with AnsibleZero Downtime Deployment with Ansible
Zero Downtime Deployment with Ansible
 
Railsconf2011 deployment tips_for_slideshare
Railsconf2011 deployment tips_for_slideshareRailsconf2011 deployment tips_for_slideshare
Railsconf2011 deployment tips_for_slideshare
 
Heroku pop-behind-the-sense
Heroku pop-behind-the-senseHeroku pop-behind-the-sense
Heroku pop-behind-the-sense
 
Puppet at Opera Sofware - PuppetCamp Oslo 2013
Puppet at Opera Sofware - PuppetCamp Oslo 2013Puppet at Opera Sofware - PuppetCamp Oslo 2013
Puppet at Opera Sofware - PuppetCamp Oslo 2013
 
20160905 - BrisJS - nightwatch testing
20160905 - BrisJS - nightwatch testing20160905 - BrisJS - nightwatch testing
20160905 - BrisJS - nightwatch testing
 
Bare Metal to OpenStack with Razor and Chef
Bare Metal to OpenStack with Razor and ChefBare Metal to OpenStack with Razor and Chef
Bare Metal to OpenStack with Razor and Chef
 
Jeroen Vloothuis Bend Kss To Your Will
Jeroen Vloothuis   Bend Kss To Your WillJeroen Vloothuis   Bend Kss To Your Will
Jeroen Vloothuis Bend Kss To Your Will
 
Practical Chef and Capistrano for Your Rails App
Practical Chef and Capistrano for Your Rails AppPractical Chef and Capistrano for Your Rails App
Practical Chef and Capistrano for Your Rails App
 
How to create your own hack environment
How to create your own hack environmentHow to create your own hack environment
How to create your own hack environment
 
Crafting Beautiful CLI Applications in Ruby
Crafting Beautiful CLI Applications in RubyCrafting Beautiful CLI Applications in Ruby
Crafting Beautiful CLI Applications in Ruby
 
2017-03-11 02 Денис Нелюбин. Docker & Ansible - лучшие друзья DevOps
2017-03-11 02 Денис Нелюбин. Docker & Ansible - лучшие друзья DevOps2017-03-11 02 Денис Нелюбин. Docker & Ansible - лучшие друзья DevOps
2017-03-11 02 Денис Нелюбин. Docker & Ansible - лучшие друзья DevOps
 

More from Espeo Software

Distributed, immutable, secure...
Distributed, immutable, secure...Distributed, immutable, secure...
Distributed, immutable, secure...
Espeo Software
 
Initial Coin Offerings – legal requirements and types of tokens
Initial Coin Offerings – legal requirements and types of tokensInitial Coin Offerings – legal requirements and types of tokens
Initial Coin Offerings – legal requirements and types of tokens
Espeo Software
 
Trustless off chain computing on the blockchain
Trustless off chain computing on the blockchainTrustless off chain computing on the blockchain
Trustless off chain computing on the blockchain
Espeo Software
 
How to sell your business idea to your customers & investors
How to sell your business idea to your customers & investorsHow to sell your business idea to your customers & investors
How to sell your business idea to your customers & investors
Espeo Software
 
How to build a coin and start an ICO
How to build a coin and start an ICOHow to build a coin and start an ICO
How to build a coin and start an ICO
Espeo Software
 
How to scale your tech startup for the win
How to scale your tech startup for the winHow to scale your tech startup for the win
How to scale your tech startup for the win
Espeo Software
 
Before You Start Outsourcing Software Development [Checklist]
Before You Start Outsourcing Software Development [Checklist]Before You Start Outsourcing Software Development [Checklist]
Before You Start Outsourcing Software Development [Checklist]
Espeo Software
 
What Should a Good Code Review Check?
What Should a Good Code Review Check?What Should a Good Code Review Check?
What Should a Good Code Review Check?
Espeo Software
 
Espeo's looking for a DevOps Engineer!
Espeo's looking for a DevOps Engineer!Espeo's looking for a DevOps Engineer!
Espeo's looking for a DevOps Engineer!
Espeo Software
 
Software Team Efficiency: Velocity
Software Team Efficiency: VelocitySoftware Team Efficiency: Velocity
Software Team Efficiency: Velocity
Espeo Software
 
Introduction to Scrum: A How-To Guide
Introduction to Scrum: A How-To GuideIntroduction to Scrum: A How-To Guide
Introduction to Scrum: A How-To Guide
Espeo Software
 
To Hire or Not to Hire: In-house vs. Offshore Development
To Hire or Not to Hire: In-house vs. Offshore DevelopmentTo Hire or Not to Hire: In-house vs. Offshore Development
To Hire or Not to Hire: In-house vs. Offshore Development
Espeo Software
 
Web Application Performance for Business Success
Web Application Performance for Business SuccessWeb Application Performance for Business Success
Web Application Performance for Business Success
Espeo Software
 
Big Data Ecosystem - 1000 Simulated Drones
Big Data Ecosystem - 1000 Simulated DronesBig Data Ecosystem - 1000 Simulated Drones
Big Data Ecosystem - 1000 Simulated Drones
Espeo Software
 
Docker: From Zero to Hero
Docker: From Zero to HeroDocker: From Zero to Hero
Docker: From Zero to Hero
Espeo Software
 
Azure Machine Learning
Azure Machine LearningAzure Machine Learning
Azure Machine Learning
Espeo Software
 
Report: Wearables in Healthcare
Report: Wearables in HealthcareReport: Wearables in Healthcare
Report: Wearables in Healthcare
Espeo Software
 
Industrial Internet Solutions for Manufacturing & Logistics
Industrial Internet Solutions for Manufacturing & LogisticsIndustrial Internet Solutions for Manufacturing & Logistics
Industrial Internet Solutions for Manufacturing & Logistics
Espeo Software
 
Big Data - Why is it important for business?
Big Data - Why is it important for business?Big Data - Why is it important for business?
Big Data - Why is it important for business?
Espeo Software
 
A Future for Digital Health Wearables
A Future for Digital Health WearablesA Future for Digital Health Wearables
A Future for Digital Health Wearables
Espeo Software
 

More from Espeo Software (20)

Distributed, immutable, secure...
Distributed, immutable, secure...Distributed, immutable, secure...
Distributed, immutable, secure...
 
Initial Coin Offerings – legal requirements and types of tokens
Initial Coin Offerings – legal requirements and types of tokensInitial Coin Offerings – legal requirements and types of tokens
Initial Coin Offerings – legal requirements and types of tokens
 
Trustless off chain computing on the blockchain
Trustless off chain computing on the blockchainTrustless off chain computing on the blockchain
Trustless off chain computing on the blockchain
 
How to sell your business idea to your customers & investors
How to sell your business idea to your customers & investorsHow to sell your business idea to your customers & investors
How to sell your business idea to your customers & investors
 
How to build a coin and start an ICO
How to build a coin and start an ICOHow to build a coin and start an ICO
How to build a coin and start an ICO
 
How to scale your tech startup for the win
How to scale your tech startup for the winHow to scale your tech startup for the win
How to scale your tech startup for the win
 
Before You Start Outsourcing Software Development [Checklist]
Before You Start Outsourcing Software Development [Checklist]Before You Start Outsourcing Software Development [Checklist]
Before You Start Outsourcing Software Development [Checklist]
 
What Should a Good Code Review Check?
What Should a Good Code Review Check?What Should a Good Code Review Check?
What Should a Good Code Review Check?
 
Espeo's looking for a DevOps Engineer!
Espeo's looking for a DevOps Engineer!Espeo's looking for a DevOps Engineer!
Espeo's looking for a DevOps Engineer!
 
Software Team Efficiency: Velocity
Software Team Efficiency: VelocitySoftware Team Efficiency: Velocity
Software Team Efficiency: Velocity
 
Introduction to Scrum: A How-To Guide
Introduction to Scrum: A How-To GuideIntroduction to Scrum: A How-To Guide
Introduction to Scrum: A How-To Guide
 
To Hire or Not to Hire: In-house vs. Offshore Development
To Hire or Not to Hire: In-house vs. Offshore DevelopmentTo Hire or Not to Hire: In-house vs. Offshore Development
To Hire or Not to Hire: In-house vs. Offshore Development
 
Web Application Performance for Business Success
Web Application Performance for Business SuccessWeb Application Performance for Business Success
Web Application Performance for Business Success
 
Big Data Ecosystem - 1000 Simulated Drones
Big Data Ecosystem - 1000 Simulated DronesBig Data Ecosystem - 1000 Simulated Drones
Big Data Ecosystem - 1000 Simulated Drones
 
Docker: From Zero to Hero
Docker: From Zero to HeroDocker: From Zero to Hero
Docker: From Zero to Hero
 
Azure Machine Learning
Azure Machine LearningAzure Machine Learning
Azure Machine Learning
 
Report: Wearables in Healthcare
Report: Wearables in HealthcareReport: Wearables in Healthcare
Report: Wearables in Healthcare
 
Industrial Internet Solutions for Manufacturing & Logistics
Industrial Internet Solutions for Manufacturing & LogisticsIndustrial Internet Solutions for Manufacturing & Logistics
Industrial Internet Solutions for Manufacturing & Logistics
 
Big Data - Why is it important for business?
Big Data - Why is it important for business?Big Data - Why is it important for business?
Big Data - Why is it important for business?
 
A Future for Digital Health Wearables
A Future for Digital Health WearablesA Future for Digital Health Wearables
A Future for Digital Health Wearables
 

Recently uploaded

Navigating the Metaverse: A Journey into Virtual Evolution"
Navigating the Metaverse: A Journey into Virtual Evolution"Navigating the Metaverse: A Journey into Virtual Evolution"
Navigating the Metaverse: A Journey into Virtual Evolution"
Donna Lenk
 
Enterprise Resource Planning System in Telangana
Enterprise Resource Planning System in TelanganaEnterprise Resource Planning System in Telangana
Enterprise Resource Planning System in Telangana
NYGGS Automation Suite
 
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdfDominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
AMB-Review
 
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Mind IT Systems
 
Enhancing Research Orchestration Capabilities at ORNL.pdf
Enhancing Research Orchestration Capabilities at ORNL.pdfEnhancing Research Orchestration Capabilities at ORNL.pdf
Enhancing Research Orchestration Capabilities at ORNL.pdf
Globus
 
A Comprehensive Look at Generative AI in Retail App Testing.pdf
A Comprehensive Look at Generative AI in Retail App Testing.pdfA Comprehensive Look at Generative AI in Retail App Testing.pdf
A Comprehensive Look at Generative AI in Retail App Testing.pdf
kalichargn70th171
 
Large Language Models and the End of Programming
Large Language Models and the End of ProgrammingLarge Language Models and the End of Programming
Large Language Models and the End of Programming
Matt Welsh
 
Quarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden ExtensionsQuarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden Extensions
Max Andersen
 
Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...
Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...
Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...
Shahin Sheidaei
 
Cyaniclab : Software Development Agency Portfolio.pdf
Cyaniclab : Software Development Agency Portfolio.pdfCyaniclab : Software Development Agency Portfolio.pdf
Cyaniclab : Software Development Agency Portfolio.pdf
Cyanic lab
 
RISE with SAP and Journey to the Intelligent Enterprise
RISE with SAP and Journey to the Intelligent EnterpriseRISE with SAP and Journey to the Intelligent Enterprise
RISE with SAP and Journey to the Intelligent Enterprise
Srikant77
 
Into the Box 2024 - Keynote Day 2 Slides.pdf
Into the Box 2024 - Keynote Day 2 Slides.pdfInto the Box 2024 - Keynote Day 2 Slides.pdf
Into the Box 2024 - Keynote Day 2 Slides.pdf
Ortus Solutions, Corp
 
First Steps with Globus Compute Multi-User Endpoints
First Steps with Globus Compute Multi-User EndpointsFirst Steps with Globus Compute Multi-User Endpoints
First Steps with Globus Compute Multi-User Endpoints
Globus
 
SOCRadar Research Team: Latest Activities of IntelBroker
SOCRadar Research Team: Latest Activities of IntelBrokerSOCRadar Research Team: Latest Activities of IntelBroker
SOCRadar Research Team: Latest Activities of IntelBroker
SOCRadar
 
Enhancing Project Management Efficiency_ Leveraging AI Tools like ChatGPT.pdf
Enhancing Project Management Efficiency_ Leveraging AI Tools like ChatGPT.pdfEnhancing Project Management Efficiency_ Leveraging AI Tools like ChatGPT.pdf
Enhancing Project Management Efficiency_ Leveraging AI Tools like ChatGPT.pdf
Jay Das
 
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...
Anthony Dahanne
 
Using IESVE for Room Loads Analysis - Australia & New Zealand
Using IESVE for Room Loads Analysis - Australia & New ZealandUsing IESVE for Room Loads Analysis - Australia & New Zealand
Using IESVE for Room Loads Analysis - Australia & New Zealand
IES VE
 
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
Juraj Vysvader
 
Lecture 1 Introduction to games development
Lecture 1 Introduction to games developmentLecture 1 Introduction to games development
Lecture 1 Introduction to games development
abdulrafaychaudhry
 
Globus Compute Introduction - GlobusWorld 2024
Globus Compute Introduction - GlobusWorld 2024Globus Compute Introduction - GlobusWorld 2024
Globus Compute Introduction - GlobusWorld 2024
Globus
 

Recently uploaded (20)

Navigating the Metaverse: A Journey into Virtual Evolution"
Navigating the Metaverse: A Journey into Virtual Evolution"Navigating the Metaverse: A Journey into Virtual Evolution"
Navigating the Metaverse: A Journey into Virtual Evolution"
 
Enterprise Resource Planning System in Telangana
Enterprise Resource Planning System in TelanganaEnterprise Resource Planning System in Telangana
Enterprise Resource Planning System in Telangana
 
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdfDominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
 
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
 
Enhancing Research Orchestration Capabilities at ORNL.pdf
Enhancing Research Orchestration Capabilities at ORNL.pdfEnhancing Research Orchestration Capabilities at ORNL.pdf
Enhancing Research Orchestration Capabilities at ORNL.pdf
 
A Comprehensive Look at Generative AI in Retail App Testing.pdf
A Comprehensive Look at Generative AI in Retail App Testing.pdfA Comprehensive Look at Generative AI in Retail App Testing.pdf
A Comprehensive Look at Generative AI in Retail App Testing.pdf
 
Large Language Models and the End of Programming
Large Language Models and the End of ProgrammingLarge Language Models and the End of Programming
Large Language Models and the End of Programming
 
Quarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden ExtensionsQuarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden Extensions
 
Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...
Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...
Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...
 
Cyaniclab : Software Development Agency Portfolio.pdf
Cyaniclab : Software Development Agency Portfolio.pdfCyaniclab : Software Development Agency Portfolio.pdf
Cyaniclab : Software Development Agency Portfolio.pdf
 
RISE with SAP and Journey to the Intelligent Enterprise
RISE with SAP and Journey to the Intelligent EnterpriseRISE with SAP and Journey to the Intelligent Enterprise
RISE with SAP and Journey to the Intelligent Enterprise
 
Into the Box 2024 - Keynote Day 2 Slides.pdf
Into the Box 2024 - Keynote Day 2 Slides.pdfInto the Box 2024 - Keynote Day 2 Slides.pdf
Into the Box 2024 - Keynote Day 2 Slides.pdf
 
First Steps with Globus Compute Multi-User Endpoints
First Steps with Globus Compute Multi-User EndpointsFirst Steps with Globus Compute Multi-User Endpoints
First Steps with Globus Compute Multi-User Endpoints
 
SOCRadar Research Team: Latest Activities of IntelBroker
SOCRadar Research Team: Latest Activities of IntelBrokerSOCRadar Research Team: Latest Activities of IntelBroker
SOCRadar Research Team: Latest Activities of IntelBroker
 
Enhancing Project Management Efficiency_ Leveraging AI Tools like ChatGPT.pdf
Enhancing Project Management Efficiency_ Leveraging AI Tools like ChatGPT.pdfEnhancing Project Management Efficiency_ Leveraging AI Tools like ChatGPT.pdf
Enhancing Project Management Efficiency_ Leveraging AI Tools like ChatGPT.pdf
 
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...
 
Using IESVE for Room Loads Analysis - Australia & New Zealand
Using IESVE for Room Loads Analysis - Australia & New ZealandUsing IESVE for Room Loads Analysis - Australia & New Zealand
Using IESVE for Room Loads Analysis - Australia & New Zealand
 
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
 
Lecture 1 Introduction to games development
Lecture 1 Introduction to games developmentLecture 1 Introduction to games development
Lecture 1 Introduction to games development
 
Globus Compute Introduction - GlobusWorld 2024
Globus Compute Introduction - GlobusWorld 2024Globus Compute Introduction - GlobusWorld 2024
Globus Compute Introduction - GlobusWorld 2024
 

Guide to Node.js: Basic to Advanced