10 de junio de 2015

Planificación de la Continuidad de Negocios

Desde los eventos sucedidos en 9/11, el mundo ha cambiado.  La confianza y conveniencia de las relaciones de negocios ha cambiado también, así como las necesidades de proteger personas, activos e información.

La Planificación para la Continuidad de Negocios (Business Continuity Planning – BCP en inglés) consiste en un proceso, continuamente revisado y vivo, para mantener planes y acciones orientadas a mitigar el riesgo de que una empresa no pueda operar sus negocios ante la ocurrencia de un desastre o cualquier evento que interrumpa sus operaciones. No pensemos únicamente en desastres naturales: una interrupción de las operaciones puede deberse a una inundación, un incendio, una epidemia de gripe o hasta una manifestación o huelga que no permita al personal de la empresa presentarse a sus labores.

Actualmente, la mayoría de las empresas dependen en una gran medida de Información y Sistemas de Tecnología para cumplir sus metas y lograr sus objetivos.  Por esto mismo, el tema de Continuidad tradicionalmente se ha delegado a las áreas de Sistemas o Informática.

Lo anterior no es lo más adecuado, ya que lo que deseamos es recuperar y asegurar la continuidad de nuestro negocio; tener computadoras que funcionen 24x7 en un sitio alterno, pero sin personal para operarlas ni un sitio físico para trabajar, no nos permite cumplir completamente objetivo deseado.

La Continuidad de Negocios consta de tres elementos principales:

  • Administración de Crisis: Debemos tener una respuesta efectiva ante la ocurrencia de un evento catastrófico.
  • Reanudación de Negocios: Cómo vamos a hacer la recuperación de las funciones críticas de nuestro negocio, y la reanudación de entrega de servicios a los clientes.
  • Recuperación de desastres informáticos: Cómo se realiza el manejo de la recuperación de los activos informáticos críticos, incluyendo sistemas, aplicaciones, bases de datos y redes.


Por ejemplo, para el mercado financiero en Honduras, la Comisión Nacional de Banca y Seguros (CNBS) emitió la “Norma para regular laadministración de las tecnologías de información y comunicaciones en el sistemafinanciero – Circular 119/2005”, la cual contiene un capítulo específicamente instruyendo a las instituciones financieras para contar con un Plan de Continuidad de Negocios.


Las necesidades del mercado y la competitividad, así como el aparecimiento de normativas y estándares relacionados, poco a poco van logrando que nuestras empresas adopten un proyecto a nivel general de Continuidad de Negocios.

8 de junio de 2015

BPMS vs. Workflow: ¿cuál es la diferencia?

De acuerdo al documento The Top Four Usage Scenarios for a BPMS de la empresa Gartner, un Business Process Management System – BPMS por sus siglas en inglés, es una colección integrada de tecnologías de software que permite el control y la gestión de procesos de negocio.  El informe menciona algunos beneficios a corto plazo como ahorros de tiempo y costos,   cumplimiento de reglas y regulaciones, así como ventajas a largo plazo: visibilidad entre procesos horizontales, la agilidad para satisfacer las cambiantes necesidades de los usuarios y del mercado, y el soporte a la mejora continua de procesos.

En ese documento se menciona también que los sistemas BPMS usan modelos de procesos para coordinar las interacciones entre personas, sistemas e información como aspectos interrelacionados del trabajo en las empresas.  Dicho enfoque integra los recursos físicos utilizados durante la  ejecución, con el diseño del proceso para aumentar la flexibilidad;  en ese caso, el sistema BPM actúa como un "súper workflow", coordinando todos los recursos de un proceso.  Debe notarse que BPMS no es un nuevo nombre para los gestores de flujos de trabajo (Workflow Management Systems); es sólo una de las muchas capacidades que entregan estos nuevos sistemas, entre los cuales se puede destacar:

  • Modelado de Procesos de Negocios, más allá de un flujo de trabajo.  Es decir, que considera entradas, actividades, eventos, notificaciones y salidas gestionadas, y no solamente un cambio de etapas de una transacción o solicitud.
  • Manejo de Reglas de Negocio para toma de decisiones automatizada dentro de los procesos, de forma que el sistema pueda elegir procesos subsiguientes a realizar con base a la información que recibe; por ejemplo, si observara una solicitud en la que el tipo de negocio es una Cooperación Técnica, automáticamente podría decidir saltar la etapa de Evaluación de Impacto.
  • Gestión de estadísticas, tiempos e indicadores para los procesos automatizados, de forma que se cuenten con indicadores de proceso generados y actualizados de forma automática desde la definición inicial del proceso.
  • Integración y orquestación de sistemas, actividades y personas para lograr los objetivos del negocio, de forma que puede integrar otros aplicativos, bases de datos y mensajería para interactuar y procesar sus transacciones.
  • Tecnología basada en Arquitectura Orientada a Servicios (SOA) , la cual facilita la integración y creación de nueva funcionalidad para extender el alcance del aplicativo; por ejemplo, podría crearse un Servicio en el sistema central para agregar nuevos clientes, y publicarlo hacia la página Web, de forma que podría servir de punto de contacto para el registro de nuevos clientes.

He preparado un documento más completo, que puede descargarse aquí con mayor información sobre el tema, incluyendo ciertos análisis comparativos entre BPMS líderes en el mercado.


2 de mayo de 2015

Una herramienta para listar dispositivos USB en Windows / A tool to enumerate or list USB devices in Windows

Un post rápido, aquí hay una herramienta útil para listar los dispositivos USB conectados a una computadora Windows, útil para hacer búsqueda de problemas.  Me ha servido para comenzar el diagnóstivo de mi Nexus 7 que está convertida en ladrillo #Nexus7Bricked.  Recuerden que es software descargado de Internet, las restricciones y advertencias usuales aplican...

USB Viewer -> http://www.ftdichip.com/Support/Utilities/usbview.zip

-----------------

A quick post, here's a handy little utility to list or enumerate USB devices connected to a Windows machine, useful for troubleshooting.  I've used to start diagnosing my bricked Nexus 7 #Nexus7Bricked.  Remember that is software downloaded from the Internet, so the usual restrictions and warnings apply...

USB Viewer -> http://www.ftdichip.com/Support/Utilities/usbview.zip

18 de noviembre de 2014

La Hora del Código edición 2014

La semana entre el 8 y el 14 de diciembre está denominada como "Computer Science Education Week". Por eso, se está celebrando alrededor del mundo el evento "Hour of Code", en el cual se hace un taller de 1 hora, donde se le enseña a alguien que nunca ha programado, los fundamentos de programación, al menos para que se difunda el conocimiento .
Por esto, ya inscribí un evento para esa semana, para que sea en Tegucigalpa. Estoy preparando un material para dar al menos tres sesiones en esa semana, podrían ser más. Me falta lo siguiente:

1) Lugar dónde hacerlo
2) Promoción

La idea sería que llegara gente que no ha programado nunca, niños o adultos, y hacer algo interesante, tengo un par de ideas basadas en las propuestas que tienen en el sitio. Usaré Python para esto, con un web IDE para que quienes llegan no tengan que instalar nada, aparte de Chrome Browser.

Si alguien se apunta a apoyar, excelente.

El website del proyecto es el siguiente: http://hourofcode.com

Música: U2 Songs of Innocence Deluxe Edition, Pink Floyd The Endless River
Libro: Gone Girl

7 de octubre de 2013

Código fuente en C++, Flex y Bison de un proyecto de compiladores (Compilador de Pascal)

Acabo de subir a Github un front-end de un proyecto de compilador de Pascal, basado en la gramática del apéndice del libro de Aho, Sethi y Ullman (el libro del dragón), para fines educacionales.

El proyecto de compiladores tiene el front end implementado con un analizador léxico hecho en Flex, el analizador sintáctico en Bison, y hasta la generación de código intermedio (no está completo) en C++.

Este código lo migré de forma muy rápida de fuentes creados en MS-DOS en 1994, con Borland C++, hacia Linux con g++.

Se incluye un directorio con ejemplos para probar el compilador.  La licencia de uso es la GNU.

El repositorio está en Github, y pueden sacarse forks, clones, etc. del mismo!


17 de septiembre de 2013

Introducción a la Vida Artificial

Hace muchos años, (en 1992) comenzé a escribir una investigación grande sobre el tema de Vida Artificial. Logré contactar por Internet a los principales investigadores sobre el tema, y conseguí bastante información que estaba publicándose en ese momento.  Comenzaba a tener auge, y se consideraba como un tema que iba a resultar en grandes avances.

Casi 20 años después, no se escucha mucho al respecto.  ¿Será un tema que no encontró mayor expansión o aplicabilidad?  ¿Fue víctima de una conspiración?  Tal vez sólo fue un tema que fue "moda"...o tal vez ahora se llama de diferente manera (¿machine learning?).

Voy a comenzar a poner los capítulos que aún tengo, quizás le pueden servir a alguien.

¿Qué es Vida Artificial?


¿Por qué no podemos construir una computadora que piense? ¿Por qué no podemos esperar que máquinas que son capaces de realizar 100 millones de operaciones por segundo puedan comprender el significado de formas geométricas en imágenes, o incluso distinguir entre diferentes tipos de objetos similares? ¿Por qué no podemos esperar que las computadoras aprendan de la experiencia, en vez de repetir ciegamente instrucciones codificadas por un programador humano?

Estas son algunas de las interrogantes que se hacen los ingenieros de sistemas, programadores y diseñadores de computadoras, quienes tratan de crear sistemas cada vez más inteligentes.  Sin embargo, se topan con la limitación del modelo secuencial establecido por John Von Neumann, quien además formuló los primeros conceptos de la Vida Artificial.  A pesar de que las computadoras actuales son extremadamente capaces de llevar a cabo procesos matemáticos complejos y manejar grandes cantidades de datos, existen problemas que no tienen una solución secuencial.  Por esto, la nueva frontera de la computación se está extendiendo, hasta llegar a la tecnología de la Vida Artificial.

La Vida Artificial consiste en la aplicación de métodos y soluciones inspiradas en procesos biológicos encontrados en la naturaleza.  Estas técnicas se han hecho populares en los últimos años; algunas han sido probadas y ya se encuentran trabajando actualmente en el mercado, mientras que otras aún se están desarrollando en los laboratorios de investigación.  Existe un futuro promisorio para estas técnicas en el desarrollo de software nuevo, ya que permitirán atacar problemas de mayor tamaño y complejidad, y lograr soluciones viables para problemas difíciles de computación, como el reconocimiento de imágenes y el procesamiento de entornos virtuales.

Las tecnologías de la Vida Artificial están basadas en los resultados de muchos y diversos campos de investigación y están aplicando ya teorías no comprobadas acerca de algunos fenómenos naturales.  El objetivo común de todos estos métodos es el de resolver problemas que no tienen una solución analítica comprobable, como los resultantes de explosiones combinatorias.  En muchos de los casos, estos problemas tienen solución, pero es difícil de encontrar utilizando computadores secuenciales.

Tecnologías existentes

El reconocimiento por computador de escritura, lenguaje hablado u objetos necesitan del procesamiento en tiempo real de muchas entradas relacionadas entre sí.  Solamente el proceso de rastrear objetos de un cuadro de video al otro necesita de miles de cálculos realizados simultáneamente sobre miles de elementos de imagen (pixels).  Los problemas de control automático también necesitan del manejo de muchas reglas simultáneas.  Los controladores robóticos presentan un problema especial, ya que deben resolver cientos de funciones trascendentales sólo para levantar un dedo de manera precisa.

La predicción y otros métodos estadísticos también requieren del manejo de muchas variables simultáneamente.  Por ejemplo, usar una búsqueda exhaustiva para encontrar el camino óptimo para un vendedor rutero visitando una docena de ciudades lleva más tiempo de computador de lo que vale el ahorro en combustible.  Eso nos lleva a la siguiente pregunta: ¿cómo es posible que seres naturalmente inteligentes resuelvan este problema sin realizar un esfuerzo descomunal?   Hasta una abeja puede generar rutas complejas para visitar flores en el menor tiempo posible, comparables a las generadas por un supercomputador.  Copiando la forma en que la naturaleza resuelve estos problemas se puede lograr la creación de software inteligente, más pequeño, rápido y con menos errores.

El éxito más visible de estas técnicas consiste en la aplicación de redes de neuronas, también conocida como neurocomputación, neoconexionismo y procesamiento paralelo distribuido.  Otras técnicas de la Vida Artificial incluyen algoritmos genéticos, autómata celulares, dinámica caótica, y lógica multivaluada (fuzzy logic).

Muchos de estos métodos copian soluciones encontradas en la naturaleza por medio de una simulación en software del proceso e insertando en la simulación los parámetros de un problema real.  Las redes de neuronas se basan en principios obtenidos de la investigación de la forma en que trabaja el cerebro para modelar procesos de reconocimiento, aprendizaje y planeación.  La lógica multivaluada (fuzzy logic) se asemeja bastante a la forma en que los humanos razonamos, con reglas aproximadas y decisiones de forma si/no/tal vez.  Los algoritmos genéticos toman directamente de la investigación genética, modelando los principios de Darwin sobre la selección natural y la supervivencia del más fuerte.

6 de abril de 2013

El regreso de los discos RAM (RAM disks)

Un artículo reciente menciona que es posible mejorar el rendimiento de los Chromebooks con un simple cambio que no toma más de 30 segundos (link).

Al aplicar este cambio, se activa un feature llamado zram dentro de ChromeOS (ChromeOS y Android son Linux, no sé por qué Google trata de ocultar esto), que activa una partición de swap creada en un block device en memoria, que además comprime los bloques para que ofrezca mayor capacidad.

Me pareció un concepto interesante, principalmente por el tema de la compresión de los datos, y veo que puede ser aplicado dentro de Linux y de Android también, resolviendo el problema de las computadoras o handsets que tienen poca memoria RAM.

Esta es una solución que muestra dos conceptos unidos: el RAM disk (que en este artículo mencionan que es para cuando uno tiene más de 6GB de RAM) y la compresión de datos, que resulta entonces en un buen feature para equipos con limitaciones de memoria.

En el caso de Android, el manejador de memoria no puede activar pagineo por demanda, al no contar con almacenamiento secundario de forma permanente.  Esto es principalmente porque las memorias externas pueden ser extraídas en cualquier momento, y además sufren de desgaste por constantes ciclos de lectura y escritura.  Una solución de pagineo hacia la RAM con compresión viene a mejorar el rendimiento de un sistema operativo que su diseño fue orientado hacia el uso de memoria virtual.

Para el caso de iOS, el documento de Memory Usage Performance Guidelines de Apple menciona que no utiliza ningún tipo de swap o pagineo.

Música: The Police Live!
Libro: Ready Player One