10/28/2013

Plataforma de Datos Públicos Enlazados - Interoperabilidad y Gobierno Electronico

Hace algunos días, tuve la oportunidad de presentar en el Segundo Seminario de Interoperabilidad "Venezuela SIO 2013" realizado en la Universidad de Carabobo las premisas, conceptos y estrategias que pueden ser utilizadas para conformar una Plataforma de Datos Públicos Enlazados que permita que el Estado y cualquier país pueda establecer las bases para compartir datos autoritativos de forma estándar. La esencia de dicha propuesta está en la aplicación de los estilos y disciplinas de arquitectura SOA, ESB y los principios de web semántica y linked data.

En esta presentación, describo de forma pragmática la necesidad y urgencia que tiene el Estado de conformar una plataforma de datos públicos enlazados; que esté integrada por la porción del conocimiento autoritativo de las instituciones que la integran. Al instanciar esta plataforma, el ciudadano no tendría que entregar ningún documento que haya sido generado o emitido por el propio Estado,  dado que este documento o dato puede ser consultado por cualquier institución que lo requiera, gracias a la publicación de datos realizada por la autoridad o institución dueña del dato o documento.

Agradezco al Centro Nacional de Tecnologías de Información por la invitación y la oportunidad de impulsar estos conceptos tan necesarios en nuestros países.



Algunas Reflexiones
  1. La interoperabilidad es la base que sostiene el concepto de gobierno electrónico.
  2. La integración no significa que el estado pueda medir su efectividad y eficiencia.
  3. No es un sueño, es una realidad técnicamente posible.
Saludos;

8/15/2013

Porque los proyectos BPM (Business process management) fallan?

Describir  las causas que originan la falla de proyecto BPM (Business process management) seria una actividad muy extensa, sin embargo he recopilado un conjunto de errores, malas practicas, consideraciones que inciden directamente en el éxito de un proyecto BPM. Desde hace algunos años he participando en proyectos BPM de diversos tamaños, estados, fases y condiciones, he podido constatar y registrar un conjunto de inhibidores que están afectando el éxito BPM en diversas organizaciones a nivel nacional e internacional.

BPM en esencia es una disciplina que permite que una organización pueda racionalizar y mejorar de forma continua el uso de sus recursos (gente, procesos, tecnología)  mediante la medición en tiempo real de indicadores y métricas relacionadas con el cumplimientos de sus objetivos estratégicos  tácticos y operacionales. BPM transforma y rediseña organización funcionales a orientadas en procesos, organizaciones inteligentes!!!


Describo a continuación algunos factores que inciden que proyectos BPM fallen. Espero que sea de utilidad para gerentes, arquitectos y directores que tengan entre sus planes la adopción BPM.

Factores Generales:

  1. Mucho énfasis en tecnológica y poca en metodología.
  2. Ausencia de políticas que garanticen la disminución de riesgos de ejecución al inicio.
  3. Ausencia de una arquitectura de software clara y sencilla.
  4. Arquitectura y diseño inconsistente.
  5. Falta de comprensión de la disciplina BPM, su enfoque, su esencia.
  6. Ausencia de las dimensiones mínimas de análisis que deben estar presentes para asegurar una descripción y modelado adecuado de los procesos.
  7. Ausencia de un marco metodológico para el análisis y descripción de procesos.
  8. Soluciones BPM que son utilizadas como si fueran un IDE de desarrollo.
  9. Falta de comprensión entre BPM y las disciplinas SOA, ESB, BRE, entre otras.
  10. Falta en la concepción de orquestación de servicios vs orquestación de procesos.
  11. Ausencia de una arquitectura orientada en servicio en proyectos BPM.
  12. Ausencia de un enfoque multidisciplinario de análisis y descripción de procesos.
  13. Falta del criterio "zapatero a su zapato".
  14. Poca experiencia en la definición y uso de patrones BPMN.
  15. Uso inadecuado de la sintaxis y semántica de la notación gráfica BPMN 2.0. (Técnicas de modelado de procesos pobres).
  16. Falta del criterio "Primero modelar luego construir".
  17. Procesos muy grandes e ingobernables (divide y vencerás).
  18. Procesos que no se modelan sobre una perspectiva de automatización.
  19. Mal dimensionamiento de los componentes de una solución BPM.
  20. Una aplicación no es el proceso.
  21. Inexperiencia de proveedores.
Saludos;

2/05/2013

Preguntas que debemos hacernos en un proyecto de Integracion SOA, ESB, BPM

He leído muchas veces la importancia de hacer buenas preguntas; en ese sentido, cuando abordamos proyectos de integración se presentan muchos problemas por no tomar en cuenta variables que son importantes para una buena implementación. Aquí algunas preguntas que como arquitectos debemos hacernos cuando necesitemos enfrentarnos a servicios de integración.
  1. Que protocolo de transporte disponibiliza el servicio?  (Por ejemplo: HTTP, HTTPS, JMS, SMTP, TCP/IP)
  2. Que protocolo de comunicación utiliza el servicio?. (Por ejemplo: HTML, XHTML, SOAP, XML, JSON)
  3. Qué tipo de patrón de mensajería utiliza el servicio?  (Por ejemplo: Síncrono o Asíncrono)
  4. El acceso al servicio requiere autentificación y autorización?
  5. Qué tipo de seguridad utiliza el servicio? (Por ejemplo: ws-security, token, request).
  6. El servicio tiene asociada alguna política? (Por ejemplo: Solo puede ser invocado desde una direccion ip especifica, algunos datos deben estar encriptados, el response time del servicio no puede exceder de 200 ms, solo puede ser invocado una sola vez al día).
  7. Como se gestionaran los errores que pueden presentarse en el servicio? (Por ejemplo: soap faults, xml, texto, entre otros.)
  8. Qué tipo de notificación deberá ser aplicada al generarse una excepción de disponibilidad del servicios (timeout, no disponible, entre otros). Por ejemplo: sms, correo electrónico.
  9. Quien será el responsable o gestor de servicio? (Por ejemplo: nombre, correo electrónico, teléfono, entre otros)
  10. El servicio requiere algún tipo de transformación (mapeo) o utilización de alguna expresión de salida?
  11. Cuáles son los datos que pueden ser provistos por el servicio?
  12. El servicio requiere algún componente transaccional?
  13. Se debe aplicar alguna estrategia de cache en el servicio?
  14. Como se gestionará la auditoria y logging del comportamiento del servicio en tiempo de ejecución?
  15. Cual será el Service Level agreement del servicio? (Por ejemplo: timeresponse minimo)
  16. Cual será la disponibilidad del Servicio?
  17. Cuentan con un formato para especificar los servicios proveedores?
  18. Cuál es el grado de complejidad del servicios?
  19. Cuál es el tiempo estimado para su desarrollo?
  20. Que recursos son necesarios para desarrollar los servicios?
Saludos;

Proyecto Challenge DevFactory


Desde hace un año y no con la frecuencia que quisiera, he estado  involucrando a niños, estudiantes y profesionales para que aprendan técnicas y métodos para el desarrollo de software basado en el  pensamiento de diseño. El desafió, ninguna de las personas tiene ningún tipo de conocimiento en ingeniería de software. Aquí algunas imágenes que transmiten por si solas.

Los invito a revisar las técnicas del pensamiento de diseño e incorporarlas en sus áreas de competencia!!

Pueden los jovenes apreder a desarrollar software sin una formacion formal?, que piensan ustedes!!!!;

Recomendaciones para abordar un proyecto BPM con Bonita BPM (Entrenamiento Bonita Open Solution BPM y API)

Hace algunas semanas desarrolle un programa de formación SOA/BPM que incluyo un entrenamiento intensivo en el modelado y automatización de procesos mediante la solución Bonita Open Solution. Durante esta transferencia de conocimiento y experiencias registre un conjunto de recomendaciones que fue enriquecido con los participantes y sus distintas contribuciones; el cual quisimos compartir con la comunidad con el objeto de incentivar no las herramientas tecnológicas sino las consideraciones metodológicas y políticas que deben establecerse.
Recomendaciones para abordar proyectos BPM con  Bonita Open Solution
  1. La actividad de análisis y modelado de procesos debe realizarse de forma multidisciplinaria. Los procesos no se modelan en un solo día y con una solo perspectiva.
  2. Los procesos pueden ser modelados por coreografía u orquestación, sin embargo para iniciar les recomiendo adoptar la orquestación.
  3. Las tecnologías BPM no son herramienta de desarrollo, por ende se debe evitar en la medida de lo posible escribir código bajo sus diferentes características.
  4. El proceso debe ser tratado como un prototipo, por ende debe pasar por diversas revisiones para ir dividiendo las responsabilidades por ejemplo: identificar  procesos utilitarios e invocarlos mediante actividades de llamada, o la utilización de timers y contadores para la gestión de acuerdos de servicios.
  5. La gestión de excepciones debe siempre incluirse en los procesos, para asegurar que las instancias no se interrumpan durante excepciones en la disponibilidad de un conector o servicio.
  6. Se recomienda que la mayoría de la lógica de integración, de datos o de reglas resida en servicios web que pueden ser invocados desde conectores o scripts groovy.
  7. Los procesos pueden utilizar formularios, sin embargo existe la posibilidad de utilizar formar externas que invoquen procesos  mediante el api de servicios REST de bonita. Con esta aproximación existe mayor control de la interfaces. Otra opción es generar los formularios con bonita y modificarlos según las necesidades.
  8. Utilice procesos utilitarios para notificaciones, cambio de estatus de documentos, escalamiento, entre otros.
  9. Cuando modele utilice como máximo tres procesos por diagrama.
  10. Utilice patrones para la gestión de errores en la invocación de servicios web, con el objeto de evitar que el ciclo de vida del proceso sea interrumpido por la falta de disponibilidad de un servicio.
Saludos;

From Mijao Blog
From Mijao Blog
From Mijao Blog
From Mijao Blog

4 lenguajes de programación (PHP, PYTHON, JAVA, GROOVY) y un Web Services – Programa BPM/SOA


Hace algunas semanas realice un programa de formación BPM/SOA, donde se abordaron diversas técnicas y métodos para el desarrollo de servicios de datos y decisión (reglas). El equipo técnico al cual impartí el entrenamiento contaba con una experiencia relevante en diversos lenguajes; lo cual enriqueció la actividad. Durante el entrenamiento, el equipo me plateo crear varios consumidores de servicios web bajo SOAP en diferentes lenguajes, lo cual me pareció una excelente práctica para ver los diferentes modelos de implementación para consumir servicios web.

En este post, podremos observar varias formas de consumir servicios web con diversos lenguajes:

PHP - NUSOAP
@include_once("nusoap/nusoap.php");
$oSoapClient = new nusoap_client('http://10.100.14.232:9763/services/tramiteCRUD?wsdl');
$respuesta = $oSoapClient->call("select_with_key_tramite_operation",array("tramite_id" => 2 ));
print_r($respuesta);
?>

PYTHON
from suds.client import Client
url = 'http://127.0.0.1:9764/services/tramiteWSS?wsdl'
client = Client(url)
print client.service.obtenerIdTramitesParIDs('1')

JAVA
package ve.gob.tramites.services.mppi.client;
import org.apache.axis2.AxisFault;
import ve.gob.tramites.services.mppi.TramiteCRUDStub;
import ve.gob.tramites.services.mppi.TramiteCRUDStub.Insert_tramite_operation;

public class Consumidor{
 public static void main(String[] args) {
  try {
   TramiteCRUDStub stub =new TramiteCRUDStub();
   Insert_tramite_operation objTramiteInsert=new Insert_tramite_operation();
   objTramiteInsert.setTramite_id(20);
   objTramiteInsert.setEstatus("ESTATUS PRUEBA");
   objTramiteInsert.setOrigen("ORIGEN PRUEBA");
  stub.insert_tramite_operation(objTramiteInsert);
  } catch (AxisFault e) {
   System.out.println("Ha ocurrido una Axis exception");
  } catch (Exception e) {
   System.out.println("Ha ocurrido una excepcion.");
  }
 }
}

PHP5 - SoapClient
$parametros['id']=2;
$client = new SoapClient("http://10.100.16.65:9763/services/tramiteidWS?wsdl",$parametros);
$respuesta = $client->selectId($parametros);
print_r($respuesta);
?>
 
Groovy
import wslite.soap.*
def client = new SOAPClient('http://localhost:1021/orden')
def response = client.send(SOAPAction: '') {
    body 
    { 
        'bam:createOrden'('xmlns:bam':'http://bam.service/') 
        { 
             'orden'('xmlns:bam':'http://bam.service/') 
             {  
                      campo1('I');
                      campo2('S');
                      campo3('A'); 
                      campo4('B');
             }             
        } 
    }
}
println response.envelope.Body.createOrdenResponse.return;

Felicitaciones al equipo por su alto nivel técnico, su proactividad, trabajo en equipo y su disposición a compartir con la comunidad su conocimiento. Este post es de ustedes!!!!
From Mijao Blog