Un buen framework PHP
Desde que tomé la decisión de utilizar symfony me sorprendo cada día que voy avanzando. Te encuentras todo aquello que querías tener hecho pero nunca tuviste tiempo de hacer.
Si todavía estás dándole vueltas a que framework php utilizar deja de buscar, symfony es el framework perfecto! Por que hago esta afirmación tan rotunda... pues porque en el aprendizaje de symfony recalcan las buenas prácticas, el uso de pruebas unitarias y funcionales y la refactorización de código. Tal vez estés pensando en utilizar Zend Framework porque tiene unos componentes que son realmente interesantes, no te preocupes! con symfony puedes hacerlo!
La filosofía de los creadores del framework es de "no reinventar la rueda" y si algo está bien hecho y funciona lo utilizan. Antes de embarcarse en el desarrollo de algo nuevo comprueban si existe. De hecho, el core de symfony está compuesto por otros proyectos open source como Creole, Prado, Spyc y Pake.
Tienes todavía dudas de si debes usarlo o no, el libro y la documentación es extensa (es una buena señal), entonces ponte a realizar la práctica de Jobeet! verás lo que se puede hacer y como! la potencia de symfony es importante!
Yahoo news y del.icio.us son proyectos construidos con symfony por lo que se puede garantizar el desarrollo de aplicaciones con carga extrema.
Un framework para dominarlos a todos
Hace ya unos meses comencé un proyecto ambicioso, el crear un framework para el desarrollo de aplicaciones web en php. Una tarea que comenzó en las solitarias noches del hogar, terminó convirtiendose en parte de las tarea de mi jornada laboral. La idea siempre fue facilitar el trabajo, y llegó el momento de ponder poner en marcha a zancadas la idea.
Fue comentado en forosdelweb.com mi intención de desarrollar un framework php y criticado en el sentido de reinventar la rueda, para que hacer algo que ya está hecho. Eso es totalmente cierto, pero las carencias que teníamos eran muy particulares y a veces lo que tenemos que hacer no es "lo de siempre" y el framwork salió a la luz, funcionando en diferentes proyectos.
Aunque en un principio la idea era tener el código licenciado bajo GPL al llevarme la tarea a la jornada laboral perdí el poder de decisión para poder liberar el código y nunca fue publicado en el repositorio. Actualmente el repositrio SVN http://svn.pensandoenred.com/framework tiene una versión antigua ya del motor de plantillas.
La experiencia es y ha sido increible al crear una herramienta de este tipo, el evolucionar el desarrollo junto con su mantenimiento hasta se hace relativamente fácil gracias a que no sólo yo aporté, también mis compañeros fueron una importante ayuda para afinar el desarrollo, técnica y conceptualmente ha sido un trabajo muy enriquecedor. El resultado fue un framework parecido en "grandeza" a codeigniter, y de fácil aprendizaje.
Aunque parece que ya estoy en tono de despedida...
no es así! esta herramienta seguirá su curso y crecerá, pero fue un proyecto gestado en un sitio y que nació en otro lugar pero ahora tiene otro rumbo. En el transcurso del mismo primero atacamos a las necesidades inmediatas y luego lo fuimos adornando pero siempre mirando hacia adelante en cuanto a necesidades y requisitos que serán imposible alcanzar en su totalidad, ya que el tiempo es dinero y no tenemos tanto dinero para ello ![]()
Antes de embarcarnos en la aventura valoré el utilizar symfony como framework, pero es muy grande y complejo. Su aprendizaje es relativamente costoso en comparación con frameworks más pequeños... Pero la potencia de symfony cada vez me abruma más.
La potencia de symfony en cuanto al tratamiento de las url's, de gestión de formularios, la rapidez en el desarrollo de aplicaciones potentes y la gran comunidad hispana que tiene es increíble por no hablar de su extensa documentación. Lo que más me ha gustado de lo que he visto en este framework son las pruebas unitarias y funcionales, algo que en muchas ocasiones en el desarrollo de aplicaciones no se la da la suficiente importancia.
Otros lenguajes de programación son más cuadriculados, pero php... el que lo conoce sabe que es tan maleable...
y no se puede competir contra cientos de cabezas pensantes de una comunidad! donde no sólo uno mismo ve la necesidad, es que la ven todos y la sacan adelante. Otro de los framework que están en la cumbre es Zend Framework y aunque lo he visto por encima me he decantado por Symfony por el momento. Tal vez cuando tenga el control adecuado para decir que conozco bien Symfony igual invierto algo de tiempo en mirar Zend, pero hay mucha documentación de Symfony y me resulta cómodo el aprendizaje así que me parece que será difícil cambiar a Zend el día de mañana. La comunidad symfony es muy activa y es de agradecer en el momento de aprendizaje y sobre todo a tener en cuenta para el futuro.
Pronto comenzaré con una aplicación con este framework y me parece que voy a disfrutar mucho, programar es divertido!
Optimiza tu desarrollo web en php con KCachegrind – PHP Profiler con Xdebug
La descripción encontrada en wikipedia de "profiling":
Un "profiler" es una herramienta de análisis de performance que mide el comportamiento del programa mientras este está corriendo, particularmente la frecuencia y duración de las llamadas a funciones. La salida es un rastro (stream) de eventos o un sumario estático de los eventos observados (un "profile", perfil o reseña). Los profilers usan una amplia variedad de técnicas para recolectar datos, incluyendo interrupciones por hardware, instrumentos de código, ganchos (hooks) del sistema operativo.
El uso de profilers es usado en el proceso de ingeniería de performance. Un profile generalmente es realizado relacionado la posición del código fuente donde suceden los eventos y el tamaño de las medidas de los datos que es proporcional al tamaño del código del programa. En contraste, el tamaño de un rastro es proporcional al tiempo de ejecución de un programa, haciéndolo impracticable. Para programas secuenciales, un profile, es generalmente suficiente, pero los problemas de pefrormance en programas paralelos (que esperan mensajes o temas de sincronismo) generalmente depende del tiempo de relación de los eventos, de esta forma requieren la localización total para tener un entendimiento del problema
Para ello tenemos que instalar php5-xdebug:
sudo aptitude install php5-xdebug
Una vez instalado el módulo Xdebug tenemos que editar su fichero de configuración que encontraremos en:
/etc/php5/apache2/conf.d/xdebug.ini
En ese fichero agregaremos las siguientes lineas:
xdebug.profiler_enabled = 1
xdebug.profiler_output_dir = (path de salida) "/home/usuario/tmp/"
xdebug.profiler_output_name = cachegrind.out. %R
Tras reiniciar el apache comprobaremos en un fichero php el resultado de phpinfo() para comprobar que el modulo xdebug está operativo.
Más parámetros de configuración: xdebug profiler
Al poner %R en el nombre de salida conseguimos que si estamos analizando el domonio localhost guarde los ficheros como: cachegrind.out.localhost
Para conocer más opciones de parametrización de xdebug.profiler_output_name en: http://www.xdebug.org/docs/all_settings#trace_output_name
De esta manera conseguimos que se vayan creando los ficheros que después leeremos con KCachegrind.
Instalamos Kcachegrind:
sudo aptitude kcachegrind kcachegrind-converters
Ahora solo tendremos que lanzar el programa Kcachegrind y abrir el fichero cachegrind.out.localhost. En el mismo directorio encontraremos más ficheros pero tenemos que abrir el fichero principal que es el que no tiene concatenado a su nombre con un punto una secuencia numérica.

El programa analizará los logs de xdebug y nos lo mostrará con una interfaz gráfica intuitiva y no muy complicada de entender:
De esta manera podremos analizar si nuestra aplicación web pierde mucho tiempo en algún proceso en el que no hayamos reparado con anterioridad, el uso de memoria y las llamadas que se realizan a funciones y/o métodos.
Esta configuración está pensada para probarla en la máquina local de desarrollo, en ese caso en el path de salida que hemos configurado en el xdebug.ini tenemos que asignarle los permisos necesarios para que el usuario de apache www-data pueda escribir los logs.
Una vez finalizado su uso, es recomendable desactivar el profile de xdebug para que no nos sature de logs a los que no vamos a hacer caso.
Aunque el pantallazo es de un entorno KDE esta configuración y software se ha realizado en: Ubuntu 9.04 Gnome.
Si tu entorno de desarrollo es Windows, también puedes activar el módulo php_xdebug.dll en tu php.ini y seguir los mismos parámetros de configuración en tu fichero php.ini. Como herramienta para examinar los logs del profile xdebug puedes utilizar WinCacheGrind.
Espero que os sea de utilidad, si conocéis alguna herramienta y/o utilidad que os facilite la tarea de realizar aplicaciones ligeras agradecería el comentario.
Apache2.2 + PHP5 + OCI: Cliente Oracle en Debian
El amigo ZiTaL ha escrito un how to detallado de como poder utilizar conexiones oracle en debian en los desarrollos en PHP el cual "fusilo"
Muy importante: Antes de empezar a instalar tendremos que tener como mínimo 1024 MB de SWAP (área de intercambio) libre, por lo que aconsejo que tengas como mínimo 1,5 GB de SWAP (área de intercambio).
PRE-INSTALACIÓN: Necesitamos el paquete libaio1.
apt-get install libaio1
Para empezar tenemos que conseguir los siguientes RPM's de la página de Oracle:
Oracle instantclient basic
Oracle instantclient devel
Oracle instantclient sqlplus
Que los podemos descargar de aquí:
http://www.oracle.com/technology/software/tech/oci/instantclient/htdocs/linuxsoft.html
Si quereis los he pasado a deb con alien y los podeis descargar aquí:
http://zital.no-ip.org/debian/oracle/
Y descargamos los ficheros.
Si no os fiais de mi, pues simplemete habrá que pasarlos de rpm a deb con alien:
apt-get install alien
alien oracle-instantclient-basic_11.1.0.1-2_i386.rpm
alien oracle-instantclient-devel_11.1.0.1-2_i386.rpm
alien oracle-instantclient-sqlplus_11.1.0.1-2_i386.rpm
y ya tendremos los deb correspondientes.
los instalamos:
dpkg -i oracle-instantclient-basic_11.1.0.1-2_i386.deb
dpkg -i oracle-instantclient-devel_11.1.0.1-2_i386.deb
dpkg -i oracle-instantclient-sqlplus_11.1.0.1-2_i386.deb
Ahora creamos la carpeta /etc/oracle:
mkdir /etc/oracle
Y crearemos dentro de esta carpeta el archivo tnsnames.ora
nano /etc/oracle/tnsnames.ora
Y tendremos que crear un fichero del estilo:
NOMBRE_MAQUINA.DOMINIO.COM =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.10)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = ORCL)
)
)
...
Cambiar NOMBRE_MAQUINA, DOMINIO.COM, HOST y PORT por sus respectivos valores.
Según cuantos servidores Oracle tengamos ![]()
Si no sabeis rellenar este fichero, CREO que lo podremos encontrar en el servidor donde este alojado el servidor de base de datos de Oracle.
Ahora tendremos que editar el .bashrc del root y le añadiremos las siguientes lineas:
nano /root/.bashrc
export TNS_ADMIN=/etc/oracle
export SQLPATH=/usr/lib/oracle/11.1.0.1/client/bin
export LD_LIBRARY_PATH=/usr/lib/oracle/11.1.0.1/client/lib:$LD_LIBRARY_PATH
export PATH=$PATH:$SQLPATH
Para que los cambios del .bashrc surjan efecto tendremos que volvernos a logear.
Ya hemos terminado de instalar el cliente de Oracle.
Instalacion de Apache2.2 con PHP5:
Si ya lo tienes instalado omite este paso
apt-get install apache2.2-common libapache2-mod-php5 php5
Instalacion del oci8 para php:
apt-get install php-pear php5-dev
pecl install oci8
Al instalar el oci8 nos aparecera un prompt del tipo:
1-1, 'all', 'abort', or Enter to continue:
Pulsamos 1 y ENTER
y escribimos lo siquiente en el prompt:
shared,instantclient,/usr/lib/oracle/11.1.0.1/client/lib/
y pulsamos ENTER para confirmarlo y otra vez ENTER para que empiece la instalación
el sistema empezará a compilar el módulo y si todo ha ido bien nos pondrá algo como:
Build process completed successfully
Installing '/usr/lib/php5/20060613+lfs/oci8.so'
install ok: channel://pecl.php.net/oci8-1.2.5
configuration option "php_ini" is not set to php.ini location
You should add "extension=oci8.so" to php.ini
solamente nos quedará añadir las correspondientes lineas en el php.ini:
echo extension=oci8.so >> /etc/php5/apache2/php.ini
y reiniciar el apache:
/etc/init.d/apache2 reload
Espero que os sirva de ayuda ![]()
Fuente original: esdebian.org
Framework :: Probando la vista
Bien, hasta ahora el código que estaba publicado en el repositorio no era de mucha utilidad si no había un caso de ejemplo para probar el funcionamiento de la vista.
A tener en cuenta para pruebas:
- Document root: html
- Código donde se monta la vista: proyecto/php/portada/portada.php
- Tipo de contenido de pruebas: demo
El resultado de la prueba es un listado de 10 elementos de tipo "demo" con una paginación de 2 páginas, ya que cuando preguntamos por el total, el método devuelve directamente 20. Las clases del tipo de contendo Demo son clases de prueba, todavía falta la definición de como construir los tipos de contenido.
La idea de la vista, es un gestor de plantillas por sustitución de tag omitiendo cualquier tipo de lógica en la propia plantilla. El objetivo es tener un motor de plantillas de fácil uso a la hora de montar pantallas teniendo en cuenta que en la propia plantilla el diseñador no se tendrá que econtrar código alguno que implique lógica. Entendiendo lógica como boucles, condiciones...
Framework :: descargando el código de SVN
Para descargar el código del subversion tenemos que utilizar un cliente de subversion
"me he lucido". Tirando de la blogosfera podemos obtener manuales de como utiluzar diferentes clientes de subversion.
- TortoiseSVN en Windows
- Subclipse para usarlo en eclipse
- SscriptSVN en Gnome
También me ha parecido de interés el exponer una explicación del servicio de Subversion para aquellos que no lo conozcan. Este servicio sirve para tener un control de versiones y desarrollar en equipo. Para esto podemos acceder al blog de Manuel Recena que en su post de Algunas ideas de como usar subversion lo describe con detalle.
Si tenéis algún problema para la descarga avisarme para poder solucionarlo. El proyecto está en modo lectura para todos y para poder participar hace falta una cuenta de usuario, por lo que no podréis realizar un commit si no os he dado de alta.
Feliz descarga! ![]()
Framework :: El comienzo
Hace ya un tiempo que llevo dandole vueltas a la idea de comenzar a desarrollar un framework para desarrollar en PHP. Es cierto que en internet existen para escoger unos cuantos, unos más conocidos que otros y un sin fin de clases para utilizar en los desarrollos de cada uno.
Aunque dispongo de algo más de código que el expuesto en el respositorio de subversion que he montado para el proyecto tengo que "limpiarlo" un poco para subirlo al repositorio.
Ahora tengo un gestor de plantillas, cuya idea principal es el montar la página gestionando formularios, paginaciones y demás elementos que vaya incorporando al desarrollo. Ahora será dificil poder comprobar el funcionamiento de las clases a no ser que le dediques un poco de tiempo a leer el código pero en cuanto pueda tener código suficiente para que se pueda ir evaluando pasará un tiempecito ^_^ esperemos que no mucho.
Un punto importante en el proyecto es la documentación y en unos dias montaré un wiki para ir documentando las clases publicadas en el repositorio, por lo que se intentará mantener la publicación de documentación con la publicación de código nuevo.
El proyecto es ambicioso para una sola persona pero sin tener la obligación de alcanzar una fecha de fin no hay presión ![]()
Una de las asignaturas pendientes para este proyecto es licenciarlo bajo GPL, pero aunque ahora el código no haga referencia a esta licencia así estará en el momento que me sea posible.
Smarty o no Smarty…
Cualquier programador de php conoce el sistema de plantillas de smarty. La idea de separar el diseño del desarrollo es la línea a seguir para poder tener una colaboración en paralelo con diseño, en donde un programador no intervenga para nada en la parte de diseño.
Smarty es popular entre desarrolladores de php, aplicaciones como phpBB utiliza smarty entre otros proyectos conocidos.
Mi opinión con respecto a smarty es que es dificil utilizarlo bien, y el mal uso de esta herramienta puede traer mayor complicación en proyectos web. Navegando por internet me encontré un post de un desarrollador php que explica con mucha coherencia el motivo de porqué no usar smarty.
- Tienen un problema importante de rendimiento
- Aunque no mucho dificultan el mantenimiento
- Es neceario aprender un nuevo pseudo-lenguaje de programación
- En mi opinión dificultan bastante el desarrollo
- No es garantía de que se cumpla el objetivo de un sistema de plantillas
- No es tan fácil de usar para un diseñador
Concuerdo con esos puntos aunque la solución que plantea no me parece tampoco la adecuada pero si más efectiva. Al igual que no podemos pretender que el programador entienda de diseño, el diseñador no tiene porqué entender de programación. Por eso mismo sus puestos son "diseñador" y "programador" si no tendrían que tener un puesto equivalente a "diseñador-programador".
La comunicación entre ambos perfiles es importante, pero no debemos condicionar las labores de diseño desde la programación complicando sus tareas.
Es un punto importante para reflexionar.
Mi primer programa: Hola Mundo!
De todos es sabido que cuando comienzas a programar un lenguaje el primer programa que se realiza es el "Hola Mundo!" para comprobar como compilar y como funciona más o menos el interfaz de desarrollo. Me he encontrado en Wikipedia un Hola Mundo en muchisimos por no decir casi todos los lenguajes de programación.
http://es.wikipedia.org/wiki/Hola_mundo
Así podréis comprobar si está el lenguaje que vosotors utilizais o comprobar la sintaxis de lenguajes a los que os gustaría echarles el guante ^_^
Hola Mundo!
Eclipse Ganymede is Here!
Cuando estuve probando la versión Ganymede RC3 ya me pareció bastante estable por lo que no me extraña que hayan lanzado ya la versión final del editor.
Una de las cosas que me han parecido muy interesantes a la hora de utilizar el plugin para desarrollar en php es que a parte de localizarte las funciones de tu proyecto web, también puedes localizar con un ctrl+click donde está definida la constante, y al igual que te autocompleta con el nombre de funciones o métodos de una clase, también lo hace con los ficheros que vas a incluir!!!
Por ahora estoy encantado con esta versión, a parte de que rebosa una mayor estabilidad al producto de la versión 3.2 (obviamente Ganymede es la 3.4 tiene que ser mejor ^_^)
No he tenido la oportunidad de probar la versión Windows/MacOS, pero entiendo que irá igual de bien que la versión Linux.
