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

El miedo, ese asesino silencioso

Hace unas semanas compré por Mercado Libre un tejido de alambre (de esos electrosoldados que se usan para cercos, pérgolas, etc) para armar una pérgola en casa. Como me suele pasar: compré de más. Así que decidí vender el resto del alambre por el mismo medio (Mercado Libre). Lo publiqué un Miércoles a las 13:00 y 4 horas después recibo un aviso de Mercado Libre que lo había vendido. Perfecto! Incluso lo había puesto al mismo precio x metro que la compra original así que notable! Revisé la compra y me pagó mediante Mercado Pago usando una tarjeta VISA, en fin, todo normal. Un rato después del aviso me llaman de un teléfono fijo al celular un tal Juan Rodriguez que coincidía con el nombre del comprador que me había llegado. Capitulo 1: ¡para qué abrís la boca! No sé cómo decir esto de un modo "políticamente correcto" pero la manera de expresarse parecía de alguien que no tenía un gran nivel de educación. Demasiado "lunfardo" para hablar con alguien que no con...

Liberar una versión: el fin del principio

Quienes desarrollamos software buscamos afectar positivamente la vida de las personas a través de nuestras aplicaciones. Ese es nuestro objetivo final, ese es nuestro éxito. Quienes desarrollamos , que ayuda a nuestros colegas en esa misión, solo tenemos éxito cuando ellos tienen éxito, por eso solemos decir que cuando liberamos una versión es "el fin del principio". Es un escalón fundamental, pero solo el primero. Tuve el privilegio de formar parte del equipo de y de su pero a su vez no he podido dedicarle tanto tiempo   como quisiera, casi no he podido  , ni  he podido leer. El mundo siguió girando, hay  , hay que me perdí y . Casi de casualidad me enteré del encuentro del a partir del 16/marzo en Montevideo. En cualquier caso: ¡el esfuerzo valió la pena!. Ahora que está siendo liberada en el   , hay que celebrar porque aplica aquello de "release is a feature". Podría tirarme en mi casa y estrenar mi  con una buena peli o sino aprovechar ir al un poco má...

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