Las skills de un Ingeniero PHP

Escucho muy seguido gente que no confía en PHP por que dice que es una lenguaje que no escala, que es cochino y que no provee elementos “avanzados de programación” como threads, tipos de datos y otras cosas así. Si bien esto tiene algo de cierto no todo es tan negro. PHP es un lenguaje sencillo pero poderoso dado que provee una API gigantesca para interactuar casi con cualquier estandard de manera muy sencilla; provee una flexibilidad asombrosa ante los cambios, los deploys no son una tarea preocupante y la compatibilidad con las plataforma de Hardware es asombrosa (hasta corre sobre iSeries (ex AS400)).

Esta sencillez provista por PHP a su vez impacta en que gente no especializada en el desarrollo de aplicaciones se involucre en el mundo del desarrollo web y haciendo sites funcionales pero utilizando solo el 10% de las herramientas provistas por PHP; cuando un verdadero ingeniero de software se cruza con esta gente y comienza a preguntar cosas sobre POO, Escalabilidad, Extensibilidad, Reutilización llega a la conclusión de que la gran mayoría de los desarrolladores PHP no saben mucho de desarrollo en general y que no pueden implementar soluciones grandes.

Me duele decirlo pero en gran parte esta conclusión no es tan errada. La mayoría de los desarrolladores PHP que conozco todavía siguen programando proceduralmente, con scripts aislados, utilizando mysql_connect y olvidándose de millones de buenas prácticas. Esto es algo que me preocupa por que veo poca madurez de los desarrolladores PHP en general (hablando de la región y la gente con la que habitualmente me cruzo).

Que debería conocer un Desarrollador PHP hoy en día?, si de verdad quieren hacer desarrollos profesionales, escalables y de gran embergadura. Bueno deberíamos estar hablando para empezar de POO, estos conceptos tienen que ser moneda corriente en la vida del desarrollador, cuestiones que no pueden escaparse son:

– Análisis y Modelado
– Herencia
– Clases Abstractas
– Interfaces
– Polimorfismo

Necesitan crear componentes de software basado en estos conceptos (mas allá de nombrar la definición del libro). PHP provee una implementación de Objetos muy copada, piola y sencilla, es un desperdicio no aprovecharla.

De la mano a la POO viene el tema de los patrones de Diseño, esto es otro tema en el que reiteradamente insisto a mis conocidos que aprendan y apliquen. Empezando desde el MVC, siguiendo por los ORM y hasta el que se les ocurra, pero es necesario que manejen estos conceptos para desarrollar una verdadera implementación flexible en sus aplicaciones con PHP.

Para facilitar su camino en el aprendizaje en estas cuestiones les recomiendo siempre comenzar a utilizar algún Framework y analizar su Core. Como siempre el framework que recomiendo estudiar es Symfony, pero si este no es de su agrado puedo ver Zend, Cake, Code Igniter o Kohana.

Ademas de estas cuestiones tenemos otra cosas para ver como las librerías típicas de PHP, PDO, Xdebug, GD, ImageMagic, SimpleXml, Curl, PHPUnit entre otras … estas librerías debe conocerse.

Otras skills que un desarrollador PHP debe tener en su maletín son;

– Administración de Apache, levantar Virtual Hosts, Analizar logs, Mod Rewrite, etc.
– Administración del SO, Networking, Firewalls, Permisos, etc.
– Manejo de un CVS, Subversion o Git son buenas opciones
– Dominio de SQL, queries, vistas, subqueries, permisos, triggers, sql optimization, etc.
– Caching (Memcache, Varnish, Squid, Mod Proxy)

Y podríamos seguir la lista, pero no quiero asustarlos 😛 … esto es lo mínimo que un verdadero Ingeniero PHP debe conocer y saber; sino no dejan de saber hacer un par de simple scripts.

Adicionalmente a todo esto, los devs PHP siempre están muy relacionados con las UI (PHP es un lenguaje muy usado para el frontend de las aplicaciones), por ello también se busca conocimientos en HTML, CSS y JS, pero eso lo dejo para otro día :).

Share

Instalar PHPUnit

Escribo este post por que siempre me olvido de los pasos para instalar PHPUnit y los quiero tener a mano. Espero que les sirva a ustedes tambien :D. Estos comandos deberían ejecutarse como root.


apt-get install php5-curl php5-xdebug
pear channel-discover pear.phpunit.de
pear channel-discover components.ez.no
pear channel-discover pear.symfony-project.com
pear upgrade PEAR
pear install phpunit/PHPUnit

Si estas detraz de un proxy, antes que nada setalo.

pear config-set http_proxy http://url.a.tu.proxy:3128

Mas info http://www.phpunit.de/manual/3.5/en/index.html

Share

Encontrar problemas con ZendServer y Zend Studio

Debo admitir que Php casi siempre fue una herramienta bastante tosca a comparación de herramientas mas amigables como las suites Visual Studio de Microsoft. Los desarrolladores de PHP amamos nuestro entorno de trabajo y la forma que hacemos las cosas, vi sigue siendo y será la mejor IDE para PHP. El tema es que aveces trabajamos con gente no tan enferma como nosotros que prefieren pantallitas, iconitos y botoncitos y grandes carteles rojos para saber que algo no esta bien y corregir los problemas.

Acabo de ver un video de Zend donde muestra una herramienta de detección de errores y problemas en el servidor (Zend Server), para que el Sysadmin pase el problema al desarrollador y este pueda desde su entorno de trabajo(Zend Studio), visualizar los problemas detectados por el sysadmin y corregirlos. Verdaderamente me pareció algo excelente, los dejo con el video.

Share

Embebed Forms en Symfony, una forma fácil

Los formularios embebidos de symfony son una características muy buena del framework, el problema es que utilizarlos es bastante complicado y existe poca documentación oficial al respecto.

Toda esta duda me surgió debido a este video de Francois donde vi un nuevo método de Propel 1.5 para facilitar el proceso de embeber fomularios. El tema es que en varios proyectos que estoy llevando a cabo no tengo pensado migrar a nuevas versiones de symfony en un corto plazo, por eso quise facilitarme la vida implementando algo parecido. Vean el video para ver de lo que les hablo.

mergeRelation from Francois Zaninotto on Vimeo.

He trabajado un poco en el tema y realice una pequeña implementación para facilitar el trabajo parecida a la que se ve en el video, aquí la explicación.

El modelo

Todo parte de la suposición que tenemos una tabla 1 (tbl1) y otra tabla 2 (tbl2) que posee una relación con la primera, a travez del campo tbl1_id, deberemos respetar esta notación siempre para utilizar esta utilidad, la relación debe definirse a travez del campo tabla padre nombre seguido por _id, por ejemplo xxx_id.

Aquí un schema de ejemplo.

Generamos todo, modelo, forms, filters, sql

./symfony propel:build-all

Luego cargar las nuevas tablas a la base. Si no hay datos

./symfony propel:insert-sql

Modificaciones en las clases bases

Ahora, el siguiente paso es modificar la clase base de los forms para contar con los métodos reutilizables a fin de embeber formularios. Personalmente pienso que el mejor lugar es lib/forms/BaseFormPropel.class.php, si conocen un lugar mas apropiado para ubicarlos acepto la recomendación. Los métodos a añadir son tres.

loadAsEmbebedForm : Que añade la relación como un formulario embebido, se utilizará en el método configure de la clase Form del padre.

bindObjectToEmbebed : Al guardar, en caso de realizarse cambios, asocia el objeto padre a los objetos hijos de los formularios embebidos, se llama por bind.

is_seted_value : bindObjectToEmbebed lo utiliza para saber si se produjeron cambios en el formulario embebido.

bind : Redefinimos el metodo para llamar a bindObjectToEmbebed antes de realizar el bind de la clase base. El único que utilizaremos nosotros será loadAsEmbebedForm, los otros se invocarán automaticamente cuando corresponda. Debería quedarles algo así

El widget sfWidgetFormInputAjaxDelete

Luego será necesario que incorporen el widget sfWidgetFormInputAjaxDelete.class.php (lib/widget/) , este creará una entrada de texto con un boton X el cual al ser cliqueado invocará a la accion del modulo que especifiquen para borrar el elemento. Esta acciòn deberá ser implementada por ustedes en el modulo que les parezca.

Deberán tener instalado ysJQueryRevolutionsPlugin para que este widget funcione

http://www.symfony-project.org/plugins/ysJQueryRevolutionsPlugin

Configurar el Formulario Embebido

Con esto tenemos configurada nuestra instalación para embeber todos los formularios que querramos. Veamos como sería para embeber en Tbl1 el formulario Tbl2, lo único que deberemos hacer es configurar el form del modelo Tbl1 (tabla padre) para contener a Tbl2 (tabla hija). Para esto vamos a modificar el método configure utilizando el método recientemente añadido a la clase BaseFormPropel, loadAsEmbebedForm.

class Tbl1Form extends BaseTbl1Form {
public function configure() {
$this->loadAsEmbebedForm(‘tbl2’, ‘thetext’, ‘demo/deleteTbl2’);
}
}

Aquí deberán pasar como argumentos al método el nombre del modelo hijo, el método para leer la propiedad que se utilizará como etiqueta del formulario embebido y la URI para la acción que borrará el formulario embebido.
Al terminar deberían probar con alguno módulo que utilice el form y les saldría una cosa parecida a esta.sshot-1

Eso es todo amigos, les parece sencillo ?

Share

Curso de Desarrollo Web con PHP

Tengo la alegría de contarles que con la ayuda de la UTN-FRRE estoy pronto a largar una nueva edición del curso de desarrollo web con PHP5, esta vez con la ayuda y colaboración de mi colega Marcos Ibañez.

El temarío fue preparado en base a lo visto en los cursos del año pasado y la experiencia adquirida en el mismo. Nuevamente el curso será dividido en dos partes, incial y avanzado, comenzando la etapa inicial el día 27 de abril.

El temario para la etapa inicial es el siguiente

  1. Introducción al Desarrollo Web
    • La Internet (Direcciones IP, Servicios de Nombre, Servidores Web, Bases de Datos, Browsers, Hostings).
    • El protocolo HTTP
    • El estándar HTML
    • Arquitectura de Aplicaciones Web
    • LAMP
  2. HTML
    • Estructuras de documentos HTML
    • Los estándares de la w3c
    • DOM
    • Tags HTML
    • Formularios HTML
  3. CSS
    • Introducción a las Plantillas de estilo
    • Selectores CSS
    • Aplicar estilos con CSS
    • Inclusión de plantillas de estilos
  4. Introducción a PHP
    • Presentación del Lenguaje
    • El Entorno de Trabajo (Apache, Mysql, Netbeans)
    • Variables y Tipos de Datos
    • Variables Predefinidas
    • Entrada y Salida
    • POST, GET
  5. Estructuras de Datos y Control
    • Condicionales
    • Iterativas
    • Includes y Requires
  6. Funciones
    • Invocación de Funciones
    • Definición de Funciones
    • Alcance de Variables
    • Parámetros por Valor y Referencia
    • Valores de Retorno
    • Funciones Integradas
  7. Diseñar aplicaciones con PHP
    • Organizar el Proyecto
    • Organizar los componentes del sitio
    • Utilizar librerías
    • Utilizar Layouts y Master Pages

La idea es que el alumno conozca las bases para desarrollar sites dinámicos sencillos y posea sólidos conocimientos para continuar su autoaprendizaje en el mundo de PHP5.

La segunda etapa pretende consolidar estos conocimientos añadiendo técnicas avanzadas como la Orientación a Objetos y la interacción con bases de datos Relacionales.

El temario de la segunda etapa es el siguiente.

  1. Bases de Datos Relacionales
    • Introducción al Modelo Relacional
    • Tablas, Atributos, Relaciones
    • Diseño de Modelos de Datos
  2. SQL y MYSQL
    • Lenguaje de Consulta estructurada
    • Creación de Bases de Datos, Tablas, y operaciones con las mismas a través de SQL.
  3. Interacción con MySQL desde PHP
    • Utilización de las API’s para interactuar con bases de Datos con PDO
    • Creación de aplicaciones con backend de datos
  4. Interacción con Formularios
    • Interactuar con Formularios HMTL
    • Controles
    • Inputs y Textarea
    • Selects y Selects Múltiples
    • Radio Buttons
    • Checkbox
    • Lectura de los parámetros del formulario y validación
    • Persistencia de los Datos en MySQL
    • Listados
  5. Sesiones
    • Manejo de Sesiones y Cookies
    • Creación un Login de Usuarios
  6. Orientación a Objetos
    • Definición de Clases
    • Definición de Métodos y Métodos Mágicos
    • Manipulación de Objetos
  7. Orientación a Objetos Herencia y Polimorfismo
    • Herencia
    • Interfaces
    • Polimorfismo

Estan todos invitados a participar del curso, con solo tener alguna noción de algoritmía y programación alcanzará para que pueda aprender todos los conceptos del curso

Los horarios del curso serán por la mañana o por la tarde

– Martes y Jueves de 14:30 a 17:30
– Martes y Jueves de 9:00 a 12:00

El costo del curso será de :

– Alumnos de la UTN : $ 250 por etapa

– No alumnos de la UTN : $ 300 por etapa

Las inscripciones se realizán en:

Inscripción: Alumnos U.T.N.: Secretaría de Asuntos Universitarios – F.R.Re. – U.T.N.
Público en general: Edificio Anexo – F.R.Re. – U.T.N. Av. French y Laprida – TE 426014
Lunes a Viernes: 8:00 a 12:00 / 16:00 a 21:00 hs

El curso tendrá vacantes limitadas, solo 15 alumnos por turno.

Share