115
The Modern Developer Toolbox Pablo Godel @pgodel https://joined.in/11798 Photo by https://www.flickr.com/photos/zergev/

The Modern Developer Toolbox

Embed Size (px)

DESCRIPTION

In recent years there has been a tremendous amount of progress and innovation around tools and applications available to web developers that improve the quality, efficiency and speed of our applications, and it is hard to keep up with all of it.

Citation preview

Page 1: The Modern Developer Toolbox

The Modern Developer Toolbox

Pablo Godel @pgodel https://joined.in/11798

Photo by https://www.flickr.com/photos/zergev/

Page 2: The Modern Developer Toolbox

Hi, I am Pablo.

Page 3: The Modern Developer Toolbox

Hi, I am Pablo. !

@pgodel

Page 4: The Modern Developer Toolbox
Page 5: The Modern Developer Toolbox

The Modern Developer Toolbox

Modern?

Page 6: The Modern Developer Toolbox
Page 7: The Modern Developer Toolbox

The Modern Developer Toolbox

[root@prod] # vi index.php

Page 8: The Modern Developer Toolbox

The Modern Developer Toolbox

Never stop !improving

Page 9: The Modern Developer Toolbox

The Modern Developer Toolbox

The Toolbox

Page 10: The Modern Developer Toolbox

The Modern Developer Toolbox

Development environment

Page 11: The Modern Developer Toolbox

The Modern Developer Toolbox

Development environment !

Testing

Page 12: The Modern Developer Toolbox

The Modern Developer Toolbox

Development environment !

Testing !

Debugging

Page 13: The Modern Developer Toolbox

The Modern Developer Toolbox

Development environment !

Testing !

Debugging !

Profiling

Page 14: The Modern Developer Toolbox

The Modern Developer Toolbox

Development environment !

Testing !

Debugging !

Profiling !

Deployment

Page 15: The Modern Developer Toolbox

The Modern Developer Toolbox

Development environment !

Testing !

Debugging !

Profiling !

Deployment !

Logging

Page 16: The Modern Developer Toolbox

The Modern Developer Toolbox

Development environment !

Testing !

Debugging !

Profiling !

Deployment !

Logging !

Monitoring

Page 17: The Modern Developer Toolbox

The Modern Developer Toolbox

Development Environment

Page 18: The Modern Developer Toolbox

Development Environment

Everything starts with a great development environment

Page 19: The Modern Developer Toolbox

Choosing an OS

Development Environment

Page 20: The Modern Developer Toolbox

The Modern Developer Toolbox

Rule #1

Development Environment

Page 21: The Modern Developer Toolbox

The Modern Developer Toolbox

Rule #1: Stay close to Production

Development Environment

Page 22: The Modern Developer Toolbox

The Modern Developer Toolbox

Rule #2

Development Environment

Page 23: The Modern Developer Toolbox

The Modern Developer Toolbox

Rule #2: Ditch Windows

Development Environment

Page 24: The Modern Developer Toolbox

The Modern Developer Toolbox

Rule #3

Development Environment

Page 25: The Modern Developer Toolbox

The Modern Developer Toolbox

Rule #3: Don’t forget Rule #2

Development Environment

Page 26: The Modern Developer Toolbox

The Modern Developer ToolboxDevelopment Environment

Page 27: The Modern Developer Toolbox

The Modern Developer Toolbox

Automate your setup

Development Environment

Page 28: The Modern Developer Toolbox

The Modern Developer Toolbox

Automate your setup !

#1 Store your dot-files in Git/GitHub

Development Environment

Page 29: The Modern Developer Toolbox

The Modern Developer Toolbox

https://github.com/pgodel/dotfiles

Dot files .profile / .bash_profile / .bashrc .gitconfig .gitignores.ssh/config

https://github.com/everzet/dotfiles

Development Environment

Page 30: The Modern Developer Toolbox

The Modern Developer Toolbox

Automate your setup !

#2 Automate your software installation

Development Environment

Page 31: The Modern Developer Toolbox

The Modern Developer Toolbox

Homebrew!!

• hhvm • wget • git • tmux • ssh-copy-id • brew-cask • ansible

Development Environment

Page 32: The Modern Developer Toolbox

The Modern Developer Toolbox

Even .dmg’s! !

!

• google-chrome • vagrant • virtualbox • iterm2 • alfred • phpstorm

Development Environment

$ brew cask install …

!https://github.com/caskroom/homebrew-cask

Page 33: The Modern Developer Toolbox

The Modern Developer Toolbox

Run Linux natively / locally !

• REMI repo for CentOS • PPAs for Ubuntu / Debian

Development Environment

Installing PHP

Page 34: The Modern Developer Toolbox

The Modern Developer Toolbox

Run Linux on VPS / remote !

• REMI repo for CentOS • PPAs for Ubuntu / Debian

Development Environment

Installing PHP

Page 35: The Modern Developer Toolbox

The Modern Developer Toolbox

Mac OSX !

• MAMP • Liip PHP installer

Development Environment

Installing PHP

Page 36: The Modern Developer Toolbox

The Modern Developer Toolbox

Virtual Machine • VirtualBox / Parallels / VMware • Vagrant • Docker

Development Environment

Installing PHP

Page 37: The Modern Developer Toolbox

The Modern Developer Toolbox

PHARS!!

• Composer • PHPUnit • behat • WP-CLI • versionscan

Development Environment

Page 38: The Modern Developer Toolbox

The Modern Developer Toolbox

Vagrant!!

• PuPHPet • Phansible

Development Environment

Page 39: The Modern Developer Toolbox

The Modern Developer ToolboxDevelopment Environment

VagrantHost

Vagrant

VM VM VM

Web Server

DB Server

App Server

Page 40: The Modern Developer Toolbox

The Modern Developer ToolboxDevelopment Environment

DockerHost

Docker client

CVM

Web Server

DB Server

App Server

C C

Page 41: The Modern Developer Toolbox

The Modern Developer ToolboxDevelopment Environment

DockerHost

Docker client

C

VM

Web Server

DB Server

App Server

C C

Page 42: The Modern Developer Toolbox

The Modern Developer ToolboxDevelopment Environment

DockerHost

Docker client

C

VM

Web Server

DB Server

App Server

C C

Page 43: The Modern Developer Toolbox

The Modern Developer ToolboxDevelopment Environment

DockerHost

Docker client

C

VM

Web Server

DB Server

App Server

C C

Host

C

VM

Web Server

DB Server

App Server

C C

Page 44: The Modern Developer Toolbox

The Modern Developer ToolboxDevelopment Environment

DockerHost

Docker client

C

VM

Web Server

DB Server

App Server

C C

Host

C

VM

Web Server

DB Server

App Server

C C

Host

C

Web Server

DB Server

App Server

C C

Docker Kernel

Page 45: The Modern Developer Toolbox

The Modern Developer Toolbox

$ ansible-playbook -i inventories/dev \ playbook.yml -v -K

https://github.com/pgodel/ansible-local-dev

Development Environment

Page 46: The Modern Developer Toolbox

The Modern Developer Toolbox

Use the right Editor/IDE for you

Development Environment

Page 47: The Modern Developer Toolbox

The Modern Developer Toolbox

Choose the right Editor/IDE for you!!

• PHPStorm • Zend Studio • TextMate • Vim

Development Environment

Page 48: The Modern Developer Toolbox

The Modern Developer Toolbox

Choose the right Editor/IDE for you!!

• PHPStorm!• Zend Studio • TextMate • Vim

Development Environment

Page 49: The Modern Developer Toolbox

The Modern Developer 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

Page 50: The Modern Developer Toolbox

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

Page 51: The Modern Developer Toolbox

Host * ForwardAgent yes Port 22123 !

Host gh HostName github.com Port 22 PreferredAuthentications publickey IdentityFile ~/.ssh/me_rsa

Development Environment

Setting up SSH

~/.ssh/config

Page 52: The Modern Developer Toolbox

Virtual Document RootUseCanonicalName Off !VirtualDocumentRoot /var/www/vhosts/%0/web !<Location /var/www/vhosts> AllowOverride All Options +FollowSymLinks </Location>

example.com => /var/www/vhosts/example.com/webexample2.com => /var/www/vhosts/example2.com/web

Development Environment

Page 53: The Modern Developer Toolbox

The Modern Developer Toolbox

Testing

Page 54: The Modern Developer Toolbox

Testing!

!

• Unit testing with PHPUnit

Page 55: The Modern Developer Toolbox

Testing!

!

• Unit testing with PHPUnit • BDD with Behat

Page 56: The Modern Developer Toolbox

Testing!

!

• Unit testing with PHPUnit • BDD with Behat • Git hooks + php -l

Page 57: The Modern Developer Toolbox

Testing!

!

• Unit testing with PHPUnit • BDD with Behat • Git hooks + php -l • Jenkins

Page 58: The Modern Developer Toolbox

Testing!

!

• Unit testing with PHPUnit • BDD with Behat • Git hooks + php -l • Jenkins • Travis CI

!

Page 59: The Modern Developer Toolbox

Testing!

!

• Unit testing with PHPUnit • BDD with Behat • Git hooks + php -l • Jenkins • Travis CI • JoliCI

Page 60: The Modern Developer Toolbox

!

!

• phpmd / PHP Depend • PhpMetrics • SensioLabs Insight • Scrutinizer

Testing

Page 61: The Modern Developer Toolbox

The Modern Developer Toolbox

Debugging

Page 62: The Modern Developer Toolbox

print_r($data);

Debugging

Page 63: The Modern Developer Toolbox

LadyBug<?php $var = array( array( 'name' => 'Raul', 'age' => 29 ), array( 'name' => 'John', 'age' => 27 ) ); !ladybug_dump($var)

Debugging

Page 64: The Modern Developer Toolbox

LadyBug

Debugging

Page 65: The Modern Developer Toolbox

XDebug + PHPStorm

Debugging

Page 66: The Modern Developer Toolbox

The Modern Developer Toolbox

Debug CLI commands with PHPStorm !

Development Environment PRO TIP

$ export \ XDEBUG_CONFIG=“idekey=PHPSTORM"

Page 67: The Modern Developer Toolbox

Symfony Developer Toolbar

Debugging

Page 68: The Modern Developer Toolbox

Zend Studio + Zend Server + Z-RayDebugging

Page 69: The Modern Developer Toolbox

The Modern Developer Toolbox

Profiling

Page 70: The Modern Developer Toolbox

Profiling!

!

XDebug

Page 71: The Modern Developer Toolbox

Profiling!

!

XHProf + XHProf.io

Page 72: The Modern Developer Toolbox

Profiling!

Commercial options !

• Zend Server • SensioLabs Profiler (coming soon)

Page 73: The Modern Developer Toolbox

The Modern Developer Toolbox

Deployment

Page 74: The Modern Developer Toolbox

Deployment

• Capistrano (Ruby) / Capifony • Fabric (Python) • Idephix (PHP) • Magellanes (PHP) • Deployer (PHP) • Laravel / envoy (PHP) • Rocketeer (PHP) • Ansible (YAML)

Page 75: The Modern Developer Toolbox

Common steps

Deployment

Page 76: The Modern Developer Toolbox

Deployment!

!

• Define hosts

Page 77: The Modern Developer Toolbox

Deployment!

!

• Define hosts • Define tasks / actions

Page 78: The Modern Developer Toolbox

Deployment!

!

• Define hosts • Define tasks / actions • Run process

Page 79: The Modern Developer Toolbox

Deployment!

!

• Define hosts • Define tasks / actions • Run process • Safe operation

Page 80: The Modern Developer Toolbox

Deployment!

!

• Define hosts • Define tasks / actions • Run process • Safe operation • Migrations

Page 81: The Modern Developer Toolbox

Deployment!

!

• Define hosts • Define tasks / actions • Run process • Safe operation • Migrations • Rollbacks

Page 82: The Modern Developer Toolbox

Deploying with

Deployment

Page 83: The Modern Developer Toolbox

Deployment with Ansible!

!

Define hosts[webservers] foo.example.com bar.example.comwww[01:50].example.com ![dbservers] one.example.com two.example.com three.example.com

Page 84: The Modern Developer Toolbox

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 service: name=httpd state=started

Page 85: The Modern Developer Toolbox

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 }

Page 86: The Modern Developer Toolbox

Deployment with Ansible!

!

Run process

$ ansible-playbook -i inventories/servers \ playbook.yml -v

Page 87: The Modern Developer Toolbox

Deployment with Ansible!

!

Run process

Page 88: The Modern Developer Toolbox

Effing Package Management

https://github.com/jordansissel/fpm

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

Deployment

Page 89: The Modern Developer Toolbox

The Modern Developer Toolbox

Logging

Page 90: The Modern Developer Toolbox

tail -f /var/log/*

Logging

Page 91: The Modern Developer Toolbox

tail -f /var/log/* | grep “Fatal error”

Logging

Page 92: The Modern Developer Toolbox

Logging

App / Logstash

Redis Logstash filter/processor

ElasticSearch Kibana

App / Logstash App / Logstash

Logstash + ElasticSearch + Kibana

Page 93: The Modern Developer Toolbox

Monolog

Logging

use Monolog\Logger; use Monolog\Handler\StreamHandler; !// 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');

Page 94: The Modern Developer Toolbox

Logging

!

• Rotates logs • Syslog / AMQP • Email / Chat servers • Redis / MongoDB / ElasticSearch • NullHandler • FingersCrossedHandler

Monolog

Page 95: The Modern Developer Toolbox

Logstash

Logging

input { file { path => “/var/log/apache2/access_log” } } output { elasticsearch { host => localhost } }

Page 96: The Modern Developer Toolbox

Kibana

Logging

Page 97: The Modern Developer Toolbox

The Modern Developer Toolbox

Monitoring

Page 98: The Modern Developer Toolbox

Monitoring

Measure everything!

Page 99: The Modern Developer Toolbox

Monitoring

App

StatsD Graphite

Grafana

App App

StatsD + Graphite + Grafana

Page 100: The Modern Developer Toolbox

StatsD + liuggio/statsd-php-client

$ composer require liuggio/statsd-php-client:dev-master

Monitoring

Page 101: The Modern Developer Toolbox

$sender = new SocketSender(/*'localhost', 8126, 'udp'*/); !$client = new StatsdClient($sender); $factory = new StatsdDataFactory('\Liuggio\StatsdClient\Entity\StatsdData'); !// 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

Page 102: The Modern Developer Toolbox

$data[] = $factory->timing('usageTime', 100);!!

// send the data as array or directly as object $client->send($data);

Monitoring

StatsD + liuggio/statsd-php-client

Page 103: The Modern Developer Toolbox

$data[] = $factory->increment('visitor');!!

// send the data as array or directly as object $client->send($data);

Monitoring

StatsD + liuggio/statsd-php-client

Page 104: The Modern Developer Toolbox

$data[] = $factory->decrement('click');!!

// send the data as array or directly as object $client->send($data);

Monitoring

StatsD + liuggio/statsd-php-client

Page 105: The Modern Developer Toolbox

$data[] = $factory->gauge('gaugor', 333);!!

// send the data as array or directly as object $client->send($data);

Monitoring

StatsD + liuggio/statsd-php-client

Page 106: The Modern Developer Toolbox

Graphite

Monitoring

Page 107: The Modern Developer Toolbox

Graphite

Monitoring

Page 108: The Modern Developer Toolbox

Grafana

Monitoring

Page 109: The Modern Developer Toolbox

<Location /server-status> SetHandler server-status Order deny,allow Deny from all Allow from .your_domain.com </Location> !ExtendedStatus On

Apache Requests

Monitoring

Page 110: The Modern Developer Toolbox

Apache Requests

Monitoring

Page 111: The Modern Developer Toolbox

MonitoringCPU / Memory / IOtop

Page 112: The Modern Developer Toolbox

Monitoring

IOiotop

Page 113: The Modern Developer Toolbox

The Modern Developer Toolbox

https://www.flickr.com/photos/jaquiza

Page 114: The Modern Developer Toolbox

The Modern Developer Toolbox

Questions!

Page 115: The Modern Developer Toolbox

The Modern Developer Toolbox

!

!

!

!

!

!

https://joind.in/11798 http://slideshare.net/pgodel

@pgodel

Thank you! Rate me please!