Estando frente al segundo grupo/nube discutida en el primer post de la serie, se nota que este grupo/nube se caracteriza por tener una experiencia y un background teórico bastante altos. Ya que al haber utilizado Drools 4.x los conceptos básicos ya estan cubiertos. Temas como la sintaxis de escritura de reglas de negocio (DRL), los lenguajes específicos para cada dominio (DSL), las secciones de una regla (RHS y LHS) son ampliamente entendidas y términos como WorkingMemory y RuleBase ya no nos asustan.
Si todo esto esta cubierto y tenemos unas cuantas implementaciones de reglas y soluciones de negocio con el el framework, el salto a la versión 5.x es mas que nada conceptual que a nivel tecnológico. Este cambio encima se ve reducido ya que tranquilamente podemos utilizar Drools Expert como venimos usando Drools 4.x, teniendo en cuenta algunas actualizaciones del lenguaje, APIs y algunos features extras.
Si tomamos como foco Drools 4.x y Drools 5.x Expert, podemos estar horas hablando de cosas interesantes. Aquellas personas que tengan varias implementaciones con Drools 4.x probablemente quieran leer o escuchar charlas sobre los siguientes temas, sin ningún orden en particular:
- Optimizaciones sobre el algoritmo RETE, que optimizaciones se han agregado últimamente, etc
- Optimizaciones sobre la escritura de reglas y las distintas alternativas que tenemos para expresar nuestras reglas de negocio.
- Configuraciones sobre performance
- Benchmarks
- etc
Viendo la versión 5.x de Drools Expert podemos ver que el foco que se puso sobre el proyecto y las metas obvias fueron:
- Ser estable y performante, meta lograda por la versión 4.x, por supuesto la versión 5.x agrega madurez y experiencia demostrada en el continuo crecimiento.
- Sigue siendo una plataforma pensada y desarrollada por desarrolladores para desarrolladores. La inclusión de Guvnor como herramienta de governance atrae mucho la atención para la autoria y el governance de nuestras reglas de negocio.
- La facilidad de uso es una clara y gran meta dentro del proyecto. La unificación de la API y la extensibilidad provista por la plataforma demuestran un gran crecimiento sobre la ruta futura del proyecto.
Mas allá de estos puntos que tienen como centro a Drools Expert, el cambio importante en la versión 5.x de Drools es el hecho de expandir el concepto de Regla a Conocimiento (Knowledge). Este cambio que al principio solamente parece solo un cambio de terminología, pero en realidad abre infinitas barreras de crecimiento horizontal de la plataforma.
Para correctamente pasar a usar la versión 5.x de Drools, necesitamos lograr entender la magnitud de esta abstracción realizada mediante el uso el termino conocimiento. Tenemos que subir un nivel y aceptar que la definición de reglas de negocio solo es una dimensión de un amplio espectro de representaciones del conocimiento empresarial.
Drools propone una manera, si se quiere decir, genérica, amplia, integrada y extensible para expresar conocimiento empresarial, en el amplio sentido de la palabra. Por supuesto, toda esta abstracción y flexibilidad se ven expresadas en las APIs. Ahora toda la terminología esta basada en conocimiento (Knowledge). Ahora, por ejemplo, términos como RuleBase van a pasar a verse como KnowledgeBase. Ahora no solo pudiendo contener Reglas, sino que conocimiento en general, representado de distintas maneras.
Formas de representar el conocimiento
Actualmente podemos representar el conocimiento utilizando los siguientes conceptos:
- Reglas de negocio
- Procesos de negocio
- Evaluaciones temporales sobre eventos
Lista que es totalmente extensible para que a medida que se necesiten nuevas maneras de representar el conocimiento se puedan agregar módulos para cubrir estas necesidades.
Muchas veces vamos a escuchar decir, que en esta nueva versión de Drools se le enseño al motor de inferencias a trabajar con procesos de negocios y a entender sobre relaciones temporales. En posteriores versiones seguramente que vamos a escuchar que el motor de inferencias esta capacitado para hacer evaluaciones difusas y vaya a saber que nuevos módulos aparecerán en este próximo año.
En el proximo post voy a tratar de resumir que se ve y de que se habla en las charlas de Drools 5.x, ya no con la vision de pasaje de una version a otra, sino que va a ser el primer paso, un paso global para comenzar una serie de post tecnicos para ir guiando el aprendizaje del conjunto de modulos actuales en la version 5.
JBoss Video’s Channel en YouTube
Julio 14, 2009
Gente, para los que no sepan todavia, hay un canal de JBoss donde publican distintos eventos donde la empresa va participando. Ultimamente han agregado al canal los videos de la JavaOne 09, donde tenian un stand chiquito, pero vistoso y daban mini charlas sobre los distintos proyectos.
Les dejo la URL y luego trateremos de embeber el canal en la pagina del JBug.
http://www.youtube.com/user/JBossVideo
Saludos
Usuarios de Drools #1 – Empezando/No conozco
Julio 7, 2009
Continuando con la temática de mi post anterior y todavía sin haber tenido tiempo de formalizar los datos con una encuesta sobre el tema, voy a abordar lo que a mi manera de ver las cosas divide a los grupos/nubes antes mencionados.
De esta clasificación surge el titulo de este post, por eso #1 – Empezando, va a caracterizar a la primer gran nube mencionada anteriormente. Esta clasificación, esta hecha teniendo como base el hecho de que JBoss y todos sus proyectos, estan hechos por desarrolladores para desarrolladores. (Se puede relacionar esto con el termino Middleware, probablemente este muy relacionado, mucha gente no lo alcanza a ver). Con esto ya dejamos afuera todo aquel que no quiera o sepa desarrollar aplicaciones. Esto no quiere decir que el resultado de lo que implementemos con Drools, no pueda ser usado por estadistas, analistas, gerentes, humanos, etc. Todo lo contrario, estos van a ser nuestros usuarios, pero necesitamos ser desarrolladores y tener una formación de desarrollador para entender por completo el fin, la manera de uso y como esta construido Drools como proyecto.
Mas que nada este post esta orientado a estas personas, que ni siquiera conocían la plataforma Drools, o que si la conocían, solamente la conocían por el nombre. Es importante, para este grupo de personas, recibir algo de orientación inicial, debido a que la documentación oficial, toma como base que estamos muy interiorizados con varios temas que a muchas personas les resulta difícil.
Si te sentís desorientado, no sabes por donde empezar, leyendo la documentación te das cuenta de que no manejas conceptos como por ejemplo: de motor de inferencia, motor de reglas, BPM, Procesos, CEP, etc. Este post esta orientado a ir iterativamente agregando distintas fuentes de información para introducir y relacionar todos estos temas, cuyas bases teóricas son fundamentales para entender como funciona Drools.
Por lo tanto a esta altura, tu gran problema es el Background teórico faltante. Y entender como funciona y como esta hecho internamente un motor de inferencia (el core de Drools como proyecto desde que empezó) se hace fundamental para aclarar el panorama. No hace falta irse al otro extremo de saber como implementar un motor de inferencia (me gustaría llegar a esto en algún post) pero si es necesario entender los conceptos básicos de funcionamiento y por sobre todo entender conceptualmente que representa y que soluciona.
Para esto voy a usar este post, para ir actualizandolo con artículos que explican y abordan temas conceptuales y genéricos, no solamente sobre Drools. Abordando los conceptos de motor de inferencias, sistemas expertos, sistemas de producción, etc, la documentación de Drools Expert empieza a tomar otra forma.
Algunos conceptos importantes
Esta sección va a listar algunas definiciones muy cortas, usadas para empezar a entrar en tema, junto con un listado de lecturas de referencia para ampliar cada tema en particular. Por mi parte voy a ir tratando de extraer las secciones de máximo interés para armar una mini guia conceptual que nos introduzca las herramientas necesarias para empezar con el pie derecho.
Sistemas Expertos (Expert Systems)
Se conoce como un sistema experto, un programa o pieza de software, que intenta imitar las decisiones o acciones tomadas por un experto humano en un dominio(rubro) especifico.
Estos sistemas, hacen uso de motores de inferencia, o motores de razonamiento, para ser mas genéricos, los cuales permiten basándonos en el conocimiento de un dominio, llegar a conclusiones a las que un experto humano llegaría.
Referencias:
http://es.wikipedia.org/wiki/Sistemas_Expertos
Motor de inferencias (Inference Engine)
Básicamente es un programa, o pieza de software, que trata de derivar una respuesta basándose en una base de conocimientos. Donde por base de conocimientos, entendemos que es algo similar a una base de datos, pero especializada para guardar conocimiento, ordenarlo y poder obtenerlo fácilmente. Teniendo como foco principal el hecho de poder llegar a nuevas conclusiones, basadas en el conocimiento almacenado.
Estos motores de inferencia, esta fuertemente relacionados con el ámbito de los sistemas expertos, ya que se considera que un motor de inferencia es el cerebro de un sistema experto.
Referencias:
http://en.wikipedia.org/wiki/Inference_engine
http://es.wikipedia.org/wiki/Inferencia
Sistemas de Producción (Production Systems)
Son sistemas muy relacionados con la inteligencia artificial, construidos con bases en reglas (producción/production) y comportamientos asociados. A grandes rasgos, y con mi visión muy superficial sobre estos temas tan teóricos, relaciono la palabra producción no con el hecho de producir algo, sino al revés con que algo se produce y debemos saber que comportamiento tenemos que tomar en ese momento.
Para ser mas claros, estas producciones/reglas están formadas por dos partes. La primera parte es conocida como sensor, pre condición, guarda o solamente condición y es la encargada de describir un estado particular de nuestro mundo.
Cuando nuestro mundo coincide con algún estado expresado por alguna de las N condiciones que podemos tener, se dice que la producción/regla es activada. Aquí es donde entra en juego la segunda parte de la producción, que es llamada acción. La cual se ejecuta cuando la regla es disparada.
La manera mas simple de ver una producción/regla es la siguiente:
RULE "nombre" IF/WHEN CONDITION THEN ACTION
Cuando la acción es ejecutada, podemos decir que la regla ha sido disparada.
Otro concepto importante aquí, es lo que se conoce como memoria de trabajo (working memory), que es la encargada de tener el estado del mundo y sobre cual se ejecutan las acciones. Estas acciones muchas veces tienen la función de modificar el estado del mundo, pudiendo así causar la activación de otras reglas de manera recursiva.
Como últimos detalles, podemos decir que los sistemas de producción deben incluir dos cosas claves:
- Un algoritmo para comparar las condiciones y el estado actual del mundo eficiente. (Voy a dedicarle un post aparte a este tema, ya que aca entran los conceptos de forward y backward chainning junto con el algoritmo RETE, LEAPS,TREAT, etc)
- Un algoritmo para priorizar activaciones en caso de que dos o mas condiciones se activen al mismo tiempo.
Referencias:
http://en.wikipedia.org/wiki/Production_system
http://www.cse.unsw.edu.au/~billw/cs9414/notes/kr/rules/rules.html
Conclusión
Si bien las referencias son pobres, la idea es ir agregando y refinando los conceptos sobre este mismo post, a medida que las preguntas surjan.
Espero poder avanzar con cada uno de estos temas en particular, para que el background teórico vaya solidificándose hasta que el uso de la herramienta sea solamente comprender como fue implementada cada parte y cada concepto.
Cualquier comentario/corrección sobre los términos y conceptos discutidos aquí es totalmente bienvenida.
Saludos
Trabajar con el equipo de Drools en Argentina
Julio 2, 2009
Este post es mas que nada para reflejar la propuesta de trabajo publicada en el blog oficial del proyecto JBoss Drools.
http://blog.athico.com/2009/07/drools-job-requested-buenos-aires.html
En el link anterior se encuentran los requisitos minimos y la explicación de que se busca en el trabajo.
A resumidas cuentas, mis empleadores andan buscando un nuevo compañero para trabajar a la par mía en el proyecto JBoss Drools. Esto requiere bastante entrega y dedicación en el sentido de que si o si tiene que gustarte y tenes que querer ser parte de un proyecto Open Source con todo lo que esto conlleva.
Si estas interesado, crees que podes cumplir con los requisitos necesarios y tenes la pasional y el deseo de ser parte de un proyecto Open Source. Manda tu CV a mi casilla personal (salaboy@gmail.com) usando DROOLS JOB como subject.
Saludos.
PD: dudas o comentarios seran bienvenidos aqui en el post.