"al rico" php

59
“AL RICO” PHP Cositas que deberíais saber y que probablamente ya sabéis y que en caso contrario deberías saber, porque sino lo sabéis, vais a sufrir... Carlos Buenosvinos (@buenosvinos) Castellón, Universitat Jaume I (decharlas.com) 16 de Mayo de 2010 18:00 - 20:00

Upload: carlos-buenosvinos

Post on 06-May-2015

5.018 views

Category:

Technology


2 download

DESCRIPTION

Presentación sobre ciclo de desarrollo orientado a PHP en la Universitat Jaume I organizada por decharlas.com

TRANSCRIPT

Page 1: "Al rico" PHP

“AL RICO” PHPCositas que deberíais saber y que probablamente

ya sabéis y que en caso contrario deberías saber, porquesino lo sabéis, vais a sufrir...

Carlos Buenosvinos (@buenosvinos)Castellón, Universitat Jaume I (decharlas.com)

16 de Mayo de 201018:00 - 20:00

Page 2: "Al rico" PHP

CARLOS BUENOSVINOSCertified Zend PHP and Zend Framework Engineer

Certified Scrum Master (CSM)PHP Barcelona User Group Cofounder

Scrum Master and Tech Lead at Emagister.com

@[email protected]

Page 3: "Al rico" PHP

REQUISITOS Y CALENTAMIENTOBrazos, Piernas y Vergüenza

Page 4: "Al rico" PHP

PREGUNTILLAS¡Se admiten en cualquier momento!

Page 5: "Al rico" PHP

NIVEL DE SUFRIMIENTO¿Cuál es vuestro nivel de tolerancia al dolor?

Page 6: "Al rico" PHP

BROKEN WINDOW PARADIGMClaaaro, como ya está rota...

Page 7: "Al rico" PHP

TECHNICAL DEBT¡Atención a los intereses!

Page 8: "Al rico" PHP

OBJETIVOS

1.Desarrolladores: Conocer qué se espera de un buen profesional del desarrollo web en PHP.

2.Tech Leads y CTOs: Evaluar el nivel de madurez de vuestro equipo y ciclo de desarrollo.

3.Todos: Descrubir conceptos nuevos que investigar en casa y aplicar en vuestro día a día

4.Yo: Comerme un buen arrocito

Page 9: "Al rico" PHP

CONSEJILLOS DE LA ABUELARemedios, infusiones y cataplasmas

Page 10: "Al rico" PHP

TAGS DE LA CHARLA

• IDE, Coding Standards, Inline Documentation, Control de Versiones, Issue Tracker, Wiki, Metodología, Frameworks, Seguridad, Debugging, Performance, Entornos, Deployment, Search and Indexing (Solr), Logging

Page 11: "Al rico" PHP

¿POR QUÉ?...

Page 12: "Al rico" PHP

CARACTERÍSTICAS (I)

• Lenguaje pensado por y para la Web

• Fácil y Popular

• Hasta en la sopa

• Pragmático

• Time to Market

Page 13: "Al rico" PHP

CARACTERÍSTICAS (II)

• Easy to learn, difficult to master

• Inconsistencia (a mejorar en PHP 6.0)

• Relación con otros lenguajes (Ruby, Python, JAVA, .NET, Perl)

Page 14: "Al rico" PHP

IDEEscribiendo código...

Page 15: "Al rico" PHP

IDE

• ¿Todos los developers el mismo IDE o cada uno el que quiera?

• Existentes: Eclipse PDT, NetBeans, Zend Studio, Komodo, VIM, etc.

• A considerar : Cross referencing, Control de Versiones, Search and Replace potente (+ integraciones con Check Style, Unit Tests, etc.)

• Trucos

• Intentar unificar al máximo el entorno de desarrollo (menos documentación, casos y mejor soporte interno)

• Meter en la WIKI todo lo relacionado con la instalación, configuración, etc.

Page 16: "Al rico" PHP

CODING STANDARDVamos a ver si nos aclaramos todos :)

Page 17: "Al rico" PHP

CODING STANDARDS

• Define reglas de codificación y garantiza la legibilidad del código

• Uno propio vs. uno ya existente (DRW)

• Existentes en PHP (PEAR y Zend Framework)

• Herramientas

• phpcs (PHP Code Sniffer): Analiza el código fuente y genera resultados sobre las violaciones

• Trucos

• Documentarlo en la Wiki y crear un responsable

• Integrarlo como un precommit hook en vuestro VCS

• Integrarlo con vuestro servidor de integración continua para tener informes semanales con la evolución de la violaciones en la codificación y tomar acciones

Page 18: "Al rico" PHP

INLINE DOCUMENTATIONDocumentar es un rollo!

Page 19: "Al rico" PHP

INLINE DOCUMENTATION

• ¿Documentamos el código o no?

• A: “No haría falta documentar si los nombre de los métodos son claros”

• B: “Lo documentamos todo” (type hinting del IDE)

• Herramientas

• phpDoc

• Doxygen

• Trucos

• Política de documentación a la Wiki

• Integrarlo con el servidor de integración continua para tener la documentación actualizada con cada build

• ¡La documentación no está en el Control de Versiones!

Page 20: "Al rico" PHP

CONTROL VERSION SYSTEM¿Qué ha pasado? ¿La has liado parda?

Page 21: "Al rico" PHP

CONTROL VERSION SYSTEM

• SVN, GIT o Mercurial (A poder ser, los dos primeros)

• Herramienta web de visualización (por ejemplo, websvn)

• Evitar las branches tanto como sea posible (no inventéis políticas de branching especiales)

• Trucos

• Utilizar los hooks para realizar acciones interesantes (Vincular commits con tareas en un Bug tracker, php -l, comprobar los errores de conding standard, etc.)

• Uso de “externals”

Page 22: "Al rico" PHP

ISSUE TRACKERQuién hizo qué, cuándo y dónde

Page 23: "Al rico" PHP

ISSUE TRACKER

• Necesitáis un sitio donde gestionar el avance de los proyectos y tener visibilidad del qué, quién y cuándo.

• Opciones

• JIRA (Atención con la versión “starter” - 60 $ - Todos los productos hasta 10 usuarios)

• Redmine, Mantis, Trac, Bugzilla, etc.

• Trucos

• Buscar soluciones que se integren fácilmente con otros elementos del sistema (Tracker + SVN, Tracker + IDE, etc.)

• Buscar plugins que faciliten el Code Review siempre que sea posible.

Page 24: "Al rico" PHP

WIKI¿Cómo se hace...?

Page 25: "Al rico" PHP

WIKI

• Todas las políticas de Coding Standard, Inline Documentation, Especificaciones, aspectos de arquitectura, cómo pedir las vacaciones, etc.

• Opciones:

• Confluence (hermana de JIRA)

• Twiki, Mediawiki, etc.

• Trucos

• Cread apartados diferentes y asignadles responsable (es una miniresponsabilidad asumible)

• Flexibilidad con los permisos (de menos a más)

Page 26: "Al rico" PHP

METHODOLOGYUno para todos y todos para uno

Page 27: "Al rico" PHP

METHODOLOGY

• “Es mejor una metodología de desarrollo mala que no tener metodología”

• Clasificación

• Pesadas: Waterfall, UP, etc.

• Ágiles: Scrum, XP, etc.

• La tendencia del mercado es utilizar Scrum y los resultados presentan incrementos de productividad entre el 200% y 300%. Algunos ejemplos: Softonic, Emagister, Infojobs, etc.

• Cómo empezar :

• http://www.scrumalliance.org/pages/scrum_student_resources

• “Scrum and XP from the trenches”

Page 28: "Al rico" PHP

PHP FRAMEWORKSHabía una vez, un circo...

Page 29: "Al rico" PHP

PHP FRAMEWORKS

• Agrupan algunos principios fundamentales: DRY, DRW, KISS, etc.

• Ventajas: Desarrollador más competitivo, facilidad de contratación, mejora del tiempo de adaptación, reducción de mantinimiento, etc.

• Opciones: Zend Framework, Symfony, CodeIgniter, CakePHP, etc.

• Trucos

• Usadlos ya! Empezad con nuevos proyectos.

• Migrar componentes sueltos (Base de datos, templates, controladores, mails, etc.)

Page 30: "Al rico" PHP

LIBRARIES & COMPONENTSQue ya existe, que sí, que te lo digo yo...

Page 31: "Al rico" PHP

LIBRARIES & COMPONENTS

• Don’t reinvent the wheel

• Not invented here syndrome

• Extender y participar, no modificar

• Típicos: ORM (Doctrine, Propel), Templates (Smarty, Twig)

• Recomendaciones

• PEAR

• PHP Extensiones

• Github (http://github.com)

Page 32: "Al rico" PHP

SECURITYOhmmm...

Page 33: "Al rico" PHP

SECURITY

• Mantra: “Filter your input, scape your output” + Filter extension enabled

• Problemas típicos (80/20):

• SQL Injection (prepared statements)

• XSS (escapar la salida)

• Recomendaciones:

• “Essential PHP Security” (Chris Shiflett)

• “Guide to PHP Security” (Ilia Alshanetsky)

Page 34: "Al rico" PHP

DEBUGGING & PROFILINGPaso a paso...

Page 35: "Al rico" PHP

DEBUGGING

• Sobre Alt-tab debugging, Echo-debugging

• Recomendaciones:

• Xdebug (http://www.xdebug.org)

• Zend Debugger

• Profiling:

• Xdebug + Visualizador: (KCacheGrind, Webgrind, Xdebugtoolkit)

Page 36: "Al rico" PHP

UNIT TESTSQue te digo yo que funciona...

Page 37: "Al rico" PHP

UNIT TEST

• Una tarea no está acabada sino tiene los unit tests escritos, en verde y con una cobertura de > 80%

• Mantras: “Red, Green, Red, Green”, “Test, Code, Test, Refactor, Test”

• Coupling / Decoupling

• Herramientas

• phpUnit + (Db: commit/rollback | fixtures | DbUnit)

• Recomendaciones:

• Integrar los unit tests con el servidor de integración continua (*)

• La ejecución ha de durar del order de segundos

Page 38: "Al rico" PHP

AUTOMATED TESTSEstá vivo! Está viiiiiiivooooo!!

Page 39: "Al rico" PHP

AUTOMATED TESTS

• Selenium RC + Selenium Grid (http://seleniumhq.org/projects/)

• Dentro del Control de Versiones

• Utilizar el package “Selenium” que hay dentro de phpUnit.

• Vais a necesitar hierro! (Virtualización!)

• Recomendaciones:

• Integrar los tests funcionales con el servidor de integración continua (que los ejecute por la noche)

• Empezad por la funcionalidades críticas de vuestro negocio

Page 40: "Al rico" PHP

CONTINUOUS INTEGRATION5 minutos de ejercicio al día!

Page 41: "Al rico" PHP

CONTINUOUS INTEGRATION

• Opciones:

• Jenkins (antes conocido como Hudson)

• Cruise Control + phpUnderControl

• Xinc

• Recomendaciones

• Respetar el tempo de los jobs (unit tests = segundos, métricas = minutos, etc.)

• Mantener los builds estables lo máximo posible (si el build se rompre, la prioridad es arreglarlo)

Page 42: "Al rico" PHP

METRICSEn ocasiones... veo...

Page 43: "Al rico" PHP

METRICS

• Algunas métricas fáciles de generar y disponer:

• phpmd (Mess detection)

• phpcpd (Copy detection)

• pdepend (Dependencia entre paquetes)

• phpcs (Coding Standards)

• Recomendaciones

• Integrarlo con la herramienta de integración continua y evaluarlo semanalmente para poder tomar acciones al respecto.

Page 44: "Al rico" PHP

PERFORMANCEQue se las pela!

Page 45: "Al rico" PHP

PERFORMANCE

• Cache

• APC + Memcached (Output y Datos)

• Background Processing (Colas)

• Gearman, ActiveMQ, etc.

• Sharding

• Entornos de alta escritura (redes sociales)

• Client Side: CDN + YSlow and PageSpeed Suggestion

Page 46: "Al rico" PHP

DEPLOYMENTVamos que nos vamos...

Page 47: "Al rico" PHP

DEPLOYMENT

• Características de un buen deployment

• Puedo eligir que versión y en qué servidor

• Automático (100%) - Código, CDN, BBDD, etc.

• Menos de 15 min. aprox. para aplicaciones grandes

• Recomendaciones

• Generaos un script de deployment

• Automatizarlo usando “ant” o “phing”

• Capistrano (https://github.com/capistrano)

Page 48: "Al rico" PHP

ENVIRONMENTS¿Dónde estoy?

Page 49: "Al rico" PHP

DEPLOYMENT

• Asegurar que los entornos son lo más parecidos (también dentro del mismo nivel)

• php.ini, extensiones, apaches, usuarios, versiones, etc.

• Combinaciones

• Desarrollo, Test, Producción

• Desarrollo, Test, Acceptance, Producción

• Desarrollo, Test, Acceptance, Producción, Debug

• Recomendaciones

• Virtualización (VMWare Workstation)

• Puppet (https://github.com/puppetlabs/puppet)

Page 50: "Al rico" PHP

LOGGING¿Qué ha pasao’?

Page 51: "Al rico" PHP

DEPLOYMENT

• Utilizad el E_STRICT siempre que sea posible (¿nivel de sufrimiento?)

• No os compliquéis la vida: Syslog

• Logad en asíncrono con time out cortos

• Recomendaciones

• Syslog

• Splunk

Page 52: "Al rico" PHP

SEARCH¿Dónde está Wally?

Page 53: "Al rico" PHP

SEARCH

• ¿Necesitaréis FULL-TEXT searches?

• Soluciones nativas PHP son de bajo rendimiento

• Sphinx

• cliente propio dentro de la documentación

• Solr

• php-solr

• Solarium

Page 54: "Al rico" PHP

EQUIPOEl motor que mueve todas las cosas

Page 55: "Al rico" PHP

EQUIPO

• Formación interna semanal

• “Exigir” certificaciones

• Delegar y hacer que asuman responsabilidades por igual

• Positive thinking (ayudar a los demás)

Page 56: "Al rico" PHP

CONCLUSIONESY para acabar...

Page 57: "Al rico" PHP

CONCLUYENDO

• Estandarización significa que todo sea más sencillo (sobretodo en el largo plazo)

• Innovación significa “momentum”

• Cumplir los basics

• Crecer como empresa, equipo y profesional

Page 58: "Al rico" PHP

PREGUNTILLASÁnimo!

Page 59: "Al rico" PHP

MUCHÍSIMAS GRACIAS

“AL RICO” PHPCositas que deberíais saber y que probablamente

ya sabéis y que en caso contrario deberías saber, porquesino lo sabéis, vais a sufrir...

Carlos Buenosvinos (@buenosvinos)[email protected]

Castellón, Universitat Jaume I (decharlas.com)16 de Mayo de 2010

18:00 - 20:00