Mikel

Mikel

(51 comentarios, 168 entradas)

Este usuario no ha compartido ninguna información de perfil

Web: http://interadictos.es

Entradas de Mikel

Integración continua: PHPMD, detectando problemas en el código

0

PHPMD o PHP Mess Detector, es una herramienta que permite detectar posibles bugs, código poco optimizado, expresiones demasiado grandes, etc. Es una herramienta muy útil para controlar la calidad de nuestro software.

Esta herramienta es hija de PMD, una herramienta para la calidad del código en Java. Podéis informaros de más características de PHPMD en su web: http://phpmd.org/

La instalación es muy sencilla:

apt−get install imagemagick php5−imagick
pear channel−discover pear.phpmd.org
pear channel−discover pear.pdepend.org
pear install −−alldeps phpmd/PHP_PMD

Para ejecutar PHPMD tu necesitas darle los archivos a parsear, un formato para la salida y las reglas a usar. Ejemplo:
phpmd . html codesize,unusedcode,naming,design −−reportfile ../messdetector.html −−exclude Tests/

Integración continua: phpcpd, detectando el código duplicado

0

PHPCPD es una aplicación que nos permite detectar fragmentos de código duplicado o muy parecido, de tal forma que podamos optimizarlo creando métodos o funciones que eliminen esa duplicidad.

Su instalación es simple:

pear channel−discover pear.phpunit.de
pear channel−discover components.ez.no
pear channel−discover pear.symfony.com
pear channel−discover pear.netpirates.net
pear install phpunit/phpcpd

Para ejecutar usamos:
phpcpd −−log−pmd ruta−donde−se−guardará−el−resultado−del−analisis/cpd.xml directorio−o−archivo−a−analizar

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 apt−get install php−pear

sudo pear install 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 /usr/share/php/PHP
sudo chown −R www−data:www−data CodeSniffer
sudo chown www−data:www−data CodeSniffer.php
sudo chmod −R 775 CodeSniffer
sudo chmod −R 775 CodeSniffer.php

Con esto ya lo tenemos instalado.

En futuros post, instalaremos algunos Coding Standards y veremos el funcionamiento de esta herramienta.

Integración continua: Instalando y configurando Redmine

0

¿Qué es Redmine?

Redmine es una herramienta de gestión de proyectos, nos permite mantener un control de las tareas y errores a solucionar en ellos. Esta herramienta nos permite organizar los proyectos por versiones, o por springs si utilizas alguna metodología ágil. Dispone de gráficos Grantt, wiki, acceso al repositorio del proyecto, etc.; muchísimas características que nos facilitan el día a día en el desarrollo de proyectos.

Instalando Redmine

La instalación de Redmine es bastante sencilla, utiliza el siguiente comando:

apt−get install redmine redmine−mysql libapache2−mod−passenger

Una vez instalado y configurado creamos una carpeta en /var/www llamada redmine:
mkdir /var/www/redmine

A continuación, creamos un enlace simbólico con el contenido que se mostrará en el navegador:
ln −s /usr/share/redmine/public /var/www/redmine

Accediendo a Redmine desde un subdominio

Ahora configuraremos un subdominio para poder acceder a Redmine.

Comprueba que tienes activado el módulo passenger en apache2:

a2enmod passenger

Instala “bundle”, una gema de Ruby:
gem install bundle

Da permisos al usuario www-data:
usermod −aG root www−data
chmod 775 −R /usr/share/redmine

Modifica el archivo /etc/apache2/mods-available/passenger.conf añadiendo la siguiente línea:
PassengerDefaultUser www−data

Crea el VirtualHost en /etc/apache2/sites-available, con el siguiente contenido:

        ServerName redmine.ic.net

        DocumentRoot /var/www/redmine
        
                AllowOverride all
                Options −MultiViews
                PassengerResolveSymlinksInDocumentRoot on
        

Reinicia apache:
/etc/init.d/apache2 restart

Al igual que hicimos con Jenkins, será necesario que modifiques tu archivos hosts y añadas la siguiente línea:
192.168.1.40 redmine.ic.net

Sustituye la IP por la tuya.

Ahora, si escribes la dirección de Redmine en tu navegador podrás acceder a tu gestor de proyectos. El usuario para el administrador es “admin” y su contraseña “admin”.

A partir de aquí, es cosa tuya. Crea algunos proyectos, añade algunas versiones, tareas, errores, etc.

Integración continua: instalando y configurando Jenkins

0

Ya vistes la checklist del último post: http://www.interadictos.es/2014/08/11/integracion-continua-primeros-pasos/, ahora vamos a empezar a instalar y configurar algunas herramientas, para ir poco a poco uniéndolas.

¿Qué es Jenkins?

Jenkins es nuestro servidor de integración continua. Es una aplicación que permite automatizar una lista de tareas que le indiquemos. Estas tareas pueden ser iniciadas de forma manual, pero lo habitual será llamar a la primera tarea de la lista cada vez que se realice un commit en el repositorio, e ir concatenando tareas hasta finalizar la lista completa. Tranquilo si no te haces aun a la idea, a medida que vayamos avanzando con esta guía lo iras entendiendo.

Instalando Jenkins

Primero descargamos la key del servidor de Jenkins, que nos permitirá añadirlo al archivo sources.list:

wget −q −O − http://pkg.jenkins−ci.org/debian/jenkins−ci.org.key | sudo apt−key add −

A continuación lo añadimos al archivo sources.list. Puedes añadirlo de esta manera o añadirlo a mano:
sudo sh −c 'echo deb http://pkg.jenkins−ci.org/debian binary/ > /etc/apt/sources.list.d/jenkins.list'

Actuliazamos la lista de paquetes e instalamos:
sudo apt−get update
sudo apt−get install jenkins

Ahora necesitamos poder acceder a él a través de la red, para ello vamos a crear el subdominio jenkins.ic.net. Para poder acceder por el subdominio jenkins.ic.net es necesario crear un virtual host con proxy inverso, para ello instalamos varios módulos de Apache2 necesarios:
sudo a2enmod proxy
sudo a2enmod headers
sudo a2enmod deflate
sudo a2enmod proxy_http

Ahora creamos un virtualhost en /etc/apache2/sites-available llamado 001-jenkins.ic.net.conf (Podeis usar el nombre que quieras), con el siguiente contenido

        ServerName jenkins.ic.net  

        
                Order deny,allow
                Allow from all
         

        ProxyPreserveHost On
        ProxyPass / http://localhost:8080/
        ProxyPassReverse / http://localhost:8080/


La ruta habitual para acceder a Jenkins sería http://localhost:8080, si pudieramos acceder desde el mismo servidor de integración continua, si lo hicieramos desde fuera sería http://ic.net:8080. Para evitar tener que recordar el número de puerto utilizamos el archivo anterior. Nos facilitará la vida.

Ahora creamos un enlace simbólico de este archivo en /etc/apache2/sites-enabled.

sudo ln −s /etc/apache2/sites−available/001−jenkins.ic.net.conf /etc/apache2/sites−enabled/001−jenkins.ic.net.conf

Reiniciamos apache con:
sudo /etc/init.d/apache2 reload

En nuestro ordenador tendremos que editar el archivo hosts, para indicarle al pc a qué ip debe dirigirse para encontrar el alojamiento de jenkins.ic.net. Añadimos la siguiente línea al archivo (sustituye la IP por la de tu servidor de integración continua):
192.168.1.40 jenkins.ic.net

Ahora podrás escribir el subdominio en el navegador para acceder a la página principal de Jenkins.

A partir de aquí te recomiendo que explores todas las opciones de Jenkins, además de echarle un ojo a la documentación: https://wiki.jenkins-ci.org/display/JENKINS/Use+Jenkins

En la administración de Jenkins puedes acceder al apartado de plugins, revísalos y podrás hacerte una idea de las posibilidades de esta herramienta.

Integración continua: primeros pasos

0

Ya expliqué la semana pasada qué era eso de la integración continua, pues bien, ahora toca dar los primeros pasos. Obviamente necesitamos un ordenador que haga de servidor, una máquina virtual, o bien un servidor de verdad si lo que pretendes es utilizar de forma profesional.

Como sistema operativo para esta guía utilizaré Ubuntu 14.04. Tú puedes usar el que quieras pero tal vez te resulte más complicado encontrar algún software, con lo que tendrás que investigar más.

El hardware a usar dependerá de las necesidades que tengas, o para lo que quieras un servidor de integración continua. En mi caso utilizo un pc de gama baja con micro AMD, 8 GB de RAM, sin teclado, ratón, ni monitor (y por tanto sin escritorio gráfico), y con una tarjeta WiFi para conectar a internet. Y esto, para mí, es suficiente. Si lo fueses a usar en un grupo de desarrollo, lo mejor es usar un VPS o un servidor dedicado, ya que mejorará en gran medida el rendimiento.

Ya tenemos el hardware listo y nuestro sistema operativo está instalado, por tanto vamos a iniciar los primeros pasos para crear nuestro servidor de integración continua.

Continue reading “Integración continua: primeros pasos” »

Integración continua: Introducción

0

Supongo que os preguntaréis qué es eso de la integración continua, pues bien, os explico: se considera Integración Continua al conjunto de metodologías y procesos que se ejecutan durante el desarrollo de un proyecto de programación, con la diferencia de que estos procesos están centralizados y automatizados, lo que permite ejecutarlos cada pocas horas.

Dentro de los procesos automatizados se encuentran la descarga de los repositorios, la comprobación de los estándares de codificación, la ejecución de los test unitarios, la actualización de la base de datos, el despliegue al servidor de producción, etc. Cualquier proceso que se ejecute durante el desarrollo de un proyecto se puede integrar en este sistema.

Esta forma de trabajar nos permite a los desarrolladores detectar, antes de poner en producción el proyecto, posibles errores o ineficiencias, pudiendo solucionarlos y mejorando con ello la calidad del software que generamos.

Sirva este pequeño artículo como introducción a esta nueva sección del blog, ya que durante las próximas semanas iré publicando nuevos artículos para que podáis montar vuestro propio servidor de integración continua, me centraré en la automatización de procesos en proyectos PHP, ya sean basados en Frameworks (Symfony, Zend, etc.), CMS (WordPress, PrestaShop, etc.) o creados desde cero, aunque es muy posible que muchas cosas de las que os explique podáis utilizarlas para otros lenguajes de programación. Os explicaré tanto la instalación del software necesario como su configuración, además de como unir todo el software para que se ejecute de forma automática.

De momento os dejo con varios links para que le vayáis echando un ojo a eso de la Integración Continua:

– http://es.wikipedia.org/wiki/Integraci%C3%B3n_continua

Desarrollo PHP avanzado

Votaciones en el Congreso de los Diputados en 2013: ¿PP y PSOE votan lo mismo?

0

En el anterior post hablé de las votaciones en el Congreso de los Diputados en 2012, en las que se mostraba como la coincidencia del voto entre PP y PSOE no llegaba ni al 3%. Ahora veremos las de 2013.

Hace un tiempo se publicó que en el Parlamento Europeo los dos grandes partidos (PPE y PS&D) votaban lo mismo en el 70% de las ocasiones. Sin embargo, poco o nada se ha comentado respecto a las votaciones en el Parlamento Español. Ante esta falta de datos me he puesto a investigar y ver si podía obtener la misma información y un porcentaje cercano al del Parlamento Europeo.

En primer lugar es necesario saber de dónde obtener estos datos: http://www.congreso.es

En esa web se pueden descargar las votaciones realizadas en el Congreso de los Diputados. Sin embargo, solo es posible obtener las votaciones desde el 2012 hasta la actualidad, con lo que solo tenemos datos de un par de años.

No os voy a aburrir con el proceso para obtener esas votaciones y guardarlas en una base de datos. Para el que desee utilizar los datos puede acceder a esta hoja de cálculo: https://docs.google.com/spreadsheets/d/1-7TpVUuZu01YB0BSldw5ZAoXDeFl0gLUXJRWzr1sBoU/edit?usp=sharing

LAS VOTACIONES

En 2013 se realizaron 1467 votaciones en el Congreso de los Diputados de las cuales 23 son por asentimiento, es decir, no se vota, simplemente el Ministro correspondiente asiente con la cabeza. Por tanto tenemos 1444 votaciones en las que los Diputados tuvieron la oportunidad de decidir sobre cuestiones muy variadas.

De esas 1444 votaciones, en 347 de ellas el Partido Popular y el Partido Socialista votaron lo mismo, eso es un 24’03% muy lejos del 70% del Parlamento Europeo.

LA ASISTENCIA

En el 2013 votaron en el Congreso 354 Diputados, esto es debido a que se produjo la sustitución o baja de 4 Diputados durante el transcurso del año. Sobre el total de Diputados habitual en el Congreso, 350, ningún diputado asistió a todas las votaciones, aunque habría que valorar si entre los cuatro Diputados sustituidos y sus sustitutos sumarían suficientes asistencias para haber asistido a todas las votaciones.

Os dejo el top-ten de asistencia de los Diputados para las votaciones de 2013:

NombreApellidosAsientoGrupoFecha de la primera votación en la que participaNúmero de votaciones en las que está presenteNúmero de votaciones en las que no está presente
MarianoRajoy Brey3108GP11/01/20121031318
IkerUrbina Fernández2804GMx11/01/20121821239
MaiteAriztegui Larrañaga2703GMx11/01/20122191202
MeritxellBatet Lamaña1713GS11/01/2012428993
María PilarAlegría Continente1404GS11/01/2012497924
ElenaValenciano Martínez-Orozco1207GS11/01/2012563858
María IsabelLópez i Chamosa1714GS11/01/2012666755
AlfonsoGuerra González1401GS11/01/2012723698
OnintzaEnbeita Maguregi2601GMx21/06/2012766655
Xabier MikelErrekondo Saltsamendi2602GMx11/01/2012786635
Debian logo

Cambiando todo el hardware del ordenador en Debian 7 Wheezy

0

Después de unos cuantos años sin renovar el hardware del pc, este mes tocó renovación, y a lo grande. Principalmente por el final de soporte de Windows XP y que para algunos proyectos (y juegos… ejem, ejem) necesitaba más memoria RAM.

He dedicado bastantes horas a valorar que hardware comprar y que no se me fuese de presupuesto. Al final me decidí por lo siguiente:

Micro AMD FX 8350 Black Edition (8 nucleos)

Placa base ASUS M5A99FX PRO R2.0

Tarjeta gráfica ASUS GeForce NVIDIA GTX 780

– Fuente de alimentación Aerocool Strike-X 800

Y torre nueva: Aerocool Strike-X Advance

Los discos duros, aunque ya han superado su edad de vida media, aun funcionan, así que de momento no se tocan.

La instalación fue relativamente sencilla, aunque como ocurre siempre en un equipo de hace seis años, siempre hay algo que no funciona en el hardware nuevo. Uno de ellos fue uno de los discos duros, que por alguna extraña razón la placa no me lo reconocía. Por suerte solo era un disco para almacenar chorradillas que no se donde meterlas.

Una vez conectados los discos duros y que todo estuviera bien conectado, crucé los dedos y pulse el interruptor de la torre… se encendió a la primera, la placa base, los leds azules de la la torre, los ventiladores, el cooler, la gráfica, los discos duros,… espera… ¿Y ese pantallazo azul?… Mierda, Windows XP ha cascao, seguro que tenía alguna librería en el disco duro que no reconocía la placa, en fin, ¡Larga vida a Debian 7!

La verdad es que no fue un gran problema que Windows XP muriese en el proceso, al fin y al cabo llevaba tiempo queriendo cambiar definitivamente a Debian, así que fue una razón más para abandonar Windows por algo mucho mejor.

Aunque leí que cambiar el hardware en Debian no tenía por qué suponer un problema, es decir, que al entrar en el Sistema Operativo todo funcionaría igual; mi experiencia me decía que esto iba a cascar por todos lados.

Bueno pues me equivoqué a medias: el cambio de hardware hizo que se mostrasen algunos fallos (el módulo del kernel para la tarjeta de red, por ejemplo), pero solo fallo por un lado: la tarjeta gráfica, que impedía que se iniciase el servidor gráfico.

Y es que Debian 7 Wheezy no reconocía la gráfica debido a que los drivers de nvidia en Wheezy solo llegan hasta la 302, y para que me la reconociese necesitaba mínimo la 319, que es la que da soporte a la GTX 780.

¿Solución? Actualizar a Debian 8 Jessie, o lo que es lo mismo: pasar de stable a testing. He de decir que Jessie es bastante estable, y sabiendo que está previsto que se congele la inclusión de nuevos paquetes en esta rama hacia Noviembre de 2014, no había riesgo de que fallase por otro lado.

En primer lugar hay que editar el archivo /etc/apt/sources.list y sustituir la palabra “wheezy” por “jessie“, y “stable” por “testing“.

Hacemos un apt-get update, y si todo ha ido bien ejecutamos apt-get dist-upgrade, y a esperar que se descargue e instale todo.

Una vez instalado todo, seguiremos sin gráfica y sin servidor gráfico. Primero comprobamos que ahora sí reconoce la gráfica escribiendo en la consola el siguiente comando: lspci | grep “VGA”.

Este comando nos debe mostrar el modelo de tarjeta gráfica que tenemos.

Y a partir de aquí es hora de configurar la gráfica. Para ello os voy a dejar un artículo que me ha ayudado muchísimo a la hora de configurarla y se merece que le enlace; los pasos a seguir ya sea en Debian 7 Wheezy o Debian 8 Jessie son los mismos, con lo que espero que este tutorial os valga tanto como me ha servido a mí:

Instalar los drivers nvidia privativos en Debian

Votaciones en el Congreso de los Diputados en 2012: ¿PP y PSOE votan lo mismo?

1

Hace un tiempo se publicó que en el Parlamento Europeo los dos grandes partidos (PPE y PS&D) votaban lo mismo en el 70% de las ocasiones. Sin embargo, poco o nada se ha comentado respecto a las votaciones en el Parlamento Español. Ante esta falta de datos me he puesto a investigar y ver si podía obtener la misma información y un porcentaje cercano al del Parlamento Europeo.

En primer lugar es necesario saber de dónde obtener estos datos: http://www.congreso.es

En esa web se pueden descargar las votaciones realizadas en el Congreso de los Diputados. Sin embargo, solo es posible obtener las votaciones desde el 2012 hasta la actualidad, con lo que solo tenemos datos de un par de años.

No os voy a aburrir con el proceso para obtener esas votaciones y guardarlas en una base de datos. Para el que desee utilizar los datos puede acceder a esta hoja de cálculo: https://docs.google.com/spreadsheets/d/1-7TpVUuZu01YB0BSldw5ZAoXDeFl0gLUXJRWzr1sBoU/edit?usp=sharing

LAS VOTACIONES

En 2012 se realizaron 1510 votaciones en 80 sesiones en el Congreso de los Diputados, de las cuales 32 son por asentimiento, es decir, no se vota, simplemente el Ministro correspondiente asiente con la cabeza. Por tanto tenemos 1478 votaciones en las que los Diputados tuvieron la oportunidad de decidir sobre cuestiones muy variadas.

De esas 1478 votaciones, en 39 de ellas el Partido Popular y el Partido Socialista votaron lo mismo, eso es un 2’64% muy lejos del 70% del Parlamento Europeo.

El Partido Popular no se abstuvo en ninguna votación, a excepción de algunos Diputados de este partido que sí lo hicieron. Sin embargo el Partido Socialista se abstuvo en seis ocasiones.

LA ASISTENCIA

En el 2012 votaron en el Congreso 370 Diputados, esto es debido a que se produjo la sustitución o baja de 20 Diputados durante el transcurso del año. Sobre el total de Diputados habitual en el Congreso, 350, asistieron a todos las votaciones 28 Diputados, a los cuales habría que añadir los 20 Diputados sustituidos, siempre y cuando tanto el primer Diputado como su sustituto hubieran asistido a todas las votaciones. Esto nos indica que entre 28 y 48 Diputados asistieron a todas las votaciones, siempre excluyendo las votaciones por asentimiento.

El top-ten de faltas de asistencias es el siguiente:

NombreApellidosAsientoGrupoFecha de la primera votación en la que participaNúmero de votaciones en las que está presenteNúmero de votaciones en las que no está presente
Xabier MikelErrekondo Saltsamendi2602GMx11/01/20122741204
IkerUrbina Fernández2804GMx11/01/20123621116
MaiteAriztegui Larrañaga2703GMx11/01/20124711007
SabinoCuadra Lasarte2704GMx11/01/2012534944
MarianoRajoy Brey3108GP11/01/2012576902
JonIñarritu García2805GMx11/01/2012640838
María del CarmenSilva Rego7GS11/01/2012748730
ElenaValenciano Martínez-Orozco1207GS11/01/2012794684
RafaelLarreina Valderrama2603GMx11/01/2012817661
MontserratSurroca i Comas2306GC-CiU11/01/2012819659
Feed RSS de Mikel
Ir arriba