Indicadores…

Después de haber revisado hoy una serie de indicadores referentes al soporte de una aplicación y haber tenido una reunión sobre la utilidad de los mismos, uno se da cuenta de cómo el ser humano tiene el don de reiventar la rueda una y otra vez y de tropezar con la misma piedra varias veces.

Los indicadores no son más que una herramienta que nos ayuda a conocer de forma simplificada el estado de algo y  que consecuentemente nos facilita la  toma de decisiones. Esto es algo muy estudiado desde antiguo, por ejemplo, los mercaderes fenicios en el siglo V a.C. tenían claramente definidos sus indicadores de interés: número de mercancias, tiempo que necesitaban para reponerlas, precios de venta al público, costes, etc. Teniendo en cuenta este hecho, la primera disciplina que probablemente haya hecho uso indicadores haya sido la contabilidad.

La contabilidad es la disciplina que más ha madurado el uso de indicadores para la gestión, y por lo tanto utilizaremos los objetivo propios de la contabilidad y los intentaremos extrapolar, uno a uno, al mundo de los servicios  y sus indicadores.

Objetivos generales de la contabilidad:

  1. Ayudar a la toma de decisiones económicas
  2. Ayudar a conocer datos financieros que evalúen la recuperación de las inversiones.
  3. Ayudar al conocimiento de los activos y pasivos de una empresa y de los cambios en los mismos.

Objetivos generales de los indicadores de un servicio de soporte:

  1. Ayudar a la toma de decisiones. Sin lugar a dudas.
  2. Ayudar a las partes interesadas a conocer el estado del servicio. Nótese que “parte interesada” no tiene porqué ser sólo el cliente del servicio, los propios proveedores del servicio son los primeros interesados en conocer el estado de los servicios ofertados, si su servicio no es bueno, no habrá clientes que lo soliciten.
  3. Ayudar a conocer los elementos que componen el servicio (personas, herramientas, proveedores, etc) y cómo los cambios en los mismos afectan a la prestación del servicio.

A continuación se exponen los objetivos cualitativos de la contabilidad. Estos son directamente  aplicables a los indicadores referentes a la prestación de un servicio:

  1. Relevancia. Información útil al mayor número de usuarios posible. Hay que dedicar esfuerzo a aquellos indicadores que realmente nos aporte información útil, para ello habrá que analizar los requerimientos de información de las partes interesadas.
  2. Objetividad. Que no induzca a la toma de decisiones sesgadas. Los indicadores deben mostrar la realidad y no lo que nosotros queremos ver o lo que queremos hacer que otros vean.
  3. Comparabilidad. Los resultados de un informe deben ser comparables con otros anteriores del mismo servicio o con informes de servicios similares. En definitivas cuentas, los métodos de cálculo de los indicadores deben estar claramente definidos y deben sufrir las mínimas variaciones posibles a lo largo del servicio, de nada sirve disponer de 5 informes de cumplimiento de SLA cuando en cada informe los tiempos de respuesta se han calculado con criterios distintos.
  4. Claridad. Los indicadores deben ser comprensibles por las partes interesadas y han de estar claramente definidos.
  5. Periodicidad. Un servicio ha de ser evaluado contínuamente, por lo que los indicadores han de ser calculados con una periodicidad definida.

Para conseguir estos resultados la contabilidad propone los siguientes pasos a seguir:

  1. Seleccionar los indicadores de interés para todas las partes interesadas. Por ejemplo, para un servicio de soporte, necesitamos conocer los tiempos de respuesta y cómo los vamos a calcular.
  2. Interpretar o definir los posibles resultados de los indicadores. Por ejemplo, interpretaremos como bueno o muy bueno un tiempo de respuesta inferior a la hora para incidencias catalogadas como graves.
  3. Registro de información. Una vez que se conoce qué queremos medir y cuál es el objetivo, necesitamos guardar esos datos. Esta fase, aunque parezca automática y trivial, es bastante importante dado que va a condicionar los sucesivos puntos y consecuentemente las personas involucradas deben ser conscientes de su importancia y deben conocer perfectamente sus tareas y responsabilidades.
  4. Interpretación de los  resultados concretos. Por ejemplo, los tiempos de respuesta exceden los límites establecidos en el punto 2, debido a la complejidad del software utilizado para la gestión y notificación de incidencias.
  5. Toma de decisiones. Basándonos en el ejemplo del punto anterior, una decisión posible podría ser:
    1. Invertir en formación sobre la herramienta utilizada
    2. Mientras se adquiere el conocimiento oportuno, se utilizará el teléfono para reportar y tratar incidencias.

Resumiendo y a modo de conclusión, porque creo que ya me he explayado los suficiente, simplemente recordar  esa frase del principio “el ser humano tiene el don de reiventar la rueda una y otra vez y de tropezar con la misma piedra varias veces”. La gestión ya ha sido muy estudiada y precisamente los ingenieros o los informáticos no somos los primeros en descubrirla, hay muchas disciplinas como la contabilidad o las finanzas que por su definición, nacieron para gestionar, sería un error desperdiciar u obviar ese conocimiento tan ampliamente desarrollado.

Notifica 1.0.1

Notifica es un producto para el gestor de contenidos Plone, que nació tiempo atrás para satisfacer las necesidades de notificación de contenidos por email que requería el portal del Ayuntamiento de Lepe, con el objetivo de informar a todos aquellos ciudadanos que lo deseen de las últimas novedades de su ciudad. Gracias a aquel proyecto, también se liberó otro producto para Plone, Meteo, que permite incluir información meteorológica en un portal web consultando la web de la Agencia Estatal de Meteorología.

Esta nueva versión de Notifica incluye la resolución de algunos bugs asociados a la internacionalización del producto y se han incluido traducciones a los siguientes idiomas:

  • Inglés
  • Español
  • Francés
  • Holandés

PD: Thanks Fabrice for your contribution, this version could not be released without your collaboration.

Trabajar tanto tiene delito…

Tras una larga semana de trabajo, hoy creí merecerme un homenaje.

Al terminar hoy de trabajar, a eso de las 17:00 horas, decidí irme a almorzar a un McDonalds y darme un señor homenaje. Pues nada, ahí iba yo, con mis barbas de 5 días, las ojeras asociadas a una ardua semana de trabajo y mi mochila, dispuesto a devorar una hamburguesa con sus patatas deluxe tamaño gigante. Media hora más tarde…  objetivo cumplido!! Pero al salir del establecimiento, aún con una servilleta en la mano, me esperaba una ingrata sorpresa… Un pareja de la policía nacional me persiguió y retuvo en pleno centro de Sevilla por presunto “fumeta” (debe ser gravísimo fumarse un canuto en la vía pública), y no me extraña, ¡vaya pintas que llevaba!, malos pelos, barbas de varios días, ojeras, camiseta negra, papeles raros en las manos… Tras un gran mal rato  (durante el cuál todo el mundo me miraba como un delincuente) todo se solucionó cuando apareció casualmente otro personaje fumándose un canuto que coincidía con mi descripción… A partir de ese momento todo fueron disculpas por parte de la policía, pero el mal rato no hay quien me lo quite.

Moraleja: Trabajar tanto, tiene delito (y ser un poco “dejao” también ;)).

¿Quién puede acceder a un máster público?

Desde hace algún tiempo viene rondando mi cabeza la idea de estudiar algún curso de postgrado con el objetivo de suplir algunas carencias, sobre todo en aspectos no técnicos, que había notado tras los primeros contactos con el mundo laboral. Una vez analicé las materias que debía reforzar y en qué quería hacer la inversión (no hay que olvidar que estos cursos suelen suponer un desembolso económico bastante grande y por lo tanto hay que estudiarlos como una inversión que deberíamos amortizar en el futuro), comencé a estudiar la oferta de cursos de postgrado y másters que ofrecían las universidades públicas de mi entorno. Y aquí llegó mi sorpresa. Todos los cursos ofertados se impartían en un horario lectivo normal, y con normal me refiero a un horario similar al que se imparten las clases de cualquier universidad. Lo cual es bastante llamativo, dado que la mayoría de los demandantes de este tipo de formación suelen ser personas que se encuentran trabajando (según estadísticas de algunas entidades privadas que ofertan cursos de postgrado, en torno al 85% del alumnado). Teniendo en cuenta estos datos, se deduce que  la mayoría de los afortunados que pueden acceder a estos cursos en universidades públicas se pueden clasificar en alguno de los siguientes grupos:

  • Estudiantes recién titulados con posibilidades económicas o becados.
  • Personas con mucha flexibilidad laboral (menos del 9% de los trabajadores españoles).

Es decir, el resto de personas que no encajemos en alguno de esos grupos  tendríamos que recurrir a una entidad privada, con el sobrecoste que eso conlleva. ¿No se dan cuenta las universidades públicas la cuota de mercado que están perdiendo por el mero hecho de no adecuar sus horarios a las necesidades del alumnado?

Cómo obtener datos sobre el rendimiento de nuestras aplicaciones con maven

¿Tenéis que obtener datos de rendimiento de vuestro proyecto y no queréis llenar vuestros tests de “System.currentTimeMillis()”? Pues aquí tenéis la solución!

Existe la posibilidad de configurar el tan socorrido plugin maven-surefire para que a la hora de ejecutar los tests los tests de vuestro proyecto (por lo tanto no hará falta implementar tests específicos para medir el rendimiento), se haga uso JIP (Java Interactive Profiler) que nos permitirá obtener una serie de estadísticas sobre la ejecución de dichos tests.  Pero… ¿cómo configuro maven-surefire-plugin para que utilice JIP? Pues es muy sencillo, bastará con realizar los siguientes pasos:

  1. Crear una carpeta profile en el directorio src/test de vuestro proyecto.
  2. Incorporar a dicha carpeta los ficheros profile.jar y profile.properties que podréis encontrar en la distribución de JIP.
  3. En el fichero de configuración habrá que modificar las siguientes propiedades:
    # Indicar el fichero donde se volcarán los resultados del profiler:
    file=target/profile.txt
    # Excluir del profiling los paquetes de testng y de maven para evitar excesivo "ruido" en los resultados exclude=org.testng,org.apache.maven
  4. Modificar la configuración de maven-surefire-plugin para que haga uso de JIP, para ello habrá que añadir la siguiente línea en la sección configuration:
    -javaagent:src/test/profile/profile.jar -Dprofile.properties=src/test/profile/profile.properties

5. Ejecutar mvn test para comprobar que todo está correctamente configurado. Si todo ha ido bien debería existir en el directorio target del proyecto un fichero profile.txt con los resultados.

NOTA: En determinadas máquinas virtuales de Apple parece haber problemas con las rutas relativas para establecer el agente JIP, habría que utilizar rutas absolutas. Con la máquina virtual 1.5.0_16 sobre Mac OS X 10.4.11 no se ha observado dicho problema.

¿Usuarios de Directorio Activo en OpenLDAP?

¿Es eso posible?, ¿podemos migrar usuarios de Active Directory de Microsoft a un OpenLDAP? La respuesta a ambas preguntas es sí, y a lo largo de esta entrada se comentarán una serie de  consideraciones ha tener en cuenta, cómo compilar/configurar un OpenLDAP para que soporte las nuevas entradas y algunas herramientas útiles para estos menesteres.

Consideraciones ha tener en cuenta

El principal escollo con el que nos vamos a encontrar a la hora de migrar datos ente ambos sistemas es la obtención de contraseñas del Active Directory. Aunque OpenLDAP y Active Directory son implementaciones del protocolo LDAP, son muy distintas entre sí a la hora de persistir las contraseñas. Mientras que OpenLDAP guarda la contraseña, a no ser que se indique lo contrario, como un atributo más de un usuario (encriptada por supuesto), Active Directory almacena esta información en la base de datos del SAM (Security Account Manager) encriptada con el algoritmo Lan Manager, por lo que al consultar la información de un usuario con un cliente LDAP no aparecerá dato alguno sobre la contraseña y habrá que recurrir a otras herramientas para su obtención.

Cómo configurar un OpenLDAP

Cómo se ha mencionado anteriormente las contraseñas en Active Directory se almacenan encriptadas con LanManager, así que el principal esfuerzo, a la hora de configurar OpenLDAP, será dar soporte a dicho algoritmo de hashing. De este modo cuando un usuario intente autenticarse, nuestro sistema deberá ser capaz de encriptar con dicho algoritmo la contraseña que proporcione el usuario y comprobar si se corresponde con el hash almacenado para él. Para que nuestro Open LDAP sea capaz de realizar dicha tarea será necesario compilar los fuentes con la opción --enable-lmpasswd. A continuación se especifica cómo realizar esta tarea sobre Debian:

  1. Instalar en nuestro entorno los paquetes necesarios para llevar a cabo labores de construcción/compilación:
    dev:~# aptitude install build-essential
  2. Intalaremos las dependencias con Berkeley DB necesarias para OpenLDAP (utilizaremos paquetes para simplificar el proceso):
    dev:~# aptitude install libdb4.4-dev openssl-dev
  3. Ejecutaremos ldconfig para cargar las librerías compartidas (este paso podríamos obviarlo):
    dev:~# ldconfig
  4. Descargaremos los fuentes y descomprimimos:
    dev:~/dowloads# wget ftp://ftp.OpenLDAP.org/pub/OpenLDAP/openldap-release/openldap-<version>.tgz
    dev:~/dowloads# tar -xzf openldap-<version>.tgz
  5. Ahora procederemos a compilar la herramienta con las siguientes instrucciones:
    dev:~/dowloads/openldap-<version># ./configure --prefix="/opt/openldap" --enable-lmpasswd
    dev:~/dowloads/openldap-<version># make depend
    dev:~/dowloads/openldap-<version># make
    dev:~/dowloads/openldap-<version># make test
    dev:~/dowloads/openldap-<version># make install

Ya tenemos instalado servidor de LDAP en el directorio /opt/openldap y sólo nos quedará configurarlo según nuestras necesidades. A continuación se establecerá  una configuración básica con la que poder probar la autenticación.

  1. Editaremos el fichero slapd.conf (/opt/openldap/etc/openldap/slapd.conf) en el que se modificarán las siguientes entradas:

    include      /opt/openldap/etc/openldap/schema/core.schema
    include      /opt/openldap/etc/openldap/schema/cosine.schema
    include      /opt/openldap/etc/openldap/schema/nis.schema

    suffix       "o=mrpotatoe,c=es"
    rootdn       "cn=admin,o=mrpotatoe,c=es"
    rootpw       admin
  2. Ahora crearemos un fichero ldif  (/tmp/carga.ldif) en con algunos datos a persistir:
    dn: o=mrpotatoe,c=es
    objectclass: organization
    o: mrpotatoe

    dn: cn=admin,o=mrpotatoe,c=es
    objectclass: organizationalRole
    cn: admin

    # En este punto crearíamos un usuario con la contraseña 12345678
    # encriptada con lan manager para la realización de pruebas
    dn: cn=user,o=mrpotatoe,c=es
    objectClass: top
    objectClass: account
    objectClass: posixAccount
    cn: user
    gidNumber: 0
    homeDirectory: -
    uid: user
    uidNumber: 0
    userPassword:{lanman}0182BD0BD4444BF836077A718CCDF409

  3. Lo próximo será iniciar el servidor e introducir los datos necesarios para realizar las pruebas, para ello tendremos que ejecutar el siguientes comando:
    dev:~# su -c /opt/openldap/libexec/slapd
    dev:~# /opt/openldap/bin/ldapadd -xcWD 'cn=admin,o=mrpotatoe,c=es' -f /tmp/carga.ldif
  4. Una vez llegados a este punto podremos probar a autenticarnos contra nuestro openldap con el usuario de prueba que hemos creado. Para ello podremos utilizar cualquier cliente de LDAP.

Algunas herramientas útiles

A continuación se enumeran algunas herramientas para migrar usuarios de Directorio Activo a OpenLDAP:

  • PwDump
    Esta utilidad permite extraer las contraseñas en LM y en NTLM de los usuarios de un sistema SAM. Esta herramienta nos será útil para obtener las contraseñas de los usuarios de un directorio activo.
  • Apache Directory Studio
    Se trata de un cliente LDAP bastante potente que nos permitirá, además de navegar y consultar un LDAP, editar ficheros LDIF, crear y editar esquemas para OpenLDAP y Apache Directory Server, utilizar un Apache Directory Server embebido, etc.