Entradas etiquetadas con standard
Integración continua: Coding standards para PHP
0¿Qué son los coding standards?
Los coding standards son estándares de código, dicho de otra manera, son reglas que indican como debe escribirse el código, cuantos espacios debe tener una tabulación, en qué línea debe ubicarse un «else», cómo debe escribir una función, método o clase, etc.
Los coding standards se utilizan principalmente en los CMS como WordPress o Drupal, esto permite que el código sea mucho más legible por diferentes personas.
La aplicación que vamos a instalar es PHPCS que nos permitirá revisar el código y comprobar si estamos siguiendo el standard correctamente.
Instalación
La instalación es sencilla, como prácticamente la mayoría de herramientas que utilizaremos para nuestro servidor de integración.
sudo−−DVFMTSC−−> apt−−DVFMTSC−−>−get−−DVFMTSC−−> install−−DVFMTSC−−> php−−DVFMTSC−−>−pear
sudo−−DVFMTSC−−> pear−−DVFMTSC−−> install−−DVFMTSC−−> php_CodeSniffer
En Ubuntu la aplicación se instala en /usr/share/php/PHP.
Una vez instalado, será necesario dar permisos de lectura al usuario www-data:
cd−−DVFMTSC−−> /usr/share/php/PHP sudo−−DVFMTSC−−> chown−−DVFMTSC−−> −−DVFMTSC−−>−R−−DVFMTSC−−> www−−DVFMTSC−−>−data:www−−DVFMTSC−−>−data−−DVFMTSC−−> CodeSniffer sudo−−DVFMTSC−−> chown−−DVFMTSC−−> www−−DVFMTSC−−>−data:www−−DVFMTSC−−>−data−−DVFMTSC−−> CodeSniffer.php sudo−−DVFMTSC−−> chmod−−DVFMTSC−−> −−DVFMTSC−−>−R−−DVFMTSC−−> 775−−DVFMTSC−−> CodeSniffer sudo−−DVFMTSC−−> chmod−−DVFMTSC−−> −−DVFMTSC−−>−R−−DVFMTSC−−> 775−−DVFMTSC−−> CodeSniffer.php
Con esto ya lo tenemos instalado.
En futuros post, instalaremos algunos Coding Standards y veremos el funcionamiento de esta herramienta.

PHP Code Sniffer, WordPress y coding standards
0Llevo varias semanas mirando información sobre integración continua y desde hace varios días estoy dándole caña a todas las herramientas que hay que instalar y configurar.
Entre esas herramientas se encuentra PHP Code Sniffer, que permite revisar el código en busca de violaciones de la codificación estándar que se esté usando.
Los coding standards, para el que no los conozca son como las guías de estilo que tienen los periódicos, en ellos se especifica la tipografía a usar tanto en los titulares como en el contenido, el tamaño del texto, la ubicación, etc. En programación ocurre igual, solo que aquí no se habla de tipografías, sino de espacios en blanco después de la apertura del paréntesis de una función, y antes del cierre de este, número de espacios en blanco para sangrar las líneas, o tabulaciones, ubicación de las llaves de apertura, si en la misma línea o en la inferior, etc. Podéis ver el coding standard de pear aquí: http://pear.php.net/manual/en/standards.php.
En WordPress también existe un coding standard derivado del de PEAR: http://codex.wordpress.org/WordPress_Coding_Standards el cual debería ser utilizado por todos para mantener el código de nuestros temas y plugins lo más estándar posible.
Digo debería porque si ejecutas el sniffer sobre el código de WordPress, no hay ni un solo archivo que no incumpla el coding standard. Es bastante frustrante después de toda una tarde de configuración, aprendizaje, errores, pruebas, y más configuración, encontrarte que no se sigue el estándar, excepto en el código nuevo. Aquí lo explican: https://groups.google.com/forum/?fromgroups=#!msg/wp-hackers/Exg0i8wZEEQ/K1_TxvSs44cJ.
Así que solo queda buscar la forma de configurar la herramienta para que no procese los archivos de WordPress y que solo se aplique en las plantillas y plugins que yo desarrolle.
PD: Miedo me da pasarle el phpcs a los plugins de WordPress.

Cassandra 1.x y PHP para desarrolladores SQL: Cassandra Cluster Admin, el phpMyAdmin de Cassandra
3En el anterior post expliqué el funcionamiento de la consola de Cassandra y como trabajar con ella. En este post explicaré como hacer lo mismo de una forma más rápida y fácil.
La razón de que no haya empezado ha explicar como se utiliza Cassandra desde PHP, es que primero hay que conocer cómo funciona Cassandra, su modelo de datos (que ya hemos visto) y algunos comandos básicos para ir aprendiendo a guardar y recuperar datos. El próximo post ya trataré el funcionamiento de PHPCassa y empezaremos a programar.
Este post será bastante ligerito. Explicaré principalmente como hacer lo mismo que hicimos por consola pero de modo gráfico. CassAdmin, como yo le llamo, tiene más opciones de edición para los keyspaces y column families de los que vamos a ver (igual que ocurría con la consola), pero solo tocaremos las opciones más habituales.
INSTALACIÓN
Lo típico en estos casos. Descargar. Descomprimir y ejecutar. Descargamos los archivos desde el repositorio de git: https://github.com/sebgiroux/Cassandra-Cluster-Admin, o a través de git o como archivo comprimido. Como más te guste.
Ahora descomprimimos a una carpeta dentro de nuestro servidor web, ya que trabajamos con una aplicación programada en PHP.
Si tienes Cassandra instalado en otro equipo que no sea en local, una máquina virtual por ejemplo, tendrás que cambiar la ip a la que se conecta cassAdmin. Es bastante sencillo. Para ello debes modificar el archivo includes/config.inc.php y sustituir la ip de localhost (127.0.0.1) por la ip del equipo en el que tengas instalado Cassandra:
Como verás en la captura, yo utilizo la ip local 192.168.1.10 que pertenece a una máquina virtual. Si tuviera instalado Cassandra en el mismo equipo la ip a la que debería apuntar sería 127.0.0.1. El puerto no lo modificamos.Una vez instalado y configurado (si fuese el caso) probamos a acceder desde nuestro navegador. Debería mostrarte algo como esto:
CREAR KEYSPACES
Como has podido ver, en la página principal del administrador ya aparece un keyspace, llamado system, perteneciente a Cassandra, con lo que lo mantendremos como está.
Justo encima tenemos un botón para crear un nuevo keyspace (Create a new keyspace). Lo pulsamos.
Solo nos pide tres parámetros a rellenar:
Keyspace name: El nombre del keyspace a crear.
Replication factor: Es el número de servidores o instancias de Cassandra de los que se debe guardar un registro u obtener una respuesta al recuperar algún registro.
Strategy: Es la estrategia que seguirá Cassandra para guardar los datos. En el caso de tener varios servidores o centro de datos diferenciados entre sí, se aplicará una estrategia u otra para que los datos no se pierdan. Más info: http://answers.oreilly.com/topic/2408-replica-placement-strategies-when-using-cassandra/
En nuestro caso escribiremos los siguientes valores:
Pulsamos en Create keyspace y nos llevará a la página principal:
Pulsamos sobre el keyspace que acabamos de crear y nos llevará a la siguiente página:
Aquí podemos ver información relativa al keyspace y al anillo (o cluster) en el que se encuentra guardado. También nos permite editar el keyspace o eliminarlo, pero la opción más interesante es la de crear nuevas column families (Create a new column family).
CREAR UNA COLUMN FAMILY
Dentro del keyspace pulsamos sobre el botón Create a new column family, nos mostrará lo siguiente:
Primero crearemos una column family standard con los siguientes datos:
Para crear una column family solo son necesarios tres parámetros:
Column Family Name: El nombre de la column family que vamos a crear.
Column Type: El tipo de column family que vamos a crear (Standard o Super).
Comparator Type: El comparador principal de las columnas. Es decir, la codificación que tendrán los datos dentro de la column family.
Pulsamos en Create Column Family y en la página de nuestro keyspace se habrá añadido una nueva column family:
AÑADIR REGISTROS A UNA COLUMN FAMILY STANDARD
Ahora toca guardar registros en la BD.
Como comenté en post anteriores Cassandra no necesita conocer los campos de las tablas (nuestras column families) ya que los creamos cada vez que añadimos un registro.
Primero en la página principal del keyspace haz click en el nombre de la column family. Te aparecerá lo siguiente:
En esta página te aparecerá, además de la información referente a la column family, los siguientes botones:
Browse Data: Para mostrar un listado de los registros que contiene la column family.
Create Secondary Index: Para crear indices secundarios. Parecido a los indices de MySQL.
Get Key: Para buscar una clave o registro concreto.
Insert Row: Para insertar un nuevo registro.
Edit Column Family: Para editar los parámetros de la column family.
Truncate Column Family: Para eliminar los registros de la column family sin eliminar esta.
Drop Column Family: Para eliminar la column family y su contenido.
Pulsamos en Insert Row. Nos aparecerá lo siguiente:
Siempre que añadamos un nuevo registro deberemos indicar una key diferente que deberá ser única, sino cassAdmin pensará que lo que quieres hacer es actualizar ese registro. Añadimos los siguientes datos al formulario:
Para añadir otra fila de cuadro de texto solo tienes que pulsar el botón Add…
Volvemos a la página principal de la column family y pulsamos en Browse Data. Aquí veremos un listado con los registros que hayamos añadido:
CREAR UNA COLUMN FAMILY SUPER Y AÑADIR REGISTROS
El proceso para crear una column family Super es idéntico a las column family Standard, solo hay que cambiar un valor a la hora de crearla:
Entramos en la página principal de la nueva column family y pulsamos en Insert Row. Aquí veremos que el formulario a cambiado un poco, nos aparece un nuevo campo llamado Super Column Name y un nuevo botón encima del formulario, Add Super Column:
Las column family Super son como las muñecas matrioskas, esas figuras que si las abrías había otra igual dentro, y dentro de esa otra más, y otra, etc. Algo parecido sucede con estas column family. Disponemos de una key (nuestra primera matrioska) que contiene a las super columns (segunda matrioska), que a su vez contienen las columnas clave:valor.
Añadamos un registro para verlo:
Si nos vamos a Browse Data:
Como ves, ahora las columns se agruparían dentro de la super column. Añadiré más registros para que lo veas mejor:
¿Ves? Las keys agrupan a las super columns y estas a su vez a las columns.
Creo que esto es suficiente para que conozcas el funcionamiento de Cassandra Cluster Admin. Quedarían algunas cosillas, como editar registros, hacer búsquedas o eliminar registros, pero eso es bastante sencillo (a excepción de las Secondary Index y las Counter Columns que trataré más adelante).
Para cualquier duda o problema déjala en los comentarios.

Cassandra y PHP para desarrolladores SQL: Cassandra Cluster Admin, el phpMyAdmin de Cassandra
4En el anterior post expliqué el funcionamiento de la consola de Cassandra y como trabajar con ella. En este post explicaré como hacer lo mismo de una forma más rápida y fácil.
La razón de que no haya empezado ha explicar como se utiliza Cassandra desde PHP, es que primero hay que conocer cómo funciona Cassandra, su modelo de datos (que ya hemos visto) y algunos comandos básicos para ir aprendiendo a guardar y recuperar datos. El próximo post ya trataré el funcionamiento de phpCassa y empezaremos a programar.
Este post será bastante ligerito. Explicaré principalmente como hacer lo mismo que hicimos por consola pero de modo gráfico. CassAdmin, como yo le llamo, tiene más opciones de edición para los keyspaces y column families de los que vamos a ver (igual que ocurría con la consola), pero solo tocaremos las opciones más habituales.
INSTALACIÓN
Lo típico en estos casos. Descargar. Descomprimir y ejecutar. Descargamos los archivos desde el repositorio de git: https://github.com/sebgiroux/Cassandra-Cluster-Admin, o a través de git o como archivo comprimido. Como más te guste.
Ahora descomprimimos a una carpeta dentro de nuestro servidor web, ya que trabajamos con una aplicación programada en PHP.
Si tienes Cassandra instalado en otro equipo que no sea en local, una máquina virtual por ejemplo, tendrás que cambiar la ip a la que se conecta cassAdmin. Es bastante sencillo. Para ello debes modificar el archivo includes/config.inc.php y sustituir la ip de localhost (127.0.0.1) por la ip del equipo en el que tengas instalado Cassandra:
Como verás en la captura, yo utilizo la ip local 192.168.1.10 que pertenece a una máquina virtual. Si tuviera instalado Cassandra en el mismo equipo la ip a la que debería apuntar sería 127.0.0.1. El puerto no lo modificamos.Una vez instalado y configurado (si fuese el caso) probamos a acceder desde nuestro navegador. Debería mostrarte algo como esto:
CREAR KEYSPACES
Como has podido ver, en la página principal del administrador ya aparece un keyspace, llamado system, perteneciente a Cassandra, con lo que lo mantendremos como está.
Justo encima tenemos un botón para crear un nuevo keyspace (Create a new keyspace). Lo pulsamos.
Solo nos pide tres parámetros a rellenar:
Keyspace name: El nombre del keyspace a crear.
Replication factor: Es el número de servidores o instancias de Cassandra de los que se debe guardar un registro u obtener una respuesta al recuperar algún registro.
Strategy: Es la estrategia que seguirá Cassandra para guardar los datos. En el caso de tener varios servidores o centro de datos diferenciados entre sí, se aplicará una estrategia u otra para que los datos no se pierdan. Más info: http://answers.oreilly.com/topic/2408-replica-placement-strategies-when-using-cassandra/
En nuestro caso escribiremos los siguientes valores:
Pulsamos en Create keyspace y nos llevará a la página principal:
Pulsamos sobre el keyspace que acabamos de crear y nos llevará a la siguiente página:
Aquí podemos ver información relativa al keyspace y al anillo (o cluster) en el que se encuentra guardado. También nos permite editar el keyspace o eliminarlo, pero la opción más interesante es la de crear nuevas column families (Create a new column family).
CREAR UNA COLUMN FAMILY
Dentro del keyspace pulsamos sobre el botón Create a new column family, nos mostrará lo siguiente:
Primero crearemos una column family standard con los siguientes datos:
Para crear una column family solo son necesarios tres parámetros:
Column Family Name: El nombre de la column family que vamos a crear.
Column Type: El tipo de column family que vamos a crear (Standard o Super).
Comparator Type: El comparador principal de las columnas. Es decir, la codificación que tendrán los datos dentro de la column family.
Pulsamos en Create Column Family y en la página de nuestro keyspace se habrá añadido una nueva column family:
AÑADIR REGISTROS A UNA COLUMN FAMILY STANDARD
Ahora toca guardar registros en la BD.
Como comenté en post anteriores Cassandra no necesita conocer los campos de las tablas (nuestras column families) ya que los creamos cada vez que añadimos un registro.
Primero en la página principal del keyspace haz click en el nombre de la column family. Te aparecerá lo siguiente:
En esta página te aparecerá, además de la información referente a la column family, los siguientes botones:
Browse Data: Para mostrar un listado de los registros que contiene la column family.
Create Secondary Index: Para crear indices secundarios. Parecido a los indices de MySQL.
Get Key: Para buscar una clave o registro concreto.
Insert Row: Para insertar un nuevo registro.
Edit Column Family: Para editar los parámetros de la column family.
Truncate Column Family: Para eliminar los registros de la column family sin eliminar esta.
Drop Column Family: Para eliminar la column family y su contenido.
Pulsamos en Insert Row. Nos aparecerá lo siguiente:
Siempre que añadamos un nuevo registro deberemos indicar una key diferente que deberá ser única, sino cassAdmin pensará que lo que quieres hacer es actualizar ese registro. Añadimos los siguientes datos al formulario:
Para añadir otra fila de cuadro de texto solo tienes que pulsar el botón Add…
Volvemos a la página principal de la column family y pulsamos en Browse Data. Aquí veremos un listado con los registros que hayamos añadido:
CREAR UNA COLUMN FAMILY SUPER Y AÑADIR REGISTROS
El proceso para crear una column family Super es idéntico a las column family Standard, solo hay que cambiar un valor a la hora de crearla:
Entramos en la página principal de la nueva column family y pulsamos en Insert Row. Aquí veremos que el formulario a cambiado un poco, nos aparece un nuevo campo llamado Super Column Name y un nuevo botón encima del formulario, Add Super Column:
Las column family Super son como las muñecas matrioskas, esas figuras que si las abrías había otra igual dentro, y dentro de esa otra más, y otra, etc. Algo parecido sucede con estas column family. Disponemos de una key (nuestra primera matrioska) que contiene a las super columns (segunda matrioska), que a su vez contienen las columnas clave:valor.
Añadamos un registro para verlo:
Si nos vamos a Browse Data:
Como ves, ahora las columns se agruparían dentro de la super column. Añadiré más registros para que lo veas mejor:
¿Ves? Las keys agrupan a las super columns y estas a su vez a las columns.
Creo que esto es suficiente para que conozcas el funcionamiento de Cassandra Cluster Admin. Quedarían algunas cosillas, como editar registros, hacer búsquedas o eliminar registros, pero eso es bastante sencillo (a excepción de las Secondary Index y las Counter Columns que trataré más adelante).
Para cualquier duda o problema déjala en los comentarios.