Ir al contenido principal

Entradas

Mostrando las entradas etiquetadas como Tecnología

Historia de una conversa sobre OOP

Y luego de un largo rato volvemos por acá con una historia basada en hechos reales, sobre una conversación muy didáctica que tuve con un amigo: -Mr. Bladi, he escuchado que Ud. se opone, es más desprecia, al uso de las clases Utilitarias y los métodos estáticos en la programación orientada a objetos (OOP). -Ciertamente. No aconsejo su uso y lo considero una mala práctica, algo ofensivo en la OOP. -Pero si no podemos usar clases utilitarias y métodos estáticos, ¿Cuáles opciones Tenemos? -Tenemos unas cuantas opciones. Pero antes un poco de contexto. Las clases utilitarias, esas que están repletas de métodos estáticos, no son objetos reales, son un recurso totalmente procedimental y rompen el principio de encapsulamiento en la OOP. Peor aún, las clases utilitarias con su torrente de métodos estáticos, son muy difíciles de testear en las pruebas automáticas.  TODO MÉTODO ESTÁTICO, E INCLUSO LOS PRIVADOS, SON CANDIDATOS PARA UNA NUEVA CLASE, es decir son elegibles ...

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.

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.

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…

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:

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 ...

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 url “ http://www.webservicex.net/globalweather.asmx?WSDL ” . Así que manos a las sobras… digo, a las obras jajajaja

Modas y demodé (Revisited)

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, Waterfall, 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 l...

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 ap...

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 q...

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 lleg...

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 i...

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 aletarg...

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, ms...

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.

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 proy...