Antiguo y abandonado blog de Ricardo Galli :-(

Wednesday 3/10/2007

MySQL: hacer un “snapshot” del máster

Filed under: Mis hacks, Trucos — gallir @ 16:23

Es una chorrada y bien conocida, aunque a mí me costó averiguar cuál es la solución más rápida y fiable –¿soy sólo yo el lento o también ocurre lo mismo a otros?–, así que aquí va por si a alguien le sirve.

MySQL funciona muy bien para mantener réplicas (slaves) de un servidor maestro (master), pero a veces hay algunos problemas:

  1. El comando LOAD DATA FROM MASTER desde la réplica no está recomendado.

  2. La base de datos es muy grande y toma mucho tiempo hacer el “mysqldump”, es mucho más rápido hacerlo con los mysqlhotcopy que sólo copia los ficheros.

  3. Antes de hacer el mysqldump (si se hace) hay que obtener el estado del “binlog” del servidor para indicarlo en la réplica.

La mejor opción es hacer copia de los ficheros de la base de datos con el mysqlhotcopy y además indicarle que grabe en una tabla el estado del “binlog”. Con esto tendremos una copia rápida de la base de datos en “producción” que nos servirá para iniciar fácilmente una nueva réplica y/o reparar una que haya perdido el sincronismo o coherencia con el máster (suele suceder).

(more…)

Thursday 6/9/2007

A condiciones de uso similares, la carga de los servidores varía con el horario

Filed under: Curiosidades, Trucos, Hackerdom — gallir @ 0:42

No sé si mucha gente que administre servidores por estos lares se ha dado cuenta. Lo cuento:

  1. Un servidor tiene más o menos el mismo número de visitas y páginas vistas por unidad de tiempo entre las 12 y 24 hs (incluso se incrementa después de las 22 hs).

  2. El tráfico total por períodos también bastante similar (lógico).

  3. El servidor está más “cargado de CPU” [1] (casi el doble) a las 12, 13 ó 15 horas que a las 22 horas.

  4. El servidor necesita más memoria RAM (un 20-25%) en las primeras horas que a las últimas de la noche.

La explicación es simple y lógica aunque no deja de ser curiosa (la dejo en suspense unas horas a ver si alguien lo explica mejor de lo que haría yo, también hay una solución para minimizar este impacto, lo comenté en algún apunte anterior).

[1] No es tan exacto, me refiero al load average. No es que consuma el doble de CPU sino que la longitud media de la lista de procesos para ejecutar es casi el doble. El tamaño de esta lista depende de dos factores fundamentales: el consumo de CPU y los cambios de contexto (schedules) que se produzcan.

Monday 20/8/2007

Sincronizar el correo de tu servidor con Gmail

Filed under: chapucillas, Trucos, Hackerdom — gallir @ 0:55

Hace ya bastantes años que tengo centralizado todo mi correo en mnm.uib.es. Allí me llegan los correos (re-enviados) de @uib.es y @mnm.uib.es. Además tengo el fetchmail que me recoge el correo vía POP3 desde otro par de cuentas de antiguos ISPs y de AtlasInternet, empresa de la que fui socio fundador.

Desde casi el primer día que salió también uso Gmail, y cada vez más. De hecho ahora se convirtió en mi dirección principal. Pero siempre he tenido todo duplicado, lo que me llega a Gmail lo re-envió a mnm.uib.es y viceversa (así cuando estoy en casa o la UIB uso el Kmail con IMAP del mnm, pero cuando voy de viajes o con el portátil uso siempre Gmail).

En fin, que es una chorrada monumental pero puede servir a alguien: la forma más simple de hacer lo anterior sin perder correos y fundamental sin tener correos duplicados que se re-envían de una cuenta a otra. Para ello uso el formato usuario+etiqueta@...

(more…)

Wednesday 11/7/2007

Geos de geografía y clausuras

Filed under: chapucillas, Mis hacks, Personal, Trucos — gallir @ 0:06

En las últimas semanas llevo varios maratones de programación que sumado a que los niños están de vacaciones no me dejan casi tiempo ni ganas para escribir nada mínimamente interesante en este blog.

Pero quería sacarme una espina que me quedó muy clavada desde el Google Developers Day (y la historia de Panoramio): la geolocalización. La verdad es que quedé muy sorprendido y entusiasmado por las posibilidades que ofrece, y sobre todo por el valor “pedagógico” de poder ver mapas al tiempo que lees una noticia o te relacionas con alguien.

(more…)

Saturday 16/6/2007

Vodafone Huawei e220 3G/HSDPA en Ubuntu (Feisty)

Filed under: Mis hacks, Trucos — gallir @ 15:44

Ayer me entregaron el modem USB de Vodafone “ADSL” de 3.6 mbps. Busqué en todos los foros y parece que muchos tienen problemas para hacerlo funcionar y configurarlo correctamente. Yo ya lo tengo funcionando, de hecho esto escribiendo este apunte desde el portátil vía la conexión de Vodafone.

Además lo hice de tal forma que cuando se enchufa el modem al USB se configura y conecta automáticamente. Para hacerlo fácil a los que quieran instalarlo preparé un fichero tar que tiene todo lo necesario.

Para instalarlo, basta bajarlo y hacer:

sudo tar -xvzf vodafone-usb.tgz   -C / 

y luego enchufad el modem. Debería funcionar inmediatamente (sin respestais las restricciones explicadas abajo). Podéis ver los “logs” en /var/log/messages.

Las restricciones para usarlo son:

  1. Eliminar el PIN. Poner el SIM en un teléfono y eliminar el control de PIN. Es fácil hacerlo que funcione con el PIN (con Init1 = AT+CPIN=xxxx), pero además de tardar unos segundos obliga a llevar el pin en el fichero, falsa “seguridad”.

  2. No tener ninguna conexión de Internet (o no local) en marcha, ya que puede confundir a las rutas.

Los ficheros que se instalan son:

  1. /etc/wvdial.conf: Configuración del wvdial para relizar la conexión.

  2. /etc/udev/rules.d/09-huaweie220.rules: regla del udev para llamar automáticamente huaweiAktBbo-i386.out y vodafone.sh cuando se enchufa el dispositivo.

  3. /usr/local/sbin/huaweiAktBbo-i386.out: programa que “enlaza” los tres puertos necesarios para que funcione, ttyUSB0, ttyUSB1 y ttyUSB2

  4. /usr/local/sbin/vodafone.sh: pequeño script que verifica que los puertos estén listos y si es así ejecuta el wvdial para establecer la conexión.

Saturday 17/2/2007

Presencia automática en kopete con el teléfono Bluetooth

Filed under: Trucos — gallir @ 15:35

Nunca había jugado con el Bluetooth, pero ayer compré una adaptador USB-Bluetooth de 15 euros y como tengo que amortizar semejante dispendio de dinero me puse a pensar cómo sacarle alguna utilidad real –además de poder enviar un vídeo borroso de 1 MB a la estupenda velocidad de 25 KB/seg, muy del siglo 21–.

Una de los problemas que tengo es con el Kopete/Jabber, que nunca me preocupo de desconectar o marcar “away” cuando salgo. De hecho soy tan desordenado que hasta poner un timeout automático me molesta sobremanera.

Así que encontré la forma de hacer que el Kopete se conecte automáticamente cuando entro a mi despacho y se desconecte cuando salgo. Bueno, en realidad se conecta o desconecta cuando es mi móvil con Bluetooth el que entra o sale.

Si ya tienes el Bluettoth funcionando, e instalado el paquete kdebluetooth es muy fácil. Hay que ir al Control Center del KDE -> Internet&Netwok -> Bluetooth Services. Allí hacer lo siguiente:

  1. Añadir una nueva tarea.

  2. Seleccionar “Custom Job”, luego hay que poner allí el código que muestro abajo.

  3. En Watched Devices para esa tarea (en la columna central) seleccionar Listed devices only

  4. Hacer la búsqueda y seleccionar el nombre del teléfono o dispositivo Bluetooth que usarás como “indicador de presencia”.

  5. Editar (configurar) el fichero y poner el código que muestro abajo.

  6. Et voilà

    (more…)

Pasar el vídeo de IT Crowd para el móvil (Sony Ericsson W810i)

Filed under: Trucos — gallir @ 0:06

Pasar un vídeo de cualquier formato a los MPEG4 o 3GP (y H263 que también suelen reconocer) es muy fácil. Por ejemplo la siguiente línea funciona perfecto para que pueda ser vista:

ffmpeg -i entrada.avi -s qcif -vcodec h263 -acodec aac -ar 22050 -ab 42 -b 100000 -ac 1 salida.3gp

Nota: qcif es equivalente a 176×144, -ac 1 es para que grabe en mono. Podéis usar mpeg4 en vez del h263, supongo que el audio también funcionaría con MP3, pero no lo probé.

Pero resulta que los originales de IT Crowd que se publicaron en Internet están grabados con un aspecto “panorámico” muy raro, 640×352 (1.8181), mientras que el teléfono sólo acepta en formato 1.33. Si no está con ese aspecto lo escala a lo bestia para que ocupe la pantalla completa, haciendo que la imagen se vea deformada.

Después de pelearme un par de horas sin encontrar una solución canónica –i.e. especificando el aspecto en el vídeo– llegué a la conclusión que la única solución es agregarle a “pelo” las franjas negras arriba y abajo de la imagen. Así me sale que para mantener el aspecto 1.8181 la imagen debería ser de 176×94, por lo que hay que ponerle franjas negras que completen los 50 pixels para llegar a 176×144.

Por suerte el ffmpeg lo hace con el -padtopy -padbottom. Así la línea que me deja IT Crowd perfecto para verlo en el móvil es:

ffmpeg -i entrada.avi -padtop 26 -padbottom 24 -s 176x94 -vcodec h263 -acodec aac -ar 22050 -ab 42 -b 100000 -ac 1 salida.3gp

Nota: no se pude poner 25 pixels, tiene que ser múltiplo de 2, por lo tanto elegí 26 + 24.

Bueno, ya está mi escrita chuleta para la siguiente vez que lo necesite, ya estoy pasando los dos últimos capítulos –”sólo” los ví unas tres veces :-)– para que los pueda ver mañana mientras hacemos el paripé desde las 9 de la mañana a las 14 horas en la competición de natación en Son Hugo.

Ahora sólo me falta confirmar que la velocidad de 27-30KB/seg es normal, es lo máximo que alcanzo con ese teléfono, mi Debian y un adaptador USB-Bluetooth Belkin de 14.99 euros (más IVA).

Wednesday 3/1/2007

Chapuzas… para los que no entienden los “strings”

Filed under: Trucos, Software, Hackerdom — gallir @ 0:45

Siguiendo con el “espíritu” del apunte anterior. Txipi hizo diana, sí, se trata del artículo de Joel Spolsky “volver a lo básico”. Para alguien que no conoce esas bases, ni cómo funcionan los strings enseguida dice “vaya chapuza”, si eso se puede hacer con la clase XYZStringOnSteroids o con un buen SQL estándar…

[1] Alerta, aunque hay optimizaciones imprescindibles, la mayoría son prematuras, las madres de todos los males.

Hablando de SQL, en los últimos meses aprendí mucho de sql, pero sobre todo cuando hay que saltarse el “camino obvio” y buscar un hack para aquellas optimizaciones imprescindibles. Una que me paso hace pocas horas con el nuevo modelo de tres columnas del Menéame, en particular con la generación de las etiquetas que aparecen arriba a la derecha.

Seguramente para los expertos en bbdd es una tontería como una casa, pero para mí no fue obvio, es como el tema de seguridad. No es que te enseñan unas reglas y ya está, debes asumirlas e integrarlas en el proceso de desarrollo. Lo mismo me pasó con muchas cosas del SQL, especialmente del SQL, cuando se trata de generar una decenas de páginas por segundo, lo más rápido posible, aunque cada una tenga decenas de consultas a la bbdd.

Lo último, para ver si lo sabéis –expertos abstenerse, sólo dejad la pista :-) –. Aquí se observa la última modificación que hice a esa función. En la columna de la izquierda se observa en amarillo el código que fue modificado por el de la derecha (sólo interesa la primera línea).

El de la izquierda ya es “raro”, ya que es un sql adicional. Pero el de la derecha es aún más bizarro para alguien que nunca lo haya pensado. ¿Por qué están ambos códigos? ¿por qué quedó como está? (sí, ya, es una optimización como dice el “log”).

PS: Curioso los trucos que hay que aprender a usar, sin algunos de los dos quizás hubiese tenido que quitar lo de las etiquetas porque el servidor no hubiese aguantado, al menos en horas pico. Hace un año atrás no se me hubiese ocurrido esta solución para quitar muuuuuuucho trabajo a la bbdd.

Actualización/Respuesta: es la cache

MySQL tiene un sistema de cache de consultas SQL. Para un web como el menéame, con cientos de consultas por segundo, esta cache es fundamental para no recargar el servidor. En el caso mostrado se trata de contar cuáles son las etiquetas más repetidas en las últimas 48 horas, lo que significa recorrer la tabla de etiquetas (tags) y contar unos pocos miles de etiquetas.

Si esa consulta se repitiese para cada página que se genera el servidor se cargaría demasiado. Por ello es indispensable que estén en cache. Una forma de consulta habitual es usar el date_sub, por ejemplo:

date > date_sub(now(), interval 48 hour)

Pero tiene un problema, el “now()” es un dato que varía constantemente, por ello el mysql no cachea estas consultas. Para permitir que se haga lo mejor es seleccionar una fecha que permanezca constante durante un tiempo razonable.

Por ello primero use una fecha de noticia publicada y luego lo simplifiqué a la hora actual (sin minutos ni segundos) menos 48 horas. Así se puede mantener en cache la consulta hasta una hora si es que no hay cambios en las tablas.

Para todo el desarrollo del menéame fui con mucho cuidado en permitir la máxima cantidad de cache posible, y cuando se sabe que no tiene sentido el cache (por ejemplo cuando verifica la IP de cada cliente) lo obligo a saltarse con el SQL_NO_CACHE para evitar gastar tiempo y sobre todo memoria. Por ejemplo en el control de votos de cada usuario:

 SELECT SQL_NO_CACHE count(*) FROM votes WHERE $where

Por lo demás, tengo configurado el mysql para usar 24 MB de RAM (antes tenía 16) para el cache de SQL.

Monday 11/12/2006

No lo entiendo

Filed under: Curiosidades, Trucos — gallir @ 17:56

Ayer domingo por la mañana actualicé el Apache, PHP y MySQL de eso. Debido a que el tráfico era bastante inferior a lo normal –por el puente– decidí habilitar la compresión gzip en el PHP y también en el Apache (con el mod_deflate). Pensé que el consumo de CPU se dispararía hoy lunes con el aumento de tráfico, de hecho lo llevo controlando casi todo el día.

Pero es que no sólo no ha subido, también está por debajo de los niveles de cargas habituales a pesar de estar en “horas pico” (unas 5000 visitas/hora, diría que la carga ha bajado un 20-30% por lo menos):

$ uptime
 17:45:41 up 45 days, 17:12,  4 users,  load average: 0.48, 0.54, 0.53
$ uptime
 17:54:53 up 45 days, 17:21,  4 users,  load average: 0.45, 0.45, 0.48

Podría pensar que la mejora del Apache 2.2 en la gestión de las conexiones persistentes tuviese algo que ver. O que el rendimiento del PHP 5.2 es muy superior al del 5.1 (aunque he leído estudios que demuestran que no lo es).. ¿pero tanta diferencia? ¿influirá también en que se “descarga” de la gestión de las conexiones TCP/IP al haber muchos menos datos que transmitir? (un 20-25% del total sin comprimir) ¿mejor aprovechamiento del hyperthreading de los procesadores Xeon?.

No lo entiendo. ¿Alguna idea?

PS: Tampoco entiendo porqué muchos IE (sobre todo el 6) se bajan el CSS cada vez y porqué no aceptan la versión comprimida… pero me agobiaré con esto más adelante.

Saturday 28/10/2006

La forma óptima de guardar direcciones IP en MySQL

Filed under: menéame, Trucos — gallir @ 19:47

Hace unos días vía menéame el artículo 10 things you (probably) didn’t know about PHP. El #1 recomienda almacenar las direcciones IP como enteros en vez de strings, como hacíamos en el menéame.

(more…)

Wednesday 18/10/2006

Medir el estado de la economía web 2.0 española con un comando

Filed under: Trucos, Weblogs — gallir @ 1:24

Hoy leyendo un apunte de Enrique Dans me dí cuenta de una idea que podría ser muy útil para los estudiosos de la economía. Encontré cómo medir el estado de la economía “web” en España con sólo un comando en la consola de cualquier GNU/Linux, y todo con software libre (este comando está publicado con licencia GPL 2 o superior).

Sólo copiad –tal cual– las tres líneas siguientes en vuestra consola:

wget -q -O - http://edans.blogspot.com/ | \
perl -e 'while(<>){split;foreach(@_){print "$_\n"if/francamente/}}' | \
wc -l

Cuanto más alto sea el número, mejor será el estado de esta economía. Al momento de escribir este artículo, el resultado es 5.

El problema es aunque se conoce la cota inferior, 0, no se conoce todavía cuál su valor máximo. Sujeto a experimentación.

PS: Te queremos Enrique ;-)

Tuesday 26/9/2006

Plantillas PHP: there is no silver bullet

Filed under: menéame, Trucos, Hackerdom — gallir @ 23:31

Después de mi mala experiencia en este sentido con WP y el desarrollo y éxito del wp-cache, y darme cuenta como un código tan “pesado” puede echar al traste a cualquier blog, cogí una obsesión casi paranoica con la eficiencia del código y evitar a toda costa las “capas adicionales”, estaba convencido que daban mucha “elegancia” al código y a la “arquitectura”, pero sólo un poco –muy poco– de facilidad real de adaptación.

(more…)

Optimizar [un huevo] el Apache

Filed under: Trucos — gallir @ 15:19

Con el menéame me dí cuenta de dos cosas:

  1. Las cantidad de cosas que se pueden hacer un “viejo” Xeon Dual haciendo que el código y los SQL sean muy eficientes (más de 2.000.000 de ejecución de scripts/páginas PHP diariamente y una media de 200 consultas por segundo –con picos de varias veces esa cantidad).

  2. Que los parámetros por defecto del Apache no están para nada ajustados a servidores con mucha carga. Especialmente uno…

    (more…)

Saturday 25/2/2006

Deslocalizandos mis emails… con Gmail

Filed under: Trucos, Hackerdom — gallir @ 16:57

Desde hace muchos años tengo dos direcciones de correo. Una del [ISP] del que fui socio fundador en el 95, la otra dirección es la de la universidad que la tengo desde el 92. Esas dos direcciones son las que más uso para todos las listas de correo y mis cuentas en sitios web. Con todas estas manías anti-spam y anti-zombies de Windows resulta que ya no podía enviar mensajes desde mi casa sin usar el servidor de ONO, que no me deja usar mis propias direcciones…

(more…)

Thursday 26/1/2006

Reducción del tráfico RSS

Filed under: menéame, Curiosidades, Trucos — gallir @ 13:28

Siguiendo las instrucciones del enlace Administrative: RSS rate limiting (vía menéame) reduje considerablemente –mucho, al menos un orden de magnitud en menos de 24 horas– el tráfico generado por el RSS.

No sabía –ni lo había pensado– que la mayoría de los clientes RSS enviasen la cabecera If-Modified-Since. Además me percaté que para que la mayoría lo haga hay que enviar también la cabecera Last-Modified. Estos cambios los introduje –de forma bastante chapucera, hay que decirlo, un hack de 5 minutos– en el rss2.php (que supongo ya sabéis como bajarlo, si no lo sabéis es que no merecéis ninguna ayuda :-) ).

Next Page »

Powered by WordPress