Ir al contenido principal

Algunas lineas sobre Versionado en la Rocha Beta 2

En la versión Beta 2 de la Rocha se incluyó algo llamado "KB Versions".

Mi sensación sobre el tema es que el esquema de "versionado" quea permite GX Rocha en su Beta 2 sienta una base muy versátil que permite mantener "hilos de desarrollo" independientes, versiones diferentes por cliente, por ambiente, etc. Todo integrado en una misma KB lo que lo hace mucho más práctico y potente.

Está explicado en el wiki, de todos modos acá mi interpretación "sui generis" del asunto que pueda servir como "introducción" al tema.

Disclaimer: Aunque los conceptos son iguales para todo el mundo, este post está orientado especialmente para quienes vienen de versiones anteriores de GX ya que en ciertos momentos se hace un paralelismo entre los conceptos actuales y los de versiones anteriores.


Las bases


Cuando desarrollo una KB basicamente tengo dos cosas: objetos y environments

Los objetos son las transacciones, webpanels, dominios, atributos, documentos, etc.

Los environment refieren a las propiedades como base de datos utilizada, información de conexión a la misma, propiedades de ejecución, lenguaje, etc.

Diferentes environments


Suele suceder que una misma aplicación (grupo de objetos) requiere generarse para diferentes "environments", por mencionar ejemplos: diferentes DBMS, diferentes plataformas: en Java, .NET, Ruby o cualquier otra propiedad del estilo.

Eso en versiones anteriores de GeneXus se resolvía agregando un modelo porque era el único método para tener diferentes "sets" de valores de las propiedades. Así por ejemplo tenía un modelo .NET y otro Java o un modelo con SQL Server, otro con MySQL y otro con Oracle, etc.

En la Rocha, cuando se crea una KB, ya se establece un environment default y a su vez se pueden crear nuevos "environments", se puede ver el proceso en este video:








En todo momento tendré un "environment activo" que en definitiva es lo que gobierna para qué plataforma, DBMS, lenguaje, etc se está generando.

En este otro video se puede ver como activar (set target as) un environment:








Es decir, un modelo era un conjunto de objetos + un environment, eso en la Rocha no es más necesario y solo definiendo un nuevo "environment" es suficiente.Llamemos a esto (Objetos + uno o más environments) un "branch", digamos que una "linea de trabajo" dentro de la KB. Armin dabe un ejemplo de uso del tema en su blog.

Diferentes branches


Como comentaba antes, toda KB, ni bien se crea, tiene un "branch" inicial conocido como "trunk". No tiene nada de especial, solo que es el "tronco" de la KB y que su nombre es el propio nombre de la KB.

Se puede trabajar sobre ese branch y nada más o a su vez se pueden derivar diferentes "branches", es decir armar otro conjunto de "objetos+environments" que tienen un objetivo especifico.

Por ejemplo, en un momento se trabajará sobre un grupo de objetos a entregar en Marzo/2008 (llamémosle: corto plazo) y a la vez se está trabajando en una re-ingeniería de la KB que estará finalizada en Setiembre/2008 (llamémosle: mediano plazo).

Del mismo que hay una perspectiva "evolutiva", puede haber una perspectiva "por cliente" o por el motivo que sea que requiera tener más de un branch (linea de trabajo) sobre la misma KB.

Dentro de una KB siempre se está trabajando sobre un "branch" activo, digamos que en el ejemplo estaré trabajando sobre el "branch corto plazo" o el "branch largo plazo", que en definitiva es un conjunto de objetos en un "estado A" y que tiene asociado un conjunto de "environments" (set de valores de propiedades).

En este video se muestra como crear y activar branches:








Diferentes versiones


De un branch, además de otro branch, se puede derivar una versión.

Creo que la manera más fácil de entender una versión es: una "foto" del branch (objetos + environments) del cual se deriva. Es decir, quedan los objetos en un "estado A", y todos los environments en "estado A". Todo read-only. Similar a un backup.

Volviendo al ejemplo, habiamos derivado el branch "Corto plazo" que tenemos que entregar en Marzo/2008, entonces el 6/Dic/07 decidimos liberar la "Beta 2" de nuestra aplicación. Lo que hago es "activar" ese branch "Corto plazo" y derivar de él una versión, llamémosle "Beta2". Lo mismo podría hacer si fuera a hacer una entrega a un cliente, derivar una versión significa "congelar" lo que entrego al cliente.

En este video se puede ver como crear una versión a partir de un branch:








Mis usuarios testearán dicha versión y seguramente reportarán problemas, entonces podré corregirlos en el branch "corto plazo" y en algún momento derivar la version "beta 2.1".

Sin embargo si he realizado modificaciones en el branch "Corto plazo" que no quiero incluirlas en este momento, puedo derivar un nuevo branch de la versión "Beta 2" y realizar las modificaciones en el mismo.

En el siguiente video se muestra como derivar una versión de un branch:








Mientras los usuarios prueban la Beta 2, a su vez se continua trabajando en el largo plazo donde hago cambios más sustanciales.

En definitiva, con los "branches" y "versiones" puedo tener varias lineas de trabajo a la vez sobre la misma KB y en cada momento decidir con que branch trabajar. En el ejemplo está con una perspectiva "evolutiva" pero las necesidades pueden variar de acuerdo a las circunstancias de cada equipo, eventualmente preciso "branches/versiones" por cliente o por el motivo que fuera.

Resumen


Volviendo a lo del principio, el esquema de "objetos", "environments" (configuraciones), "branches" (objetos + configuraciones que representan una linea de trabajo) y "versiones" (objetos + configuraciones que representan una foto), sienta las bases para trabajar con diferentes metodologías (más o menos ágiles, más o menos flexibles, lo que cada grupo de trabajo estime más conveniente), en diferentes contextos (multiples clientes, multiples versiones, etc).

A quienes quieran profundizar más les recomiendo la documentación que refiere al tema

Comentarios

Entradas más populares de este blog

Abrir links con aplicaciones nativas y no el browser (deeplinking)

El problema que tengo con algunas aplicaciones Android/iOS es que cuando recibo un link por algún medio (mail, tweet, etc) al abrirlo me lo abre con el browser, en lugar de abrirlo con una aplicación nativa asociada a ese “contenido”. Por ejemplo, si recibo un link a un tweet espero que lo abra con alguna aplicación de twitter que tenga instalada y no con el browser. De modo análogo si recibo un mail con una nota de prensa de un medio X y tengo la aplicación de ese medio X instalada, espero que el link lo abra con la aplicación nativa y no con el browser. Lo mismo quisiera con mi aplicación de "banking" o cualquiera que tenga instalada y sepa manejar ese "contenido" (link). Los motivos son bastante obvios pero los resumo en: la experiencia de usuario es mucho mejor en la aplicación nativa que en el navegador. Parte importante del tema es que el mismo link sea válido tanto para ver el contenido en el browser como para verlo en la aplicación, porque como prove...

Sobre plomeros y sanitarios

Hace unos días estaba en casa de mi madre, quien sigue viviendo en la ciudad donde yo nací (Florida-Uruguay), cuando sonó el timbre. Fui a atender y me encontré con Martín, un ex compañero de liceo que hacía años no veía. Luego de preguntarle cómo andaba y el saludo de rigor, le pregunté que estaba haciendo por allí y me dijo "estoy trabajando aquí", ahí noté que venía con baldes y herramientas y recordé que es hijo del plomero que toda la vida trabajó en mi casa. El baño de mi madre estaba con problemas en la presión de agua así que llamó al plomero "tradicional" y este le comentó que estaba retirado pero que enviaría a su hijo. Allí pues estaba Martín. Es interesante encontrarse con compañeros de escuela/liceo que uno no ve hace muchos años, da para otro post seguramente. La cuestión es que seguimos conversando mientras él trabajaba. Le pregunté por el padre y me dijo que estaba bien pero ya medio cansado del trabajo y que nunca se había podido adaptar a los cambi...

Mi primer chatbot con whatsapp

No voy a hacer "apología de whatsapp" pues es claro para todos que es una herramienta de comunicación que todo el mundo (al menos occidental) tiene y usa a diario. Siendo así ¿que tal si mi aplicación pudiera responder por ese medio? ¿Qué skills necesitaría? ¿Qué otros recursos? Revisé algunos contenidos al respecto, por cierto los recomiendo, especialmente los producidos en el GX29:  https://meetings.genexus.com/2019/sessions/chatbots Es tremendo lo que se puede hacer alrededor del tema. Sin embargo lo que yo quería era algo bien sencillo, no quería tanto la parte de NLP (PLN), IA, etc que es un camino muy interesante pero que implicaba más trabajo y lo mio era explorar, divertirme, hacer algo útil y aprender en el camino (algunos le llaman "procastinar":)). Quería probar la utilidad de "dialogar" con mi aplicación vía Whatsapp, generar otras ideas a partir de ver y sentir algo funcionando, resolviendo un problema real, un prototipo de bajo costo....