nov 2 2010

Slides and links from PHPConference 2010

tatai

Polling #pbc10 at Twitter during PHPConference and Googling later on I have compile all these links from each talk, trying to find at least twitter account, blog and slide links from each talk and presenter.

I know it is not complete, but it will be as soon as I can.

If you know any other source or find a broken link, please comment post or  tweet me and I will update this list.

Hope it is useful.

Hidden features of PHP by Ilia Alshanetsky

APC & Memcached the High Performance Duo by Ilia Alshanetsky

A new approach to object persistence in PHP by Stefan Priebsch

Split A/B Testing Database-driven PHP Web Applications by Kuassi Mensah

‘In search of…’ – integrating site search systems by Ian Barber

How to scale PHP applications by Enrico Zimuel

Cloud computing with PHP and Azure by David Salgado

Design patterns… revisited for PHP 5.3 by Fabien Potencier

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


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

Cómo involucrarse con PHP by Yago Ferrer

Real-time Communication Techniques with PHP by Scott Mattocks

Demystifying PostgreSQL by Asher Snyder

Database version control without pain by Harrie Verveer

PHP for Android: Scripting PHP en Android by Ivan Mosquera

Scaling Magento by Fernando Palomo

Continuous Improvement in PHP projects by Thorsten Rihnne

iPhone Websites with PHP by Markus Franz (speaker could not arrive on time, this talk took place instead:)
PHP Code audits by Damien Seguy

Distributed Source Code Management by Hugh Gilmour

Varnish in action by Thijs Feryn

Architecture and testability by Giorgio Sironi

Comet: By Pushing Server Data, We Push the Web Forward by Philip Ross

Doctrine 2.0 by Juozas Kaziukenas

Lemur Framework by Javier Linares & Paulo Oliveira

Service Oriented Architecture: a good thing to do by Jan Willem Eshuis

Mondongo, un ODM para PHP y MongoDB by Pablo Díez

SCRUM al detalle: Revisión práctica y perversiones humanas by Carlos Buenosvinos

MySQL client caching by Johannes Schlüter

Desarrollo de aplicaciones para Facebook en PHP by Victor Castell

PHP Team organisation by Damien Seguy

PHP through the eyes of a hoster by Thijs Feryn

High Performance WebApps Faster & Easier with NOLOH by Asher Snyder



oct 29 2010

PHP Conference 2010. Día 1

tatai

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


oct 29 2010

PHPConference 2010

tatai

Y de nuevo este año me he venido el 29 y 30 de octubre a disfrutar de la PHPConference a Cornellà, Barcelona. Tras el muy buen sabor de boca del año pasado, era necesario repetir porque las conferencias no pintan nada mal. Quizás menos “grandes nombres” en el cartel, pero ni mucho menos parece que va a desmerecer.

En breve lo comprobaremos.

Mis reviews del año pasado:

Update: ya disponible el review del primer día

Update: y el del segundo

Update: y el listado de slides y datos de conferenciantes


jul 20 2010

Equation y Matrix, mis últimos desarrollos en PHP

tatai

Para recuperar un poco el blog, que últimamente está muy mustio, voy a hablar de un par de desarrollos que he hecho y publicado en PHP. Los he llamado con el original nombre de Equation y Matrix.

Los tenía desde hace bastante tiempo, pero aprovechando que le estoy dando a TDD y a los testeos unitarios, los he adecentado y completado hasta ponerlos decentes para publicarlos y este es el resultado.

Equation

Es una sencilla clase que nos permite trabajar con una ecuación polinomial de grado n-ésimo mediante un objeto, facilitando el acceso a cada uno de los coeficientes así como una sencilla evaluación de la misma (basada en el método Horner).

Además, permite mostrar la ecuación renderizada al formato indicado de una forma muy sencilla. Actualmente en el paquete existe la opción de mostrarlo en formato HTML, cuyo resultado final sería algo del estilo: y = x3 + 7x2 + 10

El código completo, incluyendo ejemplos y test unitarios está publicado en github. También lo he publicado en phpclasses (sin test unitarios por lo engorroso que es subir cada fichero de forma individual).

Matrix

Este paquete consta de varias clases, la principal es Matrix que permite representar en un objeto una matriz matemática. Podemos además realizar distintas operaciones que a día de hoy son:

  • suma de dos matrices
  • resta de dos matrices
  • multiplicación de dos matrices
  • multiplicación de una matriz por un escalar
  • multiplicación de una fila por un valor
  • multiplicación de una columna por un valor
  • cambiar dos filas
  • cambiar dos columnas
  • inversa de una matriz
  • unir dos matrices compatibles
  • trasponer una matriz
  • eliminación de Gauss-Jordan (con el que poder obtener, por ejemplo, ajustes polinómicos de cualquier grado o inversas)

Las clases, con sus correspondientes test unitarios, están publicada en github.

Enlaces

Update 2010.08.01: PHPClasses acaba de avisarme que Equation está nominada al Innovation Award July 2010 :) A ver si hay suerte

Update 2010.09.01: Olé! Equation ha quedado 4ª en el Innovation Award July 2010 de PHPClasses


abr 2 2010

Documentación oficial de PHP en español

tatai

Tras un largo tiempo sin ella, podemos anunciar que está de nuevo online la documentación oficial de PHP en español. De esta forma, para todos aquellos a los que se os hacía complicada la lectura de la ayuda en alguno de los idiomas actualmente disponibles, ahora no teneis excusa ;)

Hace ya unos años que el manual en español se consideró obsoleto debido a la discontinuidad de la traducción (principalmente con la llegada de PHP5), pero volvemos a contar con él.

La traducción la realizan voluntarios que prestan su tiempo a esta tarea y se organizan mediante una la lista de correo oficial documentación de PHP-ES.

Como se puede ver en la lista que hay más adelante, no está traducido todo el manual. A fecha de hoy, 2 de abril de 2010, el 21% del manual oficial de PHP en inglés (manual base) está traducido a español. Aunque pueda parecer una cifra reducida, irá creciendo poco a poco.

El manual en español es el cuarto con más contenido traducido. Existen otras lenguas en las que se ha empezado con la tarea pero que, hasta el momento, no tienen contenido suficiente como para estar publicados.

Actualmente la documentación oficial de PHP está disponible en los siguientes idiomas (entre paréntesis, la cantidad del manual que está traducido):

  • Inglés (100%)
  • Francés (90%)
  • Japonés (69%)
  • Turco (35%)
  • Español (21%)
  • Alemán (18%)
  • Portugués brasileño (11%)
  • Polaco (4%)
  • Rumano (4%)
  • Búlgaro (3%)
  • Coreano (3%)

¿Te animas a traducir apoyando así a la comunidad? Cualquier ayuda es buena y será bienvenida :)

Links:


feb 23 2010

Crear un DOMDocument de un DOMNode en PHP5

tatai

Tengo que reconocer que DOMDocument (del Document Object Model de PHP) me gusta muy muy poco. Lo he usado por necesidad un par de veces en versiones tempranas de PHP5 donde SimpleXML todavía no tenía tanta potencia y con el problema de no poder usar por ejemplo YAML u otro tipo de formatos que no me daban la potencia y flexibilidad de XML para ciertos casos.

Bueno, una de los últimos problemas que me he encontrado ha sido cómo obtener un DOMDocument de un DOMNode ya que quería usar XPath a partir de dicho DOMNode, algo que no es posible si no es DOMDocument.

La verdad es que no he encontrado mucha información ni algo bonito para presentar. Sólo tengo esto, que por lo menos me ha servido (he preferido no pararme a medir el consumo de memoria o de proceso por miedo a querer descartar la idea y perder todavía más tiempo, jeje):

$doc = new DOMDocument();
$doc->loadXML($node->ownerDocument->saveXML($node))

El “truco” es tan sencillo como como crear un nuevo DOMDocument en el que importamos (vía método loadXML) el nodo a través del código XML que genera. Este código se obtiene con la propiedad ownerDocument del DOMNode (que nos retorna el DOMDocument) y sobre el que podemos llamar a saveXML, método que expulsa el XML del elemento que le indiquemos, en este caso, nuestro DOMNode.


feb 11 2010

XHP: una extensión para escribir PHP de forma distinta

tatai

Una de las noticias de esta semana en el mundo PHP es sin duda toda la información acerca de HipHop for PHP por parte del equipo de desarrollo de Facebook. Una de las extensiones que ha salido a la luz por parte del equipo de front-end es la que han llamado XHP y, como ellos mismos rezan, “a new way to write PHP” (una nueva forma de escribir PHP).

La explicación de cómo funciona es muy sencilla. Intentan evitar que al desarrollar la parte de frontal, cuando nos “pegamos” con el XHTML, tengamos que unir código XHTML y PHP. En el ejemplo que muestran se ve más claramente.

De un código como:

<?php
if ($_POST['name']) {
?>
    <span>Hello, <?=$_POST['name']?>.</span>
<?php
} else {
?>
    <form method="post">
    What is your name?<br>
    <input type="text" name="name">
    <input type="submit">
    </form>
<?php
}

Nos da como opción generar este otro:

<?php
// note: includes omitted
if ($_POST['name']) {
  echo <span>Hello, {$_POST['name']}</span>;
} else {
  echo
    <form method="post">
      What is your name?<br />
      <input type="text" name="name" />
      <input type="submit" />
    </form>;
}

No voy a negar que, de primeras, XHP parece más sencillo de seguir y de generar. Eliminar los tags de apertura y cierra de PHP aligera el código en gran medida. Además, eliminamos problemas con el XSS así como detectar problemas por malformación de XHTML en tiempo de parsing.

A mi personalmente me sigue gustando bastante más usar un motor de plantillas. Un motor real como XTemplates (sí, he dicho XTemplates, no smarty o similares). Separar el código PHP del HTML me parece bastante importante y necesito verlo con más claridad.

No obstante, hay que seguir el tema de cerca. Si es algo que la gente de Facebook ha visto que es necesario ya que aumenta el rendimiento, es evidente que en este tipo de entornos será uno de los puntos de referencia. Sin embargo, XHP como técnica para el resto de las webs donde no se reciban tantas peticiones como Facebook (si no recuerdo mal, sirven más doscientas mil millones de páginas al mes, sí, sí, 200.000.000.000), es posible que un objetivo que cumpla a primera vista es juntar el PHP con el HTML, algo que, repito, me parece bastante “sucio” si no hay una justificación clara. Pos supuesto, un motor de plantillas tiene sus desventajas, no vamos a negarlo :)

Lo dicho, XHP de momento me parece algo que puede provocar que el código sea más rápido pero a costa de hacerlo más guarro. Habrá que seguirle la pista para ver por dónde avanza, no lo descarto de primeras porque el objetivo de aumentar el rendimiento es muy importante, pero analizando el coste (ni monetario ni de recursos en este caso, jeje).

Enlaces:

Update: Muy muy muy interesante lo que comenta Rasmus en su web. Importante verlo.


oct 31 2009

PHP Conference 2009. Día 2

tatai

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 :D

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.


oct 30 2009

PHP Conference 2009. Día 1

tatai

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


oct 2 2009

Una forma sencilla de hacer bien las cosas

tatai

Para romper este “silencio” de casi un mes debido a la Navarparty y al trabajo, volvamos a la carga con un pequeño post.

Quiero tratar el tema de “cómo hacer bien las cosas programando” con un sencillo ejemplo que pasó el otro día por mis manos. Y para ello contaremos con dos actores, un array y un if. Supongamos que tenemos los siguientes datos:

$a = array
  array('from' => 0, 'to' => 100),
  array('from' => 101, 'to' => 250),
  array('from' => 250, 'to' => 1000),
  array('from' => 1001, 'to' => 2000)
);

Nuestro sencillo código va a retornar el índice del array $a en el que se encuentra un número $b. Ahora bien, tenemos dos formas de hacerlo:

Opción a:

function getRange($b) {
  foreach($a AS $index => $actual) {
    if($actual['from'] <= $b && $actual['to'] >= $b) {
      return $index;
    }
  }
}

Opción b:

function getRange($b) {
  foreach($a AS $index => $actual) {
    if($actual['to'] >= $b && $actual['from'] <= $b) {
      return $index;
    }
  }
}

El único cambio es el if que, como se puede ver, cambia el orden de las condiciones.

Entonces, hacemos la pregunta, ¿cuál de las dos opciones es más eficiente? Es posible que no lo veas claro, pero si lo miras un poco veras como en la mayoría de los casos es la opción b. Únicamente son igual de eficientes cuando $b se encuentra entre los valores de la primera posición.

¿Y por qué es más eficiente la opción b? La respuesta es porque dentro del if, al tener un Y lógico (los dos ampersands &&) si la primera condición es falsa, la otra condición ni siquiera se evalúa. Es decir, nos ahorramos que el microprocesador tenga que hacer esa comprobación lógica. Y este caso se da si pensamos que $b = 150. Para la opción a el if tiene que ejecutar ambas condiciones (0 <= 150 && 100 >= 150) para descubrir que es false y pasar a la siguiente iteración, mientras que con la opción b bastaría con la primera comprobación (100 >= 150) para saber que es false y pasar a la siguiente iteración.

Si se hace este if una única vez estamos hablando de una parte muy pequeña de un segundo, pero si esta tarea es muy repetitiva o el array tiene muchas posiciones, el efecto es claramente favorable e incluso se puede notar directamente.

Este sencillo ejemplo demuestra como pensar un poco las cosas y cambios muy pequeños en tu código pueden hacer que tengas un código mucho más optimizado y que te de mayor rendimiento.

Y por si quieres rizar el rizo, la opción a puede ser más eficiente que la b, pero sólo en el caso de que se recorra el array de forma descendente o este ordenado de forma inversa.