domingo 22 de febrero de 2009

La deuda técnica

Desde principio de año la deuda técnica es un tema constantemente en consideración en la empresa.
Para los que no están al tanto, la deuda técnica es una metáfora de la deuda en la que se incurre al avanzar en el desarrollo de manera quick and dirty, sin prestar la debida atención a la calidad del código. Esta deuda, como la financiera, tiene intereses que se irán acumulando y que finalmente terminaremos pagando de una u otra manera. La deuda se puede ir cancelando, por ejemplo con refactoring que aunque puede costar un esfuerzo extra sirve para recortar el pago de grandes intereses en un futuro.

La semana pasada en un thread de la lista de agile-spain: Quien deberia pagar la deuda ? el usuario Ángel Medinilla escribió una GRAN verdad:

Lo que no es planteable en software es decir "Ups. cometisteis un error. Os toca venir el fin de semana a arreglarlo, ya que yo no os pago por solucionar errores". En software se cometen errores. Punto. Si la tasa de errores es demasiado elevada, o se piden overtimes y se quema al equipo o se va invirtiendo poco a poco en mejorar la tasa, tanto a priori como a posteriori. La vía de Agile es la segunda. Las consultoras no opinan lo mismo :_D

Me gusta tanto que me voy a imprimir en una remera (camiseta) la frase:
En software se cometen errores. Punto.

¿Quién no ha recorrido alguna vez (sino muchas) los interminables caminos de la primera vía?

jueves 12 de febrero de 2009

JBoss 5.0.0.GA error: SocketProcessId.getpid could not get unique port.

Un pequeño error en la configuración de resolución de nombres de mi Ubuntu, impedía que que el JBoss 5.0 levantará normalmente con una configuración local en mi maquina de desarrollo.

El log de error no es muy descriptivo que digamos:

23:29:34,795 INFO [TransactionManagerService] JBossTS Transaction Service (JTA version) - JBoss Inc.
23:29:34,795 INFO [TransactionManagerService] Setting up property manager MBean and JMX layer
23:29:35,287 ERROR [AbstractKernelController] Error installing to Create: name=TransactionManager state=Configured
com.arjuna.ats.arjuna.exceptions.FatalError: [com.arjuna.ats.internal.arjuna.utils.SocketProcessId_2] - SocketProcessId.getpid could not get unique port.
at com.arjuna.ats.internal.arjuna.utils.SocketProcessId.getpid(SocketProcessId.java:105)
at com.arjuna.ats.arjuna.utils.Utility.getpid(Utility.java:277)
at com.arjuna.ats.arjuna.common.Uid.(Uid.java:105)
at com.arjuna.ats.arjuna.utils.Utility.getProcessUid(Utility.java:289)
at com.arjuna.ats.internal.arjuna.recovery.TransactionStatusManagerItem.(TransactionStatusManagerItem.java:366)

La solución es fácil, aunque costo un poco encontrarla. El S.O. tiene que poder resolver correcta y bidirecionalmente su hostname.
Para verificarlo probar que funcione correctamente el comando:
$ ping `hostname`

En un PC de desarrollo el hostname comúnmente resuelve a 127.0.0.1

Si el comando no funciona revisar la configuración de resolución de nombres, en mi caso fue suficiente con editar "/etc/hosts" y agregar una linea que resuelva correctamente mi hostname a 127.0.0.1

.