lunes, 25 de mayo de 2009

Migrando a Linux

Una de las cosas más frustrantes para un usuario de Linux es escuchar las quejas de aquellas personas que se han aventurado (o que han sido obligados) a migrar a Linux sin la correcta asesoría. El día a día no da tiempo a la mayoría de personas para aprender por si mismas todas las cosas diferentes que tiene Linux. Por esta razón yo considero que es necesario tener una guía, preferiblemente alguien que ya maneje el sistema y que nos pueda ayudar.
Esta Guía va dirigida a aquellos lectores de este blog que ya usan Linux y que son bombardeados por sus amigos con preguntas (y quejas) acerca de la migración. El tema de hoy:


5 temas a abordar antes de probar Linux



  1. Hay que analizar las ventajas de Linux. El nuevo usuario generalmente esta convencido de que Linux es experimental o ineficiente. Para generar una mayor motivación en el potencial usuario solamente debes mostrarle varias cosas que hacen a este sistema una alternativa para su trabajo cotidiano. En mi experiencia se puede motivar a un usuario potencial con los siguientes datos: Primero: En Linux no hay virus, Segundo: Hay varias formas de usar los programas de Windows en Linux (conozco muchos usuarios que han vuelto a windows porque no conocieron el Wine), Tercero: Hay muchos programas, faciles de instalar que satisfacerán sus necesidades, Cuarto: hay asistencia en linea 24 horas en los canales IRC y las listas de correo, usuarios por todo el mundo conectados ayudando a hacer mejor el software. Quinto: "Linux es sobre experimentar" Debes explicarle al nuevo usuario que al contrario del software propietario, en Linux hay millones de opciones y que con el tiempo el escogerá las que mas le gusten. Sexto: Es clave explicar la filosofía del Software Libre, las ventajas que usar S.O. representan y las diferencias con los programas propietarios.

  2. Linux es diferente. En mi opinión es mas fácil de manejar que Windows y MacOS, pero es completamente diferente y esto es uno de los aspectos fundamentales de la deserción temprana en el aprendizaje de un nuevo sistema operativo (Muchas de las quejas a Vista estaban relacionadas con este tema). Esto quiere decir que el proceso de migración llevará un tiempo y requiere cierta paciencia, dependiendo de las habilidades informáticas del aprendiz, las motivaciones en el proceso y el grado de compromiso: Es muy importante explicarle al nuevo usuario que este proceso va a tomar cierto tiempo y que cada día se sentira mejor sabiendo que linux da seguridad, estabilidad y confianza.

  3. Hay que probar de todo. Una buena herramienta para esto son los LiveCD. De esta manera el aprendiz de Linux puede probar muchas distribuciones antes de decidirse por una, igual que con los entornos de escritorio. Explicar la existencia de tantas distribuciones puede ser díficil y si a eso añades los entornos de escritorio, aun más. (Yo antes pensaba que solo existía Windows) Es bueno que el nuevo usuario mire, pruebe y se convenza de todas las herramientas. Yo se que muchos tenemos una distro favorita, pero aveces perdemos usuarios por forzarlos en nuestros propios gustos.

  4. Es importante saber que no debe desinstalar Windows para experimentar con Linux, perfectamente pueden ambos sistemas existir en una maquina, ya sea en participones distinmtas boteandoa al principio una elección o en una maquina virtual como VirtualBox de Sun u otra.

  5. Es muy importante explicarle al nuevo usuario la razón por la cual algunas piezas de hardware solamente funcionan con Windows y verificar que todos sus dispositivos funcionan sin problemas. Para un usuario novato es muy complicado instalar los drivers de una tarjeta NVIDIA, o un controlador de video o la conexión del firewire con la cámara, la wifi, etc. Muchas comunidades OpenSource hacen FERIAS DE INSTALACIÓN donde configuran equipos para que funcionen correctamente y ayudan a la gente que se esta iniciando en este fantastico mundo, ademas de existir un millon de documentacion por la web.

Aunque parecen 5 amenazas o ideas para internalizar, es mejor saber de antemano estas cosas y ponerse a investigar, al final los dispositivos siempre funcionaran mejor q en el ventanukos.



Perder el miedo:

A diferencia de las instalaciones de Sistemas Operativos (S.O.) propietarios como windows, la idea con Linux es que el usuario es libre de instalar y desinstalar el sistema cuantas veces quiera, probar nuevas distribuciones e inclusive tener en la misma maquina Windows. En otros S.O. una nueva instalación generalmente implica la perdida de la información, de programas instalados e inclusive de algunas licencias particulares asociadas a esta instalación. En Linux, formatear es algo sin muchas complicaciones, por esta razón: NO TENGAS MIEDO DE DAÑAR ALGO EN EL SISTEMA.

Para formatear simplemente hay que quemar en un cd/dvd la carpeta personal (aquella que contiene las carpetas /documentos, /videos, / imagenes, etc.) y al comlpetar de nuevo la instalación volver a ponerla en su lugar.

Entonces: ¿Ya viste donde esta la opción de agregar y quitar programas?, instala todo lo que quieras. ¿Quieres experimentar instalando todos los tipos de escritorio disponibles? Hazlo!!!
¿Quieres probar complicados procedimientos que haz encontrado en blogs y foros? Intentalo.
Linux se trata de aprender y "Echando a perder se aprende", trabajando de esta forma no tardaras en tomarle el gusto a linux, la consola, investigar, etc. Te aconsejo ademas que las tareas repetitivas las documentes con el fin de que no vuelvas a invetigar lo ya hecho



Los decálogos, las familias y la comunidad:

En muchos "decálogos" del usuario encontraras que se considera moralmente necesario que pertenezcas a alguna comunidad Linux, colabores y "pongas tu granito de arena". Aunque muchos lo hacemos y es muy recomendable participar, no es una obligación moral. No debes ir a ninguna reunión si no quieres, no debes dar soporte técnico si no quieres y sobretodo no tienes que parecer vendedor de multinivel hablándole a todos tus amigos de Linux si no quieres. Aunque es muy divertido hacer estas cosas y algunas personas te digan que de eso depende el crecimiento del software libre, el simple hecho de usar Linux ya marca una diferencia. De la misma manera, si te quieres pasar a Linux solo porque el sistema funciona mejor que Windows y no por una elección política, esto también es bueno. EL SOFTWARE LIBRE NO SE TRATA DE UNA LUCHA EN CONTRA DE LAS GRANDES EMPRESAS DE SOFTWARE, O DE PERTENECER A UNA COMUNIDAD ESPECIAL. Se trata de tener el control de tu computador y hacer con el lo que quieras sin que esto este regulado por un contrato. Esto es algo que muchos usuarios solo entienden después de un tiempo de pertenecer a alguna comunidad.

Usar Linux no implica usar solamente software libre.


Te sorprenderás cuando encuentres programas de Linux que cuestan dinero, pero existen, inclusive la mayoría de empresas que producen distribuciones de Linux tienen versiones corporativas que están a la venta. Es muy importante que sepas que hay distribuciones que no te permitirán ver contenido en flash (esto incluye sitios de video en formato flv, como youtube), que no reproducen MP3 o videos AVI, MOV o en algunos formatos de DVD. Esto sucede porque los diseñadores del sistema no quieren usar los software privativo dentro de su distribución y formatos como el MP3 no son abiertos. Esta es una decisión política basada en un proceso de mas de 20 años que se ha dado desde la creación de la GPL. Algunas distribuciones, como UBUNTU, dan la opción al usuario de instalar o no contenidos privativos, transfiriendo la decisión al usuario final: USTED.
Si después de escuchar al elocuente Richard Stallman hablar sobre Software libre quieres usar solamente programas libres (e inclusive hacer la sutileza de diferenciar entre código abierto y software libre), es tu decisión. (hay varios videos de stallman en este blog) Es una de las cosas que a mi parecer son mas bonitas de Linux, encontraras distribuciones completamente privativas, que se venden en cajas como cualquier Windows, encontraras proyectos de código abierto como UBUNTU, que te permiten muchas cosas con paquetes privativos y existen distribuciones como Debian Linux que vienen libres de software propietario y la unica distribución 100% Open Source, y una de las mas seguras estables y rapidas.

Para escoger la distro que mas te guste puedes ir a: http://distrowatch.com/ donde podrás escoger entre varios centenares de distribuciones la que mas te guste de acuerdo a tus necesidades, tus gustos e inclusive tus inclinaciones políticas.

lunes, 13 de abril de 2009

Generar Certificado PFX en Linux

Hola, hoy en día la gestión documental cumple un papel importante en las empresas que gestionan gran cantidad de documentos, sean contratos , facturas, ordenes de compra, etc.

Debido a que se han establecidos leyes que promueven la firma digital de documentos, muchas empresas además requieren que sus sistemas de gestión documental, workflow, bpm, etc. cuenten con la característica de poder firmar estos documentos digitalmente.

En Linux y con OpenSSL podemos generar los certificados necesarios para poder firmar los documentos, utilizando las apis de java que proveen esta característica, como las lib's de itext.

Vamos a ver a continuación como generamos estos certificados, utilizando el estándar x509 y el tipo pkcs12.

paso 1:

vamos a la consola y generamos con la siguiente linea de comandos los certificados pem.

slack@zion:~$ openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout certuno.pem -out certuno.pem
Generating a 1024 bit RSA private key
.........................................++++++
...............................++++++
unable to write 'random state'
writing new private key to 'certuno.pem'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:CL
State or Province Name (full name) [Some-State]:Region Metropolitana
Locality Name (eg, city) []:Santiago
Organization Name (eg, company) [Internet Widgits Pty Ltd]:0X Chile
Organizational Unit Name (eg, section) []:BPS
Common Name (eg, YOUR name) []:Jorge Salomon
Email Address []:jorgeleonardo.salomon@0x.com

luego debemos importar este certificado pem a formato pfx, el estandar para firmar documentos, para esto debemos imgresar clave al certificado.

paso 2:

slack@zion:~$ openssl pkcs12 -export -out certuno.pfx -in certuno.pem -name "certificado uno"
Enter Export Password:
Verifying - Enter Export Password:

Luego de estos dos pasos, utilizando OpenSSL, podemos utilizar este certificado pfx en cualquier aplicación web para firmar documentos, en mi caso desarrolle una aplicación J2ee que hace esta implementación.

Saludos y Suerte !!

Error al arrancar Eclipse

Hola, en algunos casos el sistema operativo se marea con la jvm que ocupa, esto generalmente ocurre cuando hacemos alguna actualización de algún paquete con el gestor o comando alternatives.
Y cuando queremos arrancar eclipse desde el lanzador del escritorio, simplemente no lo abre. y comenzamos con cuestionamientos... jajajaj..., en este caso lo logico es que queramos abrirlo por consola con el comando

slack@zion:programas/eclipse$ ./eclipse
LOG: [0xb7eb66b0] exception thrown while VM is initializing:
LOG: [0xb7eb66b0] NULL: java.lang.Object
LOG: [0xb7eb66b0] Aborting...
Aborted

desplegando el mensaje de error que se ve, lo bueno de esto es que existe una rapida solución.

En la misma consola ejecutamos el siguiente comando para comprobar las jvm disponibles para usar en el sistema,

slack@zion:~/programas/eclipse$ sudo update-alternatives --config java
[sudo] password for slack:

Hay 2 alternativas que proveen `java'.

Selección Alternativa
-----------------------------------------------
1 /usr/lib/jvm/java-1.5.0-sun/jre/bin/java
*+ 2 /usr/lib/jvm/java-6-cacao/jre/bin/java

Pulse para mantener el valor por omisión [*] o pulse un número de selección: 1
Se utiliza `/usr/lib/jvm/java-1.5.0-sun/jre/bin/java' para proporcionar `java'.

Luego comprobamos que la opcion seleccinada sea la que tome el sistema como version de uso para java.

slack@zion:~/programas/eclipse$ java -version
java version "1.5.0_16"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_16-b02)
Java HotSpot(TM) Server VM (build 1.5.0_16-b02, mixed mode)


Con esto debieramos tener solucionado el tema de incompatibilidad de jvm con eclipse, al menos.

Saludos y Suerte !!

lunes, 29 de diciembre de 2008

Instalar Pgadmin3 en Linux

Hola, la vamos a hacer cortita por que no tengo mucho tiempo, escribo este tips solo como recordatorio.

Una de las bases de datos Open Source más utilizadas es PostgreSQL, por su flexibilidad, potencia y rapidez es una de las mejores que existe hoy en día, con respaldo de grandes empresas, ademas de tener soporte para multiples funciones, entre ellas soporte para PL (procedimientos almacenados). aunque no soy muy amigo de meter logica de negocio en las bases de datos, por la dependencia que esto provoca, ojo, no digo que sea malo... jajajja son pesimos.. kikokiko.

Bueno, cuando tenemos linux y nos queremos hacer de una buena base de datos local para nuestros desarrollos optamos por Mysql que es excelente o por PostgreSQL que tambien es muy buena. ambas free.

Si tenemos instalado webmin, podemos instalar Postgre desde la pestaña de servicios, esto no es nada mas que instalar postgre con apt-get pero desde una interfaz grafica.

Una vez instalada nuestra base de datos postgreSQL, podemos instalar un cliente grafico como PGadmin3.

Por consola lo hacemos de la siguiente manera, utilizando el gestor de paquetes de Debian y ubuntu:

1.- Buscamos en nuestros repositorios si contamos con este paquete para instalar.

slack@ubuntu:/usr/local/Xerox/DocuShare/bin$ apt-cache search pgadmin
pgadmin3 - graphical administration tool for PostgreSQL
pgadmin3-data - graphical administration tool for PostgreSQL - documentation
pgagent - job scheduler for PostgreSQL
phppgadmin - web-based administration tool for PostgreSQL
postgresql-contrib-8.3 - additional facilities for PostgreSQL

2.- Se despliega en el listado lo que andamos buscando, ahora procedemos a instalar automatyicamente el software con apt-get, como root

slack@ubuntu:/usr/local/Xerox/DocuShare/bin$ sudo apt-get install pgadmin3
[sudo] password for slack:
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias
Leyendo la información de estado... Hecho
Se instalarán los siguientes paquetes extras:
libwxbase2.8-0 libwxgtk2.8-0 pgadmin3-data pgagent
Se instalarán los siguientes paquetes NUEVOS:
libwxbase2.8-0 libwxgtk2.8-0 pgadmin3 pgadmin3-data pgagent
0 actualizados, 5 se instalarán, 0 para eliminar y 0 no actualizados.
Necesito descargar 8225kB de archivos.
Se utilizarán 23,1MB de espacio de disco adicional después de desempaquetar.

decimos que S, y comienza la descarga desde los repositorios que tenemos en nuestro source.list

¿Desea continuar [S/n]? S
Des:1 http://cl.archive.ubuntu.com intrepid/universe libwxbase2.8-0 2.8.8.0-0ubuntu2 [671kB]
Des:2 http://cl.archive.ubuntu.com intrepid/universe libwxgtk2.8-0 2.8.8.0-0ubuntu2 [3373kB]
Des:3 http://cl.archive.ubuntu.com intrepid/universe pgadmin3-data 1.8.4-1 [2626kB]
Des:4 http://cl.archive.ubuntu.com intrepid/universe pgadmin3 1.8.4-1 [1515kB]
Des:5 http://cl.archive.ubuntu.com intrepid/universe pgagent 1.8.4-1 [38,2kB]
Descargados 8225kB en 19s (420kB/s)
Seleccionando el paquete libwxbase2.8-0 previamente no seleccionado.
(Leyendo la base de datos ...
140462 ficheros y directorios instalados actualmente.)
Desempaquetando libwxbase2.8-0 (de .../libwxbase2.8-0_2.8.8.0-0ubuntu2_i386.deb) ...
Seleccionando el paquete libwxgtk2.8-0 previamente no seleccionado.
Desempaquetando libwxgtk2.8-0 (de .../libwxgtk2.8-0_2.8.8.0-0ubuntu2_i386.deb) ...
Seleccionando el paquete pgadmin3-data previamente no seleccionado.
Desempaquetando pgadmin3-data (de .../pgadmin3-data_1.8.4-1_all.deb) ...
Seleccionando el paquete pgadmin3 previamente no seleccionado.
Desempaquetando pgadmin3 (de .../pgadmin3_1.8.4-1_i386.deb) ...
Seleccionando el paquete pgagent previamente no seleccionado.
Desempaquetando pgagent (de .../pgagent_1.8.4-1_i386.deb) ...
Procesando activadores para man-db ...
Procesando activadores para doc-base ...
Processing 1 added doc-base file(s)...
Registering documents with scrollkeeper...
Configurando libwxbase2.8-0 (2.8.8.0-0ubuntu2) ...

Configurando libwxgtk2.8-0 (2.8.8.0-0ubuntu2) ...

Configurando pgadmin3-data (1.8.4-1) ...
Configurando pgadmin3 (1.8.4-1) ...

Configurando pgagent (1.8.4-1) ...
Procesando activadores para libc6 ...
ldconfig deferred processing now taking place
slack@ubuntu:/usr/local/Xerox/DocuShare/bin$

3.- Y listo, ya tenemos pgadmin3 para trabajar graficamente con nuetsro PostgreSQL

Aqui va un pantallazo de PGAdmin3



Esto si que es Open Source, todo a la mano y sin comprar licencias.

El software libre es una fuente de innovación...

Saludos y Suerte !!

jueves, 18 de diciembre de 2008

BPEL y BPMN

Los sistemas de soporte operacional en las empresas están basados en procesos que conforman su cadena operativa, cadenas de valor, de negocio, etc. soportando por ejemplo, los ciclos para la gestión de clientes, productos, servicios, recursos humanos, contabilidad, finanzas, administración, presupuesto, facturacion, etc.

La agilidad operativa en la administración de estos procesos, es un diferenciador competitivo vital y una de las principales características que una organización necesita para poder adaptarse a los continuos cambios de negocio. El éxito dependerá de la rapidez con la cual las organizaciones puedan adaptarse a estos cambios y al correcto uso de las herramientas tecnologicas que facilitan su control.

Por lo general, las empresas tienen analistas de negocio, que definen y establecen los ciclos y los procesos de negocio. Su función es mejorar, iterar y optimizar los procesos, equilibrar los requerimientos con los objetivos de la organización, etc. Tradicionalmente los analistas han utilizado herramientas para modelar y representar los procesos. Luego estos procesos son desplegados en alguna tecnología que pueda ejecutarlos y crear una representación técnica basada en un lenguaje de programación.

Resumiendo, el proceso se modela en una herramienta grafica, creando una representación de los procesos de alto nivel, como el modelo no trae un ejecutable directamente, los programadores deben crear componentes que implementan los procesos sobre una tecnología específica y basada en su comprensión del proceso.

Los procesos desarrollados de esta manera son muy susceptibles a errores de comprensión, errores de codificación, debido a la desconexión existente entre el modelo de alto nivel y el proceso ejecutable. En este tipo de soluciones, un cambio implica un impacto significativo, es necesario por ejemplo, reescribir código, cambiar el modelo, etc., además es difícil obtener métricas para medir el estado actual y las condiciones de negocio vigentes. entonces aqui se dice que "Problemas de diseño extremo, soluciones de programacion extremas", asumiendo en este caso una metodologia agil para el desarrollo de software (Scrum y XP).

Problemas con este modelo de implementación.

  1. Los procesos desarrollados de esta manera son muy susceptibles a errores de comprensión y errores de codificación.
  2. Existen grandes brechas entre el modelo y su implementación técnica.
  3. Un cambio implica un impacto significativo en la infraestructura TI de la organización, porque los procesos están cableados en el código.
  4. Las reglas de negocio, están altamente acopladas a los procesos.
  5. Mantenerlos es extremadamente engorroso, difícil y costoso.
  6. Debido a los continuos cambios, los procesos pierden vigencia continuamente y pueden llegar a convertirse en piezas incomprensibles, con un nivel de detalle que aprisiona la agilidad.
  7. No podemos automatizar los cambios de políticas.

Una Solución

Para solventar estos problemas, los gerente de IT utilizan una solución basada en modelos, con una alternativa de implementación mas abierta y estándar: BPM y BPEL.

BPEL es el estándar de la industria que representa y ejecuta procesos del negocio, bpel permite una abstracción lógica del proceso, del modelo de implementación o tecnología. BPEL esta basado en una notación XML que permite representar los procesos de negocio, uno de los ides que implementa muy bien esta tecnologia es Netbeans de la version 5.5 en adelente, y su propio motor de procesos asociado a Glassfish.

Otro estándar, Business Process Modeling Notation (BPMN), es una especificación que proporciona una notación que todos los usuarios y clientes los puedan entender, los analistas bosquejan inicialmente los procesos para que los desarrolladores lo ejecuten en algun motor, como Jboss BPM.

Con BPEL y BPMN, un analista puede utilizar una herramienta para modelar el proceso y construir el proceso usando BPMN. El modelo del proceso BPMN genera automáticamente un entorno para BPEL, donde se establecen metadatos, reglas de negocio, bifurcaciones, flujos de trabajo, participantes, punto de decisión, contextos de pool y lane, etc.

Beneficios

  1. Simplifica la comunicación y colaboración entre los arquitectos, analistas y desarrolladores.
  2. Habilita y disponibiliza el concepto de SOA en la organización.
  3. BPEL proporciona un modelo rico en operaciones como el manejo de excepciones, reglas de negocio, transaccionalidad, logica, etc.
  4. La visión lógica no demuestra los detalles subyacentes de la puesta en práctica.
  5. Cambios no afectan la representación total del proceso.
Ingresaremos luego a este mundo, con ejemplos practicos para su correcta implementacion.

Saludos y Suerte !!

lunes, 27 de octubre de 2008

Scrum y XP (1)

Hola, muchas veces cuando debemos desarrollar o implementar rapidamente un software, tenemos demasiado poco tiempo, sobre todo cuendo el asunto es partir de cero y no tenemos tiempo para análisis, modelamiento perfecto de UML, etc.

Para estos casos se ha puesto de moda Scrum y XP, ambas son tecnicas de desarrollo agil de software.

Los equipos de trabajo deben conocer los principios de Scrum. ¿Cómo se crea y se estima una pila de producto? ¿Cómo se transforma en una pila de Sprint?
¿Cómo se gestiona un gráfico de burn-down y se calcula la velocidad del equipo?

Para responder esto veremos una introducción practica de Scrum.

La ejecución correcta de Scrum se está convirtiendo en un factor cada vez más importante para los equipos que buscan inversión de capital.

¿Por qué es esto tan importante? Si los equipos no conocen su velocidad, el Dueño de Producto no puede crear una hoja de ruta del producto con fechas de lanzamiento creíbles. Sin fechas de lanzamiento fiables, la ompañía podría fracasar y los inversores perder su dinero.

Tanto Scrum como Programación Extrema (XP) requieren que los equipos completen algún tipo de producto potencialmente liberable al final de cada iteración. Estas iteraciones están diseñadas para ser cortas y de duración fija.
Este enfoque de entregar código funcional cada poco tiempo significa que los equipos Scrum y XP no tienen tiempo para teorías. No persiguen dibujar el modelo UML perfecto en una herramienta CASE, escribir el documento de requisitos perfecto o escribir código que se adapte a todos los cambios futuros imaginables. En vez de eso, los equipos Scrum y XP se enfocan en que las cosas se hagan. Estos equipos aceptan que puede que se equivoquen por el camino, pero también son conscientes de que la mejor manera de encontrar dichos errores es dejar de pensar en el software a un nivel teórico de análisis y diseño y sumergirse en él, ensuciarse las manos y comenzar a construir el producto.

Este es un proceso de aprendizaje continuo, así que la historia no acaba aquí.
Estoy convencido de que esta empresa seguirá aprendiendo (si se siguen haciendo las Retrospectivas de Sprint) y adoptando nuevas perspectivas sobre las mejores formas de implementar Scrum en su contexto particular.

Si necesitas averiguar más antes de seguir puedes ver los siguientes link's

• http://agilemanifesto.org/
• http://www.mountaingoatsoftware.com/scrum
• http://www.xprogramming.com/xpmag/whatisxp.htm

Sino, no importa, veremos la forma practica de implementar scrum rapidamente, bueno eso es en realidad, imprimir energia y rapidez al desarrollo de software.

Pila de producto.
La pila de producto es el corazón de Scrum, y simplemente es la priorización de los requisitos que debe tener una aplicación solicitada por el cliente.
A esta lista de requisitos le llamamos historias, o funcionalidades, o lo que sea. Cosas que el cliente quiere, descritas usando la terminología del cliente. Llamamos a esto historias, o a veces simplemente elementos de la Pila.
Esta pila de requisitos puede ser escrita en una planilla excel de manera simple para que el cliente la entienda en su lenguaje natural, dejamos de lado aqui los administradores de tareas como Jira u otros bug-tracker.

Para hacerlo simple y productivo nuestra pila de producto (lista priorizada de requisitos) contiene los siguientes campos:

ID – un identificador único, simplemente un número auto-incremental. Esto nos permite no perder la pista a las historias cuando cambiamos su nombre.
Nombre – una descripción corta de la historia. Por ejemplo, “Ver tu historial de transacciones”. Suficientemente claro como para que el Dueño de Producto comprenda aproximadamente de qué estamos
hablando, y suficientemente clara como para distinguirla de las otras historias. Normalmente, 2 a 10 palabras.
Importancia – el ratio de importancia que el Dueño de Producto da a esta historia. Por ejemplo, 10. O 150. Más alto = más importante. Suelo evitar el término “prioridad” porque típicamente “1” se considera la
“máxima prioridad, lo que es muy incómodo si posteriormente decides que algo es más importante. ¿Qué prioridad le daríamos a ese nuevo elemento? ¿Prioridad 0? ¿Prioridad -1?
Estimación inicial – la valoración inicial del Equipo acerca de cuanto trabajo es necesario para implementar la historia, comparada con otras historias. La unidad son “puntos de historia” y usualmente corresponde a “días-persona ideales”. Lo importante no es que las estimaciones absolutas sean correctas (es decir, que una historia de 2 puntos deba durar 2 días), lo importante es que las estimaciones relativas
sean correctas (es decir, que una historia de 2 puntos debería durar la mitad que una historia de 4 puntos).
Como probarlo – una descripción a alto nivel de como se demostrará esta historia en la Demo al final del Sprint. Se trata, esencialmente, de una simple especificación de un test: “Haz esto, entonces haz lo otro, y
entonces debería ocurrir aquello”. Si practicas TDD (Test-Driven Development, desarrollo orientado a test) esta descripción puede usarse como pseudo-código para vuestro test de aceptación.
• Notas – cualquier otra información, clarificación, referencia a otras
fuentes de información, etc. Normalmente muy breve.

Ejemplo de Pila de Producto:

Sigamos, vemos en la tabla anterior la implementación de una pila de producto simple, falta completar campos, como la estimación, prueba y notas, estos deben ser completados en conjunto con el equipo Scrum (equipo de desarrollo).


En la practica se pueden agregar otros campos, pero a la larga estos son los mas recurrentes tras los Sprint.

Como mantenemos la Pila de Producto a nivel de negocio.
Si el Dueño de Producto tiene una formación técnica, puede que añada historias del tipo “añadir índices a la tabla de eventos”. ¿Por qué quiere algo así? El auténtico objetivo probablemente será algo como “aligerar el formulario de búsqueda de eventos en el backoffice” (con un índice).
Puede ocurrir que los índices no fueran el cuello de botella que hiciera al formulario ir lento. Puede que fuera algo completamente diferente. El equipo está normalmente mejor capacitado para averiguar como resolver algo, así que el Dueño de Producto debería concentrarse en los objetivos de negocio y no en modificarnos la pila luego de los requisitos ya vistos y entregados.

Pronto, va la segunda parte de este doc. de Scrum.

Saludos y Suerte !!

jueves, 9 de octubre de 2008

Firma digital de PDF

Hola, muchas veces para nuestros sistemas debemos resguardar la integridad de los documentos almacenados en nuestros repositorios, ya sean word, pdf u otros.

Esto lo podemos realizar agregando la firma digital a los documentos, y una manera de hacerlo es mediante las apis de Java, las que nos proveen los metodos apropiados para la firma avanzada de documentos PDF.

Avanzada, porque el mismo Acrobar Reader valida la integridad del documento y la firma digital, ademas de agregar la capacidad de usar nuestro propio certificado pfx.

En el siguiente ejemplo veremos como firmar digitalmente un documento PDF.

1.- Debemos contar con algún certificado pfx valido en nuestro sistema.

Si ya contamos con este certificado PKCS12 (. pfx) procedemos con el ejemplo.

primero vamos a nuestro ide eclipse para Java creamos una clase con el siguiente código.

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.security.KeyStore;
import java.security.PrivateKey;
import java.security.cert.Certificate;
import com.lowagie.text.pdf.PdfReader;
import com.lowagie.text.pdf.PdfStamper;
import com.lowagie.text.pdf.PdfSignatureAppearance;

public class FirmarPDF {

public static void main (String [] args) throws Exception{
KeyStore ks = KeyStore.getInstance("pkcs12");
ks.load(new FileInputStream("/home/slack/mycert.pfx"), "quaker77".toCharArray());
String alias = (String) ks.aliases().nextElement();
PrivateKey key = (PrivateKey) ks.getKey(alias, "quaker77".toCharArray());
Certificate[] chain = ks.getCertificateChain(alias);
PdfReader reader = new PdfReader("/home/slack/0X/ccu/documento_inicial_req.pdf");
FileOutputStream fout = new FileOutputStream("/home/slack/compartido/documento_firmado2.pdf");
PdfStamper stp = PdfStamper.createSignature(reader, fout, '\0', new File("/tmp"));
PdfSignatureAppearance sap = stp.getSignatureAppearance();
sap.setCrypto(key, chain, null, PdfSignatureAppearance.WINCER_SIGNED);
sap.setReason("Prueba de firma digital con iText");
sap.setLocation("Chile");
sap.setContact("Empresa Chile");
stp.close();
}

}

Debemos contar con las librerias necesarias que se importan en la clase.

En el código vemos que tenemos un archivo pdf de entrada y otro de salida, pero este ultimo va firmado.

La firma digital de documentos PDF la valida Adobe Acrobat, que es capaz de procesar y validar esta información.

Para verificar visualmente que el documento de salida esta firmado vemos las siguientes caracteristicas en el nuevo documento en acrobat reader.



Bueno, este en un ejemplo practico para firmar pdf con Java.

Ahora faltaría agregar esta implementación a una aplicación web para clientes.

Saludos y Suerte !!