Archivo para enero de 2009

El autobús… de lo que quieras que sea

Desde el creador de esloganes para el autobús ateo podemos hacer cosas como éstas:

El original (y archiconocido):

Probablemente Dios no existe, así que deja de preocuparte y disfruta de la vida

Al estilo Matrix:

Probablemente no exista gente y tú no seas más que un holograma

Complejo de superioridad:

Dios sí existe (pero sólo en las mentes débiles)

Para tu página Web (habrá que incluirlo en la lista de los mejores):

Error 404 - Página no encontrada

Y el friki-ateo:

Error 404 - Dios no existe

A ver, ahora quiero más ideas… ¡¡más!! ;)

PostgreSQL y su lentitud de conteo

Qué desilusión. Mira que PosgreSQL había dado buenos resultados, muy buenos resultados, cuando nos íbamos de los tres millones de registros con relaciones y todo. Mantenía su integridad referencial, las inserciones y actualizaciones iban extremádamente rápido… vamos, profesional.

Pero, y realmente lo siento, no es aceptable que para hacer una consulta del número de filas de una tabla (un select count(*) from tabla;) se eternize. Vamos, en cuatro millones de registros tarda 1,5 segundos (en un Pentium D de doble núcleo a 2,8 GHz con 2 GB de RAM, que tampoco es mala máquina para hacer pruebas).

Incluso he leído por ahí que en una máquina con 8 procesadores y 16 GB de RAM tardaba 70 segundos en hacer un count en unos 64 millones de registros.

Y eso, dicen, es por la implementación del MVCC que tiene que recorrer la tabla entera cada vez que quiere contar las filas.

He encontrado una solución que da un valor aproximado de las filas en un tiempo aceptable (vamos, en menos de 1 segundo):

select reltuples from pg_class
join pg_namespace on (pg_class.relnamespace = pg_namespace.oid)
where nspname = ‘<espacio de nombres>
and relname = ‘<nombre de la tabla>‘;

El problema de esta solución es que da un valor aproximado y para que lo de exacto, cada vez que se hace un insert o un update hay que hacer un vacuum. Y tampoco es aceptable.

Y otra solución, como no, si lo que sobran son soluciones que nosotros podamos hacer, es añadir un trigger en inserción y borrado que actualice otra tabla con el conteo de filas. Pero esto es una chapuza. Hay que cambiar el motor de persistencia de tu framework para que use esas tablas en lugar del típico select count(*) ....

La cuestión es que, quizás, los de PostgreSQL deberían buscar una solución para resolver este problema. Quizás al estilo de MySQL (que guarda el número de registros de cada tabla) o quizás reimplementando el MVCC.

El caso es que ¿sigo con PostgreSQL o me vuelvo a MySQL? PosgreSQL 8 es muy buena, pero ¿estará MySQL 6 a la altura o será mejor? Las espectativas de la segunda prometen… habrá que esperar un poco.

Pequeña configuración de MySQL

Una pequeña configuración de MySQL, que hice hace tiempo ya, pero que no quiero que se me olvide para futuros sistemas.

Si estamos usando InnoDB, el motor de bases de datos de MySQL con el que tenemos integridad referencia y demás cosas interesantes, los datos se guardan en un sólo archivo generalmente llamado ibdata1 (en el directorio de datos de MySQL). Luego están las definiciones de las tablas y los índices en otro archivos, pero los datos principales están en este.

Lógicamente, esto puede crecer de forma descontrolada, bien sea porque metemos muchos datos, o bien porque queremos saber si nuestro Pentium II a 350 MHz puede con 50 millones de registros.

El caso es que cuando nos demos cuenta de que nuestra máquina va sobrada con tanto registro y borramos la base de datos, el espacio ocupado por estos datos no se libera. ibdata1 sigue ahí, grande y gordo, aunque casi vacío.

Pero esto tiene solución. En el archivo de configuración de MySQL, generalmente en /etc/mysql/my.cnf en Linux (en Windows no me acuerdo) hay que poner la siguiente línea de configuración:

innodb_file_per_table = 1

Con esto indicamos a MySQL que las tablas de InnoDB deben ir cada una en un archivo. Así, si las borramos, se borrará también el archivo con lo que liberaremos el espacio ocupado por los 50 millones de registros.

Eso sí, esto lo debemos hacer recién instalada la base de datos ya que si lo hacemos cuando ya tenemos bases de datos creadas, hasta que no se borren y se vuelvan a crear no usarán un archivo distinto (y el ibdata1 seguirá ocupando espacio).

Y, ya de paso, si tienes una máquina con 4 o más GB de memoria RAM, es interesante poner las propiedades key_buffer = 512M, query_cache_size = 512M, join_buffer_size = 16M, sort_buffer_buffer = 32M e innodb_buffer_pool_size = 512M para tener la máxima memoria posible para las queries, índices, ordenación y datos.

Ale, a partir de ahora, a probar qué tal van nuestras máquinas con MySQL aunque ahora yo voy a probar PostgreSQL que, digamos, es más serio que MySQL (al menos que las versiones de MySQL anteriores a la 5). Y promete que soporta muchos más registros que MySQL manteniendo los tiempos de acceso e inserción. A ver si es verdad.

WALL·E

Logotipo de la película WALL·E

Acabo de ver WALL·E, que la tenía bajada desde hace tiempo, y tengo que decir que es una película extraordinaria.

En principio, los gráficos son espectaculares. Se nota que la técnica avanza en los estudios Pixar. Vamos, o la técnica o el tiempo de renderizado de los fotogramas. En cualquier caso, son los mejores que he visto hasta el momento para una película de animación.

Y la historia no se queda atrás. Aquí no me gusta desvelar nada de la trama, así que lo siguiente leedlo con precaución (¡¡spoiler, spoiler!!) :) :

Como no, hay una historia de amor. Entre robots. Curioso pero creíble teniendo en cuenta que WALL·E colecciona cosas de la tierra, de la basura, se le supone conciencia. Por tanto, puede haber amor, ¡ohhhh!

Pero también está la parte trascendente. La parte en que la humanidad ha machacado la tierra y se tienen que ir porque no se puede vivir en ella. Luego, con su gran tecnología, envían a robots a limpiarla pero no funciona. Al menos en el tiempo previsto. Y luego está el tema de ¿volvemos o estamos demasiado a gusto aquí?

Pero lo que más me ha gustado y que quizás se vislumbre en un futuro no muy lejano, son las relaciones sociales entre la gente. No se mueven. Siempre están en su sillón volador y se comunican, aunque estén al lado, a través de pantallas. La comodidad llevada al extremo.

No estoy diciendo que ahora sea así, pero ¿no hay niños hoy en día que en el colegio no tienen amigos y luego tienen el messenger o el facebook repleto de gente? Si hasta sale en alguna serie de televisión.

Sé que no os habéis resistido y habéis leído hasta aquí, jejeje. Espero no haber contado demasiado. Os la recomiendo, sin duda. Para aquellos los que os guste la animación (como es el caso) y para los que os gusten las historias en general y del futuro en particular también, porque esta película es para todos los públicos. Ya me contaréis que os ha parecido ;) .

Haciendo software

Mucho software de hoy en día se parece a una pirámide egipcia: millones de ladrillos apilados uno encima del otro, sin integridad estructural y hecho por pura fuerza bruta con miles de esclavos.

Alan Kay, informático estadounidense.

Visto en JavaHispano.

Instalando Eclipse con el PDT (otra vez)

Pues sí, otra vez me ha tocado instalar el Eclipse con el PDT en el ordenador de un compañero de trabajo. Pero al contrario que la vez anterior, ésta ha ido mucho mejor ;) .

La vez anterior, para hacer el pequeño manual, lo instalé en una máquina virtual con Ubuntu 8.10 que tenía para hacer pruebas. Y quedó bien. De hecho ahora lo uso de vez cuando.

Por eso cuando tocó instalar de nuevo, se me ocurrió copiar directamente mediante scp todo el directorio de Eclipse con sus plugins (yo lo instalé en /opt/eclipse/) al mismo directorio del nuevo equipo y también el directorio .metadata del directorio de proyectos del Eclipse (el directorio .metadata del workspace).

Y ¡funcionó! Además a la primera. Lo único que pidió fue un nuevo directorio de workspace (entre los equipos no era el mismo usuario). Con su plugin de PDT, de Subversion y toda la movida de la instalación anterior.

Ya sabéis, en Eclipse (y creo que en pocos más) copiar los binarios de la instalación de un ordenador a otro funciona. Qué majos…

Palm Pre: ¿Le hará sombra al iPhone?

El iPhone ha sido el cacharrito tecnológico del 2008. Y como no tenía competencia, pues nos ha traído de calle (al menos a mí). Eso sí, ahora que ya lo tenemos requete probado, encontramos sus carencias. Sus grandes carencias.

Pero el 2009, creo yo, va a ser distinto. A finales del año pasado ya estaban el HTC Diamond y Samsung Omnia, este año saldrá el Palm Pre con lo que ya quizás pierda la hegemonía del mercado.

Palm Pre

Palm siempre ha sido una empresa pionera en esto de los PDA. Ha tenido sus más y sus menos pero siempre ha querido innovar. Incluso se me hizo la boca agua cuando compró el BeOS y quería meterlo en sus chismes. Luego hubo algún problema que otro, se dividió la empresa, el BeOS a la mierda, el sistema operativo PalmOS lo compró una empresa japonesa, luego lo recompró Palm, querían sacar una versión 6 (Palm OS Cobalt) que nunca vio la luz y, finalmente, tienen otro sistema operativo con núcleo Linux.

A primera vista, el hardware, el dispositivo en sí, es muy estilo Palm. Feo. De hecho se parece al de OpenMoko. Y luego, también muy al estilo Palm (al Palm Treo), le sale un teclado completo por debajo (se desliza). De todas formas, no es demasiado grueso para todo lo que tiene y es es un buen punto a su favor.

En cuanto al software, y es aquí donde creo que se le puede hacer sombra al iPhone, tenemos un núcleo Linux por debajo junto con una nueva interfaz gráfica que se llama, como no, Nova (se pueden ver unos vídeos en en OSNews y en Engadget).

Palm Pre abierto

Para mí un núcleo Linux no es la mejor opción. Digo para mí. Ya sabéis mi postura referente a los kernel monolíticos y todo eso de la modularidad y tener que recompilar cada vez que cambio un componente. Pero claro, para ellos es una solución muy sencilla. Linux es un kernel muy desarrollado, muy probado, con pocos fallos, con mucho soporte, que se ejecuta casi en cualquier arquitectura, es opensource y es bastante fácil de adaptar, por lo que los costes de desarrollo se han reducido sin duda. Pero sigue siendo un kernel monolítico. Por cierto ¿dónde está el kernel de BeOS? ¡Ay! qué bonito es soñar…

Respecto a la capa de arriba, la de la interfaz gráfica, parece que ahora sí que se han puesto las pilas. Aunque su nueva interfaz se llama Nova, al sistema operativo le han puesto webOS™, un nombre no demasiado agraciado en español. Y es web por que lo que tenemos por debajo es WebKit. Pues sí, todas las aplicaciones están hechas en HTML, CSS y JavaScript (el JavaScript puede hacer llamadas al sistema para tareas más complejas) con lo que cualquiera (o casi, por aquí ya he comentado veces lo de los estándares y ser un buen ingeniero) puede desarrollar aplicaciones para el nuevo gadget.

Ahora hay que esperar un poco hasta que salta (se supone que a principios de este año) y esperar, también, que no la caguen. Luego habrá que mirar el precio y, como no, qué operadora lo saca, que no quiero estar atado a nadie. Y también ahorrar. Bueno, ya de estar, a ver si nos ponen la ñ en el teclado.

Es Navidad… y ahora esto

Ahora que estamos en Navidad (ya queda muy poco) llega esto:

Autobús Ateo en Barcelona

Los dos primeros autobuses de la Unión de Ateos y Librepensadores (UAL) con el lema «Probablemente Dios no existe. Deja de preocuparte y disfruta de la vida» han llegado a España después de que esta campaña se iniciase en Londres por la British Humanist Association (BHA).

Estoy ansioso por ver las protestas para ver cuanto me puedo reír. Porque aquí somos pocos, pero cada vez que sacamos la lengua a pastar nos oyen en todo el mundo.