miércoles, 5 de marzo de 2008

Con muchas cosas que compartir..

Hi folks.... pues regresando a dar un poquito de lata.

Ya con los primeros 2 meses del año que se fueron como agua...he de comentarles que este año trae consigo retos muy importantes tanto en lo profesional como en lo personal y hay que enfrentarlos como dice una cancion... con alma vida y corazon

Pues a lo que me truje chencha dijeran...

Hay muchos temas que me interesa tocar: SOA, Arquitectura Empresarial, Continuar con los ejemplos de Integracion de aplicaciones, hablar de algunos modelos y marcos de referencia, mas de ESBs Open Source, en fin...

Estos 2 dias estaremos asistiendo el buen Gus y su servidor a platicas de Cutter Enterprise Architectre Summit, de entrada las platicas del dia de hoy me parecieron bastante interesantes en especial la denominada "Enterprise Architecture By Example" el ponenete Mike Rosen.

Ya hablare mas a detalle de AE, pero de entrada creo que hoy dia estamos entrando a un punto interesante en la parte de Arquitectura, mas alla de la Arquitectura de Software (que como parte de la AE no deja de ser importante), existen diferentes aspectos que que necesitamos tomar en cuentas al definir una arquitectura empresarial, Mike lo denomina Enterprise Architecture Stack, y se compone principalmente de 4 arquitecturas:
  • Arquitectura de Negocio: Cadenas de valor , Modelos del negocio, Portafolio de servicios, Procesos de negocio
  • Arquitectura de Informacion: Informacion que soporta la toma de decisiones, Modelos de datos del negocio, informacion de datos operacionales y transaccionales
  • Arquitectura de Aplicaciones: Informacion de las responsabilidades de los componentes que forman parte de una aplicacion
  • Arquitectura Tecnologica: Harware, software, Infraestructura de Red, Data Centers
Lo anterior sin dejar fuera a la Organizacion misma y a la gente que la compone.

Mike menciona tambien que existen un modelo para evaluar la Madures de una Arquitectura Empresarial, tal como lo manejan el CMMI o el SOA Maturity Model.. ya platicare de esto con un poco mas de detalle.

Bueno pues los dejo con una presentacion que me parecio interesante se llama: Pragmatic SOA by Arjen Poutsma, espero la visiten

Ciao

Tuzo

viernes, 28 de diciembre de 2007

La ultima entrada del 2007

Pues mientras casi todo mundo esta de vacaciones y yo sintiendome como el cuadrado de Flatland, que intuye que hay mas alla de lo que normalmente se llama vida, expongo las ideas para cerrar el año (odio medir la vida en cierres de año, por lo que esta es señal de que estoy envejeciendo y volviendome algo conservador)

Llevo años hablando de Arquitectura Empresarial (Zachman, FEA, TOGAF) y tratando de explicar en que consiste

Lo que me doy cuenta es como he evolucionado en el enfoque y me permito hacer una simulacion de una bitacora de como fue la historia

+ La primera vez, fue cuando me pidieron hiciera un modelo de arquitectura para todas las arquitecturas. Fue hace ya 4 años y me fui topando con el concepto de arquitectura empresarial. Despues de un rato de investigar y medio juntar bibliografia, me di cuenta de la famosa matriz de Zachman. Como cuate mas orientado a los bytes, me clave mucho en la parte tecnologica y por ahi me surgio la idea de hablar de arquitectura de aplicaciones, datos e infraestructura y obtener un modelo para soportar integracion entre aplicaciones y unificarlas

+ La segunda vez, un buen amigo, Juan Lozada, me ayudo a entender como en la practica se puede concebir el marco de Zachman. Y de el oi los terminos como Governance y referencia a modelos de calidad o mejores practicas como CMMI, ITIL, COBIT, PMBOK. De ahi salieron documentos que tenian como objetivo el normar el actuar de toda una organizacion y todo parecia indicar que ya habia algo hecho

+ Pero el tratar de hacer la vision realidad siempre fue un reto. Llegas con tu marco de referencia (el cual por cierto no era perfecto) y te topas que ya existen aplicaciones ejecutandose y que fueron hechas sin tomar en cuenta el concepto de arquitectura, sin embargo estan operando y dando servicio y generando impacto en la organizacion. No tienen la mejor arquitectura sin embargo son valores de lao organizacion. ¿Entonces que hacer? Ponerse en un papel dogmatico tipo Iglesia en la Edad Media o ser tolerante. La respuesta era obvia ser tolerante y tratar de organizar poco a poco para que las aplicaciones empiecen a tomar buenas practicas

+ Sin embargo, los eventos externos, eventos politicos, riñas de poder, no permiten que la vision sea comprendida, atascado un rato en resolver problemas operativos, pobre marco de referencia de arquitectura empresarial empolvandose. Sin embargo si se dispone de tecnlogia, ESB, Gestor de contenido, Motor de reglas de negocio, muchos sabores de BPM, marco de referencia, muchas maneras de hacer sevicios Web, Portal, registro UDDI

+ Cambio de aires, nueva administracion en la organizacion, se topan con que existe mucha tecnologia, muchas aplicaciones, pero visiones dispares y tambien costos altos en TI que deben ser controlados. Lo que si reconocen es que no hay estandares. Sin embargo si se habian definido. ¿Que habia pasado? El modelo de la organizacion orienta a que se creen silos de informacion, poco unificados y muy propensos a ser manipulados por cuestiones politicas.

+ El problema no es tanto la cuestion tecnologica es la interoperabilidad entre las personas. La vision del marco de referencia de Zachman necesita tomar en cuenta a la organizacion. Ups! Creo que el primer renglon del marco de Zachman si sirve para algo!

+ Chamba para unificar las visiones, se confunden proyectos para beneficio como cotos de poder para poder impresionar a los altos mandos de la TI. Se manipulan conceptos tecnologicos para hacer creer que existen muchos beneficios en hacerlo pero sin tomar en cuenta el como, olvidando que la organizacion necesita un alto impacto. Sin embargo, no son malas ideas, algo tiene que unificar todo, algo como un marco de referencia de arquitectura empresarial.

+ Eureka, platicando con un amigo, me sugiere que si quiero hablar de una arquitectura empresarial, piense en un modelo de operacion de servicios (operation management). Me doy cuenta que no era lo mismo que investigacion de operaciones. Me compro tres y muy buenos libros en el tema y me doy cuenta que hablan de procesos, servicios, cadenas de valor, mucho de ellos aplicados para ERP, CRM, SCM. ¡Sin embargo no quiero que la organizacion donde estoy trate de solucionar todo con un ERP! He dicho muchas cosas sobre lo que pienso sobre un ERP pero principalmente no es la panacea y menos para la organizacion donde trabajo

+ Pero el modelo de administracion de operaciones es bueno. Pienso en que cadenas de valor tenemos:

+ La que da servicios a nuestros clientes (ciudadanos). Su objetivo es fomentar el autoservicio y darles la mayor informacion que necesiten sin enredarlos en procesos burocraticos. Un call center, un portal y otras estrategias bien diseñadas (como kiosocos) pueden dar impacto. Pero es muy importante que este cadena de valor se flexible, la menos complicada y la que debe ser capaz de entregar la informacion a los ciudadanos sin importar su condicion social, educacion

+ La que soporta la operacion de la organizacion. La organizacion esta basada en servicios, no manufactura, pero es muy criticada por los servicios que da y su burocracia. Entonces es necesario que la cadena de valor de operacion sea capaz de permitir que los que otorgan el servicio conozcan de su trabajo (gestion del conocimiento), que tengan un proceso base que seguir y que se pueda medir (BPM y BAM) y con referencia a modelos de calidad (TQM, Six Sigma, ISO), permitir que manipulen sus procesos y reglas de negocio, fomentar flujos de trabajo centrados en documentos (gestion de contenido). Ademas otorgarles herramientas de TI para innovar (colaboracion, mashups, Web 2.0), hacer un portal de operacion de la organizacion

+ La que soporta todos los procesos de la organizacion. Tomar las aplicaciones ya existentes y convertirlas a servicios, utilizando SOA, usar las herramientas como ESB, Data Services y gobernarlos a traves de un servicio de registros. Esto es el "backend" de la organizacion.

+ La que soporta a los administradores de la organizacion, alta direccion, los que definen las politicas, los modelos de operacion, manejan presupuesto, toman decisiones, tienen que cumplir con normatividad gubernamental. Dar herramientas especializadas que tomen informacion de todas las demas cadenas de valores, analisis de informacion y procesos, simulacion. Integrarlos para que usando la TI definan y mejoren los procesos de la organizacion

+ La que soporta la informacion de la organizacion, la cadena de valor de TI. La TI para innovar. Definir catalogos de servicios con ITIL, mesa de ayuda para TI, aplicar los modelos de desarrollo y mantnimiento de software (CMMI RUP), oficina de administracion de proyectos (PMO, PMBOK), servicios de infraestructura de software y hardware, orientar a calidad en servicios de TI, hacer que cada integrante de TI sea un agente de cambio e innovacion

+Entonces la arquitectura empresarial es entender a las cadenas de valor de la organizacion, soportar su ejecucion con Tecnologia de Informacion y utilizar como estrategia de implantacion los modelos de SOA+BPM+ Web 2.0

Suena muy bien la idea. Es un buen reto, me imagino que si se logra en la organizacion puede hacer que la TI le de el valor. Hace justicia a nuestra chamba de ingenieros y lo mas importante, hace que nuestros clientes tengan servicios de primera

El punto es convencer a mucha gente, a la propia de TI, a los demas no TI de la organizacion. a los clientes, proveedores y reguladores

Interoperabilidad entre personas, lo mas dificil, buen reto para el 2008, pero vale la pena intentarlo

jueves, 22 de noviembre de 2007

Libro Open Source ESBs in Action

Por fin!

Con alegria me entere que ya salio un libro que trata de ESBs Open Source (Manning), el capitulo 1 esta disponible para lectura en linea. Mule ESB, Service Mix, Open ESB, Jboss ESB, Synapse son algunos de los que se mencionan en el libro.

Explorare su contenido y ya dare mis comentarios.

Existe otro libro de ESB pero este habla de Aqualogic Service Bus, el titulo del libro es: The Definitive Guide to SOA: BEA Aqualogic Service Bus.

Saludos!

Tuzo

lunes, 19 de noviembre de 2007

Configuración de Rails y SQL Server

La naturaleza multiplataforma de Ruby On Rails nos demanda adecuarnos a todos los ambientes de ejecución disponibles aún y cuando estos no sigan la filosofía del software libre.

Un ambiente que se va a presentar muy comunmente es Windows y SQL Server.

Entonces he aquí la receta sencilla y probada para soportar SQL Server dentro de Rails.

Primero, habrá que descargarse la gem ruby-dbi desde http://rubyforge.org/projects/ruby-dbi . ruby-dbi es un mecanismo de acceso a datos inspirado en Perl::DBI. En la gem viene incluido el soporte a varias bases de datos y durante el proceso de instalación se selecciona cuales se van a soportar.

La descarga es un archivo .tar el cual se expande en un directorio desde el cual ejecutamos las siguientes instrucciones:


# primero configuramos el ambiente para usar ActiveX Data Objects (depende de win32ole)
c:\>ruby setup.rb config --with=dbi,dbd_ado

# la llamada de siempre
c:\>ruby setup.rb setup

# finalmente la instalación
c:\>ruby setup.rb install


Con esto ya tenemos la capacidad de acceder a SQL Server desde Ruby. Ahora falta configurar SQL Server para que permita conexiones mediante usuario/contraseña. Para esto configuramos el modo de autenticación "mixed" dentro de las propiedades de seguridad del servidor.

A continuación se crean el login de SQL Server y la base de datos asociando el login como dbo de la base recién creada y se crea el proyecto rails como de costumbre.


c:\>rails proyecto


Después se actualizan los datos del archivo config/database.yml


development:
  adapter: sqlserver
  database: database_development
  username: user
  password: password
  host: .\SQLEXPRESS


Esta configuración funciona con las versiones 2000 y 2005 de SQL Server. La diferencia que he encontrado es el manejo de valores nulos en columnas de tipo integer. En SQL Server 2005 sustituye los valores nulos con ceros mientras que en la versión 2000 funciona correctamente.

Finito.

martes, 6 de noviembre de 2007

La importancia de los contratos

Hace unos dias en el trabajo me encomendaron la tarea de trabajar con unos compañeros que deseaban exponer unos servicios de Abastecimiento de medicamentos a sus proveedores....

Ellos ya habian avanzado un poco y me comentaban "Ya tenemos desarrollados unos WebServices", a lo que les pedi que me pasaran su WSDL

Al echarle un vistazo a ese documento me encontre algo como lo siguiente (entre otras cosas):

como operacion de entrada:
s:element name="ObtenerOrdenes"
como parametro:
element minOccurs="0" maxOccurs="1" name="SQL" type="s:string"
como respuesta:
s:any

Ok veamos que tenemos. El nombre OBTENERORDENES de entrada me suena a negocio hasta ahi todo va bien, el problema viene en el parametro que estan pasando se llama SQL, que por el solo nombre me pone a pensar que estan pasando sentencias de SQL para hacer la consulta (lo cual deja abierto al cliente a poner cualquier cosa dentro de la consulta)

Luego veamos la respuesta, si vemos regresa un Any (Que los que han leido el blog, siempre nos oponemos al uso de ANY como resultado o entrada) que cuando les pregunte me dijeron coloquialmente que ahi regresaban el "ResulSet" ajale!!! osea que si regresan la consulta tal cual de su base de datos.... y para finalizar en el servicio no hay ningun mensaje que indique los errores que pueden ocurrir.

Bien ya no pongo los demas metodos, porque solo estos me permiten ejemplificar la importancia de manejar un buen contrato.

Al diseñar un contrato de negocio de un servicio (independientemente si lo vas a hacer con: Web Services, RMI, COM, o palomas mensajeras) es muy importante definir los mensajes que estatas intercambiando entre el servicio, es decir, basicamente es constuir un layout (que tenga nombres, tipos de datos, tamaño y si es obligatorio el campo) de las ENTRADAS, SALIDAS y MENSAJES DE ERROR.

Asi de sencillo, en verdad utilizar esta practica nos ayudado mucho cuando tratamos de integrar aplicaciones.

Saludos

Tuzo

miércoles, 12 de septiembre de 2007

Entre change management y pantallas verdes

Quizás este post debería estar más del lado de Tuzoftware .... Pero se vale... ;)

¿cuantas veces les ha tocado hacer un cambio en una aplicación? ¿Cuantas veces pensamos en las aplicaciones que se verán afectadas cuando cambiamos algo? ¿Quienes de nosotros tenemos un control de nuestras aplicaciones así como las dependencias que tenemos con otros sistemas?
¿Cuantas veces no les ha pasado que alguna área cambia versión de aplicación y las nuestras dejan de funcionar correctamente? nunca !!.. que bien!!! ... pero a los que nos ha pasado eso y fuera de los dolores de cabeza, a los jefes esperando, el tiempo encima.... todo, todo es desesperante.......... ahora combinen esa situación con una solución de integración mmm digamos ..... Mainframe si Mainframe, pantallas verdes, screen scraping, emuladores 3270... ¿Interesante escenario?

La finalidad de este post es tratar de mostrar una de las debilidades pienso yo, que existe en la integración de aplicaciones basada en captura de pantallas o screen scraping. Cabe resaltar que este tipo de integración tiene una ventaja importante: no es intrusivo en las aplicaciones a las que se trata de integrar.

Aquí en la empresa, tenemos varias interfaces basadas en este estilo de integración (échale un vistazo a esta liga ); como veras nosotros utilizamos Iway Telnet 3270, que es una serie de APIs que permiten interactuar con las pantallas verdes del mainframe... bien pues el punto flaco de estas interfaces es que están altamente acopladas por decirlo de alguna manera a las coordenadas, quien ha trabajado alguna vez con COBOL sabe de que le estoy hablando...

Bajo este esquema hasta un guión"-" te puede afectar (y mas si lo agregan de un día a otro :S, ahh y en la noche), sí, literalmente un guión te puede afectar.... eso fue lo que nos paso recientemente... se agrego un carácter a una pantalla de una aplicación dentro del mainframe y esto ocasiono que se movieran las posiciones de los campos, es decir, si para mi el campo 76 era NSS, ahora se había recorrido hasta la 78.... el punto delicado aquí es que la producción estaba parada mientras se detectaba el error, una vez que se detecto se dio marcha atrás a la versión de la aplicación mainframe....... mientras todo esto ocurría la operación se detuvo por al rededor de 3 horas...

Se aplico el cambio tal y como se debió de hacer desde un principio, es decir nos colocaron la versión de la aplicación mainframe en DESARROLLO hicimos los ajustes en nuestra interfase y liberamos a la par las nuevas versiones...

Todo el cuento anterior se pudo evitar teniendo un buen CONTROL DE CAMBIOS... se escucha tan sencillo y a veces trillado cuando nos hablan de esto en CMM, ITIL, RUP, en lo que ustedes quieran.... pero créanme que es muy importante...

Para muestra basta un botón... ¿recuerdas cuantos millones perdió TELCEL hace unos meses debido a un problema en su sistema?

Por una integración mejor, hasta la vista!!!

Tuzo

lunes, 3 de septiembre de 2007

Bitácoras, Trazas, Logs, Logging

Una consabida forma de ver que sucede con tus programas es "pintar" los valores de tus variables. Esta rústica forma de depurar también tiene otra acepción: loggear :S

¿quién dijo que poner System.out.println (javeros) o Console.WriteLine (.net) por cada línea es manejar una bitácora? No lo sé, pero en los ambientes java (que es lo que tengo más cercano) tenemos mega-archivos log de cientos de megabytes generados con poderosos System.out.println statements. Logging is cool!

Pero, eso no es logging. En casi cada aplicación "grande" o "empresarial" (lo que sea que significa esto) se incluye algún mecanismo de bitácoras. Agregar sentencias de rastreo es un mecanismo de "bajo nivel" para depurar código. Puede ser que sea la única opción por no existir un depurador para la plataforma o por que ya se trata de un ambiente multitarea/multihilos.

En el caso de una aplicación ejecutándose en un ambiente de producción, tampoco se puede hacer uso de herramientas de desarrollo o depuración. Casos así requieren que se le otorgue a los administradores u operadores herramientas que les permitan monitorear el comportamiento de los sistemas.

Para hablar de logging se requiere cumplir una serie de requisitos. Uno de ellos son los "contextos", entidades que contienen la información precisa de la ejecución de la aplicación. También se requiere distinguir diferentes niveles de severidad, desde el error fatal hasta mensajes de depuración; estas características deben poder configurarse fuera del código de la aplicación, es decir, en los programas incluimos todas las llamadas de rastreo que consideremos pero dependiendo de la configuración se van ir grabando las seleccionadas.

También tiene sus desventajas. El registro de entradas en archivos o bases de datos consume tiempo de procesador, llamadas a dispositivos que finalmente se ve como un cierto grado de lentitud en la aplicación. Si se registran demasiadas entradas, el log se torna ilegible. Si se filtran demasiados niveles de severidad, puede ser que se pierdan elementos que podrían auxiliar a resolver problemas.

Como ya es costumbre, el mundo java ha pasado por esto antes y gracias a la colaboración de muchas personas se construyó un framework para este tipo de necesidades. Ha sido tal el éxito de esta iniciativa que se desarrollaron componentes similares para otras plataformas y lenguajes (C++/PHP/Ruby) e incluso se incluye en algunos productos comerciales, BEA WebLogic Server por ejemplo (aunque ninguno de los programadores que conozco lo usan, siguen con sus pinchis println's) y obvio, también se construyo para .NET.

En este caso, log4net respeta todos los principios de su ancestro log4j y tenemos archivos de configuración, contextos, jerarquía de loggers e implementaciones de "appenders" que nos permiten tener diferentes destinos para nuestros logs. Ahora si, "logs".

El primer ejercicio de muestra del uso de log4net lo pueden encontrar en mi repositorio de ideas Google Code. Mediante subversion pueden obtener una copia de trabajo y trastear un rato con él.

Finito.