Configurar Subversion para controlar las versiones del código

Para los que nos dedicamos al desarrollo de software es de vital importancia poder hacer un seguimiento de todos los cambios que realizamos en una aplicación, sobre todo cuando se trata de trabajar en equipo con distintos programadores realizando distintas tareas, e incluso llevar un control de los cambios que realizan distintos equipos dentro de un mismo software.

Cuando el proyecto está bajo el paraguas del software libre, herramientas como las proporcionadas por www.sourceforge.net son de mucha ayuda. Entre ellas se encuentra el uso de Subversion o CSV para la gestión de versiones. Personalmente prefiero subversion.

Este es un pequeño HOWTO de como configurar subversion corriendo bajo Apache, se presupone que se tiene instalado Apache, Subversion, el módulo DAV para Apache y las herramientas de administración de Subversion.

Lo primero que debemos hacer es crear un directorio para nuestro repositorio. Nuestro directorio principal para guardar nuestro control de versiones sobre subversion será /var/subversion/, dentro crearemos un subdirectorio donde se almacenarán los datos con subversion:

# mkdir /var/subversion/repositorio

Ahora debemos crear la estructura de subversion para almacenar las versiones y asignarle permisos para poder acceder:

# svnadmin create /var/subversion/repositorio/
# chmod 777 -R /var/subversion/repositorio/

Con esto ya tenemos listo el repositorio, ahora debemos generar el acceso a través de URL, para ello usaremos el módulo de Apache WebDav. Editaremos el fichero de módulo DAV de Apache (en Devian lo encontraremos en /etc/apache2/mods-available/dav_svn.conf), al final del fichero incluiremos las siguientes líneas:

# Acceso repositorio SVN

DAV svn
AuthType Basic
AuthName «Servidor Subversion»
SVNPATH /var/subversion/repositorio

En «Location» debemos poner la URL por la que queremos acceder al repositorio y en SVNPATH debemos colocar la ruta absoluta hacia el directorio que contendrá los ficheros de nuestro repositorio. Con esto ya debería estar funcionando nuestro repositorio con Subversion, basta con enlazarlo desde cualquier IDE que soporte control de versiones y comenzar a guardar las versiones de vuestros proyectos.

Como subversion no es sólo lo que he comentado, existe un estupendo manual donde podéis encontrar todas las funciones que ofrece este gestor de versiones.

Evolución del uso de los lenguajes de programación

grafico-lenguajes-programacion-rankingA través de Vaya Astracanada, me entero de que la comunidad de programadores de TIOBE ha publicado la actualización de su ranking de uso de los lenguajes de programación, y su evolución en los últimos años. A la cabeza se mantiene Java (20,4%), seguido bastante de cerca por C (17,3%). Por detrás y a bastante distancia se encuentran en rangos similares C++ (10,4%), PHP (9,3%) y Visual Basic (7,8%). En el gráfico podemos apreciar un fuerte descenso de C++ a partir de 2005 y un estancamiento en la evolución ascendente que mantenía PHP hasta 2006.

Llamativa es la caida de Perl, que ahora mismo sitúa su popularidad por debajo de lenguajes como Python y C#, y con Javascript pisandole los talones.

Los valores Booleanos en PHP

La lógina Booleana es muy importante para las estructuras de flujo de control. Estos valores son utilizados para definir que conjunto de instruciones van a ser procesadas en función de la condición que se determine, en otras palabras ante una encrucijada que decisión se toma.

Dentro de la lógica Booleana, dos valores toman especial relevancia TRUE y FASLSE (verdadero y falso). En PHP no es necesario convertir a estos valores determinados resultados para obtener el mismo efecto. Los siguientes valores serán tomados como el FALSE Booleano:

  • [ 0 ] El entero cero.
  • [ 0.0 ] El número flotante cero punto cero.
  • [ » » ] Las cadenas vacias.
  • [ «0» ] La cadena cero.
  • [ array() ] Un array vacio.
  • [ object{} ] Un objeto vacío.
  • [ NULL ] El tipo especial null, incluyendo todas las variables no establecidas.

Todos los demás valores serán considerados TRUE. Hay que tener en cuenta que la evaluación de una expresión como TRUE o FALSE dependerá del resultado y no de los valores que se comparan. Por ejemplo si establecemos $a = 3 y $b = 7, ambas variables serán evaluadas como TRUE. Pero si preguntamos si $a es mayor que $b el resultado será FALSE.

También hay que tener en cuenta que cuando asignamos un valor Booleano a una variable (por ejemplo: $var = false) y la mostramos por pantalla veremos un valor numérico (en el ejemplo echo $var mostrará 0).

Archivo de log de Qmail con Plesk

Normalmente es posible encontrar el archivo de log de Qmail en la las siguientes rutas:

  • /var/log/qmail/current
  • /var/log/mail/
  • /var/log/maillog

Pero cuando tenemos instalado Qmail a través de Plesk la ruta por defecto del log se establece en el directorio de Plesk (/usr/local/psa/). Así podremos encontrar el archivo de log de Qmail en la siguiente ruta /usr/local/psa/var/log/maillog

Frameworks PHP: Zend vs Symfony

Cuando uno se plantea por primera vez el uso de un framework en PHP comienza a darle vueltas a las posibilidades que ofrecen unos y otros. Aunque la curva de aprendizaje en el uso de un framework es dura, todo el tiempo que le dediquemos a conocer a fondo aquel por el que nos decidamos será el tiempo mejor invertido en formarnos como desarrolladores.

En este caso quiero plantear una comparación entre dos de los frameworks más extendidos Zend y Symfony.

Documentación y aprendizaje. Com he dicho la curva de aprendizaje para poder usar correctamente y con soltura un framework necesita de un esfuerzo, mucho más si llevamos años programando sin usarlo. Symfony dispone de guias y manuales en abundancia, y además cuenta con numerosos foros en varios idiomas donde la comundad va resolviendo dudas. En el caso de Zend, a pesar de ser el framework de la empresa que está detrás de PHP, la comunidad es algo escasa, por tanto su documentación también.

Pruebas unitarias. Symfony dispone de tareas por linea de comandos para realizar testing, y además genera una clase vacia con cada nuevo controdalor desde el que poder realizar las pruebas. Zend no dispone de esta funcionalidad, algo que me parece muy importante a la hora de lanzar una aplicación a un entorno de producción.

Plantillas y plugins. Al sistema de plantillas de Zend le queda todavía un largo camino que recorer, mientras que en Symfony el sistema está ya muy avanzado, con la posibilidad de agragar módulos. Y otro tanto ocurre con los plugins, en Symfony es posible aumentar sus funcionalidades a base de plugins, mientras que Zend carece de esta característica.

Bases de datos. El trabajo con base de datos en Zend se limita a usar ActiveRecord (que no digo que esté mal), pero en Symfony tienes la posibilidad de usar el motor de base de datos que quieras, incluyendo el propio Zend_Db, algo que aporta una enorme flexibilidad al desarrollador que puede elegir en cada proyecto cual es la mejor opción.

Como conclusión a lo dicho quiero añadir, para todos aquellos que quieran dar el salto a hacer desarrollos basados en un framework, que a pesar de que al principio pueda resultar un poco engorroso con el tiempo os ayudará a mantener una limpieza de código y un mantenimiento de aplicaciones mucho más sencillo.

Utilidad y uso de EXPLAIN en MySQL

logo_mysql

A la hora de realizar una buena optimización de las consultas de MySQL habrá que prestar mucha atención a lo que dice la cláusula EXPLAIN. Su sintaxis es muy sencilla, basta anteponerlo a la consulta que queremos realizar para obtener toda la información.

EXPLAIN SELECT columna1, columna2 FROM tabla1 WHERE columna3 = ‘2’\G

El resultado que obtendremos será el plan de ejecución de la consulta a la base de datos. Una explicación de como accederá MySQL a las diferentes columnas involucradas en la consulta. EXPLAIN devolverá:

  • id: Es el identificador que EXPLAIN asignará a la consulta.
  • select_type: Tipo de consulta a analizar. Por ejemplo, si se trata de una consulta sencilla su valor será SIMPLE.
  • table: Nombre de la tabla a la que hacen referencia el resto de datos en la fila. Hay que tener en cuenta que el orden de las filas será el que utilizará MySQL para acceder a los datos.
  • type: Indica como MySQL combinará los datos de esa tabla.
  • possible_keys: Lista de los indices que se podrían utilizar, aunque podría no usarse ninguno.
  • key: Índice que finalmente se usará, si no se usa ninguno el valor del campo será NULL.
  • key_len: Tamaño del indice utilizado, si no se usó ninguno contendrá NULL.
  • ref: Muestra con que campo está relacionado el índice seleccionado.
  • rows: Número de registros que se tendrán que recuperar para ejecutar la consulta.
  • extra: Información adicional sobre la forma en que se obtendrán los datos.

Con esta información es posible encontrar donde se producen los cuellos de botella en las consultas que realizamos a la base de datos, y nos permitirá optimizarlas para evitar que una consulta lenta provoque un retraso injustificado en la devolución de resultados a los usuarios. En el manual de MySQL puedes encontrar más información.

Galite organiza unha xornada de Software Libre en Foz

cartelcursodrupalGalite, o Grupo Asociado pola Libre Información e a Tecnoloxía, organiza o vindeiro 21 de marzo unha xornada sobre software libre no Concello de Foz. O encontro terá lugar na Casa da Xuventude da vila e estará aberta á participación de calquera persoa interesada en iniciarse ou afondar no coñecemento das tecnoloxías e os estándares abertos.

A xornada iniciarase ás 12:00 horas coa presentación do Galinux, o sistema operativo libre e en galego promovido pola Dirección Xeral de Promoción Industrial e da Sociedade da Información e enmarcada no Plano Estratéxico Galego da Sociedade da Información (PEGSI 2007-2010).

A continuación impartirase un obradoiro titulado «Introdución a Drupal», no que se abordará a instalación deste sistema de xestión de contidos (CMS), así como a súa configuración para a creación dunha web particular, empresarial ou unha comunidade online.