Thursday, November 29, 2007

Subversion y dual booting

Como mucha gente me veo obligado a ser un dual booter, es decir, alguien que tiene en su PC una partición con Windows y otra con Linux.

Desde que está el driver NTFS-3G para Linux, comparto una partición NTFS donde están mis archivos de trabajo que la tengo montada indistintamente en ambos sistemas operativos. Es D: en Windows y /media/biblioteca en Linux.

En esa particion tengo varias working copies Subversion (creadas con el TortoiseSVN desde Windows). Hoy quise hacer commit/update desde Linux y me encontré con que no funciona.

carlosm@polaris:~/biblioteca/Users/Marcelo/00_Wksp_Personal$ svn update
ssh: shell.xyz.com:: Name or service not known
svn: Connection closed unexpectedly

Observar que curioso: el hostname en la URL tiene un ":" que parece sobrar. En Windows funciona bien, pero en Linux, obviamente ese host lookup falla.

La solucion fue hacer "relocate" del repositorio:

svn switch --relocate svn+ssh://shell.xyz.com\:/ svn+ssh://shell.xyz.com/

(observar como en una URL esta el colon y en la otra no)

Wednesday, November 28, 2007

[K]Ubuntu Gutsy Gibbon - Latencias en el desktop

Hace un mes mas o menos que tengo instalado el KUbuntu "Gutsy Gibbon", y como (casi) siempre la experiencia de trabajo es muy buena. Sin embargo, he venido plagado con algunos problemas de latencia y agilidad en el desktop, particularmente desde que instalé el VmWare Server 1.0.4.

¿Que pasó? El mouse dejo de moverse smoothly, el Windows emulado que corro en el VmWare es prácticamente inusable ya que mover una ventana o abrir el menu "Inicio" tiene una demora de medio segundo o mas.

Buscando (en Google como siempre :-) ) la solución vino por el lado de re-compilar el kernel. Hay varios tutoriales de como hacerlo de manera "prolija" para el Ubuntu, pero lo mas relevante es que hay que hacer los siguientes cambios:
  • Cambiar el scheduler: En vez de SLOB usar SLAB
  • Deshabilitar el "tickless system"
  • Cambiar el timer a 1000 Hz
  • Habilitar el "preemptible kernel"
  • Usar 4Kb stack frames
    • (esto en realidad no tengo claro si sirve para algo o no)
Y voilá! Ahora funciona todo super-ágil.

Referencias:

Monday, November 26, 2007

Hibernate y Annotations

La forma tradicional o clásica de usar Hibernate hace que debamos mantener varios archivos XML con diferente información relevante a los objetos que queremos persistir, incluyendo que campos queremos persistir, correspondencia campos <-> tablas e informacion de conexión a la base de datos.

Cada vez que hay un cambio en la aplicación, hay que hacer mantenimiento de:
  • Los POJO's (las clases Java)
  • La propia estructura de la base de datos
  • Los archivos XML que establecen las correspondencias
Esto no solo parece, sino que es, mucho trabajo.

Annotations

Acá entran en juego las Java Annotations. Si agregamos a nuestra aplicacion el paquete Hibernate Annotations tenemos a nuestro alcance una forma mucho mas sencilla de mantener nuestra aplicación.

Las annotations son marcas que compienzan con "@" que se agregan antes de las declaraciones de clases o campos. Con estas annotations podemos marcar que campos son persistentes, que campos son claves primarias y si queremos, como se establece la correspondencia entre tablas y campos.

Annotations es compatible con el paquete javax.persistence y lo bueno de esto es que por ejemplo el Netbeans permite generar clases anotadas directamente desde la estructura de la base de datos.

Compatibilidad

Hibernate Annotations es independiente del IDE que estemos usando (a diferencia de mi método anterior de trabajo que dependía fuertemente del plugin para Eclipse).

Las Annotations en Java están disponibles desde Java 5 en adelante.

Wednesday, November 14, 2007

Java, persistencia e Hibernate

Estoy analizando opciones de persistencia en Java, tratando de entender que lugar ocupan cada una de varias tecnologias relacionadas. La comunidad Java es experta en producir nombres para las cosas y siglas, mucho mas que otras!

  1. JDO
  2. Java Persistence / TopLink
  3. Hibernate

De lo que he visto hasta ahora, Hibernate es lo que mas me sirve, porque se le puede aplicar a POJOs (Plain Old Java Objects) a diferencia de los otros que parecen ser soluciones orientadas a J2EE y porque lo pude hacer funcionar con relativa facilidad (cosa que no puedo decir del resto!)

Mas de Hibernate en la proxima entrada.

Recoleccion de alarmas

Estoy trabajando en implementar un sistema de colección de eventos (una especie de syslog server pero generalizado), y quiero que los eventos ya analizados se guarden en una base de datos relacional (por ahora MySQL).

Mi primera prueba de concepto la hice en PHP y fue razonablemente existosa, pero tengo la necesidad de mejorar la performance de la solucion, y de poder distribuir de una forma mas compacta el software.

La idea: probar re-implementar la prueba de concepto en Java.