martes 2 de febrero de 2010

Problemas con los botones de Eclipse en Ubuntu 9.10

Si tienes instalado Eclipse Galileo en Ubuntu 9.10 (yo tengo la versión para 64 bits) quizás te ocurra que en algunas ventanas los botones no responden al click del ratón. Sí responden si pones el foco y pulsas intro, o también con los accesos directos. Sin embargo, esta "solución" no es muy práctica.

El bug ya está registrado y solucionado en Ubuntu, pero te tienes que instalar el paquete de Eclipse propio de Ubuntu en su versión eclipse 3.5.1-0ubuntu7 o posterior. Si eres de los que como yo te acabas de enterar que existe un paquete de eclipse para Ubuntu y por tanto bajaste e instalaste eclipse desde la web de eclipse, existe una "solución alternativa": debes ejecutar eclipse a través del siguiente script.

#!/bin/sh
export GDK_NATIVE_WINDOWS=1
/opt/eclipse/eclipse

Esto suponiendo que tienes instalado eclipse en /opt/eclipse, claro.

Prometo probar la versión de Eclipse instalada desde el repositorio de Ubuntu. ;-)

Fuente: http://www.norio.be/blog/2009/10/problems-eclipse-buttons-ubuntu-910

sábado 19 de septiembre de 2009

Star Wars (John Williams Is The Man) A Cappella Tribute

Os dejo este magnífico vídeo homenaje a John Williams hecho por Corey Vidal, un canadiense que ha triunfado en YouTube con sus grabaciones. Es de hecho uno de los usuarios más vistos y con más suscripciones.

Por otro lado, para el que no conozca a John Williams, decir que se trata de un compositor y director de orquesta de los más famosos. Estoy 100% seguro de que has escuchado alguna de sus más famosas obras, como son las bandas sonoras de Tiburón, La Guerra de las Galaxias, E. T.: El extraterrestre, Superman, la saga de películas de Indiana Jones, Parque Jurásico, La lista de Schindler, Memorias de una geisha o Harry Potter entre otras.

Además de este magnífico vídeo de Corey Vidal por cuatriplicado, os dejo la letra para que podáis seguirlo mejor.


[Close Encounters of the Droid Kind]
You must use the force (repeat ad nauseum)

[Raiders of the Lost Wookiee]
Long time ago, far far away (repeat)

Kiss a wookie, kick a droid
Fly the falcon through an asteroid
Till the princess is annoyed
This is spaceships, it's monsters, it's Star Wars, we love it!

Come and help me, Obi-Wan
X-wing fighter and a blaster gun
Dance with Ewoks, oh what fun!
This is spaceships, it's monsters, it's Star Wars, we love it!

[Super Han]
Get in there you big, furry oaf
I couldn't care less what you smell
I take orders from only me
Maybe you'd like it back in your cell
Your Highness, your worshipfulness, your highness, your worshipfulness

No one cares if you upset a droid
(nobody cares if you upset a droid)
That's because droids don't tear your arms out of socket.
(nobody cares)
I suggest a new strategy: let the Wookie win
That's because nobody cares if you upset a droid.

[ET the DiscoTerrestrial]
Now we listen to Luke whining:
One more season... One more season... One more season... One more season...

I was gonna go to Tosche Station for power converters
Now I guess I'm going nowhere.
It just isn't fair.

[Jaws: the Wookiee]
Woooooookiee (repeat)

Someone move this walking carpet (repeat)

Kiss your brother, Kiss your brother (repeat)

Princess Leia
Well I guess you don't know anything about women.

Who's your daddy? (repeat)

[Jurassic Darth]
Luke, I'm your father
(That's not true!)
It is useless to resist
(My hand!)
Come with me my son, We will rule
(I'll never join you!)
Search your feelings it is true

So you have a twin sister
Who Obi-Wan was wise to hide
(Is that Leia?)
If you will not turn
Then perhaps she will
Give in to your hate
You are mine

Long Long Long Time ago... Far Far Far Far Away

Long Long Long Time Ago, Far Far Far Away (repeat)

Kiss a wookie
Kick a droid
Fly the falcon
Through an asteroid
Till the princess is annoyed
(She's annoyed!)
This is spaceships, it's monsters, it's Star Wars, we love it, it's true

Episode 3
Coming to you
In 2005

So Let's go
(go go go to the movies)
Stand in line
(buy buy buy me some popcorn)
Cause it's al-
(please I'd like extra butter)
most the time
(Join the dark side...)
May the Force be with you all

John Williams is the man

lunes 14 de septiembre de 2009

Pink Panther Theme

Continuamos con un poco de guitarra. Esta vez os dejo todo un clasico, La Pantera Rosa. Os dejo también una versión más rockera del mismo que me ha llamado mucho la atención. ¡¡¡Que los disfrutéis!!!




miércoles 9 de septiembre de 2009

Optimización de un servidor MySQL

Las bases de datos MySQL son bastante utilizadas debido a que ofrecen una calidad bastante aceptable a coste 0. Por supuesto, no basta con instalar y listo. Hay que configurar y ajustar los parámetros adecuados al uso que se le vaya a dar. En cualquier caso, en entornos de producción los parámetros que trae por defecto no son suficientes.

En este post, explico una serie de pautas a tener en cuenta en la configuración que pueden servir de punto de partida para el ajuste fino de un servidor MySQL y el motor InnoDB, que es el que he utilizado mayormente ya que permite relación entre tablas.

-innodb_buffer_pool_size: se debe configurar al 70-80% de la memoria del servidor. Por ejemplo, si tienes un servidor de 4GB de RAM, 3G sería un valor adecuado.

-innodb_log_file_size: 256M parece un valor adecuado.

-innodb_log_buffer_size: 4M es un valor adecuado en la mayoría de los casos, a menos que uses grandes blobs. En ese caso, auméntalo un poco.

-innodb_flush_log_at_trx_commit=2 si no te interesan el ACID y puedes asumir que se pierdan transacciones en los dos últimos segundos en caso de fallo en el sistema operativo. Si usas replicación este valor debe estar a 1, tal y como comenté en el post sobre Replicación de bases de datos MySQL.

-innodb_thread_concurrency=8 Incluso con las correcciones sobre escalabilidad del motor InnoDB, tener limitada la concurrencia siempre ayuda. Puede ser mayor o menor dependiendo de tu aplicación, pero 8 es un buen comienzo.

-innodb_flush_method=O_DIRECT. Evita el doble buffer y reduce el uso de swap. En la mayoría de los casos mejora el rendimiento.

-innodb_file_per_table: divide el fichero de información InnoDB en varios, concretamente uno por tabla. Evita que toda la información vaya a un único fichero, aumentando el rendimiento.

Estos puntos anteriores los he sacado del MySQL Performance Blog. Te recomiendo que le eches un vistazo, ya que es posible que aspectos que he omitido porque no se adaptan a mi caso, sí que te interesen a ti. 

Ejemplo de configuración  

A continuación dejo un ejemplo de configuración en un servidor de 4 núcleos con 4MB de RAM y contiene el servidor dedicado únicamente a la base de datos MySQL.

El siguiente fichero ha de colocarse en /etc/mysql/conf.d .Yo lo he llamado innodb.cnf, por ejemplo.
#
# Configuración para optimización de la base de datos
#
[mysqld]
# ficheros de log
log_slow_queries=/var/log/mysql/mysql-slow.log
long_query_time=5 

innodb_buffer_pool_size=3G
innodb_log_file_size=512M
innodb_log_buffer_size=16M
innodb_file_per_table

key_buffer_size=64M
table_cache=1024
thread_cache=16
query_cache_size=256M
max_connections=300
max_user_connections=300
thread_concurrency=8
Puedes observar que se ha aumentado el parámetro innodb_log_buffer_size debido a que usamos gran cantidad de blobs.

Espero que os sirva como punto de partida. Por supuesto, el ajuste fino dependerá mucho del uso y de las aplicaciones.

lunes 7 de septiembre de 2009

Dueling Banjos

Para continuar con la sección de guitarra, os dejo otro vídeo de mis favoritos. Se trata de una escena musical de la película Deliverance (1972) en la que hay un duelo de banjos entre el personaje de Ronny Cox, tocando la guitarra, y un extraño chico mentalmente discapacitado, pero muy habilidoso con el banjo.


sábado 5 de septiembre de 2009

31 noches, de Nacho Escolar

El pasado 31 de agosto terminó 31 noches, la novela corta por entregas que Nacho Escolar ha estado escribiendo durante el mes de agosto para Público.

A mi me enganchó a mediados de agosto y no he podido parar de leerla hasta su fin. Se trata de una novela policíaca donde un periodista se ve envuelto entre la corrupción, las drogas y las mafias y nos cuenta como se desarrolla la historia que le conduce a su propia muerte (que conste que no he desvelado nada, esto aparece en el primer capítulo). Muy grata sorpresa la que me llevé con esta novela que encontré por casualidad en mis vacaciones. La recomiendo 100%. ;-)

miércoles 2 de septiembre de 2009

Plugins de Firefox para el Desarrollo Web

Todo desarrollador web que se precie debe haberse hecho la siguiente pregunta en algún momento de su vida: ¿Por qué cada navegador web interpreta el html/css/javascript como le da la gana?¿No podrían hacerlo todos de la misma forma? y seguro que habéis maldecido más de una vez a los creadores de Internet Explorer. ¿No sería más feliz el mundo si no existiera el Explorer? Si nunca te has planteado estas preguntas, es que aún no has trabajado lo suficiente con html/css/javascript :-p

En este post no os voy a dar una solución definitiva a esta problemática, pero al menos sí os comento algunos plugins de Firefox que os pueden resultar útil para el desarrollo web. (Menos es nada ;-) )
  • Firebug: imprescindible para maquetación html y css. Te permite modificar el html y el css interpretado por el navegador. Ideal para hacer ajustes de css. Además, incorpora un depurador para javascript. Yo me pregunto, ¿qué hacíamos cuando no había Firebug?
  • Web developer tool bar: muy útil. Tiene un gran conjunto de funcionalidades, muchos de ellos son atajos a opciones del navegador como desactivar javascript, limpiar caché, ver código fuente. Entre sus funcionalidades destacadas está la posibilidad de ver todas las css, una regla para medir distancias en píxeles, información y edición de formularios html. La verdad es que desde que está Firebug la utilizo poco porque muchas de las cosas que antes hacía con este plugin las hago ahora con Firebug, pero creo que es útil tenerlo a mano para cuando se pueda necesitar.
  • LORI(Lifer-of-request-info): útil para mostrar información de la petición HTTP. Te muestra tiempos de carga de la página, tanto desde que se hizo la petición hasta recibir el primer byte como desde que se hizo la petición hasta la carga completa de la página; tamaño de la página, número de peticiones, ...
  • Live HTTP headers: útil para explorar las cabeceras HTTP, tanto en la petición como en la respuesta.
  • User Agent-switcher: te permite modificar el User-Agent del navegador. Útil si estáis realizando versiones para dispositivos móviles o PDAs.
Estos son los plugins que, por mi trabajo he utilizado, y encuentro más útiles. Supongo que dependiendo de lo que se trate habrá más plugins útiles. Si conocéis alguno más que pueda ser útil para el desarrollo web no dudéis en comentarlo.

lunes 31 de agosto de 2009

Inauguración de sección sobre Guitarra (Bohemian Rhapsody)

Hace tiempo que soy aficionado al mundo de las guitarras y puesto que lo considero importante en mi vida, no me gustaría dejarlo de lado en este blog. Me gustaría inaugurar la nueva sección sobre guitarra con este vídeo: Bohemian Rhapsody - for solo guitar. Es muy bueno. Espero que lo disfrutéis tanto como yo.


viernes 28 de agosto de 2009

Configuración de réplicas de MySQL

Es bastante frecuente encontrarse con la necesidad tener, no un único servidor de base datos, sino un conjunto de ellos sincronizados. A menudo esto se hace por razones de rendimiento y escalabilidad.

MySQL nos ofrece dos posibilidades para solucionar este problema: la replicación y el cluster.

En la replicación de nodos MySQL existe un servidor maestro y N servidoes esclavos. Los esclavos se sincronizan a partir del maestro. Esta sincronización es en un único sentido: del maestro al esclavo. Es por ello por lo que los esclavos únicamente deben usarse para leer, lo que implica que todas las consultas de escritura, habrá que hacerlas sobre el maestro.

A grandes rasgos se puede decir que en el cluster MySQL existen N servidores MySQL donde todos se tratan de igual a igual. En todos los servidores se puede leer y escribir, ya que el sistema de cluster se encarga de sincronizar todos los nodos. Realmente es más complejo que lo que dicen estas 3 líneas, por lo que si tienes curiosidad puedes leer la documentación oficial acerca del Cluster MySQL.

Mientras que en primer caso no existiría la alta disponibilidad, al menos en lo que a escritura se refiere, ya que la caída del maestro implica que no se pueden ejecutar las consultas de escritura; en el segundo caso la alta disponibilidad sí que existe, ya que ante la caída de un nodo, el resto podría seguir funcionando perfectamente.

Este post se centra en la configuación de réplicas MySQL. Me gustaría probar el cluster porque tiene buena pinta. Si lo hago pondré un post sobre cómo se configura.

Configuración

A continuación se describen los pasos que hay que seguir para configurar una réplica de un servidor MySQL.

1. Crear usuario de replicación en el servidor maestro para poder replicar

mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%.mydomain.com' IDENTIFIED BY 'slavepass';

2. Ajustar la configuración del maestro en el my.cnf

[mysqld]
log-bin=mysql-bin
server-id=1

Para mejorar el rendimiento en innodb, ajustar también en el maestro lo siguiente:

innodb_flush_log_at_trx_commit=1
sync_binlog=1

Reiniciar MySQL.

3. Ajustar la configuración del esclavo en el my.cnf

[mysqld]
server-id=2

Reiniciar MySQL

4. Obtener información de replicación del maestro. (Se utilizará en el paso siguiente)

mysql> show master status;

5. Configurar la conexión con el maestro en el esclavo. Los datos MASTER_LOG_FILE y MASTER_LOG_POS hay que cogerlos del resultado del paso anterior.

mysql> CHANGE MASTER TO MASTER_HOST='master_host_name',
MASTER_USER='replication_user_name',
MASTER_PASSWORD='replication_password',
MASTER_LOG_FILE='recorded_log_file_name',
MASTER_LOG_POS=recorded_log_position;

6. Iniciar la sincronización en el esclavo.

mysql> START SLAVE;
Y listo. En caso de que Hubiera más de un esclavo el proceso es análogo.

Espero que sea de utilidad.

sábado 1 de agosto de 2009

Actualizar firmware Nokia N95 - Fallo de encendido del teléfono

Acabo de actualizar el firmware de mi N95 versión Vodafone. He seguido este tutorial. Por supuesto antes hice copia de seguridad y tras la actualización restauré la copia. Me llevé un susto cuando al encender el teléfono ponía Fallo del encendido del teléfono. Póngase en contacto con el vendedor.

Mi fallo estuvo en restaurar la copia de seguridad. Supongo que tendrá ficheros de la versión anterior que no son compatible con la versión del firmware instalada. La solución es simple: hay que hacer un hard reset. Simplemente apagamos el teléfono y pulsamos a la vez las teclas "3", "*", "llamada (teléfono verde)" y el botón de encendido.

Una vez hecho esto, se restaurará la memoria eliminando la copia de seguridad que hemos restaurado y todo volverá al estado justo después de la actualización del firmware. Tan sólo hay que restaurar contactos, mensajes y agenda.

¡¡¡A seguir disfrutando del teléfono!!!