viernes, 29 de julio de 2011

En un periquete

Tanto tiempo sin escribir que ni recuerdo por donde iba... y es que han sido casi cuatro meses de infarto.

Por un lado el trabajo. En Ciudad 2020 no paramos, siempre tenemos nuevos retos y nuevos proyectos. He estado integrándome con todo tipo de clientes y aplicaciones que beben de nuestra API, y además en Mayo terminé con el desarrollo del mapa de movilidad de Córdoba. Un proyecto muy interesante en el que he aprendido más de la API de Google Maps V3 de lo que jamás pensé que me haría falta.... jejeje. Encontré especialmente interesante el sistema de InfoWindows y el sistema que dibuja el HeatMap, que se complementa con java.awt.Graphics2D en el servidor.

Y lo hemos presentado al mundo en el "Living Labs Global" en Estocolmo, donde estuve en un Workshop group con Lewis Carl de Oracle debatiendo sobre "Cloud Computing".



Por otro lado City Analytics sigue creciendo y madurando, de forma que hemos incluido muchas mejoras en el rendimiento, tras algún que otro traspiés, hasta que hemos liberado la versión 1.9 del cliente. Esto unido a nuevos servicios como el Checkin Físico y otras novedades que incorporaremos en breve me ha tenido bastante ocupado.

Y por otro lado, hay algo que se ha hecho un hueco en mi vida, y que está creciendo de forma que casi asusta. Pero ya no hay quien lo pare. No hay palabras para esto y solo aquellos que lo han sentido lo pueden entender. Me viene al pelo esa frase de la canción de Los Suaves que dice que "hay cosas que solo se dicen con silencio y yo callándome te las digo". Mi hija vino al mundo el día 9 de abril.

lunes, 28 de marzo de 2011

Optimización de MySql InnoDB en un servidor Linux

Tras un arduo proceso de investigación y documentación, voy a describir el proceso a seguir para configurar un servidor MySql para producción. Las bases consultadas no son otras que la documentación oficial en dev.mysql.com y mysqlperformanceblog.com.

En la configuración de un servidor debes pensar en una instalación que tenga un rendimiento acorde con lo que se necesita, empezando por la instalación del sistema operativo. Como es de imaginar principalmente MySql realiza tareas pesadas sobre los discos duros, por lo tanto la elección de discos duros con bajos tiempos de búsqueda es importante pero también es importante si tienes varios discos, optar por usar RAID 0 para unirlos, lo cual afecta bastante al rendimiento de las búsquedas.

Después será necesario revisar la implementación y el diseño de tu base de datos. Respecto al diseño no contaré nada puesto que depende de la aplicación/es que hagan uso del Data Source con MySql, pero respecto a la implementación si que hay un par de cuestiones a tener en cuenta:
  • Manten el tamaño de los campos de tu BBDD lo más pequeño posible. Si puedes usar mediumint en lugar de bigint hazlo, y a colación e igual de importante es que:
  • No utilices campos `varchar`. Y si lo necesitas, al final de la tabla. Dependiendo de tus necesidades por supuesto, pero ten en cuenta que en su lugar puedes usar el tipo `char`. Un tamaño variable para las cadenas ahorra espacio en disco pero un tamaño fijo permite un acceso más rápido a los datos puesto que no hay que calcular la longitud del registro variable como ocurre cuando tenemos un `varchar` y saltamos al siguiente registro. InnoDB realiza algunas optimizaciones por ejemplo convirtiendo `varchar` de tamaño menor de 4 en `char`, pero es deseable que calcules la longitud máxima de un campo y crees campos de tamaño `fixed`. Dentro de poco cuando regalen TeraBytes con las cajas de galletas, esta pérdida de espacio con registros `fixed` no será tan importante como el rendimiento de las consultas a tu servidor... ;)
  • Crea solo los índices que necesitas y elimina índices duplicados. Los índices benefician el proceso de lectura pero pueden complicar el de escritura, así que debes tener cuidado con esto. También ocurre que borras y creas una tabla un varias veces cambiando el script, modificando... y al final, revisando te das cuenta de que tienes un índice duplicado. Si el tamaño de tu tabla no es muy grande, el gasto en memoria puede no ser demasiado, pero he llegado a reducir en cerca de 3 Gb el tamaño de una tabla tan solo descubriendo y eliminando un par de índices duplicados.

Una vez que hayas revisado esto lo deseable es afinar el rendimiento de la ejecución de MySql. Los parámetros más importantes son (para InnoDB):

  • innodb_data_home_dir ( =/var/lib/mysql): Es el lugar donde InnoDB almacenará la información (anteponiéndolo a innodb_data_file_path en caso de existir) así como los ficheros de registro. Asegúrate que apunta a tus discos en RAID 0.
  • innodb_data_file_path | innodb_file_per_table: Con estos parámetros configuras como se almacenan tus datos y donde. Si especificas innodb_file_per_table, indicas a MySql que guarde los datos de cada tabla en un fichero distinto. Esto es beneficioso si tienes en mente ampliaciones y/o migraciones.
  • innodb_buffer_pool_size: El tamaño que ocupa en memoria el almacenamiento intermedio de datos. Cuanto mayor es este valor, menor es la cantidad de operaciones de lectura/escritura en disco. El valor adecuado para un servidor dedicado solo a MySql debería permitir la ejecución del sistema operativo sin problemas. Ten en cuenta que a este tamaño se suma el del parámetro key_buffer_size en el motor MyISAM. Desde la documentación oficial de MySql especifican un 80% de la memoria del ordenador, pero con 64Gb de RAM tendríamos 12 Gb para el SO... es mucho ¿no?
  • innodb_log_file_size: Es el tamaño de los ficheros de registro de InnoDB. Pueden existir varios y la suma de sus tamaños no puede exceder los 4Gb. Un tamaño mayor reduce las operaciones de lectura/escritura en disco, así que este parámetro también es importante. Una regla para fijar este valor se basa en darle el 25% del tamaño especificado en innodb_buffer_pool_size. Ten en cuenta que cada vez que quieras cambiar el tamaño de los ficheros de registro debes fijarte en que probablemente ya existan así es que tendrás que:
    1. Parar el servidor,
    2. Hacer copia de seguridad de los ficheros de log. Normalmente ib_logifle0 e ib_logfile1 en /var/lib/mysql renombrados a ib_logfile0.BAK e ib_logfile1.BAK. En caso de pánico y horror puedes restaurarlos.
    3. Borrar los originales (ib_logfile0 e ib_logfile1),
    4. Especificar el nuevo tamaño, e
    5. Iniciar MySql
  • innodb_log_buffer_size: Es el tamaño del almacenamiento intermedio en los ficheros de registros, por lo tanto valores altos también reducen el número de operaciones de lectura/escritura. Aún así el tamaño de esta variable (evidentemente siempre menor que innodb_log_file_size) se establece como razonable entre 8 y 16 Mb ya que este buffer se vuelca forzosamente cada segundo, así que puede no ser necesario un tamaño mayor y si que sería un gasto de memoria.
  • innodb_flush_log_at_trx_commit: Este parámetro controla cuando se vuelcan los datos del buffer en los ficheros de registros. Este volcado se realiza cada segundo forzosamente pero puede hacerse más a menudo. El valor por defecto de 1, indica que este volcado se realiza tras un commit. Un valor de 2 sería cada 2 commit, o cada segúndo, lo que ocurra antes. De esta forma un valor de 2 reduce las operaciones de E/S en disco pero podríamos perder un segundo de transacciones en caso de error del sistema. Yo pongo 2... ;)
  • innodb_flush_method: Indica la forma de volcado de los ficheros de registros y datos. Si está disponible, con la opción O_DIRECT evitamos el uso de memoria swap y así MySql vuelca estos ficheros directamente en memoria física evitando consumir ancho de banda entre la memoria y la CPU por las copias de la cache del kernel y del espacio de memoria del usuario.

Pues con esto espero haber arrojado algo más de información sobre los parámetros más importantes, aunque evidentemente me dejo mucho en el tintero, pero para mí estas son las cuestiones más importantes. Suerte!!

sábado, 26 de febrero de 2011

Libertad, igualdad y democracia

Hace poco que leía un artículo sobre este tema que me parece muy interesante. Sobre todo en estos tiempos en los que a mi juicio, el sistema esta a prueba como nunca antes lo había estado.

Una prueba que dudo que supere si no cambian las cosas puesto que este "liberalismo" en el que vivimos (pese a que el partido actualmente en el poder se denomine "socialista") no parece tal. Un liberalismo entre comillas puesto que si nos atenemos a sus principios, parece haberse olvidado del que a mi juicio es el más importante. En este sistema respeta el individualismo, respeta la libertad y por supuesto respeta la propiedad privada, así como el establecimiento de códigos civiles, y resolución de problemas por medio de asambleas.

Pero ha olvidado la igualdad, y en algunos casos la necesidad de que los gobiernos proporcionen un nivel mínimo de seguridad y vida para su correcto funcionamiento, lo cual es condición necesaria para el ejercicio de la democracia, el poder del pueblo, la forma de gobierno en la que se ha manifestado el liberalismo.

Esta democracia es considerada por algunos la tiranía de las mayorías. Y en ocasiones puede ser cierto. Pero a mi juicio debe ser aceptada esta tiranía, siempre que las decisiones de la mayoría respeten los principios de este liberalismo.

Explicado mediante un ejemplo, quiero decir que una decisión democrática de prohibir el consumo de drogas no tiene sentido, puesto que no cumple con el principio de libertad individual. Otra discusión es si las drogas aumentan los niveles de delincuencia, lo cual sin duda es así. Pero a mi juicio, no es por los efectos en la mente humana, si no por la prohibición del comercio de estas sustancias.

Otro claro ejemplo a mi juicio sería la decisión democrática de privatizar la educación, la justicia o la sanidad, puesto que es incompatible con la igualdad, desde el momento en el que es obvio que en ese supuesto los individuos con más recursos (hoy en día el dinero) tendrán acceso a una mejor educación, una mejor sanidad o una justicia más favorable a ellos, y por el principio de igualdad, esto tampoco tiene sentido.

Los gobiernos deberían facilitar como mínimo los sistemas de seguridad social, pensiones, justicia, educación y sanidad. Así mismo deberían garantizar la igualdad en los dos sentidos en los que eran planteados por Tocqueville, igualdad de recursos e igualdad de poder.

Pero el hecho es que actualmente no es así, puesto que el modelo de economía capitalista con su ley de oferta y demanda (basados en el liberalismo económico), establecen un equilibrio en los precios de los productos que favorece a las grandes multinacionales, especialmente si además se establece la "economía global". Estas multinacionales que provocan un exceso de producción sitúan el precio de los productos en un punto insostenible para los pequeños productores, y su consiguiente sumisión a los grandes, de forma que los dueños de estos grandes productores obtienen todos los beneficios. Esto no es igualdad.

Y así llegamos al punto actual, en el que la medida del bienestar en un país sigue evaluándose por el PIB, y no por la renta per cápita o el grado de libertad individual. Y todo esto apoyado por el FMI y el Banco Internacional. Y en esas estamos, en un estado en el que el consumismo nos hace exclavos de los bancos y las multinacionales. Y entonces no somos libres.

Las grandes multinacionales dominan los mercados, y los mercados corrompen a los gobiernos, que aunque se auto denominan democráticos y liberales, aprueban medidas que protegen los intereses de la banca (por ejemplo recientemente con la dación en pago de las hipotecas), que implacable, nos tratan a los individuos como objetos que compran. Y gracias a esa corrupción, aumentan la presión fiscal sobre los pequeños productores, a los pobres que no podemos afrontarlos, y no a los que realmente tienen dinero, y así es como también los pequeños productores vemos reducidos nuestros beneficios por unos impuestos que no se corresponden con lo obtenido. Por eso se hace difícil emprender, y por eso nuestra economía está favoreciendo cada vez más a los grandes y debilitando cada vez más a los pequeños.

lunes, 14 de febrero de 2011

Epitafio

En honor a Manolo Prieto Villegas. Hoy nos ha dejado una gran persona. Un gran amigo que tenía todo mi respeto y admiración.
Fue él quien despertó en mi la fascinación por gran parte de las cosas que de las que más orgulloso me siento. Con él he compartido largas noches de borrachera escuchando solos de batería de Carl Palmer y charlando de cosas que solo con él podías hablar, me guió en los momentos críticos de mi proyecto fin de carrera así como me escuchó cuando lo necesitaba. Fue la persona que me animó a perfeccionarme siempre en todos los aspectos de la vida tanto laboralmente como intelectualmente.
Quise charlar más con él y olvidar los pequeños detalles que ocultan la verdad. Para mí era una gran persona, una de esas de las que se te llena la boca al hablar de él, de esas que presumes de ser su amigo. Un perfecto caballero inglés, como a él le hubiera gustado que le llamaran.
Lo cierto es que en estos últimos años no fue así y ahora me arrepiento de ello. Pero me alegro por esos años en los que disfruté de su compañía y nos reímos y nos emocionamos, y también nos enfadamos y nos ayudamos a tener una juventud como, en mi opinión, pocos pueden presumir de haber tenido.
Él no aprobaría aquello de "Donde quiera que estés", o "allí en los cielos" porque como yo, creía que no estaría en ningún sitio. Ahora sé que se equivocaba, pero ya no puedo decírselo, tomarnos unos cubatas y discutir sobre ello escuchando un disco del "Robert Fripp String Quintet".
Pero se equivocaba porque sí estará en algún sitio. Estará en los corazones de Dani, de Javi Guti, de Javi X, de Javi Cacho, de Karlos, de Pipe de Adolfo, de Rafa, de Álvaro, de Diego y en el mio propio, porque cada canción que oiga, y cada logro de mi vida yo seguiré pensando en lo que Manolo pensaría, en si le gustaría o no, en lo que me diría si viera lo que hago. Me hubiera gustado presentarle a mi futura hija y no he podido. Y se ha ido sin decir nada, sin avisar y sin quejarse, como un caballero, como lo que era para los que le conocíamos, una gran persona.
Se te echará mucho de menos. Adiós Manolo.

Te recordaremos siempre

domingo, 2 de enero de 2011

Tendencias Musicales II

Y Continuando con lo que habĺe en la parte I de este post explicare mi punto de vista sobre estos gustos. Son también producto de la generación del "rock alternativo".

Antes éramos capaces de pasar horas escuchando música y hoy en día esto apenas se hace, y no solo por la vida que se vuelve cada vez mas estresante sino que la música es distinta.

Esta claro que la música es arte pero también es negocio, y correr riesgos es el objetivo a minimizar. Si vas a sacar un disco, o sacas "más de lo mismo" incluyendo baile, caras bonitas e interpretes que llamen la atención del público o pocos apostarán por ello. Por lo tanto necesitas un estilo que venda (Rock, pop, baile) y una imagen rompedora o bonita. Pongamos por ejemplo a las Spice Girls, Lady Gaga o no se... Ricky Martin, pero también a Marilyn Manson o a ¿cuantas caras bonitas?...

Para examinar la música actual yo me planteo si realmente lo que escuchamos es arte o solo son unos superventas. Yo creo que muchos de estos cracks, al final han quedado en nada. Sin embargo otros realmente han marcado época, estilo, moda incluso la forma de pensar. Así ha sido dentro del rock-pop con Los Beatles, con Jimi Hendrix, o los Sex Pistols etc... que realmente crean escuela y automáticamente aparecen grupos que los han imitado extrayendo lo más comercial de ellos y explotando "la idea de otro". Estos son los superventas, esta es la "radio fórmula". Realmente hoy en día creo que se investiga poco, la evolución es mínima y por eso creo que existe una tendencia a escuchar música de otras décadas.

Pero además creo que existe otro motivo por el cual se escucha menos música, y es más fácil escuchar la de otras épocas. La guerra de volúmenes provoca esto, y cuando se escucha menos música, no educamos el oído para que sepa apreciar unas melodías más maduras, mas ricas e innovadoras. Y creo que este es un factor importante. Mirad la siguiente imagen:


Para los que no sepáis que es, lo explico. Esta captura de pantalla de Ardour es un análisis en amplitud de dos pistas de sonido. Un análisis en amplitud muestra el nivel de la señal, para entendernos, el volumen. La primera pista etiquetada con "(10) Science" es de un disco del 2001, en concreto de "System of a Down" (en realidad... me gustan), y la siguiente es "Nothing to say" de "Jethro Tull" en el 1970.

Creo que queda explicado que es eso de "La guerra de volúmenes". En comparación, la primera y más actual, no solamente esta claramente mucho más alta, sino que ese "chorizo" incluso supera los 0dB y satura. Sin embargo se puede observar la dinámica del tema grabado y masterizado en el 1970, que sin saturar, aumenta y disminuye el volumen en función de las distintas partes de la canción. El resultado final es que la canción más actual se escucha a un volumen mucho mayor y más constante, y esto provoca que:
  • Capte nuestra atención al instante
  • Que la primera impresión sea mejor, se oye todo y suena... perfecto y entonces si no es nuestro estilo bajaremos el volumen, pero sino... wow!! que bueno!!!

Con un estribillo que se repite mil veces (como el de "Stairway to Heaven"... ahh ¿que no tiene?...) corto y simple ya tienes un disco actual. Por contra estamos saturando el oído. Una señal tan alta y comprimida cansa el oído y el cerebro, que es el que finalmente procesa todo. Por eso escuchar durante varias horas temas a este nivel se nos hace en ocasiones difícil, sin embargo, si la música es de nuestro gusto, podríamos pasar horas escuchando canciones como la que se ve en la segunda pista sin cansar tanto nuestro oído. Y todavía podemos hacer otro análisis más, este en frecuencias sobre las mismas pistas:


Este análisis de espectro calcula una media de las frecuencias. De nuevo para entendernos, muestra las frecuencias (desde los graves a la izquierda hasta los agudos a la derecha) promedio que se escuchan en ambas pistas. Aquí también vemos que el espectro (el intervalo entre las frecuencias más graves y las más agudas) es más amplio en la canción del 2001 que en la canción del 1970. Las conclusiones son similares.

Así que eso es lo que están haciendo a nuestros oídos, saturándolos con más volumen y mayor rango de frecuencias. ¿Habréis oído comentar a alguna persona mayor que la música de hoy es demasiado estridente?... probablemente para nosotros que nos vamos acostumbrando no sea así, pero lo cierto es que TIENEN RAZÓN. E imagino que entenderéis porqué... las ventas, y la minimización de los riesgos.

La primera impresión es mejor, pero también hace que perdamos el interés por ello más fácilmente, y al final terminaremos bajando el volumen o poniendo algo más melódico (en mi caso algo más antiguo que no me sature) o simplemente apagando el reproductor, puesto que nuestro cerebro estará procesando demasiada información para poder compartir nuestra atención entre la música y cualquier otra cosa que queramos hacer mientras intentamos escucharla.