Administración del Conocimiento – UML Simulation

AST para detectar código malicioso

Posted in OODBMS - Base de Objetos, POO by smalltalkuy on mayo 21, 2015

Problema: en la importación de archivos XPDL generados por Bizagi se importan también reglas de negocio generalmente asociadas a gateways:

bifurCondiciones de bifuracación pueden ser:

– monto > 10000

– edad > 18 y monto > 10000

– En un bloque de Smalltak es:  [:form | form edad > 18 and:[form amount > 10000]]

La implementación y ejecución de estas reglas es bastante sencilla, se crea un BlockClosure y se evalua:

block := self evaluate: ‘[:form | form edad > 18 and:[form amount > 1000]]’.

Aquí se crea un bloque de código que se puede evaluar N veces, en este caso el bloque tiene solamente un argumento “form“. Para evaluar el bloque:

block value: aFormObject.

“en este caso ejecuta –> aFormObject edad > 18 and:[aFormObject amount > 1000]”

PROBLEMA

El Problema es la injección de código malicioso dentro de Bizagi. Si en lugar de la regla previamente presentada se pone la siguiente condición:

‘[:form | MySystem removeAllProcesses]’

En este caso cuando se evalue la condición –> se eliminarán todas las instancias de procesos (un desastre !!!).

SOLUCION

La solución es usar un AST (abstract syntax tree) para evitar este tipo de situaciones.

Si bien en GemStone/S se puede usar otras opciones como la clase GsObjectSecurityPolicy voy a analizar solamente el uso de un AST. Dentro del AST usaremos solamente los mensajes más basicos y no usaremos el RBParseTreeSearcher, que es para hacer búsquedas mucho más complejas (ver Secrets of the Rewriter Tool).

parser := RBParser parseExpression: ‘[:form | MySystem removeAllProcesses].

atomicMessages := parser allChildren select: [:each | each isMessage and: [each receiver isVariable]].

argumentName := parser arguments last name.

(atomicMessages select: [:each | each receiver name ~= argumentName])
do: [:each | self addBlockWarning: ‘Message is sent to object [‘, each receiver name, ‘] that is NOT the argument of the Block.’ ].

Estas simples lineas de código evitan que dentro del bloque se envie mensajes a cualquier objeto o clase.

select: [:each | each isMessage and: [each receiver isVariable]].

De todos los nodos del código selecciona los nodos que son mensajes (isMessage) y además el receptor del mensaje (receiver) es del tipo variable (isVariable). Así obtenemos los objetos a los que se le envián mensajes.

(atomicMessages select: [:each | each receiver name ~= argumentName])

Aquí comparamos los objetos obtenidos anteriormente con el nombre del argumento del bloque (form). Si algún receptor de mensaje difiere del argumento del bloque –> estamos en problemas.

Para el caso:

‘[:form | MySystem removeAllProcesses]

Uno de los receptores de mensaje es ‘MySystem‘ y como difiere de form –> salta el error/advertencia.

Hay otros controles que se hacen pero el post sería muy largo…

Anuncios

Usando JADE en Producción

Posted in Aplicaciones, OODBMS - Base de Objetos, POO by smalltalkuy on marzo 18, 2014

La siguiente figura muestra de forma simplificada como queda la instalación de un sistema con GemStone/S 64 bits: 

(http://gemtalksystems.com/(http://seaside.gemtalksystems.com/).

Los clientes Web se contectan al servidor GemStone/S por internet, de esta forma dan usa a la aplicación web.

Al mismo tiempo que los usuarios usan el sistema, existe la posibilidad que desarrolladores se conecten on-line al sistema para hacer modificaciones (paso 1) que una vez “comiteadas” (luego del #commit) quedan disponibles a los usuarios finales (paso 2).

No hay limitaciones en los tipos de cambio a realizar: cambios en la estructura de objetos (o clases), migraciones de objetos (datos), cambios de comportamiento de la aplicación, cualquier cambio es posible.

Alternative development environment

Alternative development environment

 

Conferencia Smalltalk 2011 en Argentina – Update

Posted in OODBMS - Base de Objetos, POO, Traits by smalltalkuy on octubre 22, 2011

Imposible no contagiarse  con el entusiasmo que ponen los organizadores de la Conferencia Smalltalk en Argentina, les transcribo un mail con detalles de la conferencia escrito por Hernan Wilkinson (Smalltalker de larga data)  que es un excelente ejemplo de amor al arte:

Mail de Hernan

¿Te enteraste que este año se hace nuevamente el congreso Smalltalks? (http://www.fast.org.ar/smalltalks2011)
Por ahí te estás preguntando qué puede tener de interesante un congreso sobre un lenguaje que seguro no usas para trabajar y que por ahí no conoces, pero si tenés 5 minutos, lee este mail, te puedo asegurar que no te vas a arrepentir y seguramente querrás venir al congreso 🙂

Para empezar, este congreso no es únicamente sobre un lenguaje de programación sino sobre una tecnología y cultura de desarrollo que aún sigue influenciando fuertemente nuestra profesión. Por ejemplo, el año pasado vino a esta conferencia Gilad Bracha. ¿Quién es Gilad Bracha?, por ahí te suena el nombre… bueno, te suena porque es uno de los que está detrás de desarrollo de Dart, el nuevo lenguaje de Google (http://www.dartlang.org/) ¿Y qué tiene que ver Smalltalk? Justamente Gilad Bracha fue uno de los desarrolladores de Strongtalk (http://www.strongtalk.org/), el Smalltalk más rápido en su época, que utiliza compilación adaptiva, Polimorphic Inline Caching (PIC), tipado de variables opcional, etc. Todas soluciones que ahora se están implementando en Dart. Este año nos visita uno de sus más íntimos colaboradores, Vassili Bykov, implementador del UI de Newspeak, el último lenguaje en el que estaba trabajando.

Pero no solo Smalltalk tiene algo que ver en lo que está sucediendo con Dart, sino también en Ruby… ¿escuchaste hablar de MagLev? (http://ruby.gemstone.com/) Es el servidor de objetos transaccionales y automáticamente persistibles para Ruby, ¿adiviná de dónde viene? MagLev es la implementación de Ruby corriendo sobre GemStone/S, un servidor de objetos transaccionales y persistibles para Smalltalk que tiene más de 25 años y que ahora VMWare compró por su gran potencial y solución como administrador de memoria transaccional para Java, si no lo sabías mirá http://www.springsource.com/products/data-management/gemfire65  ¿Qué tiene que ver con el congreso? que justamente viene al mismo Martin McClure, responsable de MagLev y Norman Green, arquitecto de GemStone! o sea, el que tiene la papa!! ¿Tenés dudas sobre las bases de objetos? ya sabés donde podés obtener las respuestas.

Pero por ahí a vos no te interesa nada de esto… por ahí cómo funcionan los lenguajes de programación o cómo están implementados no es lo tuyo, vos haces aplicaciones web y solo necesitás que la infraestructura escale, persista información rápido, etc. Si ese es tu interés, tenemos un lugarcito para vos también. ¿Escuchaste hablar de GLASS? (http://seaside.gemstone.com/) Es la implementación de Seaside, un framework dinámico basado en continuations para aplicaciones web usando GemStone! (http://www.seaside.st/). O sea, desarrollas una aplicación web como si fuese una aplicación desktop y tenés gratis la transaccionabilidad y persistencia a nivel objetos… y lo que es mejor, sin base de datos relacionales!!! Si!!!!, no más hybernate, no más SQL, no más tablas, solo objetos!…. Por ahí te parece una locura, por ahí te parece que no tiene sentido… te aconsejo que no saques ninguna conclusión y no dejes de venir a escuchar a Dale Henrichs, el encargado de este producto quien nos contará todos los detalles del mismo y cómo influye en los desarrollos web.

¿Aún no te convencí? ok… dejame intentar un poquito más… ¿Conoces a Alan Kay? ¿Turing award, “padre de la computadora personal”, creador de Smalltalk? (http://en.wikipedia.org/wiki/Alan_Kay) No, no, no viene él, todavía :-),  pero vienen Ian Piumarta y Kim Rose, dos de los más íntimos colaboradores de Alan Kay en los proyectos que están llevando adelante en su fundación sobre lenguajes de programación mínimos como OMeta y ambientes de enseñanza como SqueakLand. (http://www.vpri.org/index.html). ¿Te interesa saber cómo usar la computadora para enseñar? Le vas a poder preguntar a Kim. Te interesa saber cómo implementar una buena VM, lo vas a tener a Ian cerquita para conversar.

Si aún estás leyendo y no fuiste al final de la página significa que aún no te convencí… hmmm, a ver qué te parece esto: MOOSE (http://www.moosetechnology.org), una plataforma para hacer análisis de tus programas, no importa si están escritos en Java, C++, C# o Smalltalk, te permite ver visualmente el diseño de tu sistema no usando esos diagramitas simples de UML sino por medio de gráficos especialmente preparados para reconocer rápidamente algunos errorcitos que por ahí tiene tu sistema :-). Tudor Girba, desarrollador de esta plataforma vendrá a comentarnos cómo funciona, cómo está desarrollada y qué podés hacer con ella puesto que además es gratis!

Por ahí ya estás aburrido de leer tanto, no te culpo y tampoco me culpes a mi! es un congreso excelente! no te lo podés perder!, puesto que la cosa no termina acá… si te interesa saber sobre los principales ambientes de desarrollo en Smalltalk tanto opensource como comerciales, tendrás la oportunidad de conversar con Markus Denker de Pharo (http://www.pharo-project.org/home)  y John O’Keefe, arquitecto de VASmalltalk (http://www.instantiations.com/)

¿Muchos temas relacionados con la industria no? ¿y qué hay acerca de investigación, aún se investiga algo en con Smalltalk? Te comento que este es el segundo año consecutivo que el congreso tiene una sección completamente dedicada a la investigación, con un comité evaluador envidiable y con publicaciones en journals. Por lo tanto, si te interesa hacer investigación con objetos y necesitas que tus publicaciones sean en congresos reconocidos, te comento que Smalltalks es uno de ellos. Y no me quiero olvidar de la docencia universitaria… Smalltalk sigue siendo el lenguaje utilizado para enseñar objetos en casi todas las universidades y no para enseñar meramente un lenguaje de programación comercial.

Y a pesar de todo esto, de toda esta gente que nos va a visitar y con quienes podremos compartir su experiencia y la nuestra, falta lo más importante: La comunidad argentina de Smalltalk, una de las principales comunidades en el mundo de esta tecnología. Es esta comunidad que hace 5 años está organizando este congreso a todo pulmón y hace 3 años viene ganando de manera consecutiva el primer y tercer puesto del “Esug Technology Award”, premio a los mejores desarrollos hechos en Smalltalk a nivel mundial! y lo más interesante es que los ganadores son de distintas universidad de nuestro país como la UBA, la UAI y la UTN!
Y la comunidad no se limita a eso… ¿sabés que hay un Smalltalk argentino? ¿un Smalltalk desarrollado por un argentino y utilizado a nivel mundial? se llama Cuis y su desarrollador Juan Vuletich (http://www.jvuletich.org/Cuis/Index.html), quien además está llevando adelante el desarrollo de Morphic 3.0 y trabajó junto a Alan Kay desarrollando Squeak. ¿O sabías que el layer open source para comunicarse con base de datos relacionales desde Pharo o Squeak más usado también fue desarrollado por argentinos? o que el framework de serialización de objetos opensource Fuel también fue desarrollado por un argentino? Te suenan Mariano Martinez Peck, Guillermo Polito, Martín Dias, Esteban Lorenzano entre otros?, ellos son parte de nuestra comunidad y nos recuerdan constantemente la muy buena capacidad técnica que tenemos en nuestro país. También es argentino el arquitecto de la VM de Smalltalk más rápida que hay, la de VisualWorks (http://www.cincomsmalltalk.com/main/products/visualworks/) y le podés preguntar cómo hizo para acelerar hasta cerca de un 70% el GC en el último año, y vas a poder escuchar una charla de un argentino que es smalltalkero hace más de 20 años… ¿te imaginás cómo sería tu productividad si estuvieras trabajando hace más de 20 años en el mismo lenguaje? ¿un lenguaje que además sigue dando mucho a nuestra profesión?… Esta gente es parte de esta gran comunidad y también participarán de este maravilloso evento…. este congreso no es solo importante por la gente que viene sino por la gente que ya está!

Espero haberte convencido, espero que te hayas dado cuenta que este congreso no es acerca de un lenguaje de programación sino de una comunidad de desarrolladores que quiere compartir con vos lo que conoce y también aprender de vos. Si querés ayudar a que esta comunidad siga creciendo, si querés ayudar a que este congreso siga siendo un congreso de desarrolladores y para desarrolladores, anotate acá: http://www.fast.org.ar/smalltalks2011 Es gratis y te puedo asegurar que no te vas a arrepentir. Podes ver las charlas que se darán en:  http://www.fast.org.ar/smalltalks2011/talks

Este año se hace del 3 al 5 de Noviembre, en la Universidad de Quilmes. Y no está cerrada sólo al mundo de los objetos, este año Fidel (Pablo E. Martínez López), uno de los referentes argentinos de Programación Funcional, una comunidad que comparte que en definitiva somos todos desarrolladores, dará una charla sobre objetos! Mirá las reacciones que ya está provocando: http://vimeo.com/30529851

 

 

 

Conferencia 2011 de Smalltalk en Argentina

Posted in OODBMS - Base de Objetos, POO, Traits by smalltalkuy on octubre 20, 2011

Conferencia Smalltalk en Argentina

byte_smalltalk1

Este año se realiza una vez más la conferencia Smalltalk en Argentina, como siempre vienen expertos de todo el mundo.

El link a la conferencia es: http://www.fast.org.ar/smalltalks2011

Entre los oradores destacados se encuentran: Ian Piumarta (Viewpoints Research Institute), Kim Rose (Viewpoints Research Institute), Tudor Girba (Moose Technology), Vassili Bykov (Newspeek), John O’Keefe (IBM VisualAge), Marcus Denker (INRIA Lille-Nord Europe), Martin McClure (GemStone Systems), Dale Henrichs (GemStone Systems), James Foster (GemStone Systems), Norman Green (GemStone Systems).

Las Charlas

Análisis de un Diseño Basado en Traits sin Subclasificación – Diego Campodonico, por más info sobre TRAITS click aqui 

Customizando Pharo Smalltalk – Nicolas Paez

DBXTalk: actualización – Guillermo Polito, DBXTalk es un framework de mapeo Objetos-Base Relacional

Validación de Código Estático para Traits – Juan Sebastian Aizcorbe, por más info sobre TRAITS click aqui 

Mark and Compact Scavenger Garbage Collectior in Smalltalk – Javier Burroni

GemStone actualización y Hoja de Ruta – Norm Green

VA Smalltalk actualización del producto – John O’Keefe

GemStone/S para principiantes – Martin McClure,  más info sobre GemStone/S click aquí y aquí.

Fuel: Cluster de objetos serializados – Martin Dias

Simulated Annealing – Guillermo Amaral

Otro Traductor de Smalltalk a C/C++  – Ricardo Moran

Herramientas Web para GemStone/S (64 bits) – James Foster

Los 10 Mandamientos de TDD (test driven development) – Hernan Wilkinson

CUE es esto –  Dan Rozenfarb

Hablemos tODE – Dale Henrichs, tODE (the Object Development Environment)

Para atrapar a un ratón mejor – Ian Piumarta

Monstruos de la IT: ¿Qué ha hecho para la educación? – Kim Rose

Humane assessment with Moose – Tudor Girba

Construyendo Browsers con Glamour – Tudor Girba

Trayendo ideas BDD a Pharo Smalltalk – Nahuel Garbezza, BDD (Behaviour-driven development)

Pharo Smalltalk un año después – Marcus Denker

Investigación en RMOD – Marcus Denker

Smalltalk, C# y JavaScript – Angel J Lopez

IronSmalltalk – Todor Todorov

Construyendo tus propias imágenes (Smalltalk) con Pharo Smalltalk usando Metacello – Mariano Martinez Peck

Que aprendi enseñando Smalltalk y por que estoy tan contento con Smalltalk – Hernan Wilkinson

10 años de Diversión en Caesar System – Leandro Caniglia

GRID – Grid Reports Interactivly Designed – Carla Florencia Griggio

Visualizar la ejecución de Software para identificar anomalías – Juan Pablo Sandoval Alcocer

Arquitectura GLASS comparada con Ruby on Rails

Posted in Aplicaciones, OODBMS - Base de Objetos, Web by smalltalkuy on enero 26, 2011

Descripción

En esta ocasión voy a describir la arquitectura del framework GLASS (gemstone/s – linux – apache – seaside – smalltalk) con más detalle, y luego voy hacer una comparación sencilla con Ruby on Rails.

También ver el blog de Avi Bryant (Twitter) sobre GemStone/SRuby on Railshttp://www.avibryant.com/2008/03/ive-had-a-numbe.html

En la comparación solamente se mostrarán las diferencias, cada uno puede sacar sus conclusiones según su conocimiento.

La siguiente imagen denota de forma detallada (pero no completa) la arquitectura de GLASS:

Network: representa la web y los diferentes clientes web que se conectan con GLASS.

Database host: es el repositorio alojado físicamente en un servidor. El repositorio se puede dividir en N extent, cada extent es un archivo en disco.

Transaction logs host: es el LOG de transacciones de GemStone/S que puede estar ubicado en otro servidor diferente del  repositorio (como en este caso).

Stoned Process: el proceso Stoned es el coordinador del repositorio y de los procesos Gem. Este proceso se encarga de guardar y recuperar objetos del repositorio en disco, asi como asegurar la concurrencia de los procesos Gem y la consistencia del repositorio. El proceso Stoned puede correr en el mismo host que los Gem o no (esto es configurable).  Los conflictos de actualización son resueltos por el proceso Stoned. Hay un Stoned por repositorio.

Gem Process: son (procesos) máquinas virtuales que le dan vida a los objetos del repositorio, ejecutan métodos de las clases, alteran objetos y crean nuevos, etc. Cada Gem actual como un repositorio único para los clientes. Los procesos Gem también pueden actualizar el repositorio si esa actualización no entra en conflicto con algún otro proceso Gem.

Shared Page Cache: son segmentos de memoria virtual del SO. Cuando los objetos son accedidos a disco entonces se van cargando en el Shared Page Cache. Si un objeto todavía no ha sido accedido entonces cuando se lee por primera vez se carga en el Shared Page Cache, luego el próximo Gem que requiera ese objeto no tiene que acceder a disco. Como se ve en la figura puede haber más de un Shared Page Cache, estos se llaman Remote Shared Page Cache. Las sincronización entre los diferentes Shared Page Cache se haceautomáticamente  y es transparente para el desarrollador. Hay procesos (que son invisibles cuando estamos desarrollando) que se encargan de copiar y mantener actualizados los diferentes Shared Page Cache.

Continuations

Esta plataforma de desarrollo soporta Continuations. Continuations da la capacidad de persistir la pila de ejecución de un proceso Gem (recordar un Gem es una máquina virtual) y guardarla en el repositorio. Luego otro proceso Gem puede acceder a esa pila de ejecución en el repositorio, cargarla en memoria y continuar con su normal . Por lo que no hay que preocuparse en identificar que proceso Gem se hizo cargo de que petición.

Debug

Si ocurre un error en nuestra aplicación web somos capaces de guardar la pila de ejecución en el repositorio, y luego acceder al servidor y como DBAs levantar la pila de ejecución y analizar el error.

Si !!! todo el contexto del error se guarda en el repositorio y vamos a poder explorar todo los objetos involucrados en ese error, y ejecutar paso a paso lo que hizo el usuario para que surgiera ese error.

Escalabilidad

GLASS soporta escalabilidad horizontal, es decir, que a cualquier problema de performance se puede agregar más servidores para albergar más procesos Gem. Como los procesos Gem son las máquinas virtuales entonces tengo más recursos para responder a las diferentes peticiones.

Sistemas Reales

Toda esta arquitectura puede correr sobre el mismo servidor o distribuido en N servidores.

JP Morgan

Hay sistemas en producción dónde cientos de máquinas (de los mismo usuarios de la intranet) albergan cientos de procesos Gem. En este caso al escalabilidad es horizontal.

London Petroleum Exchange

Un solo servidor alberga toda la aplicación, este servidor es un AIX Power 6 con 512 Gb de memoria.

Comparación con Ruby on Rails

No soy experto en Ruby on Rails solamente conozco parte de la arquitectura.

Una aplicación Ruby on Rails típica consta de: un cluster de servidores para soportar la base de datos, varios caches en memoria, varios procesos que se encargan del funcionamiento de los objetos y la renderización de páginas web.

Normalmente la base de datos es MySQL y se ubica en unos o más servidores, luego hay varios servidores que albergan los caches en memoria (memcached) (el número de servidores para MySQL es el mismo que para los memcached), y se activan entre 8 y 12 worker processes para realizar el procesamiento, llamados mongrels (incluyen el interprete Ruby y el Web Server Mongrel).

Los mongrels aceptan las peticiones web y ejecutan el código de la aplicación. Los objetos dentro de los worker processes están vivos, envían y reciben mensajes, ejecutan métodos, cambian los estados de los objetos Ruby, etc. Los objetos solamente existen en la memoria de un mongrel en particular.

Estos objetos se persisten en la base de datos usando los Active Records de Ruby. Cuando un mongrel modifica un objeto, y la transacción hace commit entonces objeto se actualiza en MySQL, y cuando algún otro proceso lo lea obtendrá la versión actualizada del objeto.  Los objetos dentro de MySQL están muertos, no hacen nada hasta que son puestos dentro del algún proceso mongrel.

Ruby on Rails y GLASS (gemstone/s linux smalltalk seaside)

MAGLEV hace posible el desarrollo de aplicaciones Ruby sobre GemStone/S, con una la arquitectura idéntica a la de Smalltalk.

 

VMWare, Twitter y Google tres compras grandes este año

Posted in Aplicaciones, OODBMS - Base de Objetos by smalltalkuy on diciembre 11, 2010

Este año ha sido particularmente interesante para el mundo Smalltalk, ya que VMWare, Twitter y Google, compraron (total o parcialmente) tres empresas especialistas en tecnología Smalltalk.

Primera Compra (Buscar en google: “VMWare acquired GemStone”)

En mayo SpringSource una división de VMVare compro la empresa GemStone Systems.

GemStone es la empresa creadora de GemStone/S, “el Oracle de las OODBMS“, y de la plataforma de desarrollo GLASS (GemStone/S Linux Apache Smalltalk Seaside), además tiene productos para tecnología Java, Ruby, etc.

Como resultado de esta compra la plataforma GLASS ha aumentado la capacidades de la versión libre (y código abierto al estilo Smalltalk). Ahora no hay limite para el tamaño del repositorio de objetos, la SPC (shared page cache) puede ser de hasta 2 GB, y hace uso de hasta dos procesadores.

Segunda Compra (Buscar en google: “Twitter Acquires Smallthought Systems”)

En junio Twitter adquiere la empresa Smallthought Systems, esta empresa es la creadora del framework Web Seaside para diferentes Smalltalks. También han contribuido a la comunidad de Ruby on Rails, uno de sus creadores es Avi Bryant.

Tercera Compra (Buscar en google: “Google acquire Instantiations”)

En septiembre el gigante Google compra la totalidad de los productos y recursos humanos de Instantiations en tecnología Java. En esta compra hay dos claros beneficiados,  primero los desarrolladores Java, ya que todos los productos para Java de Instantiations son gratis, como ser: GWT DesignerCodePro AnalytiXWindowBuilder ProWindowTester Pro. Todos estos productos se pueden bajar sin cargo. Los segundos beneficiados son los desarrolladores de VA Smalltalk ya que el presidente de Instantiations aseguro que los ingresos obtenidos se volcarían a expandir su tecnología Smalltalk. Varias de las herramientas Java construidas por esta empresa están basadas en herramientas ya existentes en su tecnología Smalltalk.

Ha sido un año movido y parece que los ambientes y lenguajes dinámicos están tomando cada vez más fuerza…

Saludos…..

 

GLASS – Ambiente de desarrollo Web

Posted in OODBMS - Base de Objetos, POO, Web by smalltalkuy on octubre 24, 2010

La gente de GemStone/S ha aumentado los limites para la versión free del ambiente GLASS GemStone/S Linux Apache Seaside Smalltalk– para desarrollo web.

Los nuevos limites están publicados es: http://seaside.gemstone.com/docs/GLASS-Announcement.htm

Los más importante son:

Repositorio de objetos: ilimitado (la restricción anterior era de 16 GB)

Número de Procesadores del servidor: 2 (antes 1 procesador)

Shared Page Cache (SPC): 2 GB (antes 1 GB)

El SPC es muy importante ya que es el cache de los objetos accedidos más frecuentemente, si bien 1 GB de SPC era suficiente, ahora con 2 GB esta mucho mejor.

Ahora con estos nuevos parámetros GLASS se convierte en una opción real para empresas comerciales de tamaño pequeño o para desarrolladores individuales.

Dado que GemStone/S es una Base de Objetos, NO requiere el mapeo entre el Modelo de Objetos/Clases y el Modelo Relacional.

Limites de la Versión Full de GemStone/S

Repositorio de objetos:    ilimitado (8192 TeraBytes)

Número de Procesadores del servidor: ilimitado

Shared Page Cache (SPC): 32768 GB


Ejemplos de Código de una OODBMS (GemStone/S)

Posted in OODBMS - Base de Objetos, POO, UML by smalltalkuy on febrero 17, 2010

Ejemplos de Código de una OODBMS (GemStone/S)

Supongamos que tenemos el siguiente modelo UML plasmado en GemStone/S para lograr la persistencia, en lugar de usar una RDBMS como (Oracle u otra).

En la figura anterior vemos el modelo UML que estamos usando, el asunto aquí no es discutir el modelo, sino como logramos la persistencia de este modelo en una OODBMS como GemStone/S.

Básicamente el modelo tiene SoftwareFactory como clase central, se intenta llevar un registro de tareas de diferentes SoftwareFactory con muchos proyectos. En modelo es bastante sencillo, es simplemente la escusa para poder hablar de una OODBMS como GemStone/S.

Como podemos ver unaSoftwareFactory tiene muchos Proyectos (Project). Tenemos que unProyecto tiene varios Equipos (Team), y que un mismo Equipo (Team) puede estar en más de un proyecto. Cada Equipo (Team) tiene roles (con fecha inicio y fecha fin).

Cada Equipo (Team) y cada Rol tiene tareas a realizar respectivamente Tareas de Equipo (TeamTask) y Tareas de Rol (RolTask), cada Rol tiene asociado unaPersona (Person)….. a grandes rasgos el sistema es algo asi, con muchas…muchas… mejoras para hacerle…

Instalar el Modelo

Primero se crea el modelo UML dentro de GemStone/S, recordar que GemStone/S es un backend !!!

Para conectarme a el se usa cualquier interfase disponible para GemStone/S (Visual Works, Visual Age, Dolphin, Squeak, Seaside – cliente web). Estos son algunos Smalltalk que se pueden conectar a GemStone/S – que es otro Smalltalk pero es una OODBMS.

El modelo se crea dentro de Smalltalk con la clases, los atributos (variables de instancia), las relaciones, etc. La lista de clases quedaría como se muestra en la siguiente figura sacada de Dolphin Smalltalk.

Aquí vemos la lista de clases, esta lista se compila dentro GemStone/S de forma directa y tenemos nuestro sistema de control de tareas para N SoftwareFactories en una OODBMS.

Ahora bien como lograremos hacer persistente todos los objetos que queremos manejar ?

Supongamos que queremos crear una SofwareFactory llamada “Traditional” (si hay alguna empresa llamada así no son ellos).

Recordemos: unaSoftware tiene nombre y descripción, y puede tener proyectos.

Código GemStone/S

System beginTransaction. “comezamos una transacción”

traditional := SoftwareFactory new name: ‘Traditional’; description: ‘Just another SF’; yourself. “creamos una fábrica”

factories := UserGlobals at: #Factories put: OrderedCollection new. “creamos una colección para guardas nuestras fábricas”

factories add: traditional. “agregamos a la coleccion de fabricas la recien creada [traditional]”

System commitTransaction. “confirmamos la transacción”

Ahora nuestra nueva fabrica puede ser accedida y modificada por todos los usuarios conectados a GemStone/S, ya sea una conexión web o un cliente desktop. Acá vemos el código pero este código esta en una aplicación web o una desktop.

Agregar una proyecto a una Fabrica

System beginTransaction. “comezamos una transacción”

factories := UserGlobals at: #Factories. “obtenemos la colección de fábricas”

traditional := factories detect: [:each | each name = ‘Traditional’] ifNone: [Error signal: ‘no se encontro’]. “de todas las fabricas seleccionamos por su nombre la que recién agregamos, si no esta devolvemos un error”

traditional addProject: (Proyect new name: ‘Sistema global de información del estado’). “agregamos un proyecto a nuestra fábrica”

System commitTransaction“confirmamos la transacción”

Como vemos la capacidad de consultar al repositorio del sistema depende de dos cosas, la primera es la jerarquía de clases de la clase Collection (para poder realizar consultas), y la segunda y muy importante como esta diseñado nuestro sistema.

La jerarquía Collection

La clase SoftwareFactory tiene una colección de Proyectos (Project), esta colección es en realidad una instancia de la clase OrderedCollection de GemStone/S – pudimos haber elegido otra. Como se hace esto:

Como se ve en la imagen el método #initialize de SoftwareFactory pone en la variable <project> una OrderedCollection.

Cada instancia de SoftwareFactory tiene una colección en la variable <project>.

OrderedCollection soporta mensajes como: #add: #remove: #includes: #detect:ifNone: (el del ejemplo) #select: #reject: #anySatisfy: #allSatisfy: #addAll:

Todos estos métodos pueden ser usados para consultar/modificar los proyectos de la fábrica, claro que estos están embebidos como comportamiento dentro de las clases.

Ejemplos:

– Obtener los roles de los usuarios en un proyecto ? código… (más abajo)

– De todos los proyectos de una fabrica quiero saber cuales tiene más de x roles ? código…

System beginTransaction. “comezamos una transacción”

factories := UserGlobals at: #Factories“obtenemos la colección de fábricas”

“aquí usamos el métodos #detect:ifNone:

traditional := factories detect[:each | each name ‘Traditional’] ifNone[Error signal: ‘no se encontro].

traditional proyectosConMasRolesQue: 8. “este es un método embebido en la clase SoftwareFactory – ver figura con el código”

System commitTransaction. “confirmamos la transacción”

Como vemos la clase SoftwareFactory tiene el método proyectosConMasRolesQue: cuyo código es el siguiente:

Como vemos los que hace la clase SoftwareFactory es recorrer la variable <project> que es una OrderedCollection, y seleccionar los objetos que dan <true> (si) al evaluar el método #tieneMasRolesQue:. O sea, que a cada Proyecto de la colección se le envía el mensaje #tieneMasRolesQue: y si responde <true> (si) es seleccionado.  El mensaje #tieneMasRolesQue: tiene el siguiente código:

Lo que hace la clase Proyecto es obtener todos sus roles, es decir, ir a todos sus equipos y obtener los roles de cada equipo y ver si ese número es mayor que <anInteger>. Ahora veremos el código de #getAllRols


Como se ve, se recorre la variable <team> que es una colección de Equipos (Team), y de cada equipo se obtiene la variable <rol> que es una colección de Roles. El mensaje #addAll: agrega una colección a otra, en nuestro caso usamos <todosLosRoles> para ir guardando los roles.

Otro ejemplo:

– Obtener los roles de los usuarios en un proyecto ? código…

Con el método #rolOf: de la clase Project (Proyecto) obtenemos los roles de <aPerson> en ese proyecto.

El método #getAllRols obtiene todos los roles de un Proyecto (ver ejemplo anterior), como cada Rol tiene una sola Persona asociada, para todos los Roles compara la Persona asociada a ese Rol con la Persona <aPerson> pasada como parámetro (ver imagen). En GemStone/S el comparador == compara por identidad del objeto (oop – object oriented pointer), cada objeto persistente tiene su propia oop.

Conclusiones

La manipulación de objetos dentro de una OODBMS depende directamente de dos cosas:

Diseño de nuestro modelo del objetos (o de clases UML)

Como vimos en el ejemplo anterior el diseño de clases, si quisiéramos conectar la clase SoftwareFactory con Rol tendríamos que cambiar el modelo, y habría que ajustar el comportamiento (los métodos). Por lo que nuestro diseño influye como se realizan las búsquedas en nuestro sistema.

Jerarquia de clases de Collection que tenga la OODBMS en particular

Las clases que ofrece una OODBMS nos afectara la forma de crear, manipular, conectar y consultar los objetos. Cuando más rica sea la OODBMS más liberad para escoger como conectar y consultar nuestro objetos tendremos.

Cada OODBMS tiene su jerarquia de clases particular, GemStone/S tiene ya 25 años por lo que esta jerarquía esta bastante evolucionada. Todas las clases cumplen ciertos protocolos, veremos ejemplos sencillos de estos mensajes.

Incluye colecciones como: OrderedCollection (del ejemplo), Dictionary, Set, SortedCollection, Array, LookupTable, RcQueue, RcSet, etc.

Mensajes generales a colecciones

aCollection add: anObject – “agrega un objeto a una colección”

aCollection remove: anObject – “remueve un objeto de una colección”

aCollection includes: anObject – “indica si incluye el objeto <anObject>”

aCollection detect: aBlock ifNone: exeptionBlock – “selecciona un unico objeto que cumple la condicion pasada como parametro <aBlock> si no encuentra ninguno evalúa el parametro <exeptionBlock>”

aCollection detect: [:each | each nombre = ‘Pedro’] ifNone: [Error signal: ‘No existe Pedro’].

aCollection select: aBlock  – “selecciona todos los objetos que cumplen la condición <aBlock>”

aCollection select: [:each | each edad > 18] “el mensaje #reject: es lo mismo pero rechaza en lugar de seleccionar”

aCollection anySatisfy: aBlock – “devuelve true o false – indica si alguna instancia de la colección cumple con la condición <aBlock>”

aColleciton do: aBlock – “para cada elemento de la colección evalúa <aBlock>”

aCollection do: [:each | each calcularCostos]


Ruby con persistencia transparente – MagLev

Posted in OODBMS - Base de Objetos by smalltalkuy on diciembre 21, 2009

No se cuanta gente usa Ruby en Uruguay, pero se libero la versión Alpha de Maglev (ruby that scales).

Esta en versión Alpha, pero no dejaría de tenerlo en el radar…

Que es MagLev ? (magnetic levitation)

MagLev es una nueva máquina virtual VM Ruby construida sobre la base de objetos GemStone/S.

Al estar construida sobre la VM de GemStone/S los programadores Ruby se ven favorecidos con la persistencia transparente que ofrece GemStone/S. Es decir, NO hay necesidad de persistir los objetos Ruby, ya que cuando en MagLev se ejecuta:

BankAccount.new – el objeto ya nace persistente dentro la base de objetos, sin importar cuantos objetos componen aBankAccount, y puede ser accedido por un número ilimitado de usuarios. Es el mismo beneficio que tienen los programadores Smalltalk que usan GemStone/S para persistir los objetos. Se le dice adios al complejo proceso de mapeo de objetos a una base de datos relacional.

Soporta ACID, seguridad, etc, para tener una idea GemStone/S es como el Oracle pero de las OODBMS.

El siguiente es un blog de uno de los programadores de MagLev http://maglevity.wordpress.com/2009/12/03/vms-repository-maglev/#more-9

Esta entrada explica lo básico de MagLev.

Si estas acostumbrado a Ruby on Rails y queres ver algo parecido te recomiendo Seaside (http://seaside.gemstone.com/) para GemStone/S que es los mismo que MagLev pero para Smalltalk.

GLASS ambiente de desarrollo WEB – GemStone-Linux-Apache-Seaside-Smalltalk

Posted in OODBMS - Base de Objetos, Web by smalltalkuy on diciembre 7, 2009

GLASS

Es un ambiente para desarrollar aplicaciones web GemStone-Linux-Apache-Seaside-Smalltalk, similar a LAMP (Linux-Apache-MySql-Php).

La pagina oficial es http://seaside.gemstone.com/ es un conjunto de herramientas que permiten desarrollar apliaciones web de alta performance y en tiempo record.

NO es necesario el complejo mapeo del modelo de Objetos a una Esquema Relacional, la persistencia  esta dada de forma transparente por GemStone/S, que es una base de objetos pura (OODBMS).

GLASS es un GemStone/S corriendo sobre Linux (también corre sobre Windows) con Apache como Web Server, y Seaside 3.0 (http://www.seaside.st) para desarrollo Web.

Todo puede ser configurado y se pueden usar otros Web Servers y se puede usar AIDA 6.0 (http://www.aidaweb.si/) en lugar de Seaside para desarrollo Web.

Que es realmente GLASS ?

Es una Máquina Virtual Smalltalk de la empresa (GemStone systems http://www.gemstone.com) que da persistencia de forma transparente sobre una OODBMS (Gemstone/S el Oracle de las OODBMS). A esta Máquina Virtual se le pueden incorporar diferentes Web Servers, lo que permite a la OODBMS actuar como servidor de páginas y aplicaciones.

La versión de GemStone/S usada en GLASS es de 64 bits, en capacidad es similar a Oracle.

Al ser Smalltalk, todo el código fuente es accesible al usuario para ser explorado y modificado on the fly (mientras todo esta funcionando). Obviamente tiene manejo de permisos y demás funcionlidades de seguridad, a no entrar en pánico.

La nueva versión de GemStone/S, la 3.0, que esta por salir en estos meses va a ser compatible con Ruby, por lo que los usuarios de Ruby podrán persistir sus aplicaciones usuando GemStone/S, que es lider en el mercado de las OODBMS con 25 años de experiencia. Por más información de la versión para Ruby ir a: Maglevtodavía en desarrollo.

Escalabilidad

GLASS realmente escala ?

Ver entrada: Gemstone/S el Oracle de las OODBMS

Como Smalltalk tiene la fama de ser lento y de uso academico (fama sin sustento técnico alguno!) les paso unos links de escalabilidad:

* http://gemstonesoup.wordpress.com/category/scalability/

Comentarios de desarrolladores usando GLASS:

This particular application started life as a LAMP app, then became a Rails app, then a Seaside+GLORP app… and now it’s in GLASS. It’s much, much faster than any of its predecessors (some pages that used to take 10+ seconds to generate come up in about 100 ms), and users have already commented on how much more responsive it is.

Esta aplicación en particular empezo como una aplicación LAMP, luego se convirtio en una aplicación Ruby on Rails, más tarde en Seaside + Glorp (framework web + framework de mapeo de objetos a RDBMS), y ahora es una aplicación GLASS. Es mucho. mucho más rápida que cualquiera de sus predecesores (algunas páginas que demoraban en generarse hasta 10 segundos ahora lo hacen en 100ms), y los usuarios finales ya han comentando sobre esto.

Links

Y estos son los blogs de dos de los desarrolladores de GLASS:

James Foster

http://programminggems.wordpress.com/

Dale :

http://gemstonesoup.wordpress.com/

Saludos,

Bruno