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.

kcachegrindkde

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.

Leer entradas relacionadas:

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

Leer entradas relacionadas:

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…

Leer entradas relacionadas:

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.

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! :-)

Leer entradas relacionadas:

Enero 16th, 2009Framework :: 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.

Leer entradas relacionadas:

Diciembre 28th, 2008Smarty 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.

Leer entradas relacionadas:

  • No hay entradas relacionadas

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!

Leer entradas relacionadas:


© 2007 Pensando en Red | iKon Wordpress Theme | Powered by Wordpress