SlideShare a Scribd company logo
1 of 115
Download to read offline
The Modern Developer Toolbox 
Photo by https://www.flickr.com/photos/zergev/ 
Pablo Godel @pgodel 
https://joined.in/11798
Hi, I am Pablo.
Hi, I am Pablo. 
! 
@pgodel
The Modern Developer Toolbox 
Modern?
The Modern Developer Toolbox 
[root@prod] # vi index.php
The Modern Developer Toolbox 
Never stop ! 
improving
The Modern Developer Toolbox 
The Toolbox
The Modern Developer Toolbox 
Development environment
The Modern Developer Toolbox 
Development environment 
! 
Testing
The Modern Developer Toolbox 
Development environment 
! 
Testing 
! 
Debugging
The Modern Developer Toolbox 
Development environment 
! 
Testing 
! 
Debugging 
! 
Profiling
The Modern Developer Toolbox 
Development environment 
! 
Testing 
! 
Debugging 
! 
Profiling 
! 
Deployment
The Modern Developer Toolbox 
Development environment 
! 
Testing 
! 
Debugging 
! 
Profiling 
! 
Deployment 
! 
Logging
The Modern Developer Toolbox 
Development environment 
! 
Testing 
! 
Debugging 
! 
Profiling 
! 
Deployment 
! 
Logging 
! 
Monitoring
The Modern Developer Toolbox 
Development Environment
Development Environment 
Everything starts with a 
great development environment
Development Environment 
Choosing an OS
The Development Modern Developer Environment 
Toolbox 
Rule #1
The Development Modern Developer Environment 
Toolbox 
Rule #1: Stay close to Production
The Development Modern Developer Environment 
Toolbox 
Rule #2
The Development Modern Developer Environment 
Toolbox 
Rule #2: Ditch Windows
The Development Modern Developer Environment 
Toolbox 
Rule #3
The Development Modern Developer Environment 
Toolbox 
Rule #3: Don’t forget Rule #2
ThDe eMvoeldoeprmn eDnetv Eenlovpireorn Tmooelnbtox
The Development Modern Developer Environment 
Toolbox 
Automate your setup
The Development Modern Developer Environment 
Toolbox 
Automate your setup 
! 
#1 Store your dot-files in Git/GitHub
The Development Modern Developer Environment 
Toolbox 
Dot files 
.profile / .bash_profile / .bashrc 
.gitconfig 
.gitignores 
.ssh/config 
https://github.com/pgodel/dotfiles 
https://github.com/everzet/dotfiles
The Development Modern Developer Environment 
Toolbox 
Automate your setup 
! 
#2 Automate your software installation
The Development Modern Developer Environment 
Toolbox 
Homebrew! 
! 
• hhvm 
• wget 
• git 
• tmux 
• ssh-copy-id 
• brew-cask 
• ansible
The Modern Developer Toolbox 
Even .dmg’s! 
! 
$ brew cask install … 
! 
Development Environment 
• google-chrome 
• vagrant 
• virtualbox 
• iterm2 
• alfred 
• phpstorm 
! 
https://github.com/caskroom/homebrew-cask
The Development Modern Developer Environment 
Toolbox 
Installing PHP 
Run Linux natively / locally 
! 
• REMI repo for CentOS 
• PPAs for Ubuntu / Debian
The Development Modern Developer Environment 
Toolbox 
Installing PHP 
Run Linux on VPS / remote 
! 
• REMI repo for CentOS 
• PPAs for Ubuntu / Debian
The Development Modern Developer Environment 
Toolbox 
Installing PHP 
Mac OSX 
! 
• MAMP 
• Liip PHP installer
The Development Modern Developer Environment 
Toolbox 
Installing PHP 
Virtual Machine 
• VirtualBox / Parallels / VMware 
• Vagrant 
• Docker
The Development Modern Developer Environment 
Toolbox 
PHARS! 
! 
• Composer 
• PHPUnit 
• behat 
• WP-CLI 
• versionscan
The Development Modern Developer Environment 
Toolbox 
Vagrant! 
! 
• PuPHPet 
• Phansible
ThDe eMvoeldoeprmn eDnetv Eenlovpireorn Tmooelnbtox 
Vagrant 
Host 
Vagrant 
VM VM VM 
Web 
DB 
Server 
Server 
App 
Server
ThDe eMvoeldoeprmn eDnetv Eenlovpireorn Tmooelnbtox 
Docker 
Host 
Docker client 
C 
VM 
Web 
Server 
C C 
DB 
Server 
App 
Server
ThDe eMvoeldoeprmn eDnetv Eenlovpireorn Tmooelnbtox 
Docker 
Host 
Docker client 
C 
VM 
Web 
Server 
C C 
DB 
Server 
App 
Server
ThDe eMvoeldoeprmn eDnetv Eenlovpireorn Tmooelnbtox 
Docker 
Host 
Docker client 
C 
VM 
Web 
Server 
C C 
DB 
Server 
App 
Server
ThDe eMvoeldoeprmn eDnetv Eenlovpireorn Tmooelnbtox 
Docker 
Host 
Docker client 
C 
VM 
Web 
Server 
C C 
DB 
Server 
App 
Server 
Host 
C 
VM 
Web 
Server 
C C 
DB 
Server 
App 
Server
ThDe eMvoeldoeprmn eDnetv Eenlovpireorn Tmooelnbtox 
Docker 
Host 
Docker client 
C 
VM 
Web 
Server 
C C 
DB 
Server 
App 
Server 
Host 
C 
VM 
Web 
Server 
Host 
C C 
DB 
Server 
C C 
App 
Server 
C 
Web 
Server 
DB 
Server 
App 
Server 
Docker 
Kernel
The Development Modern Developer Environment 
Toolbox 
$ ansible-playbook -i inventories/dev  
playbook.yml -v -K 
https://github.com/pgodel/ansible-local-dev
The Development Modern Developer Environment 
Toolbox 
Use the right Editor/IDE for you
The Development Modern Developer Environment 
Toolbox 
Choose the right Editor/IDE for you! 
! 
• PHPStorm 
• Zend Studio 
• TextMate 
• Vim
The Development Modern Developer Environment 
Toolbox 
Choose the right Editor/IDE for you! 
! 
• PHPStorm! 
• Zend Studio 
• TextMate 
• Vim
The Development Modern Developer Environment 
Toolbox 
Choose the right Editor/IDE for you! 
! 
• PHPStorm! 
• Fast 
• Syntax highlighting with PHP 5.6 
• Git diffs and other actions 
• Breakpoints 
• and much more! 
! 
!
Development Environment 
Setting up SSH 
$ ssh-keygen -t dsa 
~/.ssh/id_dsa.pub 
! 
$ ssh-copy-id user@remote-host 
~/.ssh/authorized_keys 
~/.ssh/authorized_keys2 
! 
$ ssh-add
Development Environment 
Setting up SSH 
~/.ssh/config 
Host * 
ForwardAgent yes 
Port 22123 
! 
Host gh 
HostName github.com 
Port 22 
PreferredAuthentications publickey 
IdentityFile ~/.ssh/me_rsa
Development Environment 
Virtual Document Root 
UseCanonicalName Off 
! 
VirtualDocumentRoot /var/www/vhosts/%0/web 
! 
<Location /var/www/vhosts> 
AllowOverride All 
Options +FollowSymLinks 
</Location> 
example.com => /var/www/vhosts/example.com/web 
example2.com => /var/www/vhosts/example2.com/web
The Modern Developer Toolbox 
Testing
Testing 
! 
! 
• Unit testing with PHPUnit
Testing 
! 
! 
• Unit testing with PHPUnit 
• BDD with Behat
Testing 
! 
! 
• Unit testing with PHPUnit 
• BDD with Behat 
• Git hooks + php -l
Testing 
! 
! 
• Unit testing with PHPUnit 
• BDD with Behat 
• Git hooks + php -l 
• Jenkins
Testing 
! 
! 
• Unit testing with PHPUnit 
• BDD with Behat 
• Git hooks + php -l 
• Jenkins 
• Travis CI 
!
Testing 
! 
! 
• Unit testing with PHPUnit 
• BDD with Behat 
• Git hooks + php -l 
• Jenkins 
• Travis CI 
• JoliCI
! 
! 
Testing 
• phpmd / PHP Depend 
• PhpMetrics 
• SensioLabs Insight 
• Scrutinizer
The Modern Developer Toolbox 
Debugging
Debugging 
print_r($data);
LadyBug 
<?php 
$var = array( 
array( 
Debugging 
'name' => 'Raul', 
'age' => 29 
), 
array( 
'name' => 'John', 
'age' => 27 
) 
); 
! 
ladybug_dump($var)
LadyBug 
Debugging
Debugging 
XDebug + PHPStorm
The Development Modern Developer Environment 
Toolbox 
Debug CLI commands with PHPStorm 
! 
PRO TIP 
$ export  
XDEBUG_CONFIG=“idekey=PHPSTORM"
Debugging 
Symfony Developer Toolbar
Debugging 
Zend Studio + Zend Server + Z-Ray
The Modern Developer Toolbox 
Profiling
Profiling 
! 
! 
XDebug
Profiling 
! 
! 
XHProf + XHProf.io
Profiling 
! 
Commercial options 
! 
• Zend Server 
• SensioLabs Profiler (coming soon)
The Modern Developer Toolbox 
Deployment
Deployment 
• Capistrano (Ruby) / Capifony 
• Fabric (Python) 
• Idephix (PHP) 
• Magellanes (PHP) 
• Deployer (PHP) 
• Laravel / envoy (PHP) 
• Rocketeer (PHP) 
• Ansible (YAML)
Deployment 
Common steps
Deployment 
! 
! 
• Define hosts
Deployment 
! 
! 
• Define hosts 
• Define tasks / actions
Deployment 
! 
! 
• Define hosts 
• Define tasks / actions 
• Run process
Deployment 
! 
! 
• Define hosts 
• Define tasks / actions 
• Run process 
• Safe operation
Deployment 
! 
! 
• Define hosts 
• Define tasks / actions 
• Run process 
• Safe operation 
• Migrations
Deployment 
! 
! 
• Define hosts 
• Define tasks / actions 
• Run process 
• Safe operation 
• Migrations 
• Rollbacks
Deployment 
Deploying with
Deployment with Ansible 
! 
! 
Define hosts 
[webservers] 
foo.example.com 
bar.example.com 
www[01:50].example.com 
! 
[dbservers] 
one.example.com 
two.example.com 
three.example.com
Deployment with Ansible 
! 
! 
Define tasks / actions 
--- 
- hosts: webservers 
vars: 
http_port: 80 
max_clients: 200 
remote_user: root 
tasks: 
- name: ensure apache is at the latest version 
yum: pkg=httpd state=latest 
- name: write the apache config file 
template: src=/srv/httpd.j2 dest=/etc/httpd.conf 
notify: 
- restart apache 
- name: ensure apache is running
Deployment with Ansible ! 
! 
Define tasks / actions 
- hosts: webservers 
roles: 
- { 
role: servergrove.symfony2, 
symfony2_project_root: /var/www/vhosts/ 
example.com/, 
symfony2_project_name: demo, 
symfony2_project_branch: master , 
symfony2_project_release: 1 
}
Deployment with Ansible 
! 
! 
Run process 
$ ansible-playbook -i inventories/servers  
playbook.yml -v
Deployment with Ansible 
! 
! 
Run process
Deployment 
Effing Package Management 
Build packages for multiple platforms (deb, rpm, etc) with great ease and sanity. 
fpm -s dir -t rpm -n "webapp" -v 1.0 /var/www/webapp 
! 
fpm -s dir -t deb -a all -n webapp -v 1.0 /etc/apache2/ 
conf.d/my.conf /var/www/webapp 
https://github.com/jordansissel/fpm
The Modern Developer Toolbox 
Logging
Logging 
tail -f /var/log/*
Logging 
tail -f /var/log/* | grep “Fatal error”
Logging 
Logstash + ElasticSearch + Kibana 
App / Logstash 
App / Logstash App / Logstash 
Redis Logstash 
filter/processor 
ElasticSearch Kibana
Monolog 
Logging 
use MonologLogger; 
use MonologHandlerStreamHandler; 
! 
// create a log channel 
$log = new Logger('name'); 
$log->pushHandler(new StreamHandler('path/to/your.log', 
Logger::WARNING)); 
! 
// add records to the log 
$log->addWarning('Foo'); 
$log->addError('Bar');
Logging 
Monolog 
! 
• Rotates logs 
• Syslog / AMQP 
• Email / Chat servers 
• Redis / MongoDB / ElasticSearch 
• NullHandler 
• FingersCrossedHandler
Logstash 
Logging 
input { 
file { 
path => “/var/log/apache2/access_log” 
} 
} 
output { 
elasticsearch { 
host => localhost 
} 
}
Kibana 
Logging
The Modern Developer Toolbox 
Monitoring
Monitoring 
Measure everything!
Monitoring 
StatsD + Graphite + Grafana 
App 
App App 
StatsD Graphite 
Grafana
Monitoring 
StatsD + liuggio/statsd-php-client 
$ composer require liuggio/statsd-php-client:dev-master
Monitoring 
StatsD + liuggio/statsd-php-client 
$sender = new SocketSender(/*'localhost', 8126, 'udp'*/); 
! 
$client = new StatsdClient($sender); 
$factory = new StatsdDataFactory('LiuggioStatsdClientEntityStatsdData'); 
! 
// create the data with the factory 
$data[] = $factory->timing('usageTime', 100); 
$data[] = $factory->increment('visitor'); 
$data[] = $factory->decrement('click'); 
$data[] = $factory->gauge('gaugor', 333); 
$data[] = $factory->set('uniques', 765); 
! 
// send the data as array or directly as object 
$client->send($data);
Monitoring 
StatsD + liuggio/statsd-php-client 
$data[] = $factory->timing('usageTime', 100);! 
! 
// send the data as array or directly as object 
$client->send($data);
Monitoring 
StatsD + liuggio/statsd-php-client 
$data[] = $factory->increment('visitor');! 
! 
// send the data as array or directly as object 
$client->send($data);
Monitoring 
StatsD + liuggio/statsd-php-client 
$data[] = $factory->decrement('click');! 
! 
// send the data as array or directly as object 
$client->send($data);
Monitoring 
StatsD + liuggio/statsd-php-client 
$data[] = $factory->gauge('gaugor', 333);! 
! 
// send the data as array or directly as object 
$client->send($data);
Graphite 
Monitoring
Graphite 
Monitoring
Grafana 
Monitoring
Monitoring 
Apache Requests 
<Location /server-status> 
SetHandler server-status 
Order deny,allow 
Deny from all 
Allow from .your_domain.com 
</Location> 
! 
ExtendedStatus On
Monitoring 
Apache Requests
Monitoring 
CPU / Memory / IO 
top
Monitoring 
IO 
iotop
The Modern Developer Toolbox 
https://www.flickr.com/photos/jaquiza
The Modern Developer Toolbox 
Questions!
The Modern Developer Toolbox 
! 
! 
! 
Thank you! ! 
Rate me please! 
! 
! 
https://joind.in/11798 
http://slideshare.net/pgodel 
@pgodel

More Related Content

What's hot

PHP & JavaScript & CSS Coding style
PHP & JavaScript & CSS Coding stylePHP & JavaScript & CSS Coding style
PHP & JavaScript & CSS Coding styleBo-Yi Wu
 
Testing for Ops: Going Beyond the Manifest - PuppetConf 2013
Testing for Ops: Going Beyond the Manifest - PuppetConf 2013Testing for Ops: Going Beyond the Manifest - PuppetConf 2013
Testing for Ops: Going Beyond the Manifest - PuppetConf 2013Puppet
 
Django dev-env-my-way
Django dev-env-my-wayDjango dev-env-my-way
Django dev-env-my-wayRobert Lujo
 
ATDD with Behat and Selenium (LDNSE6)
ATDD with Behat and Selenium (LDNSE6)ATDD with Behat and Selenium (LDNSE6)
ATDD with Behat and Selenium (LDNSE6)Shashikant Jagtap
 
Workshop: Know Before You Push 'Go': Using the Beaker Acceptance Test Framewo...
Workshop: Know Before You Push 'Go': Using the Beaker Acceptance Test Framewo...Workshop: Know Before You Push 'Go': Using the Beaker Acceptance Test Framewo...
Workshop: Know Before You Push 'Go': Using the Beaker Acceptance Test Framewo...Puppet
 
Open Source Tools for Leveling Up Operations FOSSET 2014
Open Source Tools for Leveling Up Operations FOSSET 2014Open Source Tools for Leveling Up Operations FOSSET 2014
Open Source Tools for Leveling Up Operations FOSSET 2014Mandi Walls
 
Deploying 3 times a day without a downtime @ Rocket Tech Summit in Berlin
Deploying 3 times a day without a downtime @ Rocket Tech Summit in BerlinDeploying 3 times a day without a downtime @ Rocket Tech Summit in Berlin
Deploying 3 times a day without a downtime @ Rocket Tech Summit in BerlinAlessandro Nadalin
 
Zero Downtime Deployment with Ansible
Zero Downtime Deployment with AnsibleZero Downtime Deployment with Ansible
Zero Downtime Deployment with AnsibleStein Inge Morisbak
 
Towards Continuous Deployment with Django
Towards Continuous Deployment with DjangoTowards Continuous Deployment with Django
Towards Continuous Deployment with DjangoRoger Barnes
 
Practical introduction to dev ops with chef
Practical introduction to dev ops with chefPractical introduction to dev ops with chef
Practical introduction to dev ops with chefLeanDog
 
Building and Testing from Scratch a Puppet Environment with Docker - PuppetCo...
Building and Testing from Scratch a Puppet Environment with Docker - PuppetCo...Building and Testing from Scratch a Puppet Environment with Docker - PuppetCo...
Building and Testing from Scratch a Puppet Environment with Docker - PuppetCo...Puppet
 
How to integrate front end tool via gruntjs
How to integrate front end tool via gruntjsHow to integrate front end tool via gruntjs
How to integrate front end tool via gruntjsBo-Yi Wu
 
[Community Open Camp] 給 PHP 開發者的 VS Code 指南
[Community Open Camp] 給 PHP 開發者的 VS Code 指南[Community Open Camp] 給 PHP 開發者的 VS Code 指南
[Community Open Camp] 給 PHP 開發者的 VS Code 指南Shengyou Fan
 
Gearman work queue in php
Gearman work queue in phpGearman work queue in php
Gearman work queue in phpBo-Yi Wu
 
Building a Drupal site with Git
Building a Drupal site with GitBuilding a Drupal site with Git
Building a Drupal site with Gitdirtytactics
 
Zero Downtime Deployment with Ansible
Zero Downtime Deployment with AnsibleZero Downtime Deployment with Ansible
Zero Downtime Deployment with AnsibleStein Inge Morisbak
 
Building a private CI/CD pipeline with Java and Docker in the Cloud as presen...
Building a private CI/CD pipeline with Java and Docker in the Cloud as presen...Building a private CI/CD pipeline with Java and Docker in the Cloud as presen...
Building a private CI/CD pipeline with Java and Docker in the Cloud as presen...Baruch Sadogursky
 
DevOps Hackathon - Session 1: Vagrant
DevOps Hackathon - Session 1: VagrantDevOps Hackathon - Session 1: Vagrant
DevOps Hackathon - Session 1: VagrantAntons Kranga
 
Building a private CI/CD pipeline with Java and Docker in the cloud as presen...
Building a private CI/CD pipeline with Java and Docker in the cloud as presen...Building a private CI/CD pipeline with Java and Docker in the cloud as presen...
Building a private CI/CD pipeline with Java and Docker in the cloud as presen...Baruch Sadogursky
 

What's hot (20)

PHP & JavaScript & CSS Coding style
PHP & JavaScript & CSS Coding stylePHP & JavaScript & CSS Coding style
PHP & JavaScript & CSS Coding style
 
Testing for Ops: Going Beyond the Manifest - PuppetConf 2013
Testing for Ops: Going Beyond the Manifest - PuppetConf 2013Testing for Ops: Going Beyond the Manifest - PuppetConf 2013
Testing for Ops: Going Beyond the Manifest - PuppetConf 2013
 
Django dev-env-my-way
Django dev-env-my-wayDjango dev-env-my-way
Django dev-env-my-way
 
ATDD with Behat and Selenium (LDNSE6)
ATDD with Behat and Selenium (LDNSE6)ATDD with Behat and Selenium (LDNSE6)
ATDD with Behat and Selenium (LDNSE6)
 
Workshop: Know Before You Push 'Go': Using the Beaker Acceptance Test Framewo...
Workshop: Know Before You Push 'Go': Using the Beaker Acceptance Test Framewo...Workshop: Know Before You Push 'Go': Using the Beaker Acceptance Test Framewo...
Workshop: Know Before You Push 'Go': Using the Beaker Acceptance Test Framewo...
 
Open Source Tools for Leveling Up Operations FOSSET 2014
Open Source Tools for Leveling Up Operations FOSSET 2014Open Source Tools for Leveling Up Operations FOSSET 2014
Open Source Tools for Leveling Up Operations FOSSET 2014
 
Deploying 3 times a day without a downtime @ Rocket Tech Summit in Berlin
Deploying 3 times a day without a downtime @ Rocket Tech Summit in BerlinDeploying 3 times a day without a downtime @ Rocket Tech Summit in Berlin
Deploying 3 times a day without a downtime @ Rocket Tech Summit in Berlin
 
Perlbrew
PerlbrewPerlbrew
Perlbrew
 
Zero Downtime Deployment with Ansible
Zero Downtime Deployment with AnsibleZero Downtime Deployment with Ansible
Zero Downtime Deployment with Ansible
 
Towards Continuous Deployment with Django
Towards Continuous Deployment with DjangoTowards Continuous Deployment with Django
Towards Continuous Deployment with Django
 
Practical introduction to dev ops with chef
Practical introduction to dev ops with chefPractical introduction to dev ops with chef
Practical introduction to dev ops with chef
 
Building and Testing from Scratch a Puppet Environment with Docker - PuppetCo...
Building and Testing from Scratch a Puppet Environment with Docker - PuppetCo...Building and Testing from Scratch a Puppet Environment with Docker - PuppetCo...
Building and Testing from Scratch a Puppet Environment with Docker - PuppetCo...
 
How to integrate front end tool via gruntjs
How to integrate front end tool via gruntjsHow to integrate front end tool via gruntjs
How to integrate front end tool via gruntjs
 
[Community Open Camp] 給 PHP 開發者的 VS Code 指南
[Community Open Camp] 給 PHP 開發者的 VS Code 指南[Community Open Camp] 給 PHP 開發者的 VS Code 指南
[Community Open Camp] 給 PHP 開發者的 VS Code 指南
 
Gearman work queue in php
Gearman work queue in phpGearman work queue in php
Gearman work queue in php
 
Building a Drupal site with Git
Building a Drupal site with GitBuilding a Drupal site with Git
Building a Drupal site with Git
 
Zero Downtime Deployment with Ansible
Zero Downtime Deployment with AnsibleZero Downtime Deployment with Ansible
Zero Downtime Deployment with Ansible
 
Building a private CI/CD pipeline with Java and Docker in the Cloud as presen...
Building a private CI/CD pipeline with Java and Docker in the Cloud as presen...Building a private CI/CD pipeline with Java and Docker in the Cloud as presen...
Building a private CI/CD pipeline with Java and Docker in the Cloud as presen...
 
DevOps Hackathon - Session 1: Vagrant
DevOps Hackathon - Session 1: VagrantDevOps Hackathon - Session 1: Vagrant
DevOps Hackathon - Session 1: Vagrant
 
Building a private CI/CD pipeline with Java and Docker in the cloud as presen...
Building a private CI/CD pipeline with Java and Docker in the cloud as presen...Building a private CI/CD pipeline with Java and Docker in the cloud as presen...
Building a private CI/CD pipeline with Java and Docker in the cloud as presen...
 

Viewers also liked

Musicas cifradas bossa nova samba 01
Musicas cifradas bossa nova samba 01Musicas cifradas bossa nova samba 01
Musicas cifradas bossa nova samba 01Elvis Live
 
Media Platforms Emerge: 2004 onward - The rise of Embeddability
Media Platforms Emerge:  2004 onward - The rise of EmbeddabilityMedia Platforms Emerge:  2004 onward - The rise of Embeddability
Media Platforms Emerge: 2004 onward - The rise of EmbeddabilityNick Kellet
 
1960s shortened
1960s shortened1960s shortened
1960s shortenedKrista Leh
 
Threat intelligence at the cloud
Threat intelligence at the cloudThreat intelligence at the cloud
Threat intelligence at the cloudOr Katz
 
Hack In The Box (Dubai) 04172008
Hack In The Box (Dubai) 04172008Hack In The Box (Dubai) 04172008
Hack In The Box (Dubai) 04172008guesta84549
 
Mapas conceptuales de solci thieroldt ♥
Mapas conceptuales de solci thieroldt ♥Mapas conceptuales de solci thieroldt ♥
Mapas conceptuales de solci thieroldt ♥Solcita123
 
Zombies, Run! Transforming Fitness, Games & Story
Zombies, Run! Transforming Fitness, Games & StoryZombies, Run! Transforming Fitness, Games & Story
Zombies, Run! Transforming Fitness, Games & StoryAdrian Hon
 
Blue ocean strategy 3
Blue ocean strategy 3Blue ocean strategy 3
Blue ocean strategy 3Daniel
 
Train a Social Workforce: How AT&T Trained Thousands of Employee Advocates
Train a Social Workforce: How AT&T Trained Thousands of Employee AdvocatesTrain a Social Workforce: How AT&T Trained Thousands of Employee Advocates
Train a Social Workforce: How AT&T Trained Thousands of Employee AdvocatesSocialChorus
 
Are you listening to your data? Chris Stanley Virtusa
Are you listening to your data? Chris Stanley Virtusa Are you listening to your data? Chris Stanley Virtusa
Are you listening to your data? Chris Stanley Virtusa John Colley
 
Verilog-HDL Tutorial (6)
Verilog-HDL Tutorial (6)Verilog-HDL Tutorial (6)
Verilog-HDL Tutorial (6)Hiroki Nakahara
 
Work wants to be social (talk at Web 2 Expo 2010)
Work wants to be social (talk at Web 2 Expo 2010)Work wants to be social (talk at Web 2 Expo 2010)
Work wants to be social (talk at Web 2 Expo 2010)Rashmi Sinha
 
Outline of How to Publish a Book
Outline of How to Publish a BookOutline of How to Publish a Book
Outline of How to Publish a BookGuy Kawasaki
 
QUEST/SmarterMeasure Learning Readiness Indicator Lunch & Learn Webinar Series
QUEST/SmarterMeasure Learning Readiness Indicator Lunch & Learn Webinar SeriesQUEST/SmarterMeasure Learning Readiness Indicator Lunch & Learn Webinar Series
QUEST/SmarterMeasure Learning Readiness Indicator Lunch & Learn Webinar SeriesSmarterServices Owen
 
How we calculated the $ value of candidate experience and transformed the per...
How we calculated the $ value of candidate experience and transformed the per...How we calculated the $ value of candidate experience and transformed the per...
How we calculated the $ value of candidate experience and transformed the per...LinkedIn Talent Solutions
 

Viewers also liked (20)

Marama 3
Marama 3Marama 3
Marama 3
 
Musicas cifradas bossa nova samba 01
Musicas cifradas bossa nova samba 01Musicas cifradas bossa nova samba 01
Musicas cifradas bossa nova samba 01
 
Media Platforms Emerge: 2004 onward - The rise of Embeddability
Media Platforms Emerge:  2004 onward - The rise of EmbeddabilityMedia Platforms Emerge:  2004 onward - The rise of Embeddability
Media Platforms Emerge: 2004 onward - The rise of Embeddability
 
1960s shortened
1960s shortened1960s shortened
1960s shortened
 
Ingless
InglessIngless
Ingless
 
God Is Holy
God Is HolyGod Is Holy
God Is Holy
 
Threat intelligence at the cloud
Threat intelligence at the cloudThreat intelligence at the cloud
Threat intelligence at the cloud
 
Hack In The Box (Dubai) 04172008
Hack In The Box (Dubai) 04172008Hack In The Box (Dubai) 04172008
Hack In The Box (Dubai) 04172008
 
Mapas conceptuales de solci thieroldt ♥
Mapas conceptuales de solci thieroldt ♥Mapas conceptuales de solci thieroldt ♥
Mapas conceptuales de solci thieroldt ♥
 
Infosys
InfosysInfosys
Infosys
 
Neo-noir: The Dark Side of Creative Writing
Neo-noir: The Dark Side of Creative Writing Neo-noir: The Dark Side of Creative Writing
Neo-noir: The Dark Side of Creative Writing
 
Zombies, Run! Transforming Fitness, Games & Story
Zombies, Run! Transforming Fitness, Games & StoryZombies, Run! Transforming Fitness, Games & Story
Zombies, Run! Transforming Fitness, Games & Story
 
Blue ocean strategy 3
Blue ocean strategy 3Blue ocean strategy 3
Blue ocean strategy 3
 
Train a Social Workforce: How AT&T Trained Thousands of Employee Advocates
Train a Social Workforce: How AT&T Trained Thousands of Employee AdvocatesTrain a Social Workforce: How AT&T Trained Thousands of Employee Advocates
Train a Social Workforce: How AT&T Trained Thousands of Employee Advocates
 
Are you listening to your data? Chris Stanley Virtusa
Are you listening to your data? Chris Stanley Virtusa Are you listening to your data? Chris Stanley Virtusa
Are you listening to your data? Chris Stanley Virtusa
 
Verilog-HDL Tutorial (6)
Verilog-HDL Tutorial (6)Verilog-HDL Tutorial (6)
Verilog-HDL Tutorial (6)
 
Work wants to be social (talk at Web 2 Expo 2010)
Work wants to be social (talk at Web 2 Expo 2010)Work wants to be social (talk at Web 2 Expo 2010)
Work wants to be social (talk at Web 2 Expo 2010)
 
Outline of How to Publish a Book
Outline of How to Publish a BookOutline of How to Publish a Book
Outline of How to Publish a Book
 
QUEST/SmarterMeasure Learning Readiness Indicator Lunch & Learn Webinar Series
QUEST/SmarterMeasure Learning Readiness Indicator Lunch & Learn Webinar SeriesQUEST/SmarterMeasure Learning Readiness Indicator Lunch & Learn Webinar Series
QUEST/SmarterMeasure Learning Readiness Indicator Lunch & Learn Webinar Series
 
How we calculated the $ value of candidate experience and transformed the per...
How we calculated the $ value of candidate experience and transformed the per...How we calculated the $ value of candidate experience and transformed the per...
How we calculated the $ value of candidate experience and transformed the per...
 

Similar to The Modern Developer Toolbox

Deployment Tactics
Deployment TacticsDeployment Tactics
Deployment TacticsIan Barber
 
Adopt DevOps philosophy on your Symfony projects (Symfony Live 2011)
Adopt DevOps philosophy on your Symfony projects (Symfony Live 2011)Adopt DevOps philosophy on your Symfony projects (Symfony Live 2011)
Adopt DevOps philosophy on your Symfony projects (Symfony Live 2011)Fabrice Bernhard
 
WordPress Development Environments
WordPress Development Environments WordPress Development Environments
WordPress Development Environments Ohad Raz
 
Docker module 1
Docker module 1Docker module 1
Docker module 1Liang Bo
 
Developing and Deploying PHP with Docker
Developing and Deploying PHP with DockerDeveloping and Deploying PHP with Docker
Developing and Deploying PHP with DockerPatrick Mizer
 
Laravel Forge: Hello World to Hello Production
Laravel Forge: Hello World to Hello ProductionLaravel Forge: Hello World to Hello Production
Laravel Forge: Hello World to Hello ProductionJoe Ferguson
 
symfony: An Open-Source Framework for Professionals (Dutch Php Conference 2008)
symfony: An Open-Source Framework for Professionals (Dutch Php Conference 2008)symfony: An Open-Source Framework for Professionals (Dutch Php Conference 2008)
symfony: An Open-Source Framework for Professionals (Dutch Php Conference 2008)Fabien Potencier
 
Continuous Integration with Open Source Tools - PHPUgFfm 2014-11-20
Continuous Integration with Open Source Tools - PHPUgFfm 2014-11-20Continuous Integration with Open Source Tools - PHPUgFfm 2014-11-20
Continuous Integration with Open Source Tools - PHPUgFfm 2014-11-20Michael Lihs
 
The Docker "Gauntlet" - Introduction, Ecosystem, Deployment, Orchestration
The Docker "Gauntlet" - Introduction, Ecosystem, Deployment, OrchestrationThe Docker "Gauntlet" - Introduction, Ecosystem, Deployment, Orchestration
The Docker "Gauntlet" - Introduction, Ecosystem, Deployment, OrchestrationErica Windisch
 
DevOPS training - Day 2/2
DevOPS training - Day 2/2DevOPS training - Day 2/2
DevOPS training - Day 2/2Vincent Mercier
 
Virtualize and automate your development environment for fun and profit
Virtualize and automate your development environment for fun and profitVirtualize and automate your development environment for fun and profit
Virtualize and automate your development environment for fun and profitAndreas Heim
 
NLUUG Spring 2012 - OpenShift Primer
NLUUG Spring 2012 - OpenShift PrimerNLUUG Spring 2012 - OpenShift Primer
NLUUG Spring 2012 - OpenShift PrimerEric D. Schabell
 
Dockerize your Symfony application - Symfony Live NYC 2014
Dockerize your Symfony application - Symfony Live NYC 2014Dockerize your Symfony application - Symfony Live NYC 2014
Dockerize your Symfony application - Symfony Live NYC 2014André Rømcke
 
Docker presentasjon java bin
Docker presentasjon java binDocker presentasjon java bin
Docker presentasjon java binOlve Hansen
 
Continous Delivering a PHP application
Continous Delivering a PHP applicationContinous Delivering a PHP application
Continous Delivering a PHP applicationJavier López
 
Nagios Conference 2014 - Spenser Reinhardt - Detecting Security Breaches With...
Nagios Conference 2014 - Spenser Reinhardt - Detecting Security Breaches With...Nagios Conference 2014 - Spenser Reinhardt - Detecting Security Breaches With...
Nagios Conference 2014 - Spenser Reinhardt - Detecting Security Breaches With...Nagios
 
Advanced Eclipse Workshop (held at IPC2010 -spring edition-)
Advanced Eclipse Workshop (held at IPC2010 -spring edition-)Advanced Eclipse Workshop (held at IPC2010 -spring edition-)
Advanced Eclipse Workshop (held at IPC2010 -spring edition-)Bastian Feder
 
Dependencies Managers in C/C++. Using stdcpp 2014
Dependencies Managers in C/C++. Using stdcpp 2014Dependencies Managers in C/C++. Using stdcpp 2014
Dependencies Managers in C/C++. Using stdcpp 2014biicode
 

Similar to The Modern Developer Toolbox (20)

Deployment Tactics
Deployment TacticsDeployment Tactics
Deployment Tactics
 
Adopt DevOps philosophy on your Symfony projects (Symfony Live 2011)
Adopt DevOps philosophy on your Symfony projects (Symfony Live 2011)Adopt DevOps philosophy on your Symfony projects (Symfony Live 2011)
Adopt DevOps philosophy on your Symfony projects (Symfony Live 2011)
 
WordPress Development Environments
WordPress Development Environments WordPress Development Environments
WordPress Development Environments
 
Docker module 1
Docker module 1Docker module 1
Docker module 1
 
Developing and Deploying PHP with Docker
Developing and Deploying PHP with DockerDeveloping and Deploying PHP with Docker
Developing and Deploying PHP with Docker
 
Laravel Forge: Hello World to Hello Production
Laravel Forge: Hello World to Hello ProductionLaravel Forge: Hello World to Hello Production
Laravel Forge: Hello World to Hello Production
 
symfony: An Open-Source Framework for Professionals (Dutch Php Conference 2008)
symfony: An Open-Source Framework for Professionals (Dutch Php Conference 2008)symfony: An Open-Source Framework for Professionals (Dutch Php Conference 2008)
symfony: An Open-Source Framework for Professionals (Dutch Php Conference 2008)
 
Continuous Integration with Open Source Tools - PHPUgFfm 2014-11-20
Continuous Integration with Open Source Tools - PHPUgFfm 2014-11-20Continuous Integration with Open Source Tools - PHPUgFfm 2014-11-20
Continuous Integration with Open Source Tools - PHPUgFfm 2014-11-20
 
The Docker "Gauntlet" - Introduction, Ecosystem, Deployment, Orchestration
The Docker "Gauntlet" - Introduction, Ecosystem, Deployment, OrchestrationThe Docker "Gauntlet" - Introduction, Ecosystem, Deployment, Orchestration
The Docker "Gauntlet" - Introduction, Ecosystem, Deployment, Orchestration
 
DevOPS training - Day 2/2
DevOPS training - Day 2/2DevOPS training - Day 2/2
DevOPS training - Day 2/2
 
Virtualize and automate your development environment for fun and profit
Virtualize and automate your development environment for fun and profitVirtualize and automate your development environment for fun and profit
Virtualize and automate your development environment for fun and profit
 
NLUUG Spring 2012 - OpenShift Primer
NLUUG Spring 2012 - OpenShift PrimerNLUUG Spring 2012 - OpenShift Primer
NLUUG Spring 2012 - OpenShift Primer
 
Belvedere
BelvedereBelvedere
Belvedere
 
Dockerize your Symfony application - Symfony Live NYC 2014
Dockerize your Symfony application - Symfony Live NYC 2014Dockerize your Symfony application - Symfony Live NYC 2014
Dockerize your Symfony application - Symfony Live NYC 2014
 
Vagrant
VagrantVagrant
Vagrant
 
Docker presentasjon java bin
Docker presentasjon java binDocker presentasjon java bin
Docker presentasjon java bin
 
Continous Delivering a PHP application
Continous Delivering a PHP applicationContinous Delivering a PHP application
Continous Delivering a PHP application
 
Nagios Conference 2014 - Spenser Reinhardt - Detecting Security Breaches With...
Nagios Conference 2014 - Spenser Reinhardt - Detecting Security Breaches With...Nagios Conference 2014 - Spenser Reinhardt - Detecting Security Breaches With...
Nagios Conference 2014 - Spenser Reinhardt - Detecting Security Breaches With...
 
Advanced Eclipse Workshop (held at IPC2010 -spring edition-)
Advanced Eclipse Workshop (held at IPC2010 -spring edition-)Advanced Eclipse Workshop (held at IPC2010 -spring edition-)
Advanced Eclipse Workshop (held at IPC2010 -spring edition-)
 
Dependencies Managers in C/C++. Using stdcpp 2014
Dependencies Managers in C/C++. Using stdcpp 2014Dependencies Managers in C/C++. Using stdcpp 2014
Dependencies Managers in C/C++. Using stdcpp 2014
 

More from Pablo Godel

SymfonyCon Cluj 2017 - Symfony at OpenSky
SymfonyCon Cluj 2017 - Symfony at OpenSkySymfonyCon Cluj 2017 - Symfony at OpenSky
SymfonyCon Cluj 2017 - Symfony at OpenSkyPablo Godel
 
Symfony Live San Francisco 2017 - Symfony @ OpenSky
Symfony Live San Francisco 2017 - Symfony @ OpenSkySymfony Live San Francisco 2017 - Symfony @ OpenSky
Symfony Live San Francisco 2017 - Symfony @ OpenSkyPablo Godel
 
DeSymfony 2017 - Symfony en OpenSky
DeSymfony 2017 - Symfony en OpenSkyDeSymfony 2017 - Symfony en OpenSky
DeSymfony 2017 - Symfony en OpenSkyPablo Godel
 
La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR
La Caja de Herramientas del Desarrollador Moderno PHPConferenceARLa Caja de Herramientas del Desarrollador Moderno PHPConferenceAR
La Caja de Herramientas del Desarrollador Moderno PHPConferenceARPablo Godel
 
PHP Conference Argentina 2013 - Deployment de aplicaciones PHP a prueba de balas
PHP Conference Argentina 2013 - Deployment de aplicaciones PHP a prueba de balasPHP Conference Argentina 2013 - Deployment de aplicaciones PHP a prueba de balas
PHP Conference Argentina 2013 - Deployment de aplicaciones PHP a prueba de balasPablo Godel
 
php[architect] Summit Series DevOps 2013 - Rock solid deployment of PHP apps
php[architect] Summit Series DevOps 2013 - Rock solid deployment of PHP appsphp[architect] Summit Series DevOps 2013 - Rock solid deployment of PHP apps
php[architect] Summit Series DevOps 2013 - Rock solid deployment of PHP appsPablo Godel
 
Lone Star PHP 2013 - Sysadmin Skills for PHP Developers
Lone Star PHP 2013 - Sysadmin Skills for PHP DevelopersLone Star PHP 2013 - Sysadmin Skills for PHP Developers
Lone Star PHP 2013 - Sysadmin Skills for PHP DevelopersPablo Godel
 
Lone StarPHP 2013 - Building Web Apps from a New Angle
Lone StarPHP 2013 - Building Web Apps from a New AngleLone StarPHP 2013 - Building Web Apps from a New Angle
Lone StarPHP 2013 - Building Web Apps from a New AnglePablo Godel
 
deSymfony 2013 - Creando aplicaciones web desde otro ángulo con Symfony y A...
deSymfony 2013 -  Creando aplicaciones web desde otro ángulo con Symfony y A...deSymfony 2013 -  Creando aplicaciones web desde otro ángulo con Symfony y A...
deSymfony 2013 - Creando aplicaciones web desde otro ángulo con Symfony y A...Pablo Godel
 
Creating Mobile Apps With PHP & Symfony2
Creating Mobile Apps With PHP & Symfony2Creating Mobile Apps With PHP & Symfony2
Creating Mobile Apps With PHP & Symfony2Pablo Godel
 
Tek13 - Creating Mobile Apps with PHP and Symfony
Tek13 - Creating Mobile Apps with PHP and SymfonyTek13 - Creating Mobile Apps with PHP and Symfony
Tek13 - Creating Mobile Apps with PHP and SymfonyPablo Godel
 
Tek 2013 - Building Web Apps from a New Angle with AngularJS
Tek 2013 - Building Web Apps from a New Angle with AngularJSTek 2013 - Building Web Apps from a New Angle with AngularJS
Tek 2013 - Building Web Apps from a New Angle with AngularJSPablo Godel
 
Soflophp 2013 - SysAdmin skills for PHP developers
Soflophp 2013 - SysAdmin skills for PHP developersSoflophp 2013 - SysAdmin skills for PHP developers
Soflophp 2013 - SysAdmin skills for PHP developersPablo Godel
 
Symfony2 and MongoDB - MidwestPHP 2013
Symfony2 and MongoDB - MidwestPHP 2013   Symfony2 and MongoDB - MidwestPHP 2013
Symfony2 and MongoDB - MidwestPHP 2013 Pablo Godel
 
Rock Solid Deployment of Web Applications
Rock Solid Deployment of Web ApplicationsRock Solid Deployment of Web Applications
Rock Solid Deployment of Web ApplicationsPablo Godel
 
Codeworks'12 Rock Solid Deployment of PHP Apps
Codeworks'12 Rock Solid Deployment of PHP AppsCodeworks'12 Rock Solid Deployment of PHP Apps
Codeworks'12 Rock Solid Deployment of PHP AppsPablo Godel
 
PFCongres 2012 - Rock Solid Deployment of PHP Apps
PFCongres 2012 - Rock Solid Deployment of PHP AppsPFCongres 2012 - Rock Solid Deployment of PHP Apps
PFCongres 2012 - Rock Solid Deployment of PHP AppsPablo Godel
 
Symfony2 y MongoDB - deSymfony 2012
Symfony2 y MongoDB - deSymfony 2012Symfony2 y MongoDB - deSymfony 2012
Symfony2 y MongoDB - deSymfony 2012Pablo Godel
 
Declare independence from your it department sysadmin skills for symfony dev...
Declare independence from your it department  sysadmin skills for symfony dev...Declare independence from your it department  sysadmin skills for symfony dev...
Declare independence from your it department sysadmin skills for symfony dev...Pablo Godel
 
Symfony2 and MongoDB
Symfony2 and MongoDBSymfony2 and MongoDB
Symfony2 and MongoDBPablo Godel
 

More from Pablo Godel (20)

SymfonyCon Cluj 2017 - Symfony at OpenSky
SymfonyCon Cluj 2017 - Symfony at OpenSkySymfonyCon Cluj 2017 - Symfony at OpenSky
SymfonyCon Cluj 2017 - Symfony at OpenSky
 
Symfony Live San Francisco 2017 - Symfony @ OpenSky
Symfony Live San Francisco 2017 - Symfony @ OpenSkySymfony Live San Francisco 2017 - Symfony @ OpenSky
Symfony Live San Francisco 2017 - Symfony @ OpenSky
 
DeSymfony 2017 - Symfony en OpenSky
DeSymfony 2017 - Symfony en OpenSkyDeSymfony 2017 - Symfony en OpenSky
DeSymfony 2017 - Symfony en OpenSky
 
La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR
La Caja de Herramientas del Desarrollador Moderno PHPConferenceARLa Caja de Herramientas del Desarrollador Moderno PHPConferenceAR
La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR
 
PHP Conference Argentina 2013 - Deployment de aplicaciones PHP a prueba de balas
PHP Conference Argentina 2013 - Deployment de aplicaciones PHP a prueba de balasPHP Conference Argentina 2013 - Deployment de aplicaciones PHP a prueba de balas
PHP Conference Argentina 2013 - Deployment de aplicaciones PHP a prueba de balas
 
php[architect] Summit Series DevOps 2013 - Rock solid deployment of PHP apps
php[architect] Summit Series DevOps 2013 - Rock solid deployment of PHP appsphp[architect] Summit Series DevOps 2013 - Rock solid deployment of PHP apps
php[architect] Summit Series DevOps 2013 - Rock solid deployment of PHP apps
 
Lone Star PHP 2013 - Sysadmin Skills for PHP Developers
Lone Star PHP 2013 - Sysadmin Skills for PHP DevelopersLone Star PHP 2013 - Sysadmin Skills for PHP Developers
Lone Star PHP 2013 - Sysadmin Skills for PHP Developers
 
Lone StarPHP 2013 - Building Web Apps from a New Angle
Lone StarPHP 2013 - Building Web Apps from a New AngleLone StarPHP 2013 - Building Web Apps from a New Angle
Lone StarPHP 2013 - Building Web Apps from a New Angle
 
deSymfony 2013 - Creando aplicaciones web desde otro ángulo con Symfony y A...
deSymfony 2013 -  Creando aplicaciones web desde otro ángulo con Symfony y A...deSymfony 2013 -  Creando aplicaciones web desde otro ángulo con Symfony y A...
deSymfony 2013 - Creando aplicaciones web desde otro ángulo con Symfony y A...
 
Creating Mobile Apps With PHP & Symfony2
Creating Mobile Apps With PHP & Symfony2Creating Mobile Apps With PHP & Symfony2
Creating Mobile Apps With PHP & Symfony2
 
Tek13 - Creating Mobile Apps with PHP and Symfony
Tek13 - Creating Mobile Apps with PHP and SymfonyTek13 - Creating Mobile Apps with PHP and Symfony
Tek13 - Creating Mobile Apps with PHP and Symfony
 
Tek 2013 - Building Web Apps from a New Angle with AngularJS
Tek 2013 - Building Web Apps from a New Angle with AngularJSTek 2013 - Building Web Apps from a New Angle with AngularJS
Tek 2013 - Building Web Apps from a New Angle with AngularJS
 
Soflophp 2013 - SysAdmin skills for PHP developers
Soflophp 2013 - SysAdmin skills for PHP developersSoflophp 2013 - SysAdmin skills for PHP developers
Soflophp 2013 - SysAdmin skills for PHP developers
 
Symfony2 and MongoDB - MidwestPHP 2013
Symfony2 and MongoDB - MidwestPHP 2013   Symfony2 and MongoDB - MidwestPHP 2013
Symfony2 and MongoDB - MidwestPHP 2013
 
Rock Solid Deployment of Web Applications
Rock Solid Deployment of Web ApplicationsRock Solid Deployment of Web Applications
Rock Solid Deployment of Web Applications
 
Codeworks'12 Rock Solid Deployment of PHP Apps
Codeworks'12 Rock Solid Deployment of PHP AppsCodeworks'12 Rock Solid Deployment of PHP Apps
Codeworks'12 Rock Solid Deployment of PHP Apps
 
PFCongres 2012 - Rock Solid Deployment of PHP Apps
PFCongres 2012 - Rock Solid Deployment of PHP AppsPFCongres 2012 - Rock Solid Deployment of PHP Apps
PFCongres 2012 - Rock Solid Deployment of PHP Apps
 
Symfony2 y MongoDB - deSymfony 2012
Symfony2 y MongoDB - deSymfony 2012Symfony2 y MongoDB - deSymfony 2012
Symfony2 y MongoDB - deSymfony 2012
 
Declare independence from your it department sysadmin skills for symfony dev...
Declare independence from your it department  sysadmin skills for symfony dev...Declare independence from your it department  sysadmin skills for symfony dev...
Declare independence from your it department sysadmin skills for symfony dev...
 
Symfony2 and MongoDB
Symfony2 and MongoDBSymfony2 and MongoDB
Symfony2 and MongoDB
 

Recently uploaded

定制(AUT毕业证书)新西兰奥克兰理工大学毕业证成绩单原版一比一
定制(AUT毕业证书)新西兰奥克兰理工大学毕业证成绩单原版一比一定制(AUT毕业证书)新西兰奥克兰理工大学毕业证成绩单原版一比一
定制(AUT毕业证书)新西兰奥克兰理工大学毕业证成绩单原版一比一Fs
 
办理(UofR毕业证书)罗切斯特大学毕业证成绩单原版一比一
办理(UofR毕业证书)罗切斯特大学毕业证成绩单原版一比一办理(UofR毕业证书)罗切斯特大学毕业证成绩单原版一比一
办理(UofR毕业证书)罗切斯特大学毕业证成绩单原版一比一z xss
 
定制(Lincoln毕业证书)新西兰林肯大学毕业证成绩单原版一比一
定制(Lincoln毕业证书)新西兰林肯大学毕业证成绩单原版一比一定制(Lincoln毕业证书)新西兰林肯大学毕业证成绩单原版一比一
定制(Lincoln毕业证书)新西兰林肯大学毕业证成绩单原版一比一Fs
 
Call Girls In The Ocean Pearl Retreat Hotel New Delhi 9873777170
Call Girls In The Ocean Pearl Retreat Hotel New Delhi 9873777170Call Girls In The Ocean Pearl Retreat Hotel New Delhi 9873777170
Call Girls In The Ocean Pearl Retreat Hotel New Delhi 9873777170Sonam Pathan
 
Blepharitis inflammation of eyelid symptoms cause everything included along w...
Blepharitis inflammation of eyelid symptoms cause everything included along w...Blepharitis inflammation of eyelid symptoms cause everything included along w...
Blepharitis inflammation of eyelid symptoms cause everything included along w...Excelmac1
 
Magic exist by Marta Loveguard - presentation.pptx
Magic exist by Marta Loveguard - presentation.pptxMagic exist by Marta Loveguard - presentation.pptx
Magic exist by Marta Loveguard - presentation.pptxMartaLoveguard
 
A Good Girl's Guide to Murder (A Good Girl's Guide to Murder, #1)
A Good Girl's Guide to Murder (A Good Girl's Guide to Murder, #1)A Good Girl's Guide to Murder (A Good Girl's Guide to Murder, #1)
A Good Girl's Guide to Murder (A Good Girl's Guide to Murder, #1)Christopher H Felton
 
Packaging the Monolith - PHP Tek 2024 (Breaking it down one bite at a time)
Packaging the Monolith - PHP Tek 2024 (Breaking it down one bite at a time)Packaging the Monolith - PHP Tek 2024 (Breaking it down one bite at a time)
Packaging the Monolith - PHP Tek 2024 (Breaking it down one bite at a time)Dana Luther
 
Potsdam FH学位证,波茨坦应用技术大学毕业证书1:1制作
Potsdam FH学位证,波茨坦应用技术大学毕业证书1:1制作Potsdam FH学位证,波茨坦应用技术大学毕业证书1:1制作
Potsdam FH学位证,波茨坦应用技术大学毕业证书1:1制作ys8omjxb
 
Top 10 Interactive Website Design Trends in 2024.pptx
Top 10 Interactive Website Design Trends in 2024.pptxTop 10 Interactive Website Design Trends in 2024.pptx
Top 10 Interactive Website Design Trends in 2024.pptxDyna Gilbert
 
Call Girls in Uttam Nagar Delhi 💯Call Us 🔝8264348440🔝
Call Girls in Uttam Nagar Delhi 💯Call Us 🔝8264348440🔝Call Girls in Uttam Nagar Delhi 💯Call Us 🔝8264348440🔝
Call Girls in Uttam Nagar Delhi 💯Call Us 🔝8264348440🔝soniya singh
 
办理多伦多大学毕业证成绩单|购买加拿大UTSG文凭证书
办理多伦多大学毕业证成绩单|购买加拿大UTSG文凭证书办理多伦多大学毕业证成绩单|购买加拿大UTSG文凭证书
办理多伦多大学毕业证成绩单|购买加拿大UTSG文凭证书zdzoqco
 
PHP-based rendering of TYPO3 Documentation
PHP-based rendering of TYPO3 DocumentationPHP-based rendering of TYPO3 Documentation
PHP-based rendering of TYPO3 DocumentationLinaWolf1
 
Call Girls South Delhi Delhi reach out to us at ☎ 9711199012
Call Girls South Delhi Delhi reach out to us at ☎ 9711199012Call Girls South Delhi Delhi reach out to us at ☎ 9711199012
Call Girls South Delhi Delhi reach out to us at ☎ 9711199012rehmti665
 
Call Girls Near The Suryaa Hotel New Delhi 9873777170
Call Girls Near The Suryaa Hotel New Delhi 9873777170Call Girls Near The Suryaa Hotel New Delhi 9873777170
Call Girls Near The Suryaa Hotel New Delhi 9873777170Sonam Pathan
 
Film cover research (1).pptxsdasdasdasdasdasa
Film cover research (1).pptxsdasdasdasdasdasaFilm cover research (1).pptxsdasdasdasdasdasa
Film cover research (1).pptxsdasdasdasdasdasa494f574xmv
 
定制(UAL学位证)英国伦敦艺术大学毕业证成绩单原版一比一
定制(UAL学位证)英国伦敦艺术大学毕业证成绩单原版一比一定制(UAL学位证)英国伦敦艺术大学毕业证成绩单原版一比一
定制(UAL学位证)英国伦敦艺术大学毕业证成绩单原版一比一Fs
 

Recently uploaded (20)

定制(AUT毕业证书)新西兰奥克兰理工大学毕业证成绩单原版一比一
定制(AUT毕业证书)新西兰奥克兰理工大学毕业证成绩单原版一比一定制(AUT毕业证书)新西兰奥克兰理工大学毕业证成绩单原版一比一
定制(AUT毕业证书)新西兰奥克兰理工大学毕业证成绩单原版一比一
 
办理(UofR毕业证书)罗切斯特大学毕业证成绩单原版一比一
办理(UofR毕业证书)罗切斯特大学毕业证成绩单原版一比一办理(UofR毕业证书)罗切斯特大学毕业证成绩单原版一比一
办理(UofR毕业证书)罗切斯特大学毕业证成绩单原版一比一
 
定制(Lincoln毕业证书)新西兰林肯大学毕业证成绩单原版一比一
定制(Lincoln毕业证书)新西兰林肯大学毕业证成绩单原版一比一定制(Lincoln毕业证书)新西兰林肯大学毕业证成绩单原版一比一
定制(Lincoln毕业证书)新西兰林肯大学毕业证成绩单原版一比一
 
Call Girls In The Ocean Pearl Retreat Hotel New Delhi 9873777170
Call Girls In The Ocean Pearl Retreat Hotel New Delhi 9873777170Call Girls In The Ocean Pearl Retreat Hotel New Delhi 9873777170
Call Girls In The Ocean Pearl Retreat Hotel New Delhi 9873777170
 
young call girls in Uttam Nagar🔝 9953056974 🔝 Delhi escort Service
young call girls in Uttam Nagar🔝 9953056974 🔝 Delhi escort Serviceyoung call girls in Uttam Nagar🔝 9953056974 🔝 Delhi escort Service
young call girls in Uttam Nagar🔝 9953056974 🔝 Delhi escort Service
 
Blepharitis inflammation of eyelid symptoms cause everything included along w...
Blepharitis inflammation of eyelid symptoms cause everything included along w...Blepharitis inflammation of eyelid symptoms cause everything included along w...
Blepharitis inflammation of eyelid symptoms cause everything included along w...
 
Magic exist by Marta Loveguard - presentation.pptx
Magic exist by Marta Loveguard - presentation.pptxMagic exist by Marta Loveguard - presentation.pptx
Magic exist by Marta Loveguard - presentation.pptx
 
A Good Girl's Guide to Murder (A Good Girl's Guide to Murder, #1)
A Good Girl's Guide to Murder (A Good Girl's Guide to Murder, #1)A Good Girl's Guide to Murder (A Good Girl's Guide to Murder, #1)
A Good Girl's Guide to Murder (A Good Girl's Guide to Murder, #1)
 
Packaging the Monolith - PHP Tek 2024 (Breaking it down one bite at a time)
Packaging the Monolith - PHP Tek 2024 (Breaking it down one bite at a time)Packaging the Monolith - PHP Tek 2024 (Breaking it down one bite at a time)
Packaging the Monolith - PHP Tek 2024 (Breaking it down one bite at a time)
 
Potsdam FH学位证,波茨坦应用技术大学毕业证书1:1制作
Potsdam FH学位证,波茨坦应用技术大学毕业证书1:1制作Potsdam FH学位证,波茨坦应用技术大学毕业证书1:1制作
Potsdam FH学位证,波茨坦应用技术大学毕业证书1:1制作
 
Top 10 Interactive Website Design Trends in 2024.pptx
Top 10 Interactive Website Design Trends in 2024.pptxTop 10 Interactive Website Design Trends in 2024.pptx
Top 10 Interactive Website Design Trends in 2024.pptx
 
Hot Sexy call girls in Rk Puram 🔝 9953056974 🔝 Delhi escort Service
Hot Sexy call girls in  Rk Puram 🔝 9953056974 🔝 Delhi escort ServiceHot Sexy call girls in  Rk Puram 🔝 9953056974 🔝 Delhi escort Service
Hot Sexy call girls in Rk Puram 🔝 9953056974 🔝 Delhi escort Service
 
Call Girls in Uttam Nagar Delhi 💯Call Us 🔝8264348440🔝
Call Girls in Uttam Nagar Delhi 💯Call Us 🔝8264348440🔝Call Girls in Uttam Nagar Delhi 💯Call Us 🔝8264348440🔝
Call Girls in Uttam Nagar Delhi 💯Call Us 🔝8264348440🔝
 
办理多伦多大学毕业证成绩单|购买加拿大UTSG文凭证书
办理多伦多大学毕业证成绩单|购买加拿大UTSG文凭证书办理多伦多大学毕业证成绩单|购买加拿大UTSG文凭证书
办理多伦多大学毕业证成绩单|购买加拿大UTSG文凭证书
 
PHP-based rendering of TYPO3 Documentation
PHP-based rendering of TYPO3 DocumentationPHP-based rendering of TYPO3 Documentation
PHP-based rendering of TYPO3 Documentation
 
Call Girls South Delhi Delhi reach out to us at ☎ 9711199012
Call Girls South Delhi Delhi reach out to us at ☎ 9711199012Call Girls South Delhi Delhi reach out to us at ☎ 9711199012
Call Girls South Delhi Delhi reach out to us at ☎ 9711199012
 
Call Girls Near The Suryaa Hotel New Delhi 9873777170
Call Girls Near The Suryaa Hotel New Delhi 9873777170Call Girls Near The Suryaa Hotel New Delhi 9873777170
Call Girls Near The Suryaa Hotel New Delhi 9873777170
 
Model Call Girl in Jamuna Vihar Delhi reach out to us at 🔝9953056974🔝
Model Call Girl in  Jamuna Vihar Delhi reach out to us at 🔝9953056974🔝Model Call Girl in  Jamuna Vihar Delhi reach out to us at 🔝9953056974🔝
Model Call Girl in Jamuna Vihar Delhi reach out to us at 🔝9953056974🔝
 
Film cover research (1).pptxsdasdasdasdasdasa
Film cover research (1).pptxsdasdasdasdasdasaFilm cover research (1).pptxsdasdasdasdasdasa
Film cover research (1).pptxsdasdasdasdasdasa
 
定制(UAL学位证)英国伦敦艺术大学毕业证成绩单原版一比一
定制(UAL学位证)英国伦敦艺术大学毕业证成绩单原版一比一定制(UAL学位证)英国伦敦艺术大学毕业证成绩单原版一比一
定制(UAL学位证)英国伦敦艺术大学毕业证成绩单原版一比一
 

The Modern Developer Toolbox

  • 1. The Modern Developer Toolbox Photo by https://www.flickr.com/photos/zergev/ Pablo Godel @pgodel https://joined.in/11798
  • 2. Hi, I am Pablo.
  • 3. Hi, I am Pablo. ! @pgodel
  • 4.
  • 5. The Modern Developer Toolbox Modern?
  • 6.
  • 7. The Modern Developer Toolbox [root@prod] # vi index.php
  • 8. The Modern Developer Toolbox Never stop ! improving
  • 9. The Modern Developer Toolbox The Toolbox
  • 10. The Modern Developer Toolbox Development environment
  • 11. The Modern Developer Toolbox Development environment ! Testing
  • 12. The Modern Developer Toolbox Development environment ! Testing ! Debugging
  • 13. The Modern Developer Toolbox Development environment ! Testing ! Debugging ! Profiling
  • 14. The Modern Developer Toolbox Development environment ! Testing ! Debugging ! Profiling ! Deployment
  • 15. The Modern Developer Toolbox Development environment ! Testing ! Debugging ! Profiling ! Deployment ! Logging
  • 16. The Modern Developer Toolbox Development environment ! Testing ! Debugging ! Profiling ! Deployment ! Logging ! Monitoring
  • 17. The Modern Developer Toolbox Development Environment
  • 18. Development Environment Everything starts with a great development environment
  • 20. The Development Modern Developer Environment Toolbox Rule #1
  • 21. The Development Modern Developer Environment Toolbox Rule #1: Stay close to Production
  • 22. The Development Modern Developer Environment Toolbox Rule #2
  • 23. The Development Modern Developer Environment Toolbox Rule #2: Ditch Windows
  • 24. The Development Modern Developer Environment Toolbox Rule #3
  • 25. The Development Modern Developer Environment Toolbox Rule #3: Don’t forget Rule #2
  • 26. ThDe eMvoeldoeprmn eDnetv Eenlovpireorn Tmooelnbtox
  • 27. The Development Modern Developer Environment Toolbox Automate your setup
  • 28. The Development Modern Developer Environment Toolbox Automate your setup ! #1 Store your dot-files in Git/GitHub
  • 29. The Development Modern Developer Environment Toolbox Dot files .profile / .bash_profile / .bashrc .gitconfig .gitignores .ssh/config https://github.com/pgodel/dotfiles https://github.com/everzet/dotfiles
  • 30. The Development Modern Developer Environment Toolbox Automate your setup ! #2 Automate your software installation
  • 31. The Development Modern Developer Environment Toolbox Homebrew! ! • hhvm • wget • git • tmux • ssh-copy-id • brew-cask • ansible
  • 32. The Modern Developer Toolbox Even .dmg’s! ! $ brew cask install … ! Development Environment • google-chrome • vagrant • virtualbox • iterm2 • alfred • phpstorm ! https://github.com/caskroom/homebrew-cask
  • 33. The Development Modern Developer Environment Toolbox Installing PHP Run Linux natively / locally ! • REMI repo for CentOS • PPAs for Ubuntu / Debian
  • 34. The Development Modern Developer Environment Toolbox Installing PHP Run Linux on VPS / remote ! • REMI repo for CentOS • PPAs for Ubuntu / Debian
  • 35. The Development Modern Developer Environment Toolbox Installing PHP Mac OSX ! • MAMP • Liip PHP installer
  • 36. The Development Modern Developer Environment Toolbox Installing PHP Virtual Machine • VirtualBox / Parallels / VMware • Vagrant • Docker
  • 37. The Development Modern Developer Environment Toolbox PHARS! ! • Composer • PHPUnit • behat • WP-CLI • versionscan
  • 38. The Development Modern Developer Environment Toolbox Vagrant! ! • PuPHPet • Phansible
  • 39. ThDe eMvoeldoeprmn eDnetv Eenlovpireorn Tmooelnbtox Vagrant Host Vagrant VM VM VM Web DB Server Server App Server
  • 40. ThDe eMvoeldoeprmn eDnetv Eenlovpireorn Tmooelnbtox Docker Host Docker client C VM Web Server C C DB Server App Server
  • 41. ThDe eMvoeldoeprmn eDnetv Eenlovpireorn Tmooelnbtox Docker Host Docker client C VM Web Server C C DB Server App Server
  • 42. ThDe eMvoeldoeprmn eDnetv Eenlovpireorn Tmooelnbtox Docker Host Docker client C VM Web Server C C DB Server App Server
  • 43. ThDe eMvoeldoeprmn eDnetv Eenlovpireorn Tmooelnbtox Docker Host Docker client C VM Web Server C C DB Server App Server Host C VM Web Server C C DB Server App Server
  • 44. ThDe eMvoeldoeprmn eDnetv Eenlovpireorn Tmooelnbtox Docker Host Docker client C VM Web Server C C DB Server App Server Host C VM Web Server Host C C DB Server C C App Server C Web Server DB Server App Server Docker Kernel
  • 45. The Development Modern Developer Environment Toolbox $ ansible-playbook -i inventories/dev playbook.yml -v -K https://github.com/pgodel/ansible-local-dev
  • 46. The Development Modern Developer Environment Toolbox Use the right Editor/IDE for you
  • 47. The Development Modern Developer Environment Toolbox Choose the right Editor/IDE for you! ! • PHPStorm • Zend Studio • TextMate • Vim
  • 48. The Development Modern Developer Environment Toolbox Choose the right Editor/IDE for you! ! • PHPStorm! • Zend Studio • TextMate • Vim
  • 49. The Development Modern Developer Environment Toolbox Choose the right Editor/IDE for you! ! • PHPStorm! • Fast • Syntax highlighting with PHP 5.6 • Git diffs and other actions • Breakpoints • and much more! ! !
  • 50. Development Environment Setting up SSH $ ssh-keygen -t dsa ~/.ssh/id_dsa.pub ! $ ssh-copy-id user@remote-host ~/.ssh/authorized_keys ~/.ssh/authorized_keys2 ! $ ssh-add
  • 51. Development Environment Setting up SSH ~/.ssh/config Host * ForwardAgent yes Port 22123 ! Host gh HostName github.com Port 22 PreferredAuthentications publickey IdentityFile ~/.ssh/me_rsa
  • 52. Development Environment Virtual Document Root UseCanonicalName Off ! VirtualDocumentRoot /var/www/vhosts/%0/web ! <Location /var/www/vhosts> AllowOverride All Options +FollowSymLinks </Location> example.com => /var/www/vhosts/example.com/web example2.com => /var/www/vhosts/example2.com/web
  • 53. The Modern Developer Toolbox Testing
  • 54. Testing ! ! • Unit testing with PHPUnit
  • 55. Testing ! ! • Unit testing with PHPUnit • BDD with Behat
  • 56. Testing ! ! • Unit testing with PHPUnit • BDD with Behat • Git hooks + php -l
  • 57. Testing ! ! • Unit testing with PHPUnit • BDD with Behat • Git hooks + php -l • Jenkins
  • 58. Testing ! ! • Unit testing with PHPUnit • BDD with Behat • Git hooks + php -l • Jenkins • Travis CI !
  • 59. Testing ! ! • Unit testing with PHPUnit • BDD with Behat • Git hooks + php -l • Jenkins • Travis CI • JoliCI
  • 60. ! ! Testing • phpmd / PHP Depend • PhpMetrics • SensioLabs Insight • Scrutinizer
  • 61. The Modern Developer Toolbox Debugging
  • 63. LadyBug <?php $var = array( array( Debugging 'name' => 'Raul', 'age' => 29 ), array( 'name' => 'John', 'age' => 27 ) ); ! ladybug_dump($var)
  • 65. Debugging XDebug + PHPStorm
  • 66. The Development Modern Developer Environment Toolbox Debug CLI commands with PHPStorm ! PRO TIP $ export XDEBUG_CONFIG=“idekey=PHPSTORM"
  • 68. Debugging Zend Studio + Zend Server + Z-Ray
  • 69. The Modern Developer Toolbox Profiling
  • 70. Profiling ! ! XDebug
  • 71. Profiling ! ! XHProf + XHProf.io
  • 72. Profiling ! Commercial options ! • Zend Server • SensioLabs Profiler (coming soon)
  • 73. The Modern Developer Toolbox Deployment
  • 74. Deployment • Capistrano (Ruby) / Capifony • Fabric (Python) • Idephix (PHP) • Magellanes (PHP) • Deployer (PHP) • Laravel / envoy (PHP) • Rocketeer (PHP) • Ansible (YAML)
  • 76. Deployment ! ! • Define hosts
  • 77. Deployment ! ! • Define hosts • Define tasks / actions
  • 78. Deployment ! ! • Define hosts • Define tasks / actions • Run process
  • 79. Deployment ! ! • Define hosts • Define tasks / actions • Run process • Safe operation
  • 80. Deployment ! ! • Define hosts • Define tasks / actions • Run process • Safe operation • Migrations
  • 81. Deployment ! ! • Define hosts • Define tasks / actions • Run process • Safe operation • Migrations • Rollbacks
  • 83. Deployment with Ansible ! ! Define hosts [webservers] foo.example.com bar.example.com www[01:50].example.com ! [dbservers] one.example.com two.example.com three.example.com
  • 84. Deployment with Ansible ! ! Define tasks / actions --- - hosts: webservers vars: http_port: 80 max_clients: 200 remote_user: root tasks: - name: ensure apache is at the latest version yum: pkg=httpd state=latest - name: write the apache config file template: src=/srv/httpd.j2 dest=/etc/httpd.conf notify: - restart apache - name: ensure apache is running
  • 85. Deployment with Ansible ! ! Define tasks / actions - hosts: webservers roles: - { role: servergrove.symfony2, symfony2_project_root: /var/www/vhosts/ example.com/, symfony2_project_name: demo, symfony2_project_branch: master , symfony2_project_release: 1 }
  • 86. Deployment with Ansible ! ! Run process $ ansible-playbook -i inventories/servers playbook.yml -v
  • 87. Deployment with Ansible ! ! Run process
  • 88. Deployment Effing Package Management Build packages for multiple platforms (deb, rpm, etc) with great ease and sanity. fpm -s dir -t rpm -n "webapp" -v 1.0 /var/www/webapp ! fpm -s dir -t deb -a all -n webapp -v 1.0 /etc/apache2/ conf.d/my.conf /var/www/webapp https://github.com/jordansissel/fpm
  • 89. The Modern Developer Toolbox Logging
  • 90. Logging tail -f /var/log/*
  • 91. Logging tail -f /var/log/* | grep “Fatal error”
  • 92. Logging Logstash + ElasticSearch + Kibana App / Logstash App / Logstash App / Logstash Redis Logstash filter/processor ElasticSearch Kibana
  • 93. Monolog Logging use MonologLogger; use MonologHandlerStreamHandler; ! // create a log channel $log = new Logger('name'); $log->pushHandler(new StreamHandler('path/to/your.log', Logger::WARNING)); ! // add records to the log $log->addWarning('Foo'); $log->addError('Bar');
  • 94. Logging Monolog ! • Rotates logs • Syslog / AMQP • Email / Chat servers • Redis / MongoDB / ElasticSearch • NullHandler • FingersCrossedHandler
  • 95. Logstash Logging input { file { path => “/var/log/apache2/access_log” } } output { elasticsearch { host => localhost } }
  • 97. The Modern Developer Toolbox Monitoring
  • 99. Monitoring StatsD + Graphite + Grafana App App App StatsD Graphite Grafana
  • 100. Monitoring StatsD + liuggio/statsd-php-client $ composer require liuggio/statsd-php-client:dev-master
  • 101. Monitoring StatsD + liuggio/statsd-php-client $sender = new SocketSender(/*'localhost', 8126, 'udp'*/); ! $client = new StatsdClient($sender); $factory = new StatsdDataFactory('LiuggioStatsdClientEntityStatsdData'); ! // create the data with the factory $data[] = $factory->timing('usageTime', 100); $data[] = $factory->increment('visitor'); $data[] = $factory->decrement('click'); $data[] = $factory->gauge('gaugor', 333); $data[] = $factory->set('uniques', 765); ! // send the data as array or directly as object $client->send($data);
  • 102. Monitoring StatsD + liuggio/statsd-php-client $data[] = $factory->timing('usageTime', 100);! ! // send the data as array or directly as object $client->send($data);
  • 103. Monitoring StatsD + liuggio/statsd-php-client $data[] = $factory->increment('visitor');! ! // send the data as array or directly as object $client->send($data);
  • 104. Monitoring StatsD + liuggio/statsd-php-client $data[] = $factory->decrement('click');! ! // send the data as array or directly as object $client->send($data);
  • 105. Monitoring StatsD + liuggio/statsd-php-client $data[] = $factory->gauge('gaugor', 333);! ! // send the data as array or directly as object $client->send($data);
  • 109. Monitoring Apache Requests <Location /server-status> SetHandler server-status Order deny,allow Deny from all Allow from .your_domain.com </Location> ! ExtendedStatus On
  • 111. Monitoring CPU / Memory / IO top
  • 113. The Modern Developer Toolbox https://www.flickr.com/photos/jaquiza
  • 114. The Modern Developer Toolbox Questions!
  • 115. The Modern Developer Toolbox ! ! ! Thank you! ! Rate me please! ! ! https://joind.in/11798 http://slideshare.net/pgodel @pgodel