miércoles, 7 de diciembre de 2016

Webinar sobre la notación BPMN 2.0 con Camunda Modeler

BPMN 2.0

Es el estándar para la representación de procesos de BPM. La implementación de Camunda BPM es muy completa y nos presenta un editor o "modeler" muy poderoso y simple de usar.



En este Webinar haremos una introducción a la notación BPMN 2.0, sus elementos más relevantes y su uso en un proceso de BPM, junto a algunas buenas prácticas de modelado de procesos.

El Webinar se realizará el día Viernes 16 de Diciembre a partir de las 15:00 horas, en horario de Santiago de Chile.

Haremos uso de la plataforma de transmisión en línea por Youtube, por lo que sólo debe acceder a la URL suministrada para acceder al evento en la fecha y hora acordada.

Url del evento: https://www.youtube.com/watch?v=MasRtcI7uA8



 
Para mayor información sobre los primeros pasos con la plataforma de Camunda BPM los invito a visitar las publicaciones sobre los Primeros pasos con Camunda BPM en este Blog.


Hasta pronto

sábado, 3 de diciembre de 2016

Integración de Liferay, BOS y Openxava en un Proceso BPMN de Compras

Hoy hagamos la corta, como dicen en mi bello Santiago de Chile.
Les dejo un video demostrativo de la integración de las siguientes herramientas:

Bonita Open Solution 5.5 (BOS)
Liferay CE 5.5
OpenXava 4.3
Alfresco CE 3.3

Es una aplicación de proceso de compras públicas, donde podemos observar la lista de tareas, formularios de aplicación avanzados, integración con Alfresco, carga y visualización de documentos, cambio de roles en el proceso, entre muchas otras cosas.




viernes, 2 de diciembre de 2016

Primeros pasos con Camunda BPM – Invocar una Clase Java desde una Tarea de Servicios en un proceso BPMN 2.0


Ya en nuestra publicación anterior aprendimos cómo agregar Formularios de HTML a nuestras Tareas Humanas o con Actor para nuestro proceso de BPMN 2.0.

En esta oportunidad, siendo esta nuestra última publicación de la serie Primeros pasos con Camunda BPM, vamos a aprender a configurar e invocar a clases de Java para que se ejecuten desde nuestras actividades o tareas de servicio

Esto es una funcionalidad muy importante puesto que nos permite desde nuestro proceso de BPM invocar servicios o consumirlos tal cual lo solemos hacer desde nuestras aplicaciones Java normales. Salvo algunas excepciones, casi todo lo que se puede hacer desde Java es posible hacerlo desde nuestras clases para automatización de servicios.

domingo, 27 de noviembre de 2016

Primeros pasos con Camunda BPM – Agregar Formularios HTML al Proceso BPMN


Es común cuando se trabaja con procesos en BPM bajo la notación BPMN el considerar formularios de entrada tanto para el inicio del proceso como para sus Tareas Humanas, sobre todo cuando se desea aprovechar las bondades que ofrece el motor de BPM, en este caso la plataforma BPM de Camunda.

En esta publicación vamos a tratar el tema de cómo agregar formularios de HTML personalizados para nuestras actividades de Inicio de Proceso y Tareas Humanas en el proceso BPMN que desplegamos en nuestra publicación anterior.

Así que síganme los buenos y manos a las sobras…


lunes, 21 de noviembre de 2016

Primeros pasos con Camunda BPM – Desplegar y Probar el Proceso BPMN 2.0

Como decíamos ayer… bueno, no ayer exactamente, pero en nuestra publicación anterior ya vimos cómo elaborar nuestro primer proceso de BPMN 2.0 y guardar los cambios de la configuración respectiva. Vamos ahora a revisar los pasos necesarios para desplegar y probar dicho proceso en la plataforma BPM de Camunda.

Así mismo revisaremos los detalles necesarios para configurar los permisos de usuarios y la funcionalidad que pueden ejecutar sobre el proceso desplegado, todo esto haciendo uso de la plataforma de administración de Camunda. Tampoco podemos olvidar que daremos una mirada a las instancias en ejecución de nuestro proceso mediante la herramienta Cockpit.

Entonces, sin más preámbulos, manos a las sobras…



sábado, 19 de noviembre de 2016

Primeros pasos con Camunda BPM – Modelando un Proceso BPMN 2.0

Tenemos entre manos la tercera publicación de nuestra serie sobre la Plataforma de BPM de Camunda

El día de hoy vamos, por fin, a empezar a modelar o construir nuestro primer proceso sencillo en notación BPMN 2.0. Para ello vamos a usar el modelador o editor que ya hemos instalado en nuestra primera publicación, y vamos a guardarlo en la sección de recursos del proyecto Maven Java que configuramos en la segunda publicación.

Así que, como ya es costumbre, manos a las sobras…

miércoles, 16 de noviembre de 2016

Primeros pasos con Camunda BPM – Configurar Proyecto JAVA


En nuestro artículo anterior dimos inicio a la instalación de la plataforma de Camunda BPM y del modelador o editor.
En esta oportunidad vamos a tratar el tema de cómo configurar nuestro ambiente de desarrollo para poder modelar procesos, crear clases asociadas a estos procesos y desplegar nuestros procesos en la plataforma de BPM.
Usaremos Eclipse como IDE para el desarrollo y Maven como herramienta de construcción del proyecto. 


martes, 15 de noviembre de 2016

Primeros pasos con Camunda BPM...

... e impresiones.
En el competido mercado de las Soluciones de Business Process Management(BPMS) se encuentran diversos fabricantes con productos u opciones de diversa calidad. Por mi foco de carrera o área de trabajo me ha tocado prácticamente trabajar con la gran e inmensa mayoría de todas estas soluciones de software, desde las más sencillas y económicas, las más populares y conocidas, las comerciales, las de código abierto, y hasta las más costosas, “worldclass”, de estas soluciones de BPM. 

miércoles, 9 de noviembre de 2016

Cero o Uno, that is the question

Recuerde las máquinas o computadoras solo entienden Ceros y Unos (0,1) encendido o apagado para ser más exactos. Cuando tengamos computadores quánticos capaces de procesar tres estados o más esta idea tendrá que cambiar. Pero mientras es sólo eso, ceros y unos.

sábado, 5 de noviembre de 2016

Homus Arquitectus

Una breve reseña sobre la evolución en la arquitectura de software.



Al principio fue el Mainframe, ohhh todo poderoso, con un sin número de clientes tontos, denominados así por su casi nula capacidad de computo. Todo residía en el Mainframe. ¿La Persistencia? En el Mainframe. ¿La lógica de negocios? En el Mainframe. ¿Las aplicaciones como tal? Adivine… En el Mainframe. ¿La capa de presentación? Allí mismo pues, en el sagrado Mainframe.


jueves, 27 de octubre de 2016

Uso de la actividad de envío de emails y notificaciones de tareas por email en jBPM 6.x


Continuando con los artículos sobre jBPM 6.x, en esta oportunidad les traigo un tema relacionado con el envió de emails y notificaciones por email.



Estas actividades son muy frecuentes en los procesos de negocios, donde nos podemos encontrar con la necesidad de enviar un email como parte de un proceso, en una tarea específica. En este caso hacemos uso de la tarea de servicio email.

jueves, 20 de octubre de 2016

Configurar jBPM para obtener Grupos y Usuarios desde nuestra Base de Datos

jBPM en su serie 6.x viene configurado para usar su propio esquema de Roles (Grupos) y Usuarios, pero un requerimiento muy frecuente es permitir que el jBPM busque u obtenga los Grupos y Usuarios desde nuestros medios personalizados, usualmente una Base de Datos.

Escribo este artículo debido a que recientemente me encontraba trabajando en un par de proyectos de BPM con jBPM 6.3, y era requisito obtener los Usuarios y Grupos desde una fuente relacional, razón por la cual me toco apoyar al arquitecto de turno en cómo realizar esa tarea.

Ya en un artículo anterior aprendimos a configurar el jBPM para que haga uso de nuestra propia Base de Datos favorita, Postgresql, para la persistencia de sus datos. Hoy vamos a seguir con ese ejemplo como base para aprovechar el ambiente que se definió en esa oportunidad.

Así que sin mas preámbulos manos a las sobras…



domingo, 16 de octubre de 2016

Como configurar jBPM para usar nuestra propia Base de Datos en un sólo paso



Llevo un buen rato trabajando con jBPM en su serie 6.x, y mi opinión sobre este producto en la versión mecionada no ha mejorado para nada.

Es una herramienta plena de funciones y caracteristicas avanzadas, pero tambien está llena de Bugs y es realmente inestable, sobre todo en el ambiente de modelamiento. 

Así mismo, debo decir que tiene una muy aceptable API REST y que el motor de procesos y la consecuente ejecución de los procesos es estable y bastante rápida.

En esta publicación daré inicio a una serie de artículos que hablan sobre ciertas configuraciones comunes e importantes que se hacen con jBPM.

Hoy iniciamos con la configuración de jBPM para que use nuestra base de datos favorita.

Esto tiene sentido porque el producto viene con la base de datos H2 por omisión, la cual es excelente para pruebas y evaluaciones rápidas de la herramienta, pero es completamente inaceptable en un ambiente de desarrollo, QA o producción cualquiera.

Así que manos a las sobras, que digo, manos a las obras!!! jajajaja


viernes, 14 de octubre de 2016

Como le expliqué REST a mi esposa

Esta es una copia de la traducción del maravilloso artículo escrito en diciembre de 2004 por Ryan Tomayko en el que, en forma de una conversación con su esposa, explica qué es REST

Desafortunadamente, hace poco tiempo el propio Ryan Tomayko decidió borrar el artículo porque no se sentía cómodo con una posible interpretación discriminatoria en los roles representados por los dos actores.

No puedo estar de acuerdo con esto. Ese artículo expresa algo natural y nos muestra a un ser muy inteligente, una mujer, que hace preguntas que muestran entendimiento, razonamiento y curiosidad. Darle un giro machista es simplemente otra estupidez de estos openmind forzados, hipócritas  e igualadores de oficio.

Me niego a aceptar que esta obra muera. La dejo aquí en honor a un trabajo bien hecho.



lunes, 10 de octubre de 2016

El Melange todavía corre


Ese era el estribillo de un capítulo de unas de mis series favoritas de la infancia, Meteoro o Speed Racer. En ese capítulo un auto “fantasma” el X-3, aparecía de imprevisto y dejaba a todos asombrados con su rendimiento y prestaciones y volvía a desaparecer.

Traigo ese episodio a colación puesto que recientemente sostuve una amena charla con un querido amigo, en la que el me manifestaba como los Mainframes habían muerto, o mejor dicho, el concepto de la computación distribuida basada en Mainframes había desaparecido.

Para variar, yo no estuve de acuerdo, y le dije que por el contrario, el modelo de computación basado en Mainframes está mas vigente que nunca.

Estos fueron mis argumentos:


domingo, 2 de octubre de 2016

Y... ¿quien necesita arquitectos?


No necesitamos arquitectos.

Claro que NO. Somos un equipo de desarrolladores competentes, todos muy capaces, genios comprobados y mal apreciados, somos la crema y nata de la tecnología, los ases de la codificación, los reyes de los lenguajes y las tecnologías. NO. Nosotros no necesitamos ningún dinosaurio con pretensiones de Anciano de la Matrix que venga a decirnos lo que Nosotros, amos y señores, ya sabemos. Los arquitectos son para equipos de retardado y cuasi idiotas.

Y…. este, mis queridos lectores, es el modo de pensar de muchos equipos de desarrollo en la actualidad.

Como dijo un querido amigo, llenos de concreciones y nada de abstracciones.

Pero, adentrándonos en el tema, primero necesitamos resolver algo, ¿cual es el rol del arquitecto de software en un equipo de desarrollo?

Muchos piensan que el arquitecto es el responsable de definir los componentes estructurales y comunicacionales de un proyecto de software. Y eso es verdad. Pero es baladí por ser una obviedad. En palabras del Dr Lecter “eso es Incidental”.

sábado, 27 de agosto de 2016

Como llevar a cabo proyectos de BPM exitosos

Pululan en el mercado diversas soluciones de Business Process Managment (BPM) , con distinto grado de prestaciones y mecanismos de licenciamiento, con las cuales se pueden construir proyectos de automatización de procesos, según las preferencias y posibilidades de cada organización.
No obstante esa diversidad, es posible, de acuerdo a mi experiencia en el área, extrapolar una serie de principios, normas y prácticas que ayudan a conseguir una implementación menos traumática.
Primero empecemos por definir que es BPM y que es solución de BPM (BPMS).

SegúnWikipediaEl BPM es el entendimiento, visibilidad, modelado y control de los procesos de negocio de una organización. Un proceso de negocio representa una serie discreta de actividades o pasos de tareas que pueden incluir personas, aplicativos, eventos de negocio, tareas y organizaciones”.



Como vemos, no necesariamente  tiene  que ver con la automatización, sino más bien con una estrategia de visión integral de los modelos de proceso y flujos de trabajo de una organización cualquiera.

sábado, 20 de agosto de 2016

Programación Orientada a Objetos con Lenguaje C



Hace un buen rato, en la época que el Lotus 123 dominaba en las hojas de cálculo, que leí un excelente artículo que se denominaba: Programación Orientada a Objetos con Lenguaje C.
Si, no hay error. No falta un ++ allí. Es POO con el maravilloso lenguaje C.

El artículo en cuestión, proponía como utilizar las estructuras de datos y punteros de C para emular el comportamiento de Clases y Objetos. Hacía énfasis en diversas técnicas para aprovechar el encapsulamiento, la herencia y otros principios y conceptos de la POO con el C. Acá un enlace a una publicación que menciona algunas de estas técnicas.

sábado, 23 de julio de 2016

Cómo crear un cliente SOAP en Java sin usar AXIS, CXF o Metro


Hace un rato que no echamos algo de código, así que hoy vamos a ver como construir un cliente SOAP sin usar las populares librerías externas de AXIS, CXF o Metro, entre otras que se podrían usar.

Esto no es sólo académico. En ocasiones queremos proveer comportamientos específicos, o “tunear” la conexión de modo particular, ganar en flexibilidad y control o buscar mejoras en el rendimiento, y por esta razón nos vemos en la necesidad de efectuar la conexión “a mano” de un cliente SOAP.

Asumimos en este artículo que se tienen conocimientos básicos de Java, SOAP, XML, Xpath, Maven, SoapUI y la librería Freemarker.

Pare este ejemplo vamos a usar el webservice para CloblaWeater que se ubica en la siguiente urlhttp://www.webservicex.net/globalweather.asmx?WSDL.

Así que manos a las sobras… digo, a las obras jajajaja

sábado, 9 de julio de 2016

Modas y demodé

Cuando la programación estructurada era la que mandaba en el mundo, y submundos, del desarrollo de software, muchos fuimos los evangelizadores, cuando no creyentes, que proponíamos esta forma de programación y, aún más relevante, sus metodologías asociadas RUP, Cascade, Etc., como la panacea, la crema y nata, de la construcción de soluciones de software.

Pasamos lustros, décadas, en esas lides. Y nos fue bastante bien.




Luego vino la programación orientada a objeto (OOP), con sus alternativas metodológicas asociadas, y lo cambió todo nuevamente. Y, como era de esperarse, no faltábamos los nuevos conversos, los profetas de la OOP y de sus métodos, filosofías y procesos. No a pocos, lo que no sonara a OOP les hacía fruncir el ceño, casi les producía arcadas pues!!

Vale decir que con la OOP también nos ha ido bastante bien como vendedores de “vaporware” (luego explico el término) que somos jajajajaja…. Y así por el estilo.
Programación funcional, Cloud, Quantum… es la lógica evolución, e involución en algunos casos, de los procesos vivos del desarrollo de software.  

martes, 28 de junio de 2016

Introdución a los Principios SOLID

SOLID es un acrónimo para una serie de principios básicos, 5 en total,  de la programación orientada a objetos (POO) y el diseño orientado a objetos (OOD) inventado por Robert C. Martin. Estos principios tienen relación con algunos patrones de diseño.
Muchos creen que el objetivo de la arquitectura de software, los patrones de diseño y los principios SOLID es programar más rápido. Pero no. La verdad es que el objetivo real es facilitar el mantenimiento de los grandes proyectos de software. Como norma el mantenimiento consume muchos recursos de los destinados a los proyectos de software, hasta un promedio de 77%, por lo que los ahorros en esfuerzos en esta área son cruciales para facilitar el sostenimiento de una plataforma de software o de soluciones de software cualquiera.


En forma general estos principios son los que a continuación se detallan…

jueves, 23 de junio de 2016

Extremos Peligrosos

Era popular entre mis amigos de carrera la expresión “Para qué lo vamos a hacer fácil si lo podemos hacer difícil”, y es esta expresión la que resume el primero de los extremos de los que hablaré en esta publicación.
Me refiero al Sobre diseño. Entendiendo como tal la consideración e implementación de estructuras de software con características de funcionalidad, configuración, mantenimiento y usabilidad innecesarias, o totalmente prescindibles, para alcanzar un objetivo o resolver un problema.



Imagine que Ud. se encuentra almorzando plácidamente, cuando de pronto es importunado por el zumbido y presencia de una asquerosa mosca volando cerca de su plato de comida. Visiblemente molesto, se dispone a resolver el problema y dar cacería al desagradable intruso. Para ello contrata a tres consultores, con miras a que le propongan la mejor alternativa para resolver su problemática con la plaga voladora.

El primer consultor le recomienda usar simplemente sus manos y perseguir y aplastar, a modo de aplauso, al irritante enemigo volador.

viernes, 10 de junio de 2016

Novatos “Expertos”

Recientemente me encontraba trabajando con uno de estos programadores que creen que programar es “echar” líneas de código, y que piensan que conocer un lenguaje de programación los hace programadores como tal. Este individuo en cuestión, incluso parloteaba sobre Patrones de Diseño, más específicamente sobre el patrón de diseño Factory.

Cuestionaba este sujeto el uso del patrón Factory a lo largo de un  código. Él no estaba de acuerdo, y decía que uno usa el Factory es “cuando no sabe que clase va a instanciar”, que si sabemos cuál es la clase no debemos usar Factory porque es más lento que la instanciación directa del objeto y además introducimos mucha “indirección”, esa es la palabra que usó,  en el código.

Esto sólo demuestra un par de cosas.
La primera es que tenemos a alguien que cree que conoce algo.
La segunda es que lo conoce MAL.



En primer lugar el patrón Factory no se usa porque sepamos o no que clase debemos instanciar. Se usa porque garantiza que de ser necesario cambiar la clase que estamos instanciando por una nueva, otra implementación, podamos hacerlo sin tener que buscar por todo el código en dónde fue que usamos o instanciamos la clase. Su uso se justifica cuando las implementaciones pueden cambiar con cierta regularidad.

martes, 23 de febrero de 2016

El peor vídeo juego de la historia

Corrían los años 80, 1982 para ser exactos, y estaba por estrenarse el que fuera un éxito de taquilla “ET el extraterrestre” de Spielberg.
Para ese entonces, la firma Atari quería patear el mercado y recuperar su posición de líder sacando una edición autorizada de un juego para el Atari 2600 basado en la popular película. La tarea le fue encomendada a Howard Scott Warshaw, un experto programador de 24 años de edad muy respetado en Atari para esa época.

Atari venía perdiendo su cuota de mercado, por lo que necesitaba que este juego fuese un éxito, razón por la cual no escatimaron en gastos para el lanzamiento y promoción de ese producto. Era por lo tanto un juego estratégico para la empresa. El problema era que debían producirlo con rapidez para aprovechar el lanzamiento de la película, por lo que el tiempo de construcción del juego fue de tan sólo 5 semanas, cuando un juego en esa época requería al menos unos 5 meses.

Llego el día del estreno de la película, del respectivo vídeo juego en su adecuado momento…
Y el desastre se hizo presente.

martes, 2 de febrero de 2016

Robot eres formidable….




Con ese estribillo iniciaban mis tardes por allá en los lejanos ochenta y noventa. Esa música era sinónimo de diversión y sano entretenimiento.

Mucho fantaseaba con el Súper Magnetrón y su combo. Claro está, Mazinger  era otro de los preferidos.
A estas alturas de mi vida, cuando conozco a alguien que le gusta la tecnología y la computación, y me dice que no veía o, peor aún, que no le gustaban esos comics antes mencionados, lo miro cual fanático religioso que observa al más impío de los herejes!!! jajajajaja.

Esta línea de comics, la mayoría orientados al espacio, robótica y la tecnología en general, eran promotores inequívocos de la innovación, la ciencia, la informática y la violencia. No dejan de ser un fenómeno social muy interesante, cuyo alcance es digno de mejores y más profundos análisis.

Yo, por mi parte, me limito a decir que gracias a estos comics y a los libros de Isaac Asimov, terminé enamorado de la informática y la computación. Espero llegar a ver el día en que podamos desarrollar algo siquiera parecido al cerebro positrónico, la temible inteligencia artificial, y, obviamente, espero poder pilotar mi propio robot gigante.

domingo, 24 de enero de 2016

Mas recursos por favor!!!

En mis tempranos días de Universidad, cuando el turbo pascal pagaba mis cuentas, recuerdo una tarde en que programaba, mejor dicho, tiraba unas líneas de código para una encomienda que mi hicieron, y me di cuenta que la pantalla, mi diseño, se pintaba muy lento…. Corrían los días del fiel DOS y sus pantallas de 80 x 25 en modo carácter. La inquietud me vino, porque tenía instalado un programa de Norton, no recuerdo cual era, y en este último las pantallas volaban, superponían ventanas y se pintaban en un dos por tres!!!

Yo me dije, Carambolas Blas! ¿Que ocurre aquí? Repámpanos, que el diablo me lleve, y toda esa suerte de frases rebuscadas que usan en los comics para no decir groserías!!! Jajajajaja. El caso es que me dije, ¿cómo es esto posible? ¿Qué estoy haciendo mal?

Yo pintaba mis pantallas con una rutina….. si, si, era muy inocente. Y se podía ver como se dibujaba cada línea de caracteres por el monitor, una tras otra…. Lentoooooo….

Las de Norton aparecían casi al instante!!!  QUE ENVIDIA!!!

Me puse a pensar entonces, si, a veces lo hago, y me dije que todo esto que se ve son ceros y unos, que deben estar almacenados en algún lugar de la memoria del computador, lo que ahora llamaré Memoria de Vídeo. Imaginé que si podía diseñar mis pantallas y almacenarlas a disco, y luego cuando las necesitara cargarlas a una memoria cache y, en su momento, mover todos esos bytes directamente a la Memoria de Video, seguramente mis pantallas parecerían ser tan rápidas como las que veía en otros sistemas comerciales.

Java vs .Net vs PHP, la pelea equivocada

Java vs .Net vs PHP, la pelea equivocada

Es frecuente leer, en el ámbito del Internet, las no pocas querellas que se arman entre los defensores de las más populares tecnologías de desarrollo de software en el mercado actual.

Yo mismo he promovido tales encuentros y le he echado leña  al fuego con mis actitudes y humores en preferencia de una tecnología u otra.

Fuera de lo divertido e interesante que es aprender de los diversos argumentos que se presentan y de los no poco apasionados razonamientos que se efectúan, que suelen derivar en “Troleadas” intensas, me llama la atención dentro de toda esta alharaca tecnológica un hecho bien particular que he notado a lo largo de mis años como consultor.

Estoy hablando de un participante mayor, antiguo, monstruoso, verdadero “brontosaurio” y un cuasi fósil de la tecnología orientada a las transacciones de negocio. Este participante en cuestión ha liderado por años, lustros y décadas en su nicho, impávido, aparentemente aletargado…. Oculto. Qué digo liderado; ha reinado, gobernado, tiranizado y encabezado el submundo de las grandes transacciones financieras y de negocios por un muy, pero muy largo periodo de tiempo.

Este monstruo solapado, se ha renovado, se he colocado hábilmente maquillaje, ha hecho dieta y ejercicios, y ha visto pasar uno tras otro a cada uno de los que, como Java y sus consortes, han pretendido ir por su trono.

domingo, 3 de enero de 2016

Obtener nivel de acceso (permisos) sobre un archivo en RIDC con Java

Parte de las tareas comunes que enfrentamos cuando trabajamos con el Oracle UCM por medio de la api RIDC, es la de validar los permisos de acceso de un usuario sobre un archivo cualquiera dado su Id de documento.

Para ello nos valemos de una implementación de la interface IUserSecurityCache, y usamos el método getAccessLevelForDocument(...).
Dejo a continuación un fragmento de código de ejemplo:
 
public class RIDCBusiness { 
  public static int getAccesLevelForDocumentByIdAndUser( 
  String idConnectionURL, String usernameForConnect, 
  String userNameToCheck, String documentId) { 
  int levelAccess = -1; 
  try { 
    final IdcClient mclient = getUCMConnection(idConnectionURL, 
    usernameForConnect); 
 
 // RIDC superuser context 
 // use las credenciales adecuadas a su plataforma 
    final IdcContext msuperuser = new IdcContext("weblogic", "weblogic"); 
    final IUserSecurityCache mSGAcctAclCache = new UserSGAcctAclCache(mclient, 20, 1000, 20000, msuperuser); 
    final DataBinder docBinder = getDocInfoByDocId(idConnectionURL, 
    usernameForConnect, documentId); 
    if (docBinder == null) 
      return levelAccess; 
    final DataObject docInfo = docBinder.getResultSet("DOC_INFO").getRows().get(0); 
    final IdcContext context = new IdcContext(userNameToCheck); 
    final CacheId userToCheck = new CacheId(context.getUser(), context); 
    final ITrace trace = null; 
 
    levelAccess = mSGAcctAclCache.getAccessLevelForDocument( 
    userToCheck, docInfo, trace); 
  } catch (final Exception e) { 
    Logger.getLogger("RIDCBusiness").error("Error en getAccesLevelForDocumentByIdAndUser", e); 
  } 
 
  return levelAccess; 
 } 
 
 public static IdcClient getUCMConnection(String idConnectionURL, String username) throws IdcClientException, IOException { 
   final IdcClientManager clientManager = new IdcClientManager(); 
   final IdcClient client = clientManager.createClient(idConnectionURL); 
   return client; 
 } 
 } 
 
 public static DataBinder getDocInfoByDocId(String idConnectionURL, String username, String documentId) { 
   ServiceResponse serviceResponse = null; 
 
   try { 
     final IdcClient client = getUCMConnection(idConnectionURL, username); 
     final DataBinder dataBinder = client.createBinder(); 
     final IdcContext userContext = new IdcContext(username); 
     dataBinder.putLocal("IdcService", "DOC_INFO"); 
     dataBinder.putLocal("dID", documentId); 
 
     serviceResponse = client.sendRequest(userContext, dataBinder); 
     final DataBinder response = serviceResponse.getResponseAsBinder(); 
     return response; 
   } catch (final Exception ex) { 
     Logger.getLogger("RIDCBusiness").error("Error en getDocInfoByDocId", ex); 
   } finally { 
     if (serviceResponse != null) 
       serviceResponse.close(); 
   } 
   return null; 
 } 
}
Básicamente obtenemos un número que, de ser mayor que 0, indica el nivel de acceso que tiene el usuario dado sobre el documento deseado.
Los niveles de acceso predefinidos son:
  • READ
  • READ/WRITE
  • READ/WRITE/DELETE
  • READ/WRITE/DELETE/ADMIN
Esta publicación es complemento de la publicación anterior que mostraba como acceder a la información de los folios.

Código para acceder a los Folios de Oracle UCM mediante la API RIDC con Java

En un reciente proyecto me vi en la necesidad de trabajar con el Oracle Universal Content Manager (UCM) mediante a API de RIDC. Abundan en la web ejemplos de como hacer esto, lo cual fue una gran ventaja para mis tareas. No obstante, fue más difícil encontrar en buen ejemplo para acceder a los FOLIOS del UCM, e incluso me encontré con algunos problemas a la hora de pasar los parámetros en forma adecuada.
Es por ello que hoy dejo un breve fragmento de código que muestra como acceder a los servicios de RIDC mediante Java.

Para ello creé un proyecto Java en eclipse, y agregué las librerías oracle.ucm.ridc-11.1.1.jar y oracle.ucm.ridc.was-lib-11.1.1.jar.
Use un Pojo, ConsultaDocumentos, para modelar los documentos. Este Pojo puede ser usado en un contenedor de Vaadin u otro framework para representar los resultados de los documentos contenidos en un FOLIO de Oracle UCM.

Clases "Controladoras" y algo mas




Ejemplo:
Imagine el escenario donde Ud. llega a un local de comida rápida, seguramente ha hecho esto alguna vez en su vida, lo primero que hace es ir y decirle al cocinero, en voz alta por supuesto: “oye tu, quiero una hamburguesa doble carne bien cocida”, seguidamente le dice al muchacho de los refrescos: “me preparas una gaseosa enorme” y por último le dice al de las ensaladas: “¡me pones de todo con un poco de todo encima!”.

¿No es así como se acostumbra? 
Parece que no. 

Bien hagamos algunas correcciones. Ud. llega al local y lo recibe un cajero; nada de estar pegando gritos al cocinero y al resto del personal, seguidamente el cajero toma su pedido y él si procede a decirle al cocinero lo que Ud. quiere, le grita al de los refrescos su orden, y claro está, habla con el de las ensaladas para que le ponga de todo.

El egoísmo es una virtud



Algunos conceptos objetivistas resultan chocantes, y requieren algo de explicación para los humanos.

El egoísmo es una virtud
Para el objetivismo el egoísmo racional es una virtud, y cualquier forma de altruismo es inmoral, ya que no hay ningún motivo racional para poner las necesidades de los demás por delante de las necesidades racionales propias....
A los egoístas irracionales (por ejemplo a los nietzscheanos) Ayn Rand los llamaba «egoístas sin ego», ya que los caprichos emocionales no son el ego. El ego es la razón.
El orgullo es una virtud
Para el objetivismo el orgullo racional es la corona de todas las demás virtudes. Si uno se esfuerza en llevar una vida racional y productiva, uno se gana el derecho a estar orgulloso de los valores morales y materiales que uno obtenga.
  • No obstante, el objetivismo condena inequívocamente los orgullos irracionales: El orgullo de ser de determinado país, de pertenecer a una u otra raza o tribu, de tener grandes riquezas heredadas, de pertenecer a una familia con títulos nobiliarios... En ninguna de estos casos el individuo ha hecho nada para ganarse el derecho a estar orgulloso.
La humildad es un vicio
Inversamente, la humildad (entendida como la baja autoestima) es un vicio, ya que el humilde se considera a sí mismo como poco valor y no mejor que los demás. Para el objetivismo, el estar en este estado y considerarlo como bueno mata cualquier tipo de ambición moral en el individuo.
  • Si un individuo está en este estado, tras una evaluación sincera de uno mismo, lo que uno debe hacer es luchar por mejorarse a sí mismo para así poder ganarse el derecho a estar orgulloso.
  • Si un individuo es humilde a pesar de tener virtudes, es decir, si el individuo elige no apreciar las propias virtudes por temor a ser calificado de orgulloso, el objetivismo sostiene que ese individuo está en guerra consigo mismo y con la realidad.
El extremismo es bueno
Para el objetivismo, los cultos al «término medio», al compromiso y al consenso son sintomáticos de inseguridad en los propios valores y en las propias decisiones, consecuencia inevitable de la filosofía de Platón y Kant y de sus derivados, que sostienen que el conocimientoseguro sobre el mundo es inalcanzable. Es por esto que para el objetivismo, el extremismo es considerado como algo «bueno».
El objetivismo sostiene que si partiendo de premisas correctas y siguiendo una epistemología correcta uno identifica algo como bueno, lomoral es llevarlo hasta sus últimas consecuencias.

Para saber mas: http://es.wikipedia.org/wiki/Objetivismo

Yo, El Supremo.

sábado, 2 de enero de 2016

La Muchedumbre Idiota

                                                     Para el sotreta:
                                                     Hace tiempo que dejé de saber que hacer contigo

             La Muchedumbre Idiota

Tengo que cuidar de los estúpidos
Su oceánica ignorancia me alimenta
Su miseria infinita me sostiene
Matar a todos quiero
Pero quedaría solo
Sin interlocutor y sin empleo
En quien descargaría mi soberbia brutal
Son además una invencible mayoría
Sólo con los hongos y las moscas rivalizan
Tal vez algún respeto se merezca
Esta infame pelota de babiecas
Yo creo que son la lección y la burla
Suprema de los dioses
¡alabados sean!


                                           Robin Camero

Not zero code Nor complex process


Cualquier herramienta o solución de BPM de buen nivel ofrece un conjunto loable de funciones que facilitan la gestión de procesos con dichas herramientas.

Una de las opciones infaltables y de las mas promovidas por los consultores y vendedores de soluciones de BPM es la de ZERO CODE, cero codigo; la cual consiste en la habilidad de obtener una aplicación capaz de ejecutar nuestros procesos con apenas unos clicks.

La idea general es que se reduzca el desarrollo de aplicaciones a la medida y la programación global, dejando toda la tarea de la automatización y construcción de aplicaciones sobre los recursos que provee la solución de BPM.

Siendo honestos, esta funcionalidad está muy bien cuando se inicia un proyecto de BPM, en la etapa en la que se modelan los procesos y es necesario validarlos, para lo cual no existe nada mejor que un prototipo rápido que es lo que brindan muchas herramientas de BPM.

Los problemas empiezan cuando se quiere implementar proyectos grandes de BPM con estas herramientas, y es aqui en donde entra el otro elemento del título de esta publicación: los procesos complejos.

Y por complejos me refiero a procesos con mas de 12 tareas humanas y mas de 5 actores con roles diferentes. Así mismo, son procesos que requieren perisistir una gran cantidad de información, integrarse con varias plataformas y consumir uno o mas servicios diversos.

En general el desarrollo de estos procesos sobre las plataformas de BPM habituales redunda en aplicaciones inestables, con una capa de presentación mediocre o poco funcional y con un requerimiento de mantenimiento elevado.

He visto muchos grandes proyectos construidos con grandes herramientas de BPM ir directo al fracaso debido a la mala implementación de la solución realizada completamente sobre el motor de BPM y sus recursos.

En general los motores de BPM son excelentes para la orquetsación de tareas y la asignación de responsabilidades. En otras palabras son inmejorables para garantizar el control: que lo que deba ser realizado sea realizado por quien debe realizarlo cuando deba hacerlo.

Se les considera menos eficientes para producir aplicaciones de gran funcionalidad que trabajen sobre esos procesos. Sencillamente el desarrollo y mantenimiento de aplicaciones no es su fuerte.

Por esta razón cuando me toca evaluar una herramienta de BPM no me dejo seducir por sus deslumbrantes capacidades de modelado y despligue rápido de de aplicaciones. No señor.

Lo que busco es conocer a fondo sus facilidades de integración con diversas plataformas. Escudriñar sus facilidades para trabajar con datos complejos de diversas fuentes. Determinar sus capacidades en cuanto a las distintas APIs y modos integración que ofrecen.

Es en este último tópico en el que centro mi esfuerzo, pues son de las APIs de las que va a depender el grado de control externo que pueda brindarme una solución de BPM cualquiera.

En otras palabras, voy a usar frameworks de trabajo bien conocidos para integrar la solución de BPM con mis aplicaciones nativas y dedicadas.

No construiré un sistema de compras públicas sobre un motor de BPM. Por el contrario, desarrollaré un sistema de compras públicas orquestado e integrado por y con el motor de BPM.

En este desarrollo manejaré los procesos como módulos lo mas independientes y sencillos posibles, para de esta forma poder gestionar con eficiencia esos procesos y sus aplicaciones dependientes.

Nada viene sin un precio, y el desarrollo y el mantenimiento efectivo son el precio que pagamos por un mayor contro y mejores prestaciones sobre nuestras aplicaciones de BPM.

Hasta que las herramientas o soluciones de BPM no evolucionen lo suficiente seguiré promoviendo y prefieriendo el fiel desarrollo eficiente sobre la, para mi, errada política de ZERO CODE y COMPLEX PROCESS.

Las “soluciones” estúpidas



No sin asombro veo como en estos canales seudocientíficos de TV, ante la problemática del creciente tráfico y largas colas en las principales ciudades del mundo, nos ofrecen como solución el hacer vehículos más pequeños y eficientes. Eso puede parecer una “solución” a corto plazo, pero que es el corto plazo para una ciudad? En realidad es nada. Con el actual crecimiento de las ciudades en poco menos de 20 años se tendría nuevamente el mismo terrible problema del tráfico, con la salvedad de que ahora son inmensas colas de vehículos mini muy “eficientes”.

Para muestra de lo que digo les dejo un par de enlaces con videos del tráfico en Vietnam. Saquen Uds. sus propias conclusiones.

http://www.youtube.com/watch?v=-JNWucQJGVI
http://www.youtube.com/watch?v=ebkogYErN3Y&feature=related

El problema no es El Tamaño de los Vehículos. El problema es la cantidad de Recursos y Elementos gastados para el transporte particular e individual. El automóvil promedio en una cola sólo lleva en 1.3 pasajeros como media. Todo ese espacio, materiales, combustibles y demás recursos usados para mover poco más de una sola persona.

La solución no pasa por una sola propuesta. Son necesarias acciones políticas, culturales, comerciales, legales y científicas para alcanzar una mejora que perdure por lo menos 80 años. Cosas tales como:
- Disminuir la necesidad de movilizar personas (Tele trabajo, Tele servicios, etc.).

- Disminuir el número de personas que deben movilizarse a un mismo horario (Todo el mundo debe estar en el trabajo a las 8:00?).
- Transporte público masivo y eficiente.
- Altos impuestos al transporte individual y con motor de emisiones de carbono.
- Descentralizar las ciudades y servicios.
Estas son solo algunas propuestas que merecen ser revisadas para lograr un compendio aceptable de lo que llamaríamos una Solución Inteligente.

Saludos cordiales.

P.D.: Tengo entre manos propuestas más radicales tales como disminuir la población mundial en un 60%!!! Pero la discusión de este magnicidio escapa del contexto de este artículo.

¿Hay vida inteligente EXTRATERRESTRE?


Recientemente una querida amiga me realizó, en forma casual. El siguiente comentario:

Amiga - ¿Viste lo de Stephen Hawking?
- No, ¿qué pasó?
Amiga – ¡El tipo dijo que estaba científicamente demostrada la existencia de extraterrestres!... y de paso advirtió que no vienen con buenas intenciones. Que lo que vienen es a apoderarse de los recursos.
- ¿En serio?...

Y precedí a manifestarle mi escepticismo y cuidado ante tales afirmaciones. Que para afirmar de esa forma se deben tener pruebas contundentes y científicamente demostrables.

Lo cierto es que me quedé sorprendido y prometí averiguar más sobre el tema. Y lo hice.

Lo que ocurrió fue que el Profesor Stephen Hawking, alias el tullido como yo le llamo cariñosamente, en abril de este año afirmo en un programa para Discovery Channel que:
“El profesor ha asegurado que es "perfectamente racional" asumir vida inteligente en otros lugares, aunque advierte de que los 'aliens' posiblemente harán incursión en la Tierra para proveerse de recursos y luego se irán.”

Enlace del artículo: http://www.elmundo.es/elmundo/2010/04/26/ciencia/1272276555.html

Lo primero que destaco es que ciertamente es perfectamente racional, por las posibilidades matemáticas, asumir vida inteligente extraterrestre. Es una posibilidad. Y sólo eso. Una posibilidad. Pero de allí a decir que está “Científicamente Demostrado” es otra cosa. Lo último es una mentira. Una posibilidad, por alta que sea, no se puede asumir como una certeza hasta la debida comprobación. Y eso, la comprobación, no se mencionó, discutió ni se trató de forma alguna en el mencionado programa, puesto que se habló en todo momento de una posibilidad matemática.

Respecto a la afirmación: De existir vida extraterrestre seguramente vendrían por los recursos, pues me parece bien razonable, pues no debemos asumir otra cosa al no saber que esperar de una inteligencia distinta a la nuestra. Pero el punto importante es que se sigue hablando de un supuesto, por lo que afirmar que “a quienes están contactando con extraterrestres” es nuevamente otra mentira. No se afirma el hecho del contacto en ningún momento. Tan sólo se afirma que deberíamos abandonar nuestros intentos de contacto, lo que, nuevamente, es una cosa bien distinta.

No pienso extenderme en los detalles de las sin número de discusiones y opiniones, interesantes algunas y abiertamente estúpidas la mayoría, que despertaron estas opiniones del tullido.
Leído y revisado todo este asunto debo afirmar categóricamente que el título de este artículo es inapropiado.

Corrijo pues el título: ¿HAY VIDA INTELIGENTE EN LA TIERRA?

Bueno, Malo, Mejor, Peor...


Bueno, Malo, Mejor, Peor, etc...

Todos ellos juicios de valor. Los emitimos diariamente, alegremente, todos tenemos una opinión y no dudamos en calificar. Es natural. No obstante, ¿cuantos de nosotros nos hemos detenido a pensar en las bases, fundamentos, razonamientos y contexto que sustentan a nuestros juicios?

Explico me. Si emito el juicio de que “esto” es Mejor que “aquello”, ¿en que fundamento mi afirmación? ¿cual es el criterio o parámetros utilizados para respaldar tal juicio?

Existen áreas en las que es relativamente sencillo establecer parámetros y escalas de valores. En otras no tanto. Entre las primeras tenemos las ciencias numéricas y entre las segundas a las artes literarias por ejemplo. ¿Como sabemos que un libro es bueno? En estos casos no basta con el libro me guste para calificarlo de bueno. Eso es sólo mi vulgar opinión si no puedo respaldarla con razonamientos fundados.

Es allí donde las escalas tienen su reinado, puesto que permiten homologar criterios, establecer estándares y delinear principios para una evaluación o juicio cercanamente objetivo.

Las escalas tienen un carácter criminal. Se fundamentan en eliminar la subjetividad, los pareceres, las impresiones y demás sutilezas que en general “nublan” el juicio.

Pongamos el siguiente ejemplo:
Tenemos un Esquimal que vive usualmente a unos -20 grados centígrados.
Y tomemos a un Bosquimáno que vive en temperaturas que rondan los 40 grados centígrados a la sombra.
Sí ponemos al Esquimal en un sitio a unos 21ºC seguramente nos dirá algo como “Hace Calor”.
Si colocamos al Bosquimáno en el mismo lugar y a los mismos 21ºC nos dirá algo como “Hace Frío”. Entonces, ¿Hace frío o hace calor?¿Como resolvemos este dilema?
Sencillamente “matando” al negro y al esquimal!! y esto se logra mediante una escala.

Hace 21ºC. Ni frío. Ni calor. Sólo 21ºC.

Obviamente esta escala aniquila a los participantes y sus pareceres, sus impresiones culturales, somáticas y demás ideas sobre como está la temperatura del citado lugar.

Las escalas nos dejan con la “frialdad” de los números al eliminar el “calor” humano de la ecuación de evaluación.

¿Son “buenas” las escalas? ;-)