Archivos mensuales: Febrero 2006

Sincronización

Tengo el siguiente problema: tengo que mantener sincronizado el contenido de dos servidores, los cuales son gemelos y están detrás de un repartidor de carga, con lo que cada vez que se hace una petición el repartidor decide si lo envia a uno u a otro.

La cuestión está en que uno de los servidores es el principal, es decir que es en el cual se actualizan los contenidos y el otro es el secundario, o sea que coje el contenido actualizado.

El problema reside que en que al actualizar un servidor el otro no tiene el contenido actualizado hasta pasado el periodo que se ha definido de replica.

Hasta al momento he estado utilizando rsync, pero debido al gran vólumen de datos a actualizar cada vez, los rsync’s tardan excesivamente y las actualizaciones no son todo lo rápidas que yo quisiera.

Estoy haciendo pruebas leyendo el fichero de log de FTP y actualizando los archivos que aparecen en dicho log en tiempo real, pero me queda el fleco de los archivos que se pasan por SSH, ya que no conozco ningún log en el cual se reflejen los archivos transferidos por SSH.

He observado que tengo configurado el rsync para que se lance con el inetd, pero me parece que está solución no es buena ya que cada vez que llamo al rsync se recorre todo el árbol de directorios y tarda un montón.

Mañana intentaré optimizar el programa que mira los logs de FTP y modicaré la configuración del rsyncd para que este todo el rato ejecutandose en el servidor a ver si así consigo mejor rendimiento.

En cuanto encuentre la mejor solución continuaré este post y añadire ejemplos.

En mi casa

Estoy pasando todos los capitulos de Caballeros del Zodiaco que me ha dejado un compañero del curro del portatil al mac mini y como en la mesa del escritorio ya tengo ocupad la toma de red me he visto obligado a estar así:

Ya se que no tengo un TFT, pero que conste que estoy en ello…

Backup

Por lo regular siempre se empiezan a hacer backups de las cosas después de un desastre, cuando ya no hay solución y para que no te vuelva a pasar.

Yo he decidido que me voy a intentar hacerlo antes de que suceda un desastre, así que está mañana me he puesto a hacer un scripts en SHELL que me hagán un backup de la web y de la BBDD.

He hecho una cosa sencillita, simplemente comprimo en un tar.bz2 el directorio www y por otro lado con el comando mysqldump hago un export de lo que tengo en la BBDD y lo comprimo.

Depués paso los ficheros generados al disco duro externo LACIE que tengo conectado al MacMini y listo, backup al canto:

DIA=`date +%w`

tar -cvjpf /home/MICASA/www.$DIA.tar.bz2 /var/www > /dev/null
scp /home/MICASA/www.$DIA.tar.bz2 IPDELMACMINI:/Volumes/LACIE/Backup
rm -f /home/MICASA/www.$DIA.tar.bz2

mysqldump -uMIUSUARIO -pMIPASSWORD –all –all-databases > /home/MICASA/mysql.$DIA.sql
bzip2 -f /home/MICASA/mysql.$DIA.sql
scp /home/MICASA/mysql.$DIA.sql.bz2 IPDELMACMINI:/Volumes/LACIE/Backup
rm /home/MICASA/mysql.$DIA.sql.bz2

Para poder pasar las cosas al MacMini con scp sin que me pida el password he creado una clave publica con el ssh-keygen: ssh-keygen -t dsa y se la he puesto en el MacMini dentro del fichero authorized_keys de mi usuario.

Luego lo he puesto en el CRON para que se ejecute todos los días a las 0:00:

0 0 * * * /home/MICASA/backup.sh > /home/MICASA/backup.log 2>&1

Bueno, ahora mientras no se queme o se inunde mi habitación tengo un backup diario del contenido importante de mi servidor.

Programando en C

La verdad que desde la universidad no he programado nada en C, bueno si ha eso que haces en la universidad se le puede llamar programar en C, porque hay veces que te dan las cosas tan mascadas que lo único que haces es unir los puntos de un dibujo y realmente no sabes lo que es dibujar.

De todas formas, en la universidad desaproveché la oportunidad de aprender a programar en C, no apuntandome a la asignatura de Gráficos por Computador, la cual se daba integramente en C, mal por mi parte, pero es que en aquella época era joven y cometia errores, que conste que ahora soy más mayor y los sigo cometiendo pero intento que sean los menos posibles.

Me estoy planteando aprender a programar en serio, el problema que siempre tengo es que no se que hacer, así que he decidio empezar aprendiendo a utilizar el kqueue que me va a hacer falta para mi trabajo y por lo que he estado leyendo por Internet está implementado en todos los sistemas basados en BSD, incluyendo Mac OS X.

Para más información sobre el kqueue: man kqueue

Nociones básicas de web services

Por fin he conseguido aprender a hacer web services en JAVA mediante AXIS, mis conocimientos son muy básicos, pero los voy a plasmar aquí por si le sirven a alguien.

No voy a explicar como montar el tomcat ni como instalar el AXIS ni el JTDS ya que creo que esa información está bastante clarita por ahí, lo que voy a intentar explicar es los pasos básicos para montar un servicio pero complementando la información que yo no he obtenido por Internet y la cual he aprendido a base de prueba y error.

En el ejemplo que os voy a mostrar se trata de un servicio de anuncios en el cual se pueden obtener através de web services los anuncios que tiene contratado un usuario.

Lo primero que hay que hacer es definir en JAVA la clase Anuncio.java, es una clase sencillita con una serie de atributos privados a los cuales se accede mediante los típicos métodos publicos de set y get.

Después de esto vamos a definir la classe Anuncios.java que es la clase a la cual referenciaremos en nuestro Web Service y la cual tendrá los métodos que dejaremos que se ejecuten a través de él.

Una vez que tenemos listos los métodos del Web Service vamos a preparar otro archivo que vamos a llamar Anuncios.wsdd el cual contiene la definición del servicio que vamos a ofrecer.

El objetivo de este Web Services es que pasandole un usuario me devuelva un XML con todos los anuncios de dicho usuario.

Existen dos tipo de XML que nos puede devolver, todo ellos encapsulados en un mensaje de tipo SOAP, que es através de el cual se comunican los Web Services.

En el campo style tenemos varios valores posibles, estos determinarán el formato del XML que ira en el cuerpo del mensaje SOAP, yo en el ejemplo he usado: style=”wrapped”, ya que a mi juicio es el más fácil de entender ya que te devuelve un XML bastante claro en el cual se ve el reflejo de la clase en JAVA que hemos definido.

El fichero Anuncios.wsdd es el fichero de deploy, el cual se usa para dar de alta el servico en AXIS, más información sobre su estructura completa aquí

El comando que hay que ejecutar para dar de alta el servicio es el siguiente:

java org.apache.axis.client.AdminClient Anuncios.wsdd

Con esto ya tendremos el servicio listo para atender las peticiones.

Podemos ver los servicios que tenemos activos en:

http://localhost:8080/axis/servlet/AxisServlet

Si tienes el servidor instalado en otra dirección y en otro puerto deberás de cambiar, el resto de la URL a de ser el mismo.

Para dar de baja un servicio hay que crear el fichero de undeploy, en nuestro caso: Anuncios_undeploy.wsdd

El comando a ejecutar es el siguiente:

java org.apache.axis.client.AdminClient Anuncios_undeploy.wsdd

Ahora solo queda crear un cliente que acceda a dicho Web Services, esto tampoco lo voy a explicar porque está bastante documentado en Internet y además se puede implementar en el lenguaje que se quiera: JAVA, PHP, .NET, PERL, …

Yo concretamente he utilizado PHP con la librería nuSoap y funciona bien.

Referencias:
http://www.osmosislatina.com/axis/basico.htm
http://www.it.uc3m.es/berto/SI/WS/

Two by Two

Esto me lo ha pasado Bad_CRC:

  • Cuatro trabajos que he tenido:
    • Programador WEB
    • Programador
    • Repartidor de pasteles
    • Cadena de producción en fábrica de perfumes
  • Cuatro películas que puedo ver una y otra vez:
    • Cazafantasmas 2
    • Atrapado en el tiempo
    • Paycheck
    • Matrix
  • Cuatro series que me encantan:
    • Battlestar Galactica
    • Tru Calling
    • Lost
    • Nip Tuck
  • Cuatro series muy recomendadas o populares de las que no he visto ni un minuto:
    • My name is earl
    • Las chicas de Gilmore
  • Cuatro sitios en los que he estado de vacaciones:
    • Barcelona
    • Malaga
    • Salamanca
    • Alicante
  • Cuatro de mis platos favoritos:
    • Arroz con leche
    • Canelones
    • Queso con membrillo
    • Alubias rojas
  • Cuatro sitios en los que te gustaría estar ahora mismo:
    • En la cama
    • En mi propia casa
    • Leyendo en una campa
    • En la playa
  • Mis cuatro víctimas:

Herramientas

Las herramientas existen y esto es un hecho, la cuestión que ahora me aborda es: ¿Por qué nos cuesta tanto cambiar de herramientas?

Todos tenemos en nuestro trabajo y en nuestra vida cotidiana una serie de herramientas que utilizamos a diario y que nos hacen la vida más fácil.

Con el paso del tiempo, salen nuevas herramientas con nuevas funcionalidades o con nuevos diseños, con las cuales se supone que haremos nuestras tareas diarias mejor y más rápido.

Lo que a mi me sucede es que me cuesta muchisimo actualizar mis herramientas, me acostumbro tanto a ellas que aunque las nuevas tengan más funcionalidades y me prometan que voy a hacer mi trabajo mejor y más rápido no acaba por convencerme.

No voy a negarlo, soy un hombre de costumbres y en el momento en el que me cambian algo en mis tareas diarias me siento incomodo y perdido, el periodo de adecuación al cambio para mi es dificil.

¿Significará esto que no me gustan los cambios?

No se, pero la cuestión es que veo que realmente podré hacer mi trabajo mejor pero me cuesta dar el paso definitivo para llegar al cambio, quizás deba de estar más abierto a las nuevas opciones porque seguramente me reportarán grandes beneficios y harán que mis tareas diarias sean más amenas.

Tiempo

Cada día me doy cuenta de que el tiempo pasa más rápido, las semanas se me pasan volando y no me da tiempo a hacer todas las cosas que quiero y entonces me pregunto: ¿Es esto normal?¿Le pasa a todo el mundo?

La cuestión es que tengo bastantes proyectos entre manos, tanto profesionales como personales y veo que no me da tiempo de realizar todos.

Esto a veces me frustra e intento poner prioridades, pero nunca resulta ya que las prioridades que pongo a las tareas no son las adecuadas.

A todo esto se suma, las ganas de hacer cada tarea en el momento oportuno hay veces que me es realmente dificil llevar a cabo una tarea después de haber estado realizando otra distinta.

Mi solución suele ser tener un poco de tiempo de esparcimiento entre tarea y tarea, pero entonces peligra la realización de la siguiente tarea ya que suelo necesitar mucho tiempo de espacimiento cuando mi mente está ofuscada.

Profundizando más en la reflexión me doy cuenta de que necesito mas de 24 horas al día para poder realizar todo lo que me gustaría hacer.

Se que los proyectos personales son importantes y sin ellos no me siento completo, ya que dedicar toda mi tiempo al trabajo y a mi vida personal, los deja de lado y yo me quedo con una sensación de que me falta algo para sentirme realizado.

Compilar V.S. Paquetes

La verdad es que llevo mucho tiempo usando distribuciones de linux o de unix cuyos metodos estándar de instalación son los paquetes, por ejemplo: Mandrake / Mandriva, Red Hat, freeBSD.

La cuestión es que estas distribuciones tienen los tipicos comandos en los cuales metes el nombre del paquete y le dices que se baje todo lo necesario y te instalan el paquete pedido más los 20 mil más que hacian falta por las dependencias entre ellos.

Este mundo en el que estaba sumido era bastante bonito ya que no me tenia que preocupar por el orden en el que los tenia que instalar ni nada, además en Mandrake / Mandriva, cuando te fallaba alguna instalación por que faltaba alguna libreria, simplemente usando el comando urpmf [nombre_libreria] te decia el paquete o paquetes que la contenían (muy util la verdad)

En freeBSD con sus maravillosos ports tenía algo parecido y la verdad es que mi vida era muy fácil, pero todas las cosas buenas tiene su lado malo, hoy me ha tocado modificar una instalación de PHP para añadir un nuevo módulo, el CURL para ser más exactos, y me he tirado un buen rato pensando en el orden en el que había que hacer las cosas.

Primero he buscado en http://www.php.net las opciones que le tenía que poner al configure para que me cogiera las funciones de CURL, muy contento yo he visto que únicamente había que añadir –with-curl, así que he cogido las opciones con las que se había compilado la última vez del fichero config.status y he añadido la nueva.

Después los tipicos make y make install y listo, todo compiladito sin ningún error, ahora es el momento de la verdad, voy a la página en la cual utlizo las funciones de CURL que no funcionan y la ejecuto de nuevo y… no funciona.

Mierda, bueno, a la primera no tiene que funcionar, entonces recuerdo que igual tengo que reiniciar el APACHE para que me coja los cambios, lo reinicio y me da que va a ser que no.

Me pongo a discurrir y se me ocurre mirar a la hora de hacer el configure a ver si me ha cogido las opciones del CURL, no me convence lo que veo así que decido bajarme el CURL y compilarlo.

Me lo bajo, configure, make, make install y toda la parafernaria y ya tengo el CURL instalado.

Ahora repito los mismos pasos con el PHP, y lo que veo en el configure me convence así que tiro para adelante y vuelvo a probar y me sale nones.

Bien, empieza la desesperación, y me acuerdo: ¡Anda que hay que compilar el apache de nuevo!

Lo compilo y nada, vaya la idea parecia buena.

Decido mirar el phpinfo para ver que me pone y veo que la reconstrucción del paquete tiene una fecha un poco diferente a la de hoy, como de hace un año, lo cual me da la pista de que se me ha olvidado incluir la opción de –with-apache al compilar el PHP y también pienso que a saber quién compiló el PHP la última vez y para qué.

Bueno, configure, make y make install para el PHP otra vez pero con las opciones correctas y configure, make y make install del APACHE, reinicio los servidore y ¡bingo! ya tengo las funciones de CURL instaladas.

La moraleja de está historia es que no se puede dejar las buenas costumbres de bajarse el código fuente y compilar porque a la minima que te descuides te pasas toda la tarde para hacer una tonteria que la tendría que haber terminado como mucho en 30 minutos.

Un solo pensamiento…

¡¡¡Odio el JAVA y los WEB SERVICES!!!

No entiendo como para hacer algo sencillo hay que complicarse tanto la vida. Creo que el dicho de “make it stupid” no está hecho para el JAVA.

Llevo todo el santo día intentando que funcionen los WEB SERVICES con AXIS y no hay tu tia. Lo gracioso es que después de meter un CLASSPATH como un libro de largo, había conseguido que funcionase, pero después de reiniciar el servidor ha dejado de funcionar y ahora me da un error bastante raro e incomprensible

Además por Internet no hay casi información, me da la sensación de estar utilizando tecnología obsoleta que no me va a llevar a ningún sitio.

Con lo facíl que sería hacer el desarrollo con PHP + MYSQL + AJAX, pero no, hay que hacerlo con JAVA, TOMCAT y AXIS, lo más de lo más, pero con un ciclo de desarrollo un poco largo y ni hablar de la curva de aprendizaje que me da que tiene bastante holgura.

Mañana volveré al ataque, a ver quien puede más, de momento: JAVA 1 – JAVI 0

Actualización:

Hoy he seguido pegandome con esto, pero como he aprendido en el tiempo que llevo con los ordenadores: cuando algo no te salga, intenta hacer otra cosa para distrairte y después verás las cosas con más claridad o desde otro punto de vista.

Hoy he descubierto que misteriosamente había desaparecido la referencia a localhost(127.0.0.1) del fichero /etc/hosts y por eso mi calvario de ayer, la verdad es que empiezo ha creer en la mágia y los duendecillos cuando me suceden estas cosas.