Author Archives: Jose Nunez

Definición de “Hecho” – DoD

17 Ene , 2018,
Jose Nunez
, ,
No Comments

Siguiendo con nuestro gran tema de equipos AGILE y metodología SCRUM, hoy queremos profundizar un poco sobre el concepto de “definición de hecho” o en inglés “definition of done”.

Es aquello que debe cumplirse para decir que una unidad de trabajo (historia de usuario) está hecha, completada, finalizada.

Una historia de usuario no puede ser considerada para aceptación a menos que cumpla con dicho criterio.

 

La definición de hecho es un acuerdo de equipo para asegurar la calidad del trabajo y la calidad de la dinámica de equipo a lo largo de un proyecto.

Una definición de hecho apropiada busca cumplir con las siguientes metas:

  1. Estándares de Calidad para Diseño y Código.
  2. Administración de Conocimiento.
  3. Integración y Entrega Continua.

Cada historia de usuario deberá cumplir con los siguientes criterios:

  1. Estrategia de versionamiento y ramificación de código. Corresponde al uso de un sistema de versionamiento de código y al uso de una estrategia de ramificación que incluya la creación de ramas funcionales a partir de una rama general de desarrollo, la actualización de las ramas funcionales con la ultima versión de la rama de desarrollo y la actualización del código de la rama de desarrollo desde las ramas funcionales luego de una revisión de código.
  2. Pruebas unitarias. Trata del desarrollo de pruebas unitarias para el código que haya sido modificado o creado durante cada historia de usuario. Las pruebas unitarias deben incluir simulaciones (mocking) de las interfases externas y alcanzar al menos una cobertura de código del 70%.
  3. Revisiones de código. Consiste en revisar el código creado y/o modificado durante una historia de usuario como mecanismo de aprendizaje para otros desarrolladores y como mecanismo de validación/mejora de la calidad del código.
  4. Documentación aplicable. Corresponde a actualizar la documentación aplicable, incluyendo documentos de arquitectura/diseño, documento experto, documentos de instalación y, en el caso de SPIKES (historias de investigación) la documentación del resultado de las investigaciones. También es recomendado el uso de WIKI’s para dicha documentación.
  5. Pruebas de aseguramiento de calidad. Se debe contar con un conjunto de pruebas para cada historia de usuario que validen el cumplimiento funcional del criterio de aceptación; y la ejecución satisfactoria de dichas pruebas.
  6. Integración del código en los ambientes de Desarrollo y de Pruebas (QA) deseablemente de forma automatizada.
  7. Pruebas de regresión e integración. Finalmente se debe contar con pruebas actualizadas de regresión e integración, deseablemente automatizadas, a fin de validar que los cambios en el código no hayan tenido efectos adversos indirectos sobre otras funcionalidades del sistema.

 

QuickTIP: Plantillas Literales en Javascript

15 Ene , 2018,
Jose Nunez
, , , ,
No Comments

Recientemente me econtré con una funcionalidad interesante de Javascript denominada “Plantillas Literales” (referencia)

Básicamente consiste en el uso de “coma invertida”   `  para definir cadenas que se comportan como plantillas donde el patron ${expresión} es reemplazado por el resultado evaluado de la expresión.

El siguiente ejemplo retornaría la cadena “hola 2”

console.log(`hola ${1+1}`);

 

… mientras que el siguiente ejemplo retornaría el valor “hola mundo”

var variable = "mundo";
console.log(`hola ${variable}`);

Es todo.

Cómo instalar Letsencrypt en una cuenta compartida de GoDaddy

23 Dic , 2017,
Jose Nunez
, , , ,
No Comments

Esta publicación se basa en el siguiente artículo Mike Seifriedhow-to-install-a-lets-encrypt-ssl-on-a-shared-godaddy-hosting-account

(!) Advertencia: Este procedimiento involucra crear una llave privada para su servidor desde un sitio de un tercero (ZeroSSL). Esto implica que ZeroSSL tendrá acceso a la llave privada que define la identidad de su sitio web. Se recomienda que para implementaciones que requieran una mayor seguridad, la llave privada de la identidad de su sitio web no sea compartida con terceros.


Paso 1 – ZeroSSL

Usando el servicio https://zerossl.com/ es posible generar los archivos necesarios para configurar un servicio SSL.

  1. Vaya a ZeroSSL, (una interface web para obtener certificados mediante Let’s Encrypt)
  2. Haga clic en “Online Tools” y luego escoja “FREE SSL Certificate Wizard”.
  3. Solicitud de firma de certificado: Digite la dirección del dominio al que desea configurar en la casilla de la derecha/arriba “Domains ONLY IF YOU DON’T HAVE CSR” y haga clic en NEXT. Esto generará un Certificate Sign Request (CSR) en la casilla de la derecha/abajo. Si ya tiene un CSR solamente pegue el contenido del mismo en la casilla derecha/abajo. Haga clic en el botón DOWNLOAD (derecha/abajo) para descargar el CSR que podrá reutilizar en futuras renovaciones de su certificado.
  4. Llave de su cuenta: Digite su dirección de email en la casilla izquierda/arriba “” y haga click en NEXT. Esto generará un “account key” en la casilla izquierda abajo. Si ya tiene un “account key” de Let’s Encrypt solo pegue el contenido en la casilla izquierda/abajo y haga clic en NEXT para el siguiente paso. Recuerde que puede usar el boton DOWNLOAD (izquierda/abajo) para descargar el “account key” y así reutilizarlo en futuras operaciones.
  5. ACME CHALLENGE: Seguidamente el sistema genera un archivo de prueba conocido como el “ACME CHALLENGE” para cada dominio que desea asegurar. Descargue el archivo y asegurese de copiarlo fisicamente en el servidor web que desea asegurar en la carpeta webroot/.well-known/acme-challenge/ de su dominio **. Haga clic en NEXT para que el sistema compruebe que el archivo está disponible desde su dominio.
  6. Luego de la comprobación del reto ACME, el sistema generará dos archivos: (1) la llave privada de su sitio web y (2) el certificado SSL de su sitio web. Descárguelos y guárdelos en un lugar seguro.

** La ruta de destino (carpeta de confirmación) luce así: /public_html/.well-known/acme-challenge/  . Este archivo será utilizados como prueba de que usted es dueño del dominio del sitio web que está configurando. Al solicitar un certificado ZeroSSL para una carpeta raíz es posible especificar ambas formas de acceso: yourdomain.com y www.yourdomain.com. Tome en cuenta que para instalar Let’s Encrypt en un sub-dominio no es necesario utilizar el sub-sub dominio www. También tenga presente que la carpeta de confirmación deberá ser accesible sin necesidad de autenticación.


Paso 2 – Configuración en CPANEL de GoDaddy

Ahora vaya al panel de control (cPanel) de GoDaddy y busque la sección de Seguridad (Security) y haga clic en SSL/TLS.

Alija “Install and Manage SSL for your site (HTTPS)”, y haga clic en  “Manage SSL sites”.

Allí encontrará un formulario sencillo donde podra registrar la siguiente información: a) el dominio, b) el certificado, c) la llave privada y d) el “bundle” de la autoridad certificadora. Los ítems b,c y d son elementos que ud recibió de ZeroSSL. Es importante notar que los certificados tienen marcadores de inicio y final que deben incluirse en el formulario (“—–BEGIN CERTIFICATE—–” y “—–END CERTIFICATE—–“; de lo contrario obtendrá un error indicando que el certificado no es válido.

También, el certificado obtenido de ZeroSSL tiene dos partes: el certificado y el “Bundle” de la autoridad certificadora (CABUNDLE); estos tambien tienen indicadores de inicio y final.

Una vez que ud tenga todos los datos en el formulario (en mi caso pude dejar el CABUNDLE vacio) se hace clic en “Install Certificate” y listo; su sitio web ya puede ser accesado usando el protocolo HTTPS.

Existe un plug-in de WordPress para asegurar el acceso via HTTPS que se llama Easy HTTPS (SSL) Redirection.

Experimentación Ondas Cerebrales

6 Dic , 2017,
Jose Nunez
, , , , ,
No Comments

Recientemente tuvimos la oportunidad de experimentar un poco con un sensor de ondas cerebrales (Emotiv Insight) que nos ha servido de introducción al fascinante mundo de los BCI (Brain-Computer Interface)

El proyecto que nos trajo a este punto trata de desarrollar formas de comunicación adicionales para personas con algunas dificultades físicas para comunicarse, incluyendo peronas con dificultades para el habla, la escucha o diversos niveles de parálisis cerebral.

En este artículo quiero condensar un poco una propuesta para una metodología de experimentación que nos permita capturar datos de este tipo de dispositivos y que sirvan de insumo para crear modelos de aprendizaje de máquinas que a su vez nos lleven a desarrollar modelos de interpretación de las ondas y por ende los deseos o necesidades de las personas.

Metodología de Experimentación

  1. Definir un repositorio para la documentación oficial de cada experimento y para los resultados de los experimentos.
  2. Definir personas y roles: facilitador, sujeto de experimentación, observadores.
  3. Definir objetivos y metas del experimento
  4. Definir características de los sujetos de experimentación.
  5. Definir un ambiente controlado para minimizar los estímulos no esperados y el ruido
  6. Establecer un guión o protocolo de pasos, tiempos y clases para el experimento,
    1. Definir tareas a realizar: preparación, arranque, ejecución, finalización y cierre.
    2. Identificar estímulos Intencionales: preparación, arranque, ejecución, finalización, cierre
    3. Identificar estímulos no intencionales: derivados, ruido aceptable, ruido no aceptable (invalidación temprana del experimento)
  7. El resultado de cada experimento será un archivo con la información sensada y la pre-clasificación de los diferentes eventos o estímulos ocurridos detectados por el observador. Este archivo se usará para generar modelos de aprendizaje de máquinas que nos permitan estudiar y entender los fenómenos documentados en cada experimento.

Como siempre, sus comentarios para enriquecer esta metodología serán de gran valor para nosotros.


Haga clic acá para una plantilla de ejemplo


Algunas Referencias Interesantes:

Anaconda y Jupyter Notebook como plataforma de Machine Learning en Python

3 Dic , 2017,
Jose Nunez
, , , , ,
No Comments

¿Qué es Anaconda?

Anaconda es una de las plataformas más prominentes de ciencia de datos para Python. Se puede descargar Anaconda de este enlace: http://www.continuum.io/downloads 


Distribución Anaconda

Expanda para ver Distribución ANACONDA

La distribución gratuita incluye una serie de librerías y programas utilitarios avanzados tales como

Image tomada de https://www.anaconda.com/distribution/

Dentro de los paquetes que me han resultado más interesantes podemos mencionar:

  1. Numpy: Librería de Python para computación científica
  2. Scipy: Meta-librería de computación científica para Python
  3. Pandas: Librerías para estructuras de datos y analítica de datos para Python
  4. Jupyter Notebook: Es un IDE que permite crear documentación “activa/viva” incluyendo visualizaciones, scripts, ejemplos, etc

Jupyter Notebook

Expanda para ver ¿Cómo iniciar con Jupyter Notebook?

Jupyter Notebook perimte generar documentación viva que incluya scripts, datos y visualizaciones de ejemplo.

En Windows, para ejecutar Jupyter Notebook se abre la consola de Anaconda (Windows > Anaconda Prompt) y se ejecuta el comando jupyter notebook

Este comando levanta un servidor jupyter y una ventana de navegador apuntando a http://localhost:8888 (el puerto puede variar)

Cada línea del documento puede ser de tipo Markup, Titulo o Código.

En las líneas que son de tipo código puede ejecutarse este con solo presionar [CTRL] [ENTER]

Desde esa ventana web se pueden crear o modificar proyectos Jupyter que incluyan código de ejemplo Python que puede ser ejecutado en el documento.


Flujo de Trabajo para Aprendizaje de Máquinas

Expanda para ver más sobre Machine Learning Workflow

Machine Learning Workflow: Es un patrón repetible y orquestado que permite la transformación y el procesamiento sistemático de informació para crear soluciones de predicción.

  1. Definir la pregunta a responder
  2. Preparar los datos
  3. Seleccionar un algoritmo
  4. Entrenar un modelo
  5. Validar el modelo
  6. Retro-alimentación

 

Realizando un Proyecto SCRUM exitoso en 7 pasos

27 Nov , 2017,
Jose Nunez
, , ,
No Comments

Continuando con nuestra serie sobre SCRUM les presentamos 7 pasos para un proyecto SCRUM exitoso.

Pueden ver nuestro artículo anterior que resume varios conceptos importantes de SCRUM.

También pueden ver acá que nuestra plantilla scrum incluye detalles de cada ceremonia SCRUM.

Paso 1Identifique una persona que esté dispuesta a llevar a cabo el rol de SCRUM master, una persona que lleve el rol de Dueño de Producto e identifique a su equipo de ejecución.


Paso 2 – El dueño de producto crea un backlog inicial que describa el producto en unidades de trabajo (historias de usuario). Para esto normalmente se requiere el trabajo conjunto entre el dueño de producto y el equipo de ejecución donde el scrum master facilita el proceso, principalmente orientando donde sea necesario al dueño de producto para que las historias de usuario tengan una buena descripción, criterio de aceptación y estimación superficial.


Paso 3 – Se realiza una ceremonia oficial de Planeamiento del Producto donde todo el equipo (dueño de producto, equipo de ejecución, scrum master) revisan el backlog, las estimaciones superficiales, agregando criterios técnicos y aclarando dudas sobre cada historia de usuario. Esta ceremonia es organizada y facilitada por el scrum master. El resultado de esta ceremonia es una estimación general del tamaño del proyecto.


Paso 4 – Se organiza el calendario del siguiente trimestre en iteraciones de dos semanas cada una (aproximadamente entre cinco a seis iteraciones en total). Para esto el scrum master organiza las siguientes ceremonias en el calendario del equipo:

  • Poda del backlog cada dos semanas. Acá se identifican dudas y se hace una estimación final del esfuerzo de cada historia de usuario.
  • Planeamiento de Iteraciones al inicio de cada iteración (cada dos semanas), incluyendo Cierre de Iteración, Retrospectiva y Planeamiento.
  • Actualizaciones Diarias (15 minutos a la misma hora)
  • Planeamiento incremental del producto al final del trimestre. El scrum master tiene la responsabilidad de asegurarse que cada ceremonia se ejecute y tenga el resultado esperado. Para esto cuenta con la colaboración indispensable de todo el equipo, especialmente del dueño del producto.

Paso 5 – Durante la ceremonia de poda del backlog, el equipo de ejecución junto con el dueño de producto identifican dudas en cada historia de usuario y hacen una estimación final del esfuerzo requerido para cada iteración medido en puntos (1,2,3,5,8,13). Se realiza el esfuerzo de dividir las historias de usuario más grandes (> 5 puntos) en historias de usuario más pequeñas alcanzables en una iteración. Se identifican también historias de usuario de investigación donde se requiera aprender cómo realizar alguna tarea o diseñar algo. Las historias de usuario que tengan las aclaraciones necesarias y la estimación final en puntos se denominan “historias podadas”. Esto es importante porque en una iteración solamente se pueden asumir historias podadas.


Paso 6 – En el planeamiento de iteración se identifican la disponibilidad de cada miembro del equipo para la iteración, incluyendo ausencias programadas (vacaciones, permisos, capacitaciones), la cantidad de horas que cada miembro del equipo (en especial el equipo de ejecución) tiene disponibles para realizar tareas de la iteración y se realiza la estimación detallada de cada historia de usuario que se vaya a adoptar en la iteración en términos de tareas y horas estimadas para cada tarea.Al final del planeamiento se tendrá:

  • Una lista de miembros del equipo de ejecución y horas disponibles para la iteración y días de ausencia programada.
  • Una lista de historias adoptadas (compromiso de la iteración) con el detalle de tareas y estimación de las horas que tomaría cada tarea y cual miembro del equipo está a cargo de cada tarea. La sumatoria de las horas estimadas para cada tarea por miembro de equipo se llama “asignación” (allocation) y no debe superar las horas disponibles para los miembros de equipo encargado. Con la cantidad de asignación entre la cantidad de horas disponibles por encargado calculamos el porcentaje de asignación que nos permite ver si un miembro de equipo tiene una signación muy baja (< 85%) o muy alta (>100%)

Paso 7 – El equipo de ejecución adquiere un compromiso por cada iteración. Durante las ceremonias de actualización diaria se actualizan las métricas de ejecución ( horas pendientes, puntos aceptados ) para calcular el gráfico de burndown y se aclaran dudas, se identifican dificultades que requieran ayuda de otros miembros del equipo. Durante todo este proceso el scrum master realiza una labor de facilitador y también da seguimiento a las necesidades de ayuda.

Durante la iteración se ejecuta el compromiso del equipo, se removen obstáculos y se monitorea la ejecución dentro del marco de la ceremonia de actualización diaria.

Al final de la iteración se realiza un cierre que involucra:

  • Una sesión retrospectiva (qué cosas debemos seguir haciendo, qué cosas debemos dejar de hacer y qué cosas debemos empezar a hacer) especialmente con miras a mejorar el % compromiso entregado.
  • Una demostración de las historias de usuario aceptadas por el dueño de producto como terminadas.
  • Y el reacomodo de historias de usuario que no se hayan terminado (compromiso fallido) hacia la siguiente iteración.

Y… en resumen:

En mi experiencia – Un resumen sobre SCRUM

26 Nov , 2017,
Jose Nunez
, ,
No Comments

La administración de proyectos es una de las actividades más importantes de quehacer humano. En gran medida, la administración de proyectos determina el éxito o fracaso de proyectos y hasta de organizaciones enteras.

En la actualidad la administración de proyectos ha evolucionado de modelos como Waterfall, donde un gerente de proyecto establece un cronograma y dirige un conjunto de personas para cumplirlo al final de dicho cronograma, a modelos más iterativos donde los roles de administración de proyecto y de equipo han sido completamente redefinidos; dando lugar a interacciones de equipo de trabajo más ricas y productivas. Uno de estos modelos es SCRUM.

También pueden ver nuestro artículo: Realizando un Proyecto en SCRUM exitoso en 7 pasos

El siguiente mapa mental ilustra los principales elementos que componen la metodología SCRUM:

En resumen

Proceso Iterativo

El modelo SCRUM permite llevar adelante proyectos simples y complejos mediante un proceso iterativo de planeamiento y ejecución, donde los equipos de trabajo son redefinidos para cubrir roles específicos como SCRUM Master, dueño de producto y ejecutores. Cada iteración usualmente se extiende por dos o tres semanas.


¿Qué es el proyecto? un conjunto de historias de usuario o metas

Un proyecto es entonces un conjunto de metas definidas por el dueño de producto (muchas veces con ayuda del equipo de ejecución). Cada meta (también llamada historia de usuario) se define en términos de descripción y criterio de aceptación.

Un ejemplo de una historia de usuario hipotética es el siguiente:

  • Descripción: Como cliente de uber, quiero poder pagar en efectivo
  • Criterio de aceptación:
    • La aplicación móvil tiene un botón para que el usuario escoja el medio de pago entre su tarjeta o efectivo
    • Cuando el usuario elige pagar en efectivo su tarjeta no es debitada con el costo del viaje
    • El conductor tiene un mecanismo para dar fe en su aplicación de haber recibido el dinero del pago

Esta lista de historias de usuario  es luego revisada por el equipo de ejecución para estimar a grosso modo el esfuerzo requerido para realizar cada una de ellas. Esta estimación de esfuerzo se hace en puntos relativos (1,2,3,5,8,13) . La siguiente lista muestra un ejemplo de la equivalencia de los puntos al esfuerzo requerido:

  • 1 punto: La historia de usuario se puede completar en 8 horas o menos con ningun riesgo previsible de extender su ejecución y ninguna dependencia externa.
  • 2 puntos: La historia de usuario se puede completar en 16 horas o menos y/o involucra una nivel bajo de riesgo y/o pocas dependencias externas.
  • 3 puntos: La historia de usuario se puede completar en 32 horas o menos y/o existen riesgos razoables de complejidad o dependencias externas.
  • 5 puntos: La historia de usuario se puede completar en 60 horas o menos  (más de una semana) y/o involucra riesgos importantes en complejidad o dependencias externas.
  • 8 puntos: La historia de usuario se puede completar en 80 horas o menos (dos semanas) y/o involucra riesgos críticos en términos de complejidad o dependencias externas.
  • 13 puntos: La historia de usuario se puede completar en 80 horas o más  (tres semanas o más) y/o involucra demasiados riesgos gríticos, demasiada complejidad o demasiadas dependencias externas.

Normalmente cuando una historia de usuario se estima en 5 puntos o más, se realiza el ejercicio de dividirla en historias de usuario más pequeñas que puedan ejecutarse en menos de una semana cada una.

Como nota final, existen dos tipos de historia de usuario: las historias de negocio y las historias de investigación (SPIKES). Las historias de investigación normalmente miden 2 a 3 puntos, tienen como objetivo aprender cómo se hace algo (crear conocimiento en el equipo)  y culminan con documentación sobre el resultado de la investigación y posiblemente nuevas historias de negocio a ser ejecutadas en iteraciones posteriores.

Al conjunto de historias de usuario que definen un proyecto se le llama “backlog”


Iteraciones, tareas y ejecución

Cada iteración de dos o tres semanas se inicia con un proceso detallado de planeamiento donde cada historia de usuario del backlog que se vaya a trabajar en la iteración es desglosada en tareas y miembros del equipo que realizarán cada tarea, más una estimación en horas del esfuerzo necesario para realizar cada tarea.

Al conjunto de historias  de usuario y tareas elegidas o planeadas para ejecutarse en una iteración se le conoce como el compromiso del equipo en esa iteración. El equipo entonces hará todo lo necesario para cumplir con su compromiso para con el cliente o el dueño del producto; incluyendo trabajos interdisciplinarios, investigaciones, sesiones de trabajo, etc.

Una historia de usuario se considera terminada cuando (1) todas sus tareas han sido completadas con éxito, (2) se han cumplido todos los criterios de aceptación y por ende ha sido aceptada por el dueño de producto y (3) la historia de usuario cumple con la definición de terminado que normalmente incluye documentación, integración de resultados, demostraciones, pruebas, etc.


Rituales o Ceremonias

Se dice que la vida del ser humano está definida por sus rituales, por aquellas cosas que realiza frecuentemente. Por ejemplo una persona que tiene el ritual de levantarse a las 4 de la mañana a correr tiene una definición de vida diferente de una persona que tiene el ritual de levantarse a las 8am a tomar capuccino dulce.

Los principales rituales del modelo SCRUM inclyen:

  • Planeamiento Incremental del Producto: Es cuando se revisa el backlog en equipo y se determinan los cambios necesarios (remover historias de usuario, agregar nuevas historias de usuario, nuevas dependencias, etc.)
  • Poda del backlog (grooming): Es cuando se realiza la estimación de cada historia de usuario en términos de puntos. Para esto el equipo (incluyendo el dueño del producto) se reunen por dos o más horas y revisan la definición de cada historia, el criterio de aceptación de cada historia y la definición de “terminado” adoptada por el equipo.
  • Planeamiento de Iteración: En esta ceremonia de aproximadamente 1 a 2 horas se planea la itereación siguiente. Normalmente se realiza inmediatamente después del cierre de la iteración anterior. Aquí se identifican (1) aspectos limitantes como la disponibilidad de cada miembros del equipo, vacaciones, etc; (2) las historias de usuario que se trabajarán en la iteración siguiente y (3) las tareas específicas y la estimación en horas de cada tarea. De nuevo, al conjunto de historias de usuario y tareas de una iteración se le conoce como el compromiso del equipo.
  • Reunión de Actualización Diaria (DSU): Esta es una ceremonia de máximo 15 minutos donde cada miembro del equipo comunica sus avances, la ayuda que pudiera necesitar y sus planes para el día. Es importante aclarar que un DSU donde nadie necesita ayuda es probablmente un DSU demasiado superficial.
  • Cierre de Iteración: En esta sesión normalmente de 1 hora se da por concluida una iteración y se identifican logros, correcciones de equipo necesarias y planes. Normalmente se realiza junto con el Planeamiento de Iteración en una sesión conjunta que ronda de 2 a 3 horas.
    • Demostraciones: Cada miembo del equipo demuestra sus logros de la iteración.
    • Retrospectiva: Esta ceremonia tiene como objetivo la mejora continua del equipo. Acá cada miembro del equipo expresa qué cosas considera que el equipo debería (1) dejar de hacer, (2) continuar haciendo/profundizando y (3) comenzar a hacer; especialmente con miras a la parte del compromiso de iteración que no se haya logrado o a las dificultades que se enfrentaron durante la iteración.
    • Movimientos de historias de usuario no terminadas a la iteración siguiente

Estado del Proyecto, Métricas y Velocidad de Equipo

Como ya mencionamos un proyecto es definido como el conjunto de historias de usuario que componen el backlog y por sus recursos, es decir el equipo de ejecución.

El tamaño del backlog se define como la suma de los puntos asignados a todas las historias de usuario del backlog.

Luego de tres iteraciones es probable que el equipo de ejecución sea capaz de preveer cuantos puntos pueden ejecutar por iteración. Esta métrica es importante para el proyecto por que permite estimar en el tiempo la duración aproximada del proyecto.

Así, si un backlog mide 100 puntos, y la velocidad del equipo es de 10 puntos por iteración de dos semanas, se puede preveer que se requerirán al menos 10 iteraciones para completar el proyecto, es decir 20 semanas o lo que es lo mismo 5 meses.

Estas métricas aparte de ser muy simples permiten también conocer en el tiempo el estado del proyecto, tanto respecto a la iteración que se está ejecutando (cuantos puntos han sido aceptados, cuantos puntos están siendo ejecutados (WIP), cuantos puntos no se han empezado) así como respecto al proyecto como un todo (cuantos puntos se han ido ejecutando por iteración, cuantos puntos faltan para completar el proyecto, incrementos o disminuciones de velocidad de equipo en el tiempo, etc.)


Enlace a Plantilla

Como un aporte final les adjunto este enlace donde resumo los roles, ceremonias y presento una plantilla para un backlog de historias de usuario.

También en esta plantilla muestro la construcción de un gráfico de “burn-down” que permite visualizar el avance de la iteración vs el ideal esperado.

 

Espero que les sea de utilidad.

Enlace de Google Sheets. Plantilla SCRUM (haga clic acá)

 

 

Inteligencia Artificial o Aprendizaje de Máquinas

12 Nov , 2017,
Jose Nunez
, , , , ,
No Comments

Flor IRIS

Haciendo un resumen exagerado, podemos decir que la Inteligencia Artificial y/o el Aprendizaje de Máquinas son la forma en que hemos logrado que los sistemas artificiales (máquinas) logren aprender más o menos igual como nosotros los seres humanos lo hacemos: mediante el análisis de un conjunto de observaciones (o muestras) de forma que una vez realizado el aprendizaje, el sistema pueda realizar inferencias ya sea prediciendo un resultado basado en un conjunto de datos.

Las tareas de aprendizaje pueden ser de dos tipos: aprendizaje supervisado (cuando se tiene disponible el resultado durante el aprendizaje) y aprendizaje no-supervisado cuando no se tiene un resultado disponible.

A su vez, las tareas de parendizaje pueden incluir problemas de:

  1. Clasificación: cuando se necesita clasificar un conjunto de características en clases pre-definidas como valores discretos; por ejemplo determinar qué clase de planta está representada en un conjunto de datos.
  2. Regresión: cuando se necesita establecer un valor continuo como resultado de analizar un conjunto de características. Por ejemplo establecer el precio de un producto.
  3. Agrupamiento: cuando se necesita encontrar características comunes entre si que denoten grupos de datos. Por ejemplo la identificación de patrones en una imagen.

El proceso de aprendizaje de máquinas en general se puede definir en los siguientes pasos:

  1. Determinación del Problema: Identificar el objetivo, qué es lo que se quiere lograr (clasificación, regresión o agrupamiento) e identificar las características o atributos de datos relevantes (“features”); así como el tipo de proceso (supervisado o no-supervisado)
  2. Escogencia del algoritmo de aprendizaje: Existen diversos algoritmos para tomar una serie de datos y generar modelos de aprendizaje de máquinas. Estos algoritmos difieren uno de otro en su aplicabilidad para diferentes tipos de problemas. En este enlace se presenta un tutorial bastante sencillo sobre diferentes algoritmos y su evaluación para un problema determinado.
  3. Entrenamiento de un Modelo: Consiste en ejecutar el o los algoritmos elegidos usando el 80% de los datos conocidos (en el caso de aprendizaje supervisado) para generar un modelo que pueda hacer futuras inferencias con datos nuevos. Esto da como resultado un modelo entrenado.
  4. Validación del modelo entrenado: Consiste en ejecutar el algoritmo sobre el modelo entrenado usando el 20% restante y comparando los resultados con los valores conocidos para ese 20% de datos.
  5. Uso del modelo y refuerzo: Una vez alcanzada una precision deseada en los resultados (tal vez > 90%) se puede ya utilizar el modelo entrenado y validado para realizar nuevas inferencias a partir de nuevos datos donde no se tenga un resultado predefinido.

Como una nota final podemos decir que los conceptos de Aprendizaje de Máquinas y de Inteligencia Artificial se pueden separar citando un artículo reciente en la revista Forbes:

Inteligencia artificial (IA) es el concepto amplio de máquinas que son capaces de realizar tareas en una forma que se pueda considerar “inteligente”

y,

Aprendizaje de máquinas es la aplicación de paradigmas de IA al rededor de la idea de que deberia ser posibe que simplemente demos datos a las máquinas y que estas puedan aprender por sí mismas.

Acá algunos conceptos más avanzados que hemos logrado aprender: http://costaricamakers.com/?p=1455

______________________________________________

Referencias

Computación Cuántica – La Desconcertante Guerra de las Álgebras

11 Nov , 2017,
Jose Nunez
No Comments

La física cuántica ( o mecánica cuántica ) no deja de ser un tema fascinante y a la vez desconcertante. Esto porque las cosas en el mundo subatómico se rigen por reglas completamente diferentes a las que estamos acostumbrados; y nuestro entendimiento de los fenómenos físicos se ha limitado históricamente a la física clásica donde cada cosa tiene un estado deterministico que se puede observar, medir y controlar de manera más o menos estable.

A este desconocimiento masivo debemos agregar la gran cantidad de esoterismo que encuentra uno en la “literatura” común sobre mecánica cuántica y sobre cómo esta explicaría la forma de realizar cosas como viajar en el tiempo, la tele-transportación de materia, la telepatía y otras tonterías de ese corte.

Sobre este “andamiaje” teórico es que el ser humano se encuentra de frente con un tema todavía más profundo: la computación cuántica. Es decir, la computación que se basa en los fenómenos o leyes de la mecánica cuántica.

Tengo mis reservas sobre el tema. Por momentos me resulta fascinante, y por momentos irritante. Pero bueno, nada que no haya enfrentado antes con muchos otros temas de esta experiencia humana.

Un dato que me resulta importante de aclarar es que en realidad el ser humano ha estado manipulando las cosas a nivel sub-atómico desde hace rato. Cada vez que un microprocesador procesa unos y ceros en realidad está procesando flujos de electrones (partículas sub-atómicas); haciendo que fluyan en mayor o menor intensidad por diferentes materiales y dispositivos (transistores, resistencias, diodos, etc.)

El punto medular de la computación cuántica radica en una álgebra distinta. Mientras la computación moderna está basada en el álgebra booleana 2 que podríamos definir como una simplificación determinística de las matemáticas que permite representar prácticamente cualquier cosa por medio de unos y ceros; la computación cuántica necesita una álgebra distinta porque se basa en modelos probabilísticos y no determinísticos. Es decir, mientras el estado de un bit es definitivamente uno o cero, el estado de un qubit se considera superpuesto (uno y cero a la vez) y hasta que es medido y adquiere uno de los dos estados, “abandonando” el anterior. Estamos hablando de la Lógica cuántica 3.

Entonces en gran medida la computación cuántica se centra en el debate entre modelos deterministicos y probabilísticos 4 y de cómo sacar mejor provecho de cada uno.

En mi próximo aporte quiero abordar otro aspecto de este tema: La coherencia y decoherencia.

Finalizo con esta frase que probablemente escribiría Edwin Shrödinger en su lecho de muerte:

“cada vez que alguien usa el Gato de Schrödinger
para afirmar cualquier cosa metafísica,
espiritual, o sobre universos paralelos,
el pobre gato se revuelca en su tumba.”

______

1: https://web.archive.org/web/20161104151733/http://computadoras.about.com/od/tipos-de-pc/fl/iquestQueacute-es-la-computacioacuten-cuaacutentica.htm
2: https://es.wikipedia.org/wiki/%C3%81lgebra_de_Boole
3: https://es.wikipedia.org/wiki/Lógica_cuántica
4: http://tornado.sfsu.edu/geosciences/classes/m698/Determinism/determinism.html
5: https://es.wikipedia.org/wiki/Gato_de_Schr%C3%B6dinger

Algunos conceptos interesantes de Machine Learning usando Anaconda / Python

23 Sep , 2017,
Jose Nunez
, ,
No Comments

Continuando con nuestras recientes publicaciones sobre “Machine Learning” (artículo anterior sobre fundamentos), en esta oportunidad compartimos algunas cosas que hemos aprendido siguiendo el tutorial “Machine Learning in Python Step by Step“.

Para poder entender este artículo recomendamos seguir el tutorial paso a paso… no se toma más de 30 minutos.

  1. Anaconda: Aprendimos que se puede configurar un ambiente relativamente completo para experimentación con Machine Learning y Python usando Anaconda.
  2. Dataset IRIS: Existe un “Hello World” para Machine Learning basado en un dataset llamado “IRIS” 3. Este consiste en un conjunto de datos que describe tres tipos de flores Iris (setosa, virginica y versicolor) por las dimensiones de su sépalo y pétalo; se puede usar para entrenar un modelo de aprendizaje de máquina para que este infiera el tipo de flor (clasificación) con base en la combinación de parámetros.
  3. Arreglos: Python provee mecanismos para expresar y manipular arreglos de forma sumamente robusta. Podemos resumirlos de la siguiente manera:
    • Básicamente [a:b,c:d] donde a:b representa un rango de filas y c:d representa otro rango de columnas.
    • array[:,0:4] retorna todas las filas de la matriz y las primeras 4 columnas a partir de la columna cero.
    • array[:,4] retorna todos los elementos (filas) de la quinta columna (índice 4)
      
      
  4. Entrenamiento y Validación: El entrenamiento y validación de modelos de aprendizaje de máquinas usualmente suele dividir los datos conocidos en 80% para aprendizaje o creación del modelo y 20% para validación del modelo generado. En este tutorial se usa la función model_selection.train_test_split(X,Y, test_size, random_state) de la libreria sklearn.
  5. SKLEARN LIB: Existen diversos algoritmos de clasificación en la librería sklearn:
    1. LogisticRegression
    2. LinearDiscriminationAnalysis
    3. KNeighborsClassifier
    4. DecisionTreeClassifier
    5. GaussianNB
    6. SVM/SVC
  6. Precisión de Los Algoritmos: Diferentes algoritmos presentan diferentes niveles de precisión dependiendo del problema a resolver. Estos se pueden evaluar usando funciones como model_selection.cross_val_score que da como resultado medidas estadísticas como la media y la desviación estandar. Esta validación se puede confirmar con gráficos de tipo box charts, scattered matrix e histogramas. Estos gráficos se generan en python usando librerías como matplotlib
  7. Aprender y Predecir: Una vez entrenado el modelo (con knn.fit()) se pueden generar predicciones (knn.predict())
  8. Matriz de Confusión: Las predicciones pueden ser validadas mediante mecanismos como confusion_matrix que provee una análisis simple de valores esperados y valores predichos de manera correcta y errónea.
    • La matriz de confusión tiene un eje (x) que representa los valores conocidos, y un eje (y) que representa los valores predichos.
      setosa     ==> [[ 7   0   0]
      versicolor ==>  [ 0  11   1]
      virginica  ==>  [ 0   2   9 ]]
                        se  ve  vi
    • Esto se interpreta así:
      • Se identificaron 7 setosas adecuadamente.
      • De las 12 versicolor se identificaron 11 correctamente y una como virginica
      • De las 11 virginicas se identificaron 9 correctamente y 2 como versicolor.

Referencias:

  1. Machine Learning Step by Step: https://machinelearningmastery.com/machine-learning-in-python-step-by-step/
  2. Confusion Matrix: http://scikit-learn.org/stable/auto_examples/model_selection/plot_confusion_matrix.html
  3. IRIS: https://es.wikipedia.org/wiki/Iris_flor_conjunto_de_datos
  4. Iris Setosa Imagehttps://www.rhs.org.uk/Plants/9355/Iris-setosa/Details