Otro de mis pequeños proyectos

Etiqueta: congreso

PHP Conference 2010. Dí­a 2

Y como todo lo bueno siempre se acaba, la PHP Conference 2010 ha dado cerrojazo.

No sin polémica ya que el ganador de la XBOX del sorteo general se llevó también el iPad del sorteo de emagister… la suerte está mal repartida :p (hay que aclarar que el sorteo ha sido legal y a la vista de todos, hay poco que añadir a parte de que la mecánica pueda -posiblemente- cambiarse para el año que viene y unir ambos sorteos).

Y esta fue la elección para el segundo dí­a. Creo que bastante más acertada que el primer dí­a, aunque con alguna decepción:

  • Graphs in the database: RDBMS in the social networks age by Lorenzo Alberton
  • APC & Memcached: the high performance duo by Ilia Alshanetsky
  • Database version control without pain by Harrie Verveer
  • Continuous Improvement in PHP projects by Thorsten Rihnne
  • PHP Team organisation by Damien Seguy

Seguidamente, un resumen de cada una de ellas.

Graphs in the database: RDBMS in the social networks age by Lorenzo Alberton

De nuevo, tras haber ya asistido el año pasado a otra charla magistral, otra interesantí­sima chala de Lorenzo sobre grafos, árboles y bases de datos. Esta vez centrada en dos puntos, las CTE (Common Table Expressions) y Window Functions.

Pese a ser una charla compleja debido a que la presentación se basa en ejemplos SQL y en la teorí­a, Lorenzo realiza un esfuerzo inhumano para hacerlo entendible desde un primer momento. Además, este año mostró ejemplos reales y concretos que todos conocí­amos en la web y que nos destripó a nivel de base de datos.

Tras una breve introducción a los gráficos y sus componentes nos mostró diversas soluciones posibles a la hora de plantear una estructura de árbol en una base de datos a la que seguro que todos nos hemos enfrentado alguna vez. Tras unos consejos básicos de rendimiento y eficiencia y demostrar como realizar cualquier tipo de consulta que abarcara más de un nivel (por ejemplo coger los hijos hasta n niveles), mostró las CTE gracias a WITH (y WITH RECURSIVE). Como si de una función o proceso almacenado se tratase pero viviendo únicamente en el momento de la ejecución, con sus partes bien diferenciadas (inicialización, recursividad y llamada), nos mostró ejemplos desde la clásica sucesión de Fibonacci hasta cómo se pueden encontrar combinaciones de vuelo o transporte mediante varios saltos, los grados de separación en LinkedIn, cómo encontrar los contactos (de camino mí­nimo) entre tú y otra persona o los «quizás conozcas». Todos estos últimos ejemplos usando Transitive Closures.

También nos mostró como a veces técnicas como esta pueden ser un embrollo y un simple INTERSECT puede solucionar el problema de una forma muy sencilla y rápida.

El segundo caso, las Window Functions (SQL-2003) que nos permiten agrupar cierto número de filas que tienen una relación y extraer datos concretos (por ejemplo, una media de salarios por departamento) y usar ese dato para cada fila, pero sin agruparlas ya que perderí­amos cada usuario, es decir, sin usar un GROUP BY. La sintaxis es bastante liosa en un inicio y mucho más potente de lo que a primeras aparenta pero sin duda, gracias a ciertas funciones complementarias, con aplicaciones muy interesantes como poder extraer en una misma petición lo datos completos de venta un dí­a y también agrupados por usuario o los datos agrupados y paginados de los contactos telefónicos.

Por último nos llamó a la reflexión ante qué debe ser bueno ejecutar sobre base de datos y que no ya que se puede ver con los ejemplos como podemos quitar carga de procesado en la parte de aplicación, eliminando conexiones y RTT entre la base de datos y la aplicación, pero que ello conlleva sobrecargar la base de datos.

APC & Memcached: the high performance duo by Ilia Alshanetsky

La charla empezó la charla dando cuál iba a ser el slogan: «Slide motto: not everything has to be real-time». Y lo siguiente en darme cuenta fue que es realmente un crack y que su trepidante velocidad y conocimiento hace que perderte unos segundos escribiendo algo en el portátil puede hacer que te pierdas gran parte de un slide.

La estructura de la charla en mi opinión fue perfecta: breve introducción de las aplicaciones y cómo instalarlas (que estoy seguro que eran conocidas para la amplia mayorí­a de los asistentes) y tras esto, una serie de consejos, buenas prácticas y trucos de cada una de ellas. Eso sí­, yo creo que el oxí­geno se lo inyectaba, porque no creo que le diese tiempo a respirar entre frase y frase, jeje.

En cuanto a APC, lo primero a tener en cuenta es que tenemos el cacheo propio y transparente que hace de los opcodes, con la consecuente mejora de rendimiento que conlleva y que además podemos usar para cachear datos en shared memory. Y lo más importante, lo que se cachea no es el valor, sino el propio opcode. La ventaja de este método es radical ya que si comparamos con un método trandicional de cacheo mediante serialización de datos (aunque sea binario), siempre hay que realizar la propio acción de serialización y deserialización, desmaterializando y materializando los objetos, mientras que APC cachea el propio opcode, el dato en sí­, algo que es mucho más rápido y efectivo.

Otros trucos: cómo saber cuando apc_fetch nos ha devuelto información o no y es gracias a un segundo parámetro que tenemos que pasar por referencia ya que lo que se retorna es el dato y puede ser cualquiera de los valores posibles (null, true, false, array, objeto…) por lo tanto necesitamos un punto de referencia.

Y como consejo muy importante, evitar todo lo posible el borrado de caché: «Don t delete: deleting from cache is expensive as it may need to re-structure internal hash tables». A veces el mejor borrar todos los datos de un usuario que un dato concreto debido a todo el proceso que puede desencadenar.

Como contra, APC es un sistema de cache única y exclusivamente para PHP, nadie más puede usarlo y es local, no distribuí­do, lo que limita su radio de acción.

En cuanto a memcached, lo primero que nos hizo notar fue la necesidad de usar la extensión de Andrei Zmievski y no la otra existente que no lleva d al final ya que la diferencia y mejoras es notable: serialización binaria mediante igbinary, compresión fastlz, interface multiservidor y soporte ante fallos de caí­das.

Con esta extensión, tenemos (entre otras muchas cosas, a destacar):

  • getResultCode() para saber si hemos recuperado un ejemplo o no (comparándolo con MemCached::RES_SUCCESS)
  • podemos asignar y recuperar varios valores simultáneamente con [get|set]Multi()
  • se pueden añadir varios servidores son prioridad o balanceo usando addServers() y el tercer parámetro para cada servidor
  • podemos segmentar información indicando el servidor concreto donde se almacenará (sin dejar que memcached decida) gracias a [add|get|set|delete]ByKey()
  • segmentar varios datos a la vez [add|get|set|delete]MultiByKey()
  • utilizar contadores atómicos increment() y decrement()

Y por último, destacar el hecho de poder pedir datos de forma retardada (delayed fetch) de modo que nuestra aplicación no tenga que esperar, sino que puede hacerlo más tarde, continuando con la ejecución de nuestra aplicación. Lo que hay que tener muy en cuenta es que la información es probable que no venga en orden.

Database version control without pain by Harrie Verveer

Tengo que decir que esta charla me defraudó mucho. Con un tí­tulo tan potente ante un tema que realmente da muchos quebraderos de cabeza, no esperaba que diese el quid que solucionase completamente el problema (algo que parece que sí­ dice el tí­tulo o eso esperábamos todos los presentes), pero sí­ que parecí­a algo importante.

Pero más allá de la realidad, nos dio varias de las herramientas que actualmente existen y que intentan facilitar el trabajo y declarar que el problema es muy importante y hay que llevarlo con cautela. Sí­ que me quedo con una frase que me parece muy importante: «Never modify a patch file once it is version control». Es decir, en caso de que hagas un patch file y tenga un error, no debes corregir ese, sino crear «el patch del patch» que lo solucione.

Estas son las herramientas recomendadas:

En las preguntas finales: el propio ponente declaró que su estrategia es un «homebrew script» aunque otros equipos en su empresa usan DB deploy y parecen estar muy contentos.

Continuous Improvement in PHP projects by Thorsten Rihnne

En esta charla en primer lugar se mostró cómo un código que se mejora constantemente funciona mucho mejor, demostrando además como técnicas ágiles y la integración continua van de la mano. Tras mostrar estos conceptos muy relacionados principalmente con scrum, se mostraron una serie de herramientas desarrolladas en su empresa (o mejoradas) que ayudan a la hora de controlar un proyecto e intentar que mejore.

Las aplicaciones que se mostraron fueron:

PHP Team organisation by Damien Seguy

De manos del genial Damien Seguy asistimos a una charla sobre cómo realizar gestión de equipos, mejorar su implicación y como gestionar impedimentos. Fueron muchos los consejos, pero podemos resumirla en la siguiente lista que se explica por sí­ sola:

  • Weekly meeting
    • Discussion of future stuff
    • Specific training on tools, methods
    • Read indicators (audits, PI, ec)
    • Review reference documents
    • One question each (helps prepare for the meeting
  • Name domain gurus
    • Create domain experts
    • Specific domain
    • Unit test, IHM, database
    • Willing team member
    • Name it after he has taken the responsability
  • Healthy competition
    • Number of unit tests
    • Lines of codes
    • Number of methods
    • Number of commits
  • Learn to say no
  • 5 minutes meeting daily
  • Short cycles
  • References
  • PHP Mantra: short version of conventions
  • Evangelize
  • Name your teams/projects
  • Tag your code
  • Cross audits

PHP Conference 2010. Dí­a 1

Tras terminar el primer dí­a, voy a dar un pequeño repaso de las charlas en las que he estado. De entre todas las charlas disponibles, yo he elegido estas:

  • Doctrine 2.0 by Juozas Kaziukenas
  • Distributed Source Code Management by Hugh Gilmour
  • Varnish in action by Thijs Feryn
  • PHP in the Enterprise: Develop and Deploy Mission Critical Applications by Kuassi Mensah
  • Desarrollo de aplicaciones para Facebook en PHP by Victor Castell
  • Architecture and testability by Giorgio Sironi
  • Comet: by pushing server data, we push the web forward by Philip Ross

De primeras, con lo que he visto y he podido leer en twitter, tengo que decir que parece que he cogido las más «divulgativas» y yo he venido con bastantes ganas de ver cosas nuevas o por lo menos ver código y aplicaciones.

Ahora, un breve resumen de cada una de ellas.

Doctrine 2.0 by Juozas Kaziukenas

Un repaso por lo que va a ser Doctrine 2.0, tanto por las nuevas caracterí­sticas que tendrá como por comparación con Doctrine 1.x. La versión actual de Doctrine, pese a ser lento, tener un alto uso de memoria (principalmente por un uso cí­clico de referencias), su «magia» y otros problemas como la dificultad de ejecutar «raw» SQL, sigue siendo el mejor ORM para PHP hoy en dí­a y por ello Doctrine 2 tendrá esas funcionalidades (y más) aunque cambiará la forma de hacerlo.

Reescrito completamente para PHP 5,3, con una nueva API simplificada y muchas mejoras de rendimiento es la tarjeta de visita de esta nueva versión.

Además, se divide en 4 módulos: Common, DBAL (DB Abstraction Layer), ORM y ODM (Object Document Layer). Este último permitirá trabajar con motores NoSQL, otra de las nuevas caracterí­sticas.

Una interesante charla de introducción a lo que va a ser Doctrine 2.

Distributed Source Code Management by Hugh Gilmour

La charla tuvo dos partes diferenciadas, la primera fue una revisión del distinto software usado a lo largo del tiempo para realizar control de código y la segunda fue una comparación entre git, bazaar y mercurial.

Desde mi punto de vista, la parte más interesante fue la segunda, aunque fue algo particular ya que no se basaba únicamente en compararlos desde el punto de vista de cómo se realizan las revisiones, o las caracterí­sticas de los branches y merges, sino también dio las herramientas que se usan para todos ellos, soporte de IDEs e incluso bugtrackers e integración contí­nua. Muy interesante para analizar estas diferencias que en más de un caso, pueden ser muy importantes.

De todas formas, me quedo con perlas dichas por Hugh como «Simplest option is always the best» y «Work at the level of the least technical person in the project». La primera porque es una máxima que creo que hay que seguir siempre, sobre todo en el desarrollo de software como buen principio y la segunda porque a la hora de elegir cualquier opción, el factor humano y profesional debe tenerse en cuenta, que no quiere decir que haya que poner lo más simple (que no sencillo), sino lo que se adapte mejor, hay que buscar lo mejor.

Varnish in action by Thijs Feryn

Presentación que muestra las posibilidades de Varnish, aunque sin profundizar demasiado en el producto. Se muestran muchas de los comandos y configuraciones que nos permiten configurar la aplicación considerando que la principal aplicación de Varnish es la de caching.

Creo que aunque se intentaba mostrar toda la potencia del servicio, que realmente parece muy potente, a la vista de cómo es la configuración, principalmente mediante comandos y subrutinas en ficheros, realmente esconde un entorno bastante complicado de configurar.

Una charla muy rápida (casi 100 transparencias en 50 minutos) a nivel visual fue difí­cil de seguir debido al ritmo tan trepidante impuesto por Thijs que aclaró desde un primer momento que no tení­a perfil técnico, algo que se echó de menos en algunos momentos.

PHP in the Enterprise: Develop and Deploy Mission Critical Applications by Kuassi Mensah

Charla muy marcada por la presencia de Oracle (recordemos que el Platinum partner) en la que se mostraba algunas de las caracterí­sticas que provee Oracle como base de datos en los cambios entre entornos, facilitando distintas aplicaciones y el cambio.

Desarrollo de aplicaciones para Facebook en PHP by Victor Castell

Esta charla/taller estaba dividida en dos (algo que no estaba muy claro en el programa ya que tan sólo estaba en dos sesiones separadas por uno de los descansos largos) y sólo pude asistir a la primera parte.

La idea era buena puesto que se querí­a mostrar cómo realizar una aplicación en PHP para Facebook y de hecho, para avanzar en el proceso y hacerlo más sencillo, creo que la forma de realizarla no estuvo nada organizada, lo que provocó que en los 50 minutos que estuve en la charla, apenas se dieron los conceptos básicos, haciendo principal hincapié en las condiciones de uso de Facebook, los problemas que tiene el desarrollo en Facebook (latencias, caí­das, cambios en la API, etc) y en que hay que buscar la aplicación que se interesante para el cliente. Pero el tiempo empleado por ejemplo en dar de alta la aplicación en Facebook (pudieron ser tranquilamente 3o minutos) me pareció excesiva y poco fructí­fera ya que, exceptuando un par de conceptos que sí­ que es necesario explicar y aclarar, el resto se podí­a suponer de una forma bastante clara.

Si a todo esto unimos que la sala estaba realmente hasta arriba y era la pequeña pequeña (estarí­amos unas 60 personas de pie), pues no pude probar nada y esperaré a que cuelguen el enlace y la presentación para poder trastear algo. Algo más de organización hubiese venido muy bien y al menos salvaron los problemas técnicos que no tuvieron que ver con ellos de forma magistral.

Architecture and testability by Giorgio Sironi

Interesante conferencia a manos de Giorgio sobre la importancia del buen código y del testeo. Se centró en estos cuatro puntos principalmente: «Do dependency injection», «Avoid static methods», «Law of Demeter» y «Singleton vs. Factory».

Aunque creo que se extendió demasiado para explicar algunos conceptos que se veí­a que controlaba y haber dado más ejemplos creo que le hubiese ayudado más.

Sin lugar a dudas, me quedo con estas dos perlas: «Easy to test means easy to maintain» y «When tests are difficult to write, change the design to ease testing (listen to your tests)»

Comet: by pushing server data, we push the web forward by Philip Ross

Excelente presentación de la gente de NOLOH sobre las ventajas de comet, aunque desde un punto de vista muy superficial. Me ha gustado bastante la parte en la que han hecho especial énfasis en la historia de la tecnologí­a y su futuro por ejemplo con WebSockets, aunque los navegadores pondrán muchas trabas a no ser que mejore el asunto.

Debido a problemas técnicos iniciales y a la saturación de la conexión a internet, la charla fue más corta de lo esperado y sin ejemplos prácticos que se echaron en falta.

Finalmente mostraron algo de NOLOH Framework aunque nos quedamos con las ganas de ver más cosas interesantes.

Update: continúa leyendo el dí­a 2

PHP Conference 2009. Dí­a 2

Y, con mucha tristeza, ya ha terminado la PHP Conference 2009. Tristeza porque se acaba, pero creo que el balance final hay sido muy muy positivo y me voy realmente contento.

Al igual que hice ayer, voy a realizar un pequeño resumen de las conferencias a las que he asistido, que también prometí­an.

Eso sí­, no me quedo sin comentar lo bien que nos lo hemos pasado en el sorteo final y entrega de premios. Como colofón a la PHP Conference 2009, la organización realizó un sorteo en que entreban 7 packs de libro de O’Reilly + elePHPant, más 3 XBOX 360. Para empezar, muchas de las personas que esperaban participar en el sorteo se encontraron con que no podí­an hacerlo puesto que no habí­an completado la encuesta. Las probabilidades de que nos tocase algo aumentaron mucho 🙂

Tras todo esto, para entregar los premios oparon por un método que me pareció de lo más original y que, de alguna forma u otra, adoptaré, jeje. Se trataba de obtener tantos números de forma aleatoria como premios habí­a y para ello usaron http://www.random.org. Los números obtenidos eran los ids numéricos de las personas que habí­an contestado la encuesta.

Tras varios intentos frustrados por parte de Buenosvinos de dominar al MAC que le habí­an dejado para tal efecto (si por algo los MAC OS X tienen nombres de fieras xDD), sacaron los nombres. Arkaitz se llevó un libro + elePHPant e Iván una XBOX 360. Yo no tuve tanta suerte, pero bueno, 2 de 3 🙂

Por lo menos, he aprovechado la oferta de O’Reilly para comprarme un libro de git con un 35% de descuento 😀

Y bueno, estas han sido las conferencias a las que he asistido hoy:

  • PHundamental Security by Hans Zaunere
  • The State of Quality Assurance Tools for PHP by Sebastian Bergmann
  • Técnicas y Herramientas para una API con REST by Àlex Puig
  • Symfony 2.0 a sneak peak by Fabien Potencier
  • Open Classifieds by Chema Garrido

Y he aquí­ unn pequeño resumen:

PHundamental Security

Hans nos dio una buena charla cargada de otra buena cantidad de frases para apuntar y grabar a fuego sobre aspectos relacionados con la seguridad de nuestros servidores y PHP.

Sus comentarios inicialmente partí­an de sistemas en los que tenemos mucho control, pudiendo decidir hasta la forma de compilar los módulos. Algo que en algunos casos puede ser excesivo, pero desde luego tenemos que tener la oportunidad de decidir los módulos que están instalados.

Me quedo principalmente con estas dos frases (que no son las mejores, pero realmente creo que dicen mucho en poco espacio):

Let PHP do its magic inly whe you want it to – not by chance

Mayority «PHP security flaws» could be avoided by casting to int

The State of Quality Assurance Tools for PHP

http://www.slideshare.net/sebastian_bergmann/the-state-of-qa-tools-for-php-2389795

La charla de Bergmann tuvo, en mi opinión dos partes bien diferenciadas, la primera que me pareció hasta aburrida ya que eran conceptos demasiado básicos para una charla de este estilo, pero en la segunda parte (mitad-final) estuvo plagada de buenos ejemplos, herramientas y enlaces veerdaderamente útiles e interesantes.

Muy buen sabor de boca pese a ser una persona que odia los Singleton sn excepción :p

Técnicas y Herramientas para una API con REST

Charla introductoria a REST que contaba, partiendo de lo más básico, cómo realizar una API y cómo montar tu aplicación. Desde mi punto de vista, todo iba bien hasta que entró a explicarlo con un MVC y dar ciertas explicaciones dentro de un contexto más personal que general.

Interesante charla como introducción aunque a mi personalmente se me quedó algo corta.

Symfony 2.0 a sneak peak

http://www.slideshare.net/fabpot/symfony-20-on-php-53

Contando con la presencia de Fabien Potencier como ponente, mostró lo que va a ser el nuevo Symfony 2, orientado principalmente a las nuevas incorporaciones. Cabe destacar que funcionará únicamente para PHP 5.3 y será una reealidad inicialmente a finales de 2010. El respaso fue demasiado exhaustivo entrando quiás demasiado a poner ejemplos con código, algo que creo que no ayudó mucho a mostrar el potencial de algunos apartados.

Cotnamos con una completa explicación de Event Dispatcher, Request Handler, Templating Framework y Dependency Injection Container.

Esperábamos haber visto algo de Twig, pero no salió nada del tema.

Open Classifieds

De esta charla tengo que decir que alabo las ganas que le echó el ponente por dar a conocer su proyecto, pero predicar con el hecho de que hay que seguir el concepto KISS y que se ha venido de controlar la programación en Java a PHP para decir que no se usa un framework para hacer tu código más efectivo, hacer código spaguetthi y considerarlo bueno y mantenible… creo que te has confundido de sitio.

PHP Conference 2009. Dí­a 1

Hoy ha sido el primer dí­a del PHP Conference 2009 y tars todo el dí­a de conferencias voy a hacer un pequeño repaso a las que yo he asistido. Todas a las que he asistido ha sido en inglés y, en general, hay que decir que mucho nivel tanto entre los conferenciantes como entre el público.

De entre todas las disponibles en el schedule, he ido a estas:

  • Working with webservices by Lorna Mitchel
  • Trees in database by Lorenzo Alberton
  • Simple is hard by Rasmus Lerdorf
  • AJAX for Scalability by Erik Schultink
  • Integrating Zend Framework and Symfony by Stefan Koopmanshap
  • PHP Security audits by Damien Seguy

Seguidamente voy a hacer un breve resumen de cada uno de ellos.

Working with webservices

http://www.slideshare.net/lornajane/working-with-web-services

Introducción a los servicios web con un repaso completo de los diferentes formatos usados: JSON, XML e incluso serialize, los formatos más usados: SOAP, RPC (XML-RPC y JSON-RPC) y REST, así­ como alguna de las herramientas más utilizadas para debuggear como cURL, Wireshark o Charles.

Por último, Lorna dio un repaso a realizar webservices con REST.

Trees in database

http://www.slideshare.net/quipo/trees-in-the-database-advanced-data-structures?type=presentation

Charla enfocada al problema de trabajar el mateo de árboles en bases de datos relacionales mediante SQL.

Muy interesante la aportación de soluciones aunque el alto componente matemático de alguna de las partes unido a la necesidad de realizar sentencias SQL complejas hicieron algo complicada de seguir en ciertos momentos.

Las diferentes posibilidades incluí­an tanto soluciones de código abierto como propietarias.

Simple is hard

http://talks.php.net/show/phpbcn

Gran keynote a cargo de Rasmus Lerdorf centrada en la optimizaciónde rendimiento en backend de aplicaciones PHP y en la seguridad del código generado.

Rasmus dio cantidad de herramientas e indicios de posibles problemas que nos podemos encontrar cuando realizamos código en PHP.

Sinceramente, todo un gusto oirle hablar. Ha sido una oportunidad que no me volverí­a a perder por nada del mundo. Destila conocimiento y experiencia que contrasta con su pragmatismo y su incredulidad ante procesos y sistemas de hoy en dí­a.

AJAX for Scalability

Esta charla aunque se inició con temas relacionados con AJAX y como tuenti realiza monta y desmonta su página mediante javascript, la mayor parte constó de la explicación de cómo optimizar los servidores y escalar nuestro sistema mediante mediciones en la conexión, datos transferidos, etc.

Integrating Zend Framework and Symfony

Mediante ejemplos prácticos se mostró cómo se puede usar Zend Framework en proyectos con Symfony y viceversa. La potencia de frameworks como Zend que permite el uso de sus diversos módulos de forma particular con otro como Symfony con las funciones separadas, permite aprovechar al máximo de los dos.

A la espera de la charla de mañana de Fabien Potencier, se mostraron algunos de los nuevos desarrollos que tendrá Symfony 2.0.

PHP Security audits

A última hora entró esta charla dada por el genial Damien Seguy en el que mostró el proceso que sigue cuando realiza una auditorí­a de seguridad. El papá de los elePHPants nos mostró muchos de los elementos que con un alto porcentaje de acierto nos provocarán problemas así­ como diversas herramientas y recetas que podemos usar para intentar evitar estos problemas.

Update: sigue leyendo el resumen del dí­a 2