24 septiembre 2008

Esas cosas raras entre Windows y MySQL

Como en la oficina tengo un ordenador con Windows (afortunadamente XP) he instalado xammp.

Hasta ahora no he necesitado de utilizar mysql, porque normalmente utilizo una base de datos que tengo en un servidor con Linux.

Ahora que iba a crear una base de datos me encuentro con que no me funciona la contraseña '' de root como tiene la instalación por defecto.

Supongo que me pasaré la tarde buscando documentación, puesto que la solución que da en la documentación MySQL no me está funcionando.

22 septiembre 2008

Exposición "Star Wars" en el Corte Inglés de Callao

Este fin de semana estuvimos dando una vuelta por Gran Vía y cuál fue mi sorpresa cuando vi esos grandes carteles en el Corte Inglés de Callao anunciando una exposición única de Star Wars.

En fin, no nos quedó más remedio que darnos una vuelta por ahí, y la verdad que estaba muy chula.

Las piezas que se exponen pertenencen a Luismi Alonso, un actor que tiene una de las mejores colecciones sobre el universo Star Wars.

Es muy recomendable para todos los "frikis" y para los "no frikis" que les guste la saga, o simplemente las colecciones. La exposición permanecerá abierta hasta el 19 de octubre.

Más información.

19 septiembre 2008

Recuperación dump repositorio subversion

Bueno, pues finalmente he hecho un pequeño script en python para recuperar los dump incrementales cada día en otro servidor de backup. De este modo si se cayera la máquina principal, lo único que se podría perder serían los commit de ese día, y se podría seguir trabajando sobre la otra máquina.

#!/usr/bin/env python
"""Script para recuperar los backups incrementales de subversion.
Intenta seguir por donde lo ha dejado el dia anterior. Se tiene que hacer
todos los dias, si nos saltamos un dia ya hay que hacer la importacion a mano """

import os
import glob
import subprocess
import sys
# import pdb


# Directorio donde ubicamos los repositorios y los backups
REPOS="/usr/local/repos/"
BACK="/media/backups/"

# Fichero de LOG
LOG="/root/scripts/logsubversion.log"

# Listamos los repositorios

lista=os.listdir(REPOS)

# Realizamos un loop en la lista y navegamos hacia el que sea un repositorio

for elemento in lista:
if os.path.isdir(REPOS+elemento):
# Capturamos en numero de version actual
filerev=subprocess.Popen(["svnlook", "youngest", "/usr/local/repos/"+elemento], stdout=subprocess.PIPE).communicate()[0]
# Incrementamos el numero de version porque es el que tenemos que buscar
a=int(filerev)+1
# pdb.set_trace()
# Realizamos una captura de los errores (fallo nfs, etc, etc)
try:
for elem in os.listdir(BACK+elemento):
#print elem
nuevoa=str(a)
nuevoelem=elemento+".incr."+nuevoa+"_"
#print nuevoelem
if (elem.find(nuevoelem)!=-1):
try:
os.system("svnadmin load /usr/local/repos/"+elemento+" < /media/backups/"+elemento+"/"+elem)
fich=open(LOG,"a")
fich.write("actualizado "+elemento+" desde revision "+nuevoa+"\n")
fich.close()
except:
fich=open(LOG,"a")
fich.write("error actualizando "+elemento+"\n")
fich.close()
except:
pass






Seguro que se puede hacer más sencillo, más rápido, etc, etc..., pero esto es lo que se me ha ocurrido. Los dump los guardo con un formato fichero.incr.45_56 donde 45_56 son los números de las versiones que se han guardado.

17 septiembre 2008

De vuelta

Llevo mucho tiempo sin escribir nada (para ese par de despistados que puedan caer por aquí a través de una busqueda de Google), pero voy a intentar retomar mis anotaciones, aunque estoy en un período bastante chungo; cambio de casa, sin internet en casa, durmiendo en el sofá, montando muebles de Ikea...

Además hemos estado con bastante curro, pero en fin, espero tener algo interesante que soltar :-)

11 julio 2008

Cacheado de Navegadores y mod_expires

En mi opinión pienso que la informática todavía está en pañales para dar un buen servicio al usuario común.

¿En qué baso este razonamiento?.

Es muy sencillo. Yo no sé absolutamente nada de mecánica, pero un coche me puede dar un servicio constante y eventualmente algún fallo que me haga ir al taller, o bien puedo evitarlo con un mantenimiento.

En informática, pese a que el usuario pida un mantenimiento o lleve su ordenador al taller, siempre va a tener que saber algo más.

Todo este rollo tiene relación con una serie de emails que estamos recibiendo en la oficina. No son mayoría, pero si se pueden evitar, mejor.

Los usuarios se descargan un fichero .exe de uno de nuestros servidores. Se lo descargan mal (por problemas en la red, por lentitud, por lo que sea). Ellos ven el icono de instalación y proceden a instalarlo. Cuando lo ejecutan el instalador les dice que hay un fallo de integridad de ficheros y que no puede instalar, y que blah, blah, blah....

Siguiente paso, se lo vuelven a descargar, mejor dicho, creen que se lo vuelven a descargar, porque en realidad el navegador le pregunta al servidor si ha cambiado el fichero, el navegador le responde un código 304, y el navegador lo que hace es copiar el fichero que ya ha descargado, con lo cual vuelve a estar corrupto.

¿Qué solución he encontrado?, pues utilizar el mod_expires de apache. Se utiliza para forzar a los navegadores a que cacheen imágenes, javascripts, etc, pero yo lo he utilizado al revés. He puesto un caché de un segundo de modo que siempre intente descargarse el fichero. El mod_expires en lugar de preguntarle al servidor si ha cambiado el fichero lo que hace es modificar las cabeceras añadiendo una cabecera Etag y modificando la cabecera Cache-Control.

Ahora parece que está funcionando sin problema, tengo que mirar si hay implicaciones en el resto de ficheros por no añadir un comportamiento por defecto, pero parece que va bien.

<IfModule mod_expires.c>
ExpiresActive on
ExpiresByType application/octect-stream A1
</IfModule>