Mostofreddy

Instalar y configurar memcached

Comentarios 0 Tags , , Categorias Programacion

{lang: 'es-419'}

memcache

Memcache, un sistema de cache distribuido, que se aloja en memoria y es de proposito general. La idea es almacenar en memoria cadenas de bytes (strings) que ya fueron procesados para no procesarlos nuevamente.

Por ejemplo, cachear resultados de queries, compartir datos entre servidores, utilizarlo como almacenamiento de sessiones, etc.

Hay que tener en cuenta que estos datos son almacenados en memoria RAM, la cual es volátil y si apagamos el servidor o el deamon de memcached estos datos se perderan! (siempre hay que tener un plan de contingencia para levantar rápidamente los datos a memcache una vez reiniciado el server)

Su funcionamiento es sencillo, a cada item que se desea cachear se almacenan en una tabla hash, al cual se le asigna una clave para su posterior recuperacion. Todos estos datos se almacenan donde su estructura llamada slabs. Los slab tienen tamaño variable para optimizar el espacio en memoria, pero su tamaño mayor es de 1mb, por lo cual, este es el tamaño mas grande que se puede almacenar.

Tambien para cada item almacenado, memcached permite controlar su tiempo de vida (es independiente para cada item), una vez finalizado memcache lo elimina.

Otra de las caracteristicas de memcache es la escalabilidad, podemos contar con un pool de servidores en distintas (o no) maquinas para soportar una cantidad elevada de peticiones concurrentes.

Instalación

Para instalar en ubuntu basta con

sudo apt-get install memcached

Configuración

Si usamos apt-get para instalar memcache encontraremos en la carpeta /usr/share/memcached un archivo llamado memcached.conf.default con un ejemplo de archivo de configuracion. El archivo real se encuentra en /etc/memcached.conf.

Los parametros que se pueden configurar son los siguientes:

-m indica a memcache cuanta memoria utilizar para almacenar los items (default 64mb)
-d indica a memcache que se ejecute como deamon
-v el clasico verbose
-vv verbose mas completo
-vvv verbose muuuuuucho mas completo
-p puerto por el cual memcache escucha (default 11211)
-l ip por el cual se comunica memecache (default 127.0.0.1)
-c cantidad maxima de conexiones simultaneas (default 1024)
-u indica con que usuario correra memcache (default root)
logfile path para el archivo log

Calidad de software en PHP (III) – PHP CodeSniffer

Comentarios 0 Tags , , Categorias Programacion

{lang: 'es-419'}

Update: 23/03/2011

Fue lanzada la version 1.3.0 con soporte para closures, namespaces, __invoke, etc (ver changelog)

PHP CodeSniffer es un script realmente práctico y fundamental para estandarizar la codificación de una empresa o en nuestra casa. El script valida la sintaxis de nuestro código PHP contra un estandar definido, este puede ser el de Zend, Pear o alguno propio que definamos.

Para su instalación debemos tener instalado Pear.


sudo pear install PHP_CodeSniffer

Para verificar que la instalación fue correcta podemos hacer lo siguiente


phpcs --version

Para ver todos los parametros y configuración podemos ver la ayuda


phpcs --help

Para saber cuales son los estándares instalados


phpcs -i

Para definir el estandar por defecto que se utilizara

phpcs --config-set default_standard Zend

Benchmark PHP: call_user_func vs direct method call

Comentarios 0 Tags , , Categorias Programacion

{lang: 'es-419'}

Estuve probando un script de benchmark de Rob Allen y la verdad que afirmo lo que sospecha y sabia

1) call_user_func consume 2 veces mas de tiempo que llamando directamente al método

2) Un código corrido en php 5.3 es mas eficiente que el mismo código corrido en PHP 5.2

Les dejo el código de Rob con una pequeña modificación, si pueden corran el script en distintas versiones de PHP, pero ojo!! córranlo en la misma pc porque sino las pruebas no serán objetivas.


<?php
class A
{
    function b($a)
    {
        return;
    }
}

define ('ITERATIONS', 10000000);
$start = microtime(true);
$a = new A();
for ($i = 0; $i < ITERATIONS; ++$i) {
   $a->b(1);
}
$stop = microtime(true);
echo  'Direct method call: ' . ($stop - $start) . ' seconds' . PHP_EOL;

$start = microtime(true);
$b = 'b';
for ($i = 0; $i < ITERATIONS; ++$i) {
   $a->$b(1);
}
$stop = microtime(true);
echo  'Direct method variable call: ' . ($stop - $start) . ' seconds' . PHP_EOL;

$start = microtime(true);
for ($i = 0; $i < ITERATIONS; ++$i) {
   call_user_func_array(array($a, 'b'), array(1));
}
$stop = microtime(true);
echo  'call_user_func_array call: ' . ($stop - $start) . ' seconds' . PHP_EOL;

RAQS – Run Automatic PHP QA Script

Comentarios 0 Tags , , , , , , , , Categorias Programacion

{lang: 'es-419'}

RAQS es un script bash que estoy haciendo que permite automatizar la ejecución de varios script de QA para PHP tales como PHPUnit, PHPloc, PHPCPD, PHP Code Sniffer, de esta forma, al cronear RAQS podemos tomar las métricas necesarias para seguir nuestros proyectos.

Actuamente esta en la versión 0.1 y algunas de sus características futuras seran:

* Almacenamiento de métricas en sqllite y mysql

* Nuevas opciones de configuración

* Integración con SimpleTest y PHP Depend

* GUI para visualización de las métricas tomadas

Para utilizarlo primero debemos bajar el proyecto del repositorio de github

git clone git://github.com/mostofreddy/RAQS.git
chmod +x raqs.sh
./raqs.sh projectName PathToProject PathToTest PathToLogs

Para ver la ayuda podemos hacer

./raqs --help

Espero que les sea de utilidad

PHPUnit y Code Coverage

Comentarios 2 Tags , , Categorias Programacion

{lang: 'es-419'}

Esta semana comencé a utilizar un feature de PHPUnit que nunca le había prestado atención, el Code Coverage (cobertura de código/código cubierto ¿?), la cosa es que un compañero de trabajo la estaba usando y me llama mucho la atención.

¿Por que? porque este feature indica el porcentaje de código que fue cubierto por el test unitario (wow!) esto sumado a una UI agradable y de fácil compresión (doblemente wow!) logra maravillas.

Una de las cosas que mas me agrado es que no solo muestra el % de código testeado, sino que muestra el código de la clase coloreada en verde las lineas testeadas y en rojo las no testeadas.

En fin, excelente feature de PHPUnit para los que realizamos TDD o tenemos que testear código legacy