Top Banner
Photo by https://www.flickr.com/photos/zergev/ La Caja de Herramientas del Desarrollador Moderno Pablo Godel @pgodel Buenos Aires 08 Nov 2014
123

La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

Jul 02, 2015

Download

Technology

Pablo Godel

En los últimos años ha habido un tremendo progreso e innovación en herramientas y aplicaciones disponibles para que el desarrollador web mejore la calidad, eficiencia y velocidad de sus aplicaciones. Es difícil estar al tanto de todas estas actualizaciones.

En esta charla introduciremos y exploraremos las herramientas que marcan una real diferencia en las siguientes áreas:
Desarrollo, testeo y debugging con Vagrant, Ansible, y Docker
Monitoreo y logging con Logstash, Kibana, Redis, y Elasticsearch
Deployment con Capistrano, Capifony y similares
Todas estas herramientas, además de consejos y trucos aprendidos a lo largo de años de experiencia harán de esta charla muy interesante para desarrolladores de diversos niveles.
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

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

La Caja de Herramientas !del Desarrollador Moderno

Pablo Godel @pgodel

Buenos Aires 08 Nov 2014

Page 2: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

Hola, soy Pablo.

Page 3: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

Hola, soy Pablo. !

@pgodel

Page 4: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR
Page 5: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

A GUIDING LIGHT FOR STUDENT SUCCESS

Page 6: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

We are Hiring!

A GUIDING LIGHT FOR STUDENT SUCCESS

Page 7: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

La Caja de Herramientas Moderna

Moderno?

Page 8: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR
Page 9: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

[root@prod] # vi index.php

La Caja de Herramientas Moderna

Page 10: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

Nunca dejes !de mejorar

La Caja de Herramientas Moderna

Page 11: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

La Caja de Herramientas

La Caja de Herramientas Moderna

Page 12: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

Entorno de Desarrollo

La Caja de Herramientas Moderna

Page 13: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

Entorno de Desarrollo !

Testing

La Caja de Herramientas Moderna

Page 14: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

Entorno de Desarrollo !

Testing !

Debugging

La Caja de Herramientas Moderna

Page 15: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

Entorno de Desarrollo !

Testing !

Debugging !

Profiling

La Caja de Herramientas Moderna

Page 16: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

Entorno de Desarrollo !

Testing !

Debugging !

Profiling !

Deployment

La Caja de Herramientas Moderna

Page 17: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

Entorno de Desarrollo !

Testing !

Debugging !

Profiling !

Deployment !

Logging

La Caja de Herramientas Moderna

Page 18: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

Entorno de Desarrollo !

Testing !

Debugging !

Profiling !

Deployment !

Logging !

Monitoring

La Caja de Herramientas Moderna

Page 19: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

Entorno de Desarrollo

La Caja de Herramientas Moderna

Page 20: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

Entorno de Desarrollo

Todo empieza con un entorno de desarrollo sólido

Page 21: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

Eligiendo un OS

Entorno de Desarrollo

Page 22: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

Regla #1

Entorno de Desarrollo

Page 23: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

Regla #1: Trabajá “cerca” de Producción

Entorno de Desarrollo

Page 24: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

Regla #2

Entorno de Desarrollo

Page 25: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

Regla #2: Dejá Windows

Entorno de Desarrollo

Page 26: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

Regla #3

Entorno de Desarrollo

Page 27: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

Regla #3: No te olvides de la Regla #2

Entorno de Desarrollo

Page 28: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

Entorno de Desarrollo

Page 29: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

Automatizá tu configuración

Entorno de Desarrollo

Page 30: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

Automatizá tu configuración !

#1 Guardá tus “dot-files” en Git/GitHub

Entorno de Desarrollo

Page 31: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

https://github.com/pgodel/dotfiles

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

https://github.com/everzet/dotfiles

Entorno de Desarrollo

Page 32: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

Automatizá tu configuración !

#2 Automatizá la instalación de tu software

Entorno de Desarrollo

Page 33: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

Homebrew!!

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

Entorno de Desarrollo

Page 34: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

Incluso .dmg’s! !

!

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

$ brew cask install …

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

Entorno de Desarrollo

Page 35: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

Corré Linux nativa o localmente !

• REMI repo para CentOS • PPAs para Ubuntu / Debian

Instalando PHP

Entorno de Desarrollo

Page 36: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

Corré Linux en VPS ó servidor remoto !

• REMI repo para CentOS • PPAs para Ubuntu / Debian

Entorno de Desarrollo

Instalando PHP

Page 37: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

Mac OSX !

• MAMP • Instalador de PHP de Liip

Entorno de Desarrollo

Instalando PHP

http://php-osx.liip.ch/

Page 38: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

Máquina Virtual • VirtualBox / Parallels / VMware • Vagrant • Docker

Entorno de Desarrollo

Instalando PHP

Page 39: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

Entorno de Desarrollo

Instalando PHP

$ php -S localhost:8080

Page 40: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

PHARS!!

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

Entorno de Desarrollo

Page 41: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

Vagrant!!

• PuPHPet • Phansible

Entorno de Desarrollo

Page 42: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

VagrantHost

Vagrant

VM VM VM

Web Server

DB Server

App Server

Entorno de Desarrollo

Page 43: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

Entorno de Desarrollo

Page 44: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

DockerHost

Docker client

CVM

Web Server

DB Server

App Server

C C

Entorno de Desarrollo

Page 45: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

DockerHost

Docker client

C

VM

Web Server

DB Server

App Server

C C

Entorno de Desarrollo

Page 46: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

DockerHost

Docker client

C

VM

Web Server

DB Server

App Server

C C

Entorno de Desarrollo

Page 47: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

DockerHost

Docker client

C

VM

Web Server

DB Server

App Server

C C

Host

C

VM

Web Server

DB Server

App Server

C C

Entorno de Desarrollo

Page 48: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

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

Entorno de Desarrollo

Page 49: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR
Page 50: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

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

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

Entorno de Desarrollo

Page 51: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

Usá el Editor/IDE correcto para vos

Entorno de Desarrollo

Page 52: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

Entorno de Desarrollo

Usá el Editor/IDE correcto para vos!!

• PHPStorm • Zend Studio • TextMate • Vim

Page 53: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

Usá el Editor/IDE correcto para vos!!

• PHPStorm!• Zend Studio • TextMate • Vim

Entorno de Desarrollo

Page 54: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

Usá el Editor/IDE correcto para vos!!

• PHPStorm!• Rápido • Syntax highlighting para PHP 5.6 • Diffs de Git y otras acciones • Breakpoints • y mucho más!

!

!

Entorno de Desarrollo

Page 55: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

Configurando SSH

$ ssh-keygen -t dsa ~/.ssh/id_dsa.pub !

$ ssh-copy-id user@remote-host ~/.ssh/authorized_keys ~/.ssh/authorized_keys2 !

$ ssh-add

Entorno de Desarrollo

Page 56: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

Host * ForwardAgent yes Port 22123 !

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

~/.ssh/config

Entorno de Desarrollo

Configurando SSH

Page 57: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

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

Entorno de Desarrollo

Page 58: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

DNSmasq

$ brew install dnsmasq !… !# Editar /usr/local/etc/dnsmasq.conf !address=/dev/127.0.0.1

app-1.dev => /var/www/vhosts/app-1.dev/webapp-22.dev => /var/www/vhosts/app-22.dev/web

Entorno de Desarrollo

Page 59: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

Testing

La Caja de Herramientas Moderna

Page 60: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

Testing!

!

• Unit testing con PHPUnit

Page 61: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

Testing!

!

• Unit testing con PHPUnit • BDD con Behat

Page 62: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

Testing!

!

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

Page 63: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

Testing!

!

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

Page 64: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

Testing!

!

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

!

Page 65: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

Testing!

!

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

Page 66: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

Testing!

!

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

Page 67: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

!

!

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

Testing

Page 68: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

Debugging

La Caja de Herramientas Moderna

Page 69: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

print_r($data);

Debugging

Page 70: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

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

Debugging

Page 71: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

LadyBug

Debugging

Page 72: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

XDebug + PHPStorm

Debugging

Page 73: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

The Modern Developer Toolbox

Debug de comandos CLI con PHPStorm !

Debugging PRO TIP

$ export \ XDEBUG_CONFIG=“idekey=PHPSTORM"

Page 74: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

Symfony Developer Toolbar

Debugging

Page 75: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

Zend Studio + Zend Server + Z-RayDebugging

Page 76: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

Profiling

La Caja de Herramientas Moderna

Page 77: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

Profiling!

!

XDebug

Page 78: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

Profiling!

!

XHProf + XHProf.io

Page 79: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

Profiling!

Opciones comerciales !

• Zend Server • Blackfire.io (SensioLabs Profiler)

Page 80: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

Deployment

La Caja de Herramientas Moderna

Page 81: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

Deployment

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

Page 82: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

Pasos comunes

Deployment

Page 83: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

Deployment!

!

• Definí los hosts

Page 84: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

Deployment!

!

• Definí los hosts • Definí tasks / acciones

Page 85: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

Deployment!

!

• Definí los hosts • Definí tasks / acciones • Ejecuta el proceso

Page 86: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

Deployment!

!

• Definí los hosts • Definí tasks / acciones • Ejecuta el proceso

• Operación confiable

Page 87: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

Deployment!

!

• Definí los hosts • Definí tasks / acciones • Ejecuta el proceso

• Operación confiable • Migraciones

Page 88: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

Deployment!

!

• Definí los hosts • Definí tasks / acciones • Ejecuta el proceso

• Operación confiable • Migraciones • Rollbacks

Page 89: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

Deployment con

Deployment

Page 90: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

Deployment con Ansible!

!

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

Page 91: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

!

!

Definí tasks / acciones--- - 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

Deployment con Ansible

Page 92: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

- 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 }

!

!

Definí tasks / acciones

Deployment con Ansible

Page 93: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

!

!

Ejecutá el proceso

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

Deployment con Ansible

Page 94: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

Deployment con Ansible!

!

Ejecutá el proceso

Page 95: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

Effing Package Management

https://github.com/jordansissel/fpm

Armá paquetes para múltiples plataformas (deb, rpm, etc) sin volverte loco.

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 96: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

Logging

La Caja de Herramientas Moderna

Page 97: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

Monolog

Logging

use Monolog\Logger; use Monolog\Handler\StreamHandler; !// crear canal de log $log = new Logger('name'); $log->pushHandler(new StreamHandler('path/to/your.log', Logger::WARNING)); !// Agregar registros al log $log->addWarning('Foo'); $log->addError('Bar');

Page 98: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

Logging

!

• Rota los archivos de logs • Syslog / AMQP • Email / Chat servers • Redis / MongoDB / ElasticSearch • NullHandler • FingersCrossedHandler

Monolog

Page 99: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

tail -f /var/log/apache2/*log

Logging

Page 100: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

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

Logging

Page 101: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

Logging

App / Logstash

Redis Logstash filter/processor

ElasticSearch Kibana

App / Logstash App / Logstash

Logstash + ElasticSearch + Kibana

Page 102: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

Logstash

Logging

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

Page 103: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

Kibana

Logging

Page 104: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

Monitoring

La Caja de Herramientas Moderna

Page 105: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

Monitoring

Medí todo!

Page 106: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

Monitoring

App

StatsD Graphite

Grafana

App App

StatsD + Graphite + Grafana

Page 107: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

StatsD + liuggio/statsd-php-client

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

Monitoring

Page 108: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

$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); !// Enviá los datos como array o objecto $client->send($data);

Monitoring

StatsD + liuggio/statsd-php-client

Page 109: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

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

// Enviá los datos como array o objecto $client->send($data);

Monitoring

StatsD + liuggio/statsd-php-client

Page 110: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

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

// Enviá los datos como array o objecto $client->send($data);

Monitoring

StatsD + liuggio/statsd-php-client

Page 111: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

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

// Enviá los datos como array o objecto $client->send($data);

Monitoring

StatsD + liuggio/statsd-php-client

Page 112: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

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

// Enviá los datos como array o objecto $client->send($data);

Monitoring

StatsD + liuggio/statsd-php-client

Page 113: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

Graphite

Monitoring

Page 114: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

Graphite

Monitoring

Page 115: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

Grafana

Monitoring

Page 116: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

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

Apache Requests

Monitoring

Page 117: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

Apache Requests

Monitoring

Page 118: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

Apache Requests

Monitoring

Page 119: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

MonitoringCPU / Memory / IOtop

Page 120: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

Monitoring

IOiotop

Page 121: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

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

La Caja de Herramientas Moderna

Page 122: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

¡Preguntas!

La Caja de Herramientas Moderna

Page 123: La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR

!

!

!

!

!

http://slideshare.net/pgodel @pgodel

¡Muchas Gracias!

La Caja de Herramientas Moderna