Too Cool for Internet Explorer

No tienes ni puta idea 16

Hora y Fecha: Febrero 28, 2007 @ 12:20 am Autor: Moisés Maciá
Categorías:
621 views

Después de un poco de ensayo y error he descubierto que la gente que pelea con el código no lo hace con grandes problemas, ni siquiera con pequeños problemas (por ejemplo implementar una lista enlazada). Batallan con problemas insignificantes.

Asi que he preparado una serie de preguntas que me permitan identificar este tipo de programadores, a estas cuestiones las llamo Preguntas chorra. Un ejemplo de pregunta chorra podría ser el siguiente:

Escribe un programa que imprima los números del 1 al 100. Pero para los múltiplos de 3 imprime “Fizz” en lugar del número y para los múltiplos de 5 imprime “Buzz”. Para los números que son múltiplos de 3 y 5 a la vez imprime “FizzBuzz”.

La mayoría de los buenos programadores son capaces de escribir en papel un programa que hace esto en un par de minutos. ¿Quieres saber algo terrible? La mayoría de los licenciados en informática son incapaces de hacerlo. Incluso aunque en la entrevista se hayan auto proclamado programadores senior, toman más de 10-15 minutos en escribir la solución.

Por fin Jeff Atwood empieza a repartir estopa: Why Can’t Programmers.. Program? Y es que hay muchos consultores, de los que cobran en un mes lo que yo en un año, que no saben ni lo que son las expresiones regulares. Lo que es no tener ni puta idea, oiga.

Después pasan cosas.

También se hacen eco en Menéame.



Bases de datos open source 5

Hora y Fecha: Febrero 17, 2007 @ 1:17 am Autor: Moisés Maciá
Categorías:
770 views

No solo de MySQL vive el programador, hoy daremos un repaso al amplio abanico que ofrece el mundo del sofware libre en el ámbito de las bases de datos.

No es mi intención encontrar la mejor de ellas, o realizar un análisis en profundidad de todas y cada una de sus características, solo comentaré la variedad de soluciones que hay disponibles ahí fuera. Supongo que mis lectores habituales ya conocen que es el software libre, y porque se debería utilizar. Si no es así, echa un vistazo a los recursos del final del artículo.

Entonces, ¿cuales son las bases de datos de código libre? La mayoría de los lectores habrán oído hablar de MySQL. Es por definición la base de datos de código libre más popular del mundo después de todo. También está PostgreSQL (la base de datos de código libre más avanzada del mundo), así como Firebird (la base de datos relacional del nuevo milenio). Sin embargo, todavía hay más. BerkeleyDB, si bien no es directamente comparable, merece una mención, mientras que Computer Associates ha lanzado recientemente Ingres, e IBM ha hecho lo mismo con Cloudscape (bajo el nombre de Derby).

Echemos un vistazo a cada uno de estos productos:

Berkeley DB

Al contrario que muchas otras listadas aquí, Berkeley DB no es un DBMS completo, lleno de herramientas gráficas de reportes y cosas así. Ni siquiera tienen una capa de proceso de consultas. En lugar de eso, es un motor relacional de almacenamiento empotrado muy ligero, pensado para aplicaciones que no requieren una instalación de un DBMS completo. Los usuarios de MySQL tienen la opción de utilizar el motor de datos de Berkeley DB (al principio era a única manera de garantizar capacidades transaccionales en MySQL).

Derby

Si Derby tuviera una definición, probablemente sería la base de datos empotrada en Java más famosa del mundo. Esto da una idea del nicho que cubre este producto. IBM donó la base de datos comercial Cloudscape con el nombre de Derby bajo una licencia libre a la Fundación Apache, en la que permanece bajo consideración como un proyecto incubado, poco después de que Computer Associates hiciera lo propio con Ingres.

Cloudscape es una base de datos empotrada orientada a Java, lo cual significa que el DBMS forma parte de la aplicación Java, tiene un consumo de memoria muy reducido y está diseñada para funcionar sin la necesidad de tener a un DBA dedicado a su mantenimiento. No está enfocada a ser una base de datos de calidad empresarial, su función es cubrir las necesidades de los desarrolladores de Java.

Firebird

Inprise (ahora Borland) fue una de las primeras compañías comerciales en lanzar una base de datos bajo los términos del software libre cuando liberaron a principio del 2000 su producto Interbase. Interbase 6 fue lanzado bajo una variante de la licencia Mozilla. Borland ha lanzado desde entonces las versiones 6.5, 7, 7.1 y 7.5 de su producto comercial, pero Firebird ha continuado desarrollándose en paralelo basándose en la versión del código fuente de Interbase 6.0.

Firebird tiene una comunidad de usuarios pequeña pero muy activa, y hasta hace poco era el factor olvidado en los debates MySQL vs PostgreSQL. Firebird ha tenido siempre muchas más características que MySQL, y también, al contrario que PostgreSQL, siempre ha funcionado sin problemas bajo plataformas Windows, Linux y otras variantes de Unix. Firebird por otra parte también ha sido un poco maltratada por Borland desde su lanzamiento, en el sentido que no lanzaron todos sus componentes, y los scripts de compilación ¡ni siquiera funcionaban!

Una falta importante es el motor de replicación (Firebird dispone de una funcionalidad llamada shadowing, que mantiene una copia idéntica de la base de datos en producción, pero no es exactamente un método de replicación). Hay en marcha proyectos, la mayoría de ellos comerciales, pero los de código libre no parecen muy maduros, o integrados en el código base de Firebird. El desarrollo de Firebird también es relativamente lento, con la versión 1.5 lanzada recientemente se han centrado en reescribir el código en C++ (desde C), y no se han añadidos nuevas características. Sin embargo, Firebird es un DBMS relativamente maduro, y está dirigido a reemplazar sistemas Oracle y SQL Server en aplicaciones comerciales.

Hay disponibles dos sabores: Classic y Super Server, la versión Super server gestiona mejor los recursos, y es la más indicada para entornos de gran volumen (parece que la mayoría del desarrollo se enfoca en este campo). También hay tres variantes de SQL, que varían en la conformidad con los estándares ANSI.

Firebird tiene una base de usuarios leales, es un buen producto para trabajar, y si consigue aumentar su velocidad de desarrollo, asi como mejorar su marketing, será un competidor muy fuerte.

Ingres

Ingres empezó como un proyecto de base de datos relacional en la Universidad de California, Berkeley (la misma universidad americana directa o indirectamente responsable de muchas de las contribuciones al mundo del software libre, incluyendo BSD Unix, Postgres, vi y Tcl). Se convirtió en uno de los proyectos mas influyentes en el mundo de las bases de datos. Con el código lanzado bajo una variante de la licencia BSD, todos los productos propietarios Sybase, SQL Server e Informix tienen sus raíces en Ingres, así como PostgreSQL.

En 1982, Michael Stonebraker, uno de los fundadores del proyecto, fundó Ingres Corporation, e intentó comercializar el producto. ASK y, posteriormente, Computer Associates compraron el producto, y continuaron desarrollándolo y haciendo negocio con él. Sin embargo, con el resto de bases de datos de código abierto haciendo serias incursiones en el mercado de las bases de datos comerciales, optaron por liberar todo el código en 2004.

Ingres es conocida por su fiabilidad y su escalabilidad, pero sufre de una mala reputación al retrasarse en incorporar características, parece que no ha habido mucho desarrollo desde que Computer Associates adquirió el proyecto en 1994. Podría decirse que, dejando a un lado a Oracle, esta implantada en más entornos empresariales que ninguna otra base de datos de código libre, y está por delante de MySQL en características, sin embargo la documentación disponible en linea es bastante pobre en comparación con las otras. Sus características mas importantes incluyen:

  • Consultas paralelas (permitiendo una escalabilidad soberbia, una simple consulta puede dividirse en componentes que se ejecutan a lo largo de todos los recursos disponibles).
  • Reorganización de tablas online (no es necesario parar la base de datos para realizar las rutinas de mantenimiento).

CA también subvenciona el proyecto a través del programa Million Dollar Challenge, por el que la comunidad de desarrolladores está invitada a crear soluciones que permitan migrar sistemas Oracle, SQL Server, Sybase, DB2, Informix, y/o MySQL a Ingres. Se anunciaron seis ganadores durante la conferencia anual de CA en Abril de 2005.

La liberación de Ingres bajo una licencia de software libre le ha dado una segunda oportunidad al proyecto, y se esperan ver grandes avances en el desarrollo del producto.

MySQL

MySQL es conocida por ser la base de datos más popular, impulsada por el boom de Internet, es utilizada ampliamente para aplicaciones web. En principio rápida y fácil de utilizar, pero con funcionalidad limitada, MySQL ha trabajado en dotar de nuevas funcionalidades al producto, y aunque todavía carece de presencia en el ámbito empresarial más exigente, su popularidad, y su gran base de usuarios significan que hay muchísimas herramientas y aplicaciones que trabajan con MySQL, con toneladas de soporte extra oficial que complementa el soporte oficial de MySQL.

MySQL no tiene demasiada potencia en vistas, triggers y procedimientos almacenados, características importantes para muchos usuarios.

MySQL alcanzó un hito importante cuando SAP licenció el uso de su tecnología SAPDB a MySQL. SAPDB es un DBMS maduro y lleno de funcionalidades que, aunque no esta integrado completamente con el resto de MSQL, dota al sistema de un entorno preparado para las empresas respondiendo de esta manera a los más críticos. MySQL ha cobrado una tremenda fuerza después de esto, y si son capaces de implementar rápidamente las características que faltan, mientras mantienen la facilidad y velocidad del producto, tendrán una combinación imbatible.

PostgreSQL

PostgreSQL no existía como tal hasta 1996, cuando Postgres95 cambió de nombre, reflejando la importancia del recientemente añadido interprete de SQL. Antes de esto Postgres, también un proyecto del famoso Michael Stonebraker y diseñado para ser el sucesor de Ingres, usaba QUEL, que es bastante parecido a SQL y discutiblemente más consistente en su estructura. Sin embargo, la predominancia de bases de datos basadas en SQL como Oracle y DB2 hacían que QUEL no obtuviera el favor de la industria y se dejara de lado.

Afortunadamente, Postgres fue lanzado bajo la licencia BSD, y aunque el proyecto auspiciado por la Universidad de Berkeley había terminado, el código seguía disponible libremente, el proyecto continuó en desarrollo hasta lo que conocemos hoy en día.

Hasta el reciente lanzamiento de la versión 8.0, PostgreSQL no estaba disponible para Windows, pero es de esperar que que su cuota de mercado se incremente en la medida que los usuarios de Windows empiecen a descubrirlo. Su fama de avanzada no es en vano. Dispone de casi todas las características requeridas para ser una base de datos de nivel empresarial, así como un buen número de características poco habituales y potencialmente útiles:

  • Tipos de datos y operadores definidos por el usuario.
  • Herencia de tablas (donde una tabla puede heredar todas las columnas de su padre, pero las demás pueden ser definidas)
  • Indices parciales o por expresión (indices definidos sólo en una parte de la tabla, limitados por una condición, o creados en la salida de una expresión)
  • Múltiples lenguajes para procedimientos almacenados (incluyendo el nativo PL/PgSQL, PL/PHP, PL/Perl y PL/Python)

PostgreSQL era lento y no proporcionaba binarios nativos para Windows. Hoy en día han rectificado estas cosas y la base de datos está experimentando una aceleración en su crecimiento.

Recursos



Have you tried to turn it off and on again? 1

Hora y Fecha: Febrero 16, 2007 @ 11:27 pm Autor: Moisés Maciá
Categorías:
460 views
IT Crowd

Por fin llegó, más de un mes ha tardado el jodio …

IT Crowd Version 1.0

PD. El servicio de soporte de Amazon es inmejorable.



Subversion hooks 6

Hora y Fecha: Febrero 6, 2007 @ 1:16 am Autor: Moisés Maciá
Categorías:
779 views

Subversion tiene una funcionalidad muy interesante que permite al administrador del repositorio incluir scripts o programas (llamados hooks) que se ejecutarán bajo determinadas circunstancias al hacer uso del repositorio. Se suelen utilizar estos hooks para tareas como enviar un correo a todos los miembros del equipo cada vez que alguien hace un commit o comprobar la distintas métricas del código antes de entrar al repositorio.

En este artículo describiré la administración y automatización de tareas de despliegue de aplicaciones utilizando el sistema de control de versiones Subversion.

Hooks

Un gancho es un programa activado por algún evento del repositorio, como la creación de una nueva revisión o la modificación de una propiedad no versionada. A cada gancho se le da suficiente información para que sepa de qué evento se trata, cuál es su objetivo, y el nombre de usuario de la persona que disparó el evento. Dependiendo de la salida del gancho o de estado de su salida, el programa de enganche puede continuar la acción, pararla, o suspenderla de alguna manera.

Hay una plantilla por cada gancho que implementa el repositorio Subversion, y examinando los contenidos de dichas plantillas de scripts, puede ver qué disparador ejecuta cada script y qué datos se le pasan. También se encuentran en muchas de estas plantillas ejemplos de cómo debería usar dicho script, conjuntamente con otros programas provistos por Subversion, para realizar tareas comunes y útiles. Para instalar realmente un gancho funcional, sólo necesitas colocar algún ejecutable o script en el directorio repos/hooks que pueda ser ejecutado con el nombre del gancho ( como start-commit o post-commit).

En plataformas Unix, esto significa proveer un script o programa (podría ser un shell script, un programa Python, un binario C compilado, o cualquier otra cosa) llamado exactamente igual que el nombre del gancho. Por supuesto, los ficheros de plantillas están presentes para algo más que sólo propósitos informativos—la manera más fácil de instalar un gancho en plataformas Unix es simplemente copiar el fichero de plantilla apropiado en un nuevo fichero sin la extensión .tmpl, personalizando los contenidos del gancho, y asegurándose de que el script sea ejecutable.

Actualmente hay cinco ganchos implementados por el repositorio Subversion:

  • start-commit
  • pre-commit
  • post-commit
  • pre-revprop-change
  • post-revprop-change

Hay información detallada del desempeño de cada uno de estos ganchos en la documentación de Subversion.

Escenario

Supongamos que estamos desarrollando una aplicación web y disponemos de dos entornos de despliegue claramente diferenciados: un entorno de pruebas y otro entono de producción. Lo que más nos interesa es que los cambios que envíen los desarrolladores se vean reflejados en el entorno de pruebas tan rápidamente como sea posible, de esta manera los beta-testers dispondrán siempre de una copia fresca del software para trabajar.

La idea de tener a una persona dedicada a conciliar los cambios de varios desarrolladores y mantener el entorno de pruebas actualizado continuamente y sin errores es ridículamente estúpida en su misma concepción (lo cual no impide que muchos proyectos se hagan de esta inteligente manera).

En definitiva lo que queremos conseguir con Subversion es automatizar el despliegue: que cada fichero modificado, borrado o incluido se suba mediante FTP y se vea reflejado al instante en el servidor de pruebas, delegando las decisiones sobre el repositorio, que por algo recibe el nombre de control de versiones, y aprovechando mejor el tiempo para ir a tomar un café o escribir artículos como este :)

Script

La labor del script consiste en ver que es lo que ha cambiado desde la última vez y subir los cambios a la cuenta FTP del servidor de pruebas. El gancho que mejor se adapta a esta funcionalidad es post-commit (se ejecuta al final de la transacción) y las operaciones que nos podemos encontrar son las siguientes:

  • Subir un fichero modificado o crear un fichero nuevo.
  • Eliminar un fichero.
  • Crear un directorio.
  • Eliminar un directorio (recursivamente).

A lo que hay que añadir la peculiar forma de trabajar del protocolo FTP (un directorio debe estar vacío antes de borrarlo y hay distinción entre archivos binarios y de texto).

El gancho post-commit nos proporciona la ruta del repositorio que ha cambiado y el número de revisión pero nos falta lo más importante, saber qué ficheros han cambiado. Para esto nos podemos ayudar de la propia librería de desarrollo de Subversion (si está disponible un port para el lenguaje que empleemos) o bien utilizar herramientas externas.

Lo más sensato es utilizar herramientas externas como svnlook o svnadmin y no perder el tiempo programando más de lo que realmente hace falta.

He utilizado PHP para programarlo; no es lo más habitual ya que todos los ejemplos que he encontrado estaban escritos en Python o en Perl (incluso en Ruby, válgame $DEITY lo ponen hasta en la sopa ;) ) pero doy fé de que funciona perfectamente, incluso más bien de lo que esperaba :)

SVN FTP synchronization post-commit hook v0.1

Reaprovechado la idea se puede construir un script que compile un ejecutable y lo deje empaquetado en un FTP, o bien generar la documentación del proyecto cada vez que este cambia. Las posibilidades son infinitas.

Con la emoción del momento programé algunos ganchos más, si hay interés los publicaré.



Paginar una consulta desde la consola MySQL 3

Hora y Fecha: Febrero 4, 2007 @ 2:49 am Autor: Moisés Maciá
Categorías:
590 views

Este truco va para los amantes de la línea de comandos y para los que han salido escaldados de las herramientas desktop de MySQL:

En muchas ocasiones, al realizar una consulta, la pantalla se llena de datos y el buffer del terminal acaba por agotarse, de forma que resulta imposible ver detenidamente todas las filas del resultado, especialmente las primeras.

Más de una vez he pensado que sería genial disponer de una herramienta como less para trabajar dentro de la consola de MySQL. Hasta que el otro día ví la luz:

mysql> \P less
PAGER set to 'less'

mysql> select foo,bar from table

Simplemente genial.



¡Apagate ya! 2

Hora y Fecha: Febrero 2, 2007 @ 1:34 am Autor: Moisés Maciá
Categorías:
666 views

Dos días en el mercado y Microsoft ya ha confirmado el primer ataque de denegación de servicio contra Vista:

El recien estrenado sistema operativo de Microsoft, Windows Vista, incorpora una tecnología capaz de interpretar ordenes que el usuario dicta al ordenador con su propia voz.

Aprovechando esta funcionalidad, un atacante podría construir una página web que al cargar reproduciera una muestra de audio maliciosa que el sistema operativo interpretaría como una orden del usuario: por ejemplo cerrar todas las ventanas o incluso apagar el sistema.

Esto es lo más surrealista que he visto en mucho tiempo, gracias Microsoft por estos hilarantes momentos.




Bad Behavior has blocked 320 access attempts in the last 7 days.