Entradas

Mostrando las entradas de 2016

Taller GeneXus en Cuba

Imagen
Me invitaron a dar un Taller de actualización GeneXus 15 en La Habana, Cuba, con los colegas de Tecnomática.

 Aprovechamos el momento para ponernos al día en las ultimas cosas de GeneXus, y algunas practicas con Evo3 y GeneXus 15.

 Algunos de los participantes, aprovecharon la ocasión para certificarse como Analistas GeneXus (Junior, Senior). Todos aprobaron con muy buena nota, por lo que quede muy contento.

Felicitaciones por sus logros!

Proceso de desarrollo con GeneXus

Imagen
Hace exactamente 3 años que cree la pagina de Proceso de desarrollo con Genexus en el wiki de la comunidad GeneXus.

En estos tres años se ha avanzado mucho en temas de Build y Deploy de aplicaciones en toda la comunidad. Tambien en manejo de ambientes, automatizacion de tareas y revision de codigo. 
Aun queda mucho por hacer, pero es bueno valorar los avances logrados. 


Experiencia de Integración Contínua con GeneXus en Cuba

Imagen
Los colegas de Datys de Cuba, me hicieron una demostración de las herramientas que utilizan en su proceso de desarrollo con GeneXus para hacer integración continua.

Han logrado integrar muy bien diversas herramientas para la realización de controles de calidad de su codigo y pruebas unitarias al mismo.

Utilizan Cruise Control, GXUnit, bibliotecas de control estático de código para Javascript y CSS, controles propios de variables no usadas, atributos huérfanos y demás.

Me pareció una muy buena implementan y también esta bueno el cambio a la  interfaz web que le hicieron al Cruise Control.

Les dejo un video para puedan apreciar el producto funcionando.




Es bueno ver que crece el grupo de empresas interesadas en este tipo de temas, para resolver el proceso completo de desarrollo de aplicaciones con GeneXus. Tenemos que aprender a cooperar mas para lograr avanzar mas rápido.

Libros leidos recomendables.

Imagen
Estuve trabajando un tiempo, en un entorno con poca conectividad con Internet, lo que me permitió ponerme al día con algunos libros que tenia ganas de leer desde hace un tiempo.



Homo-Deus - Breve historia del mañana. 
Es del mismo autor  de Sapiens - De hombres a Dioses.
Me resulta interesante la forma de visualizar las diferentes corrientes de pensamiento analizándolas como religiones y lo importante que son en la creación de un punto de  vista común del fururo, que ayuda a crear mejores condiciones.

Da mucha importancia a la colaborar y todas las herramientas que permitan a los seres humanos a lograr proyectos cada vez mas importantes.

Me resulta divertido y ágil de leer.

What we cannot know - Marcus du Sautoy.
Explora aquellas cosas que no podemos conocer hoy y se aventura en las que nunca podremos conocer.

Dada la formación matematica del autor, pense que el libro podia ser mucho mas denso, pero resulta muy divertido de leer.
Termina relacionando con el tema de la conciencia, las ma…

Evaluación de la Hackaton de extensiones y Code Review.

Imagen
La semana pasada hicimos la hackaton en la cual programamos algunas extensiones bastante sencillas.  La participación fue muy buena, pasamos de una extensión que solo agregaba unas opciones en el menú de GeneXus para luego agregar algunas nuevas funcionalidades a la extensión KBCodeReview, que permite ver las variables y la navegación del objeto. Laura siguió el tema y le agrego indicadores de calidad del código, como numero ciclomático, cantidad de lineas de código, etc.

Me pareció una experiencia muy buena y si con esta reunión, alguna persona pudo largarse a programar alguna extensión, ya es un muy buen resultado. También es bueno tener contacto con gente que conoce mucho mas de programación C# que lo que tenemos en la comunidad GeneXus pues es seguro que hay formas mucho mejores de hacer las cosas, de como la estamos haciendo ahora.

Me preocupa mucho la baja cooperación/participación que logramos en la comunidad GeneXus y es vital para la supervivencia y mantenimiento de la misma…

Hackaton GeneXus Extensions & Code Review

Imagen
En en el CDC del LATU, a las 18:00.   https://www.meetup.com/es-ES/GUG-Montevideo/events/235271667/
Si pueden estaria bueno que fueran para vernos las caras e intercambiar ideas. 
El temario es medio libre, pero trataremos de hablar sobre
Que son las extensiones?
Como empiezo a programar extensiones? Que necesito para programarlas? Un ejemplo sencillo  Introduccion a KBCodeReview Agregar una funcionalidad al KBCodeReview
Los esperamos.

Se fue Ramón.

Imagen
Hoy se fue Ramón,  compañero de caminatas mañaneras de verano y largas siestas de vacaciones. Un perro tan bueno como guardian y un poquito loco.. 


Lo voy a extrañar montones. 
Chau, amigo!

Hackaton Code Review

Imagen
El miércoles 9 de noviembre, en CDC del LATU, vamos a hacer una jornada de 4 horitas de programación de extensiones GeneXus.

El caso de estudio, será la herramienta de Code Review que estamos desarrollando con el GUG, pero la experiencia sirve para quienes quieran empezar a hacer extensiones.

Es recomendable tener bases de programación C# y Visual Studio, traer un notebook preinstalado con el software especificado en el sitio del GUG  y tener ganas de pasar un buen rato.

Los organizadores prometieron pizzas pues todos sabemos que luego de comer pizza con la mano, se programa mucho mejor.

Los grupos que mas colaboran, son los mas exitosos. Puede estar bueno que con actos como este se promueva la colaboración dentro de la Comunidad GeneXus, que nunca ha sido nuestro fuerte.

El día que el Presidente de la República nos ayudó con el sistema LUCIA.

Imagen
En los primeros años del siglo, estábamos trabajando en el sistema LUCIA en sus primeras versiones en la Aduana de Uruguay. 
Habíamos logrado entusiasmar a la Aduana de Costa Rica, pues habían visto el sistema funcionando y lo querían. Necesitábamos que la Aduana de Uruguay nos autorizara alguna forma de colaboración entre Aduanas para que el sistema pudiera ser instalado en el exterior. 
Con el director de aduana de la época no teníamos mucha llegada y desconfiaba de casi todos lo que había en aduana y habíamos participado en la confección del LUCIA.
A Gustavo (mi socio) escuchó en la radio, que el presidente recibía y contestaba cartas que le llegaban a la casa presidencial y comentó que iba a hacer un intento de mandarle una explicando la situación. 
Con una carta manuscrita en un sobre, fue a la casa presidencial de Suarez y Reyes, donde fue amablemente recibido por la guardia presidencial. Entregó la carta y poco menos de una semana después, recibió por la noche una llamada en l…

Modularizar sin modulos.

Imagen
Cuando trabajamos con GeneXus Evolution 3 o superior, una de las funcionalidades que mas ayudan a mantener el desarrollo ordenado, es la de los Módulos.

Una de las consecuencias de usar Módulos en la KB es que cambian el nombre de los objetos:

Cambia la URL de las aplicaciones WEBCambia el nombre de los web services publicadosCambia el nombre de los procesos batch command line
Me ha tocado trabajar en KB que vienen de versiones anteriores de GeneXus que en las cuales es bueno usar la metodología de módulos, pero es difícil y costoso cambiar el nombre de los web services publicados por la aplicación, pues son usados por muchas empresas.

Estuve buscando una forma temporaria de trabajo, que me permita usar módulos, pero que no modifique los objetos y llegue a una metodología que no es matenible en el tiempo, pero permite avanzar en la modularización hasta llegar a algo mas definitivo.

Supongamos que tengo un Folder llamado  ALERTAS y quiero hacer un modulo con los objetos que contiene.

Te…

Xcopy con exclude.

El comando xcopy tiene una opcion EXCLUDE, que permite excluir los archivos que no se quieren copiar. Lo que no es intuitivo es la forma en que lo resolvieron, pues lo que hay que ponerle es un archivo que contenga los archivos que no hay que copiar.
Por ejemplo para hacer un xcopy deployment de una aplicacion generada con GeneXus hago:
set curndate=%date% set dd=%curndate:~0,2% set mm=%curndate:~3,2% set aaaa=%curndate:~6,4% xcopy web\*.* /s /d /i /y /c /EXCLUDE:NOCOPIAR.TXT web%aaaa%%mm%%dd%
xcopy web%aaaa%%mm%%dd%\*.* /s /d /i /y /c //webserver/DirVirtual pause
Y en el archivo NOCOPIAR.TXT, tiene como contenido:
.cs\ .rsp .002 .bld .config .ver .web .xsl .rsp .log .XPZ .GEN .VER .xml .bat
que son las extensiones de archivos que no quiero copiar.
PD: Este es un post para que me sirva de recordatorio, pues es algo que siempre me olvido.


Grupo para interesados en Code Review con GeneXus

Imagen
Creamos un grupo de Google Groups para intercambiar mails e ideas sobre revisión de código con GeneXus.

Quienes quieran colaborar con la herramienta que estamos armando, pueden inscribirse en el mismo.
La dirección es :

https://groups.google.com/forum/#!forum/kbcodereview




Windows 10 aniversario corta nombre de Folders y Objetos

Imagen
Para aquellos que tienen Windows 10 y monitores de alta densidad de pixels, pueden tener problemas con la actualización aniversario de Windows 10. Después de aplicar la misma, se cortan los nombres de los folders en GeneXus, tanto en las Preferences, como en el Folder View



SOLUCIÓN: Sobre el GeneXus.exe, dar click derecho e ingresar a las Propiedades. Ir al tab "Compatibility" y marcar el check "Disable Display scaling on high DPI settings"

Afecta tanto a Evo2 y Evo3 y es posible que la 15 aunque no lo probé. 

Indicador "Tiempo de armado de puesto de trabajo"

Imagen
Hace un tiempo que buso  algunos indicadores sencillos que permitan medir que tan bien (o mal) está el proceso de desarrollo, midiéndolo en su totalidad.

Lo ideal seria bueno poder tener algo que mida desde la captura del requerimiento, análisis, diseño, codificación, pruebas, instalación, soporte y desinistalacion y borrado cuando no se use mas.

Encontrar indicadores para todo el proceso no es fácil, pero hay algunos que son mas fáciles de medir y ayudan a entender que tan bien evolución un grupo de trabajo.

Un indicador que me gusta mucho es el que mide el tiempo que lleva crear el ambiente de desarrollo para una maquina recién instalada hasta el primer build all exitoso.

La idea es tomar la cantidad de horas que lleva hacer los siguientes pasos:

1) Instalar la versión de GeneXus que se necesite
2) Instalar todos los UC / Extensiones necesarios y sus dependencias
3) Bajar la KB del Server (o importar xpz)
4) Create database sin errores
5) Build all sin errores y sin Warnings evitables
6) …

Modularizando KB: Tabla privada y transaccion publica.

Imagen
Cuando se modulariza una KB, me ha pasado querer tener una tabla privada (que desde afuera del modulo no se pueda acceder con for each), pero necesito dejar la transacción que la define, accesible desde afuera del modulo, por ejemplo para que se pueda llamar un call o link.

No hay solución elegante para este escenario. Lo que puede ayudar es tener por ejemplo un procedimiento que devuelva el link a la transacción, y poner la transacción como privada y de esta forma la tabla también queda privada. Lo mismo puede hacerse con el call, aunque puede traer algunos otros inconvenientes.

O sea, en vez de poner

&Control.Link = Trn.Link()

se pone

&Control.Link = prcTrnLink()   //prcTrnLink es del modulo de la Trn, y devuelve Trn.Link()

De esta forma, la transacción puede quedar privada y la tabla también.

Según tengo entendido, en próximas versiones de GeneXus, en las tablas vamos a poder declarar a que modulo pertenecen en forma directa y también si la misma es publica o privada.

ACeDedario (se pronuncia aKeDeDario)

Imagen
Esta es una anécdota de cuando estaba en cuarto de escuela, en la Escuela No. 7 de Nueva Palmira.
En tercero habíamos tenido un maestro (Hugo) que a mi me gustaba mucho, porque no nos obligó a aprendernos las tablas de memoria, sino que nos dejaba usar la tabla pitagórica para hacer las pruebas. En ese momento, no se habian inventado aun las calculadoras electrónicas y la tabla pitagorica era lo mas avanzado.

En cuarto, nos tocó una maestra llamada Diver (que nombre!) y que era mas tradicional y exigente.
A mi  me costaba mucho escribir sin faltas en los trabajos de redacciones y dictados, a pesar que armaba bastante bien las frases.

Para tratar de resolver el problema, decidí diseñar un nuevo conjunto de letras, para poder codificar las palabras en español, que se llamaba ACeDedario.

Las letras eran

A
B = Se sustituye por V
C = Era similar a la K
D
E
F
G = Siempre sonaba como g
H = Igual a la CH de hoy.
I
J
L
LL = Se sutituye por Y
M
N
Ñ = Se sustitutye por NI
O
P
Q = Se sustitu…

Idea para extension GeneXus - Instalador de User controls

Imagen
Una extensión con la que me gustaría contar, seria una que permita ver una KB de un GXServer o un XPZ de una KB e identifique cuales son los User Controls o Patrones que utiliza y me los presente en una lista.
Desde dicha lista tengo las opciones de instalar alguno o instalarlos todos y hace automático el proceso de bajarlos del Marketplace (los que sean gratis) e instalarlos o actualizarlos en mi instalación de GeneXus, haciendo el GeneXus /Install y todo lo necesario para que me quede operativo.

El siguiente paso, es poder hacer esto por linea de comandos, con lo cual mucho de nosotros estaríamos mas contentos y con mas tiempo de pensar en cosas importantes.

Charla sobre codigo y objetos simples en el #GX26

A los que les interese la charla sobre Deuda Técnica y Código simple se puede ver aqui

El objetivo de la charla era plantear el tema de la forma mas fácil y menos técnica posible, para mostrar porque hay que prestar atencion a pequeños detalles que hacen a nuestro código menos claro y mas complicado de entender.

El concepto de deuda técnica, es sencillo: Cada vez que hago un arreglo y el mismo no lo realizo lo mejor que puedo, para salir del paso rápidamente, estoy incurriendo en una deuda, que tarde o temprano voy a tener que pagar.

El concepto de código entendible, es algo mas subjetivo y difícil de definir, pero se pueden identificar algunas características que el código simple o entendible tiene y a tratar que nuestro código cumpla con dichas características.

Hay mucho trabajo aun por realizar, pero creo que es bueno trabajar en el tema, si pretendemos que nuestra KB dure muchos años en el mercado.

Para facilitar la tarea que otras personas verifiquen nuestro codigo, estamos trab…

Encuentro GeneXus #GX26 - Deuda técnica, código simple y revisión de código

Imagen
En el Encuentro GeneXus 2016 de la semana que viene, estaré hablando sobre  código GeneXus simple y fácil de entender y como ayuda a bajar nuestra deuda técnica y mejora nuestra productividad, aunque no sea evidente en un principio.

Representado en una gráfica, la diferencia entre un arreglo rápido, que luego lleva mas mantenimiento y un arreglo cuidadoso, que es mas fácil de mantener en el futuro.
Aunque los números son ficticios, ayudan a ver que si tengo que mantener una KB por un tiempo prolongado, es conveniente dedicarle mas tiempo a hacer las cosas bien de entrada, pues sino vamos a gastar mas tiempo en el futuro.

Es un tema que en la comunidad GeneXus casi todos conocemos pero tenemos algo olvidado y hay oportunidades de mejora importantes.

También participo en una charla con Laura Aguiar de las tareas realizadas en el GUG Montevideo, sobre la búsqueda de buenas prácticas en Gestión de Proyectos. En dicha charla tambien hablaremos de una herramienta de revisión de código que e…

Problemas comunes en modularización de KB GeneXus

Imagen
Soy promotor de la modularización de KB Genexus, pues ayuda en muchos aspectos mejorar  la salud de la KB y de la aplicación.

Al tener la KB modularizada, se puede entender mas rapido, y por lo tanto, se pueden hacer cambios mas agiles y con menos riesgos.

Algunos de los patrones de problemas comunes que aparecen en KB que he estado modularizando son:


Tengo un objeto que recorre una tabla privada de otro modulo y ejecuta código utilizando objetos del modulo B, por ejemplo actualizando o haciendo inserts.

En este caso, conviene sacar la logia del Object1 y crear un nuevo objeto en el ModuleB

De esta forma el ModuloB pasa a tener un nuevo servicio que puede ser usado por otros modulos y la tabla queda como privada.

Caso 2: Se intenta recorrer una tabla privada de otro modulo, y luego se ejecuta logica propia del modulo en el que estoy. 
Una posible solución es hacer un Data Provider que devuelva los datos de la tabla privada y utilizar los elementos del SDT en ven de los atributos. 

 Es…

El Sordo

Imagen
Hace unos dias, falleció Luis Eduardo Gonzalez, popularmente conocido como "El Sordo". Me tocó trabajar con él en el año 1987, en mi primer trabajo. Yo era estudiante de Facultad de Ingeniería y Alberto "Tito" Gonzalez, recién llegado de su exilio, me ofreció trabajar como digitador en una de las empresas derivadas de Equipos consultores, que se llamaba Pro-Medios y se dedicaba a la medición de audiencia de radios y televisión.

Me tocaba trabajar de noche, en la casona de Bvar. Artigas (**), donde funcionaba Equipos. Digitaba las encuestas del día, en computadoras de dos disketeras, donde perder datos, era cosa de todos los días. Obligado, tuve que aprender de FileSystems, y como recuperar datos de diskettes dañados, para recuperar la digitacion de un dia.

Ahi me cruzaba con Cesar Aguiar, Agustin Canzani, Juan da Rosa,  el Sordo y otras personalidades que luego serian bastante mas conocidas.

En ese trabajo, aprendí muchísimo de estadísticas aplicadas, de metodolog…

Bind de variables en la base de datos y performance

Imagen
Teníamos una sentencia de la forma

//&SessionCollection = Collection de Session (Tiene al menos un elemento)
For Each 
    Where ATTSession in &SessionCollection  

...

Endfor

Esto genera un sentencia SQL del tipo 

SELECT ATTSession,ATT2.. from Table
WHERE ATTSession in ('314159','271828')

Es bastante dificil el binding de estas variables pues no se conoce a priori la cantidad de valores que puede tener la lista. 
La performance de la sentencia  es buena, pero los DBA se empezaron a quejar que como la sentencia no tiene binding de variables, el espacio donde Oracle guarda las sentencias y sus planes de ejecución se llenaba rápidamente con sentencias muy parecidas entre, pero con diferentes valores en la comparación IN. El mayor problema es que al entrar estas sentencias, se borran otras que cuando se vuelvan a ejecutar van a tener que volver a evaluar se plan de ejecución.
Analizando el caso, vimos que la sentencia se ejecutaba varias decenas de miles de veces por d…

La sesion ha caducado - La pagina se recargará. - HTTP 440.

Imagen
Hicimos una migración de un sistema que estaba en producción en GeneXus Evolution 2 a GeneXus con Evolucion 3 WEB y generando con C#.

Ademas de la versión, teníamos con diferencia que en Evo2 teniamos la propiedad de "Javascript Debug Mode" = Yes y al pasar a Evo3, la dejamos en NO, para mejorar un poco la seguridad.
Instalamos la parte batch y los web services y todo funcionaba correctamente.  Cuando instalamos los web forms  en producción empezo a aparecer en la pantalla de los usuarios, "La sesión ha caducado. La pagina se regargará". 
Esto era a pesar que teníamos la propiedad "On Session Timeout" = Ignore.

Esto nos obligó a volver atrás dicha instalación y regenerar todo con la propiedad "Javasript Debug Mode" = YES y "On Session Timeout" = Ignore. Dichas propiedades OBLIGAN  a un Rebuild all de toda la aplicación, pues afectan tanto la compresión de los javascript como el uso o no de trafico encriptado en los request AJAX. 
Los…

Compartir la base de datos de aplicación GeneXus (15).

Imagen
Es común que las aplicaciones GeneXus tengan que compartir parte de la base de datos con otras herramientas.

Algunas de los utilitarios o herramientas que me he encontrado en diferentes instalaciones son:

* Generadores de Reportes
* Generadores de consultas de BI
* Herramientas de Auditoria
* Tablas dinamicas que lea directamente de la base de datos
* Aplicaciones de terceros que graban o leen alguna tabla del sistema.

Algunas de estas herramientas, soportan el uso de web services, con lo cual se pueden definir dicho servicios y publicarlos, con lo que la interfaz de la aplicación queda bien definida y conocida.

Cuando hacemos algun cambio en GeneXus, nos tenemos que asegurar de no cambiar si querer alguno de estos servicios y es relativamente facil hacerlo con un comparador de WSDL o REST.

Cuando las aplicaciones estan pensadas para usar directamente tablas en la base de datos, el problema es un poco mas complicado de resolver.

Formalizando el problema, seria mas o menos asi:

Tengo u…

KBDoctor - Version 10.15.

Imagen
Subi al Marketplace una versión nueva del KBDoctor con varios cambios y arreglos.

Algunas de las novedades son : Generar SQL scripts para validar la estructura de la base de datos con lo esperado en la KB, validar datos de integridad referencial, cambiar valores nulos, etc. Sustituir un dominio por otroListar dominiosListar atributosListar modulos y tablas por modulos Utilitario para acortar el nombre de atributos y objetos a su largo significativo de nombreMejorado de codigo (cambia codigo, saca calls, udp.  varios etc.  Los compilé para Evolution 3 Upgrade 9 y GeneXus 15. Dejo este link por si alguien quiere bajarla, antes que se soluciones unos inconvenientes que hay con el marketplace. 

Usabilizando GeneXus: Renombrar variables

Imagen
Una de las cosas que ayuda mas a entender código escrito por otras personas, es que las variables, los objetos y las rutinas usadas en dicho código, tengan nombres coherentes y que permitan identificar rápidamente lo que se almacena en ellas.

A medida que pasa el tiempo, el significado de los diferentes objetos/variables del sistema  puede cambiar y por lo tanto conviene renombrarlo.

Si lo que renombro son tablas o atributos, le cambio el nombre, se genera un programa de reorganización para cambiar la base de datos y se regeneran todos los programas en forma que empiecen a usar dichos nombres.

Es renombrar objetos ejecutables (por ejemplo, procedures, transactiones, webpanels, etc) dentro de la KB, es una tarea que esta bien implementada, pues le cambio el nombre al objeto, hago un build all y se regeneran y compilan todos los objetos que se necesitan.

Las rutinas dentro de un objeto, se pueden renombrar y pero hay que cambiar en forma manual los lugares que hacen referencias a las m…

Quien paga las migraciones?

Imagen
Un colega me pregutó como manejábamos los procesos de migración y fundamentalmente si le cobrábamos algo adicional a los clientes en los procesos de migraciones.

Cuando hablo de migración, me refiero cuando quiero cambiar la version de mi herramienta de desarrollo (en mi caso GeneXus), para una mas nueva y con mejores prestaciones, pero sin agregar funcionalidad ninguna.

Es muy dificil vender estos proyectos a los clientes, pues el valor de los mismos pasan bastante desapercibidos. Funcionalmente la aplicación luego de terminar el proyecto tiene que hacer exactamente los mismo que antes, pero al regenerar toda la aplicación se agrega el riesgo de que algo funcione diferente y peor que antes.

Si bien no hay una receta única para esto, en general es bueno tratar de absorber el costo de los proyectos de migración. En el futuro, se le puede cobrar a los clientes, por las nuevas funcionalidades que se van a desarrollar con las nuevas tecnologías o mejoras al sistema.
Por ejemplo al migrar…

SUGERENCIA PARA GXSERVER. Duplicar un version y su estado.

Imagen
Esta es una funcionalidad que me gustaría tener en GXServer. 

Tengo una KB, con objetos, con  base de datos con datos y un build all terminado en mi version de trabajo y es la misma desde la que instalo y esta en producción. 
Quiero hacer un cambio grande con reorganización que puede llevar un tiempo largo (mas de una semana)  y me gustaría poder trabajar tranquilo sin afectar mi capacidad de instalar desde la version original. 
Me gustaría poder contar con una opción que haga estos pasos en uno solo
Cree una version congeladaCree una version derivada de la congeladaCopie la estructura de archivos de la version original a la nueva (TargetPath, subdirectorios y archivos de especificación)Deje todos los objetos como especificados (igual que la version original)(Paso opcional) Cree la estructura de la base de datos nueva con la misma estructura de la version original(Paso opcional) Copie los datos de la base de datos de la version original a la base de datos de la nueva version. Copie to…

StackOverflow Documentation

Imagen
En StackOverflow pusieron en BETA Documentation. 


Es un lugar donde se pueden subir ejemplos de código de diferentes lenguajes.
La gente puede votarlos por utilidad y también clasificarlos por version para la que sirve, etc.

Me parece buen lugar donde empezar a generar ejemplos de GeneXus para darle mas visibilidad y mostrar como se pueden hacer cosas sofisticadas con poco código.
Tiene de malo, que no todo lo que modelamos con GeneXus se traduce a código, por ejemplo, las estructuras de transacciones y SDT, la definición de variables, el editor abstracto, los patrones, etc, pero para procedures y eventos y reglas, puede funcionar muy bien.

Al menos, pondría ahí un ejemplo de cada una de las palabras claves de Genexus, de sus tipos de datos y external objects standard.

Si logran hacer con la documentación, lo mismo que hicieron con las preguntas y respuestas de programacion el resultado puede ser bueno.

UPDATE
Marcos me comentó que el tag #GeneXus aun no tiene movimiento suficiente co…

Migrando de GeneXus Evolution 2 a GeneXus Evolution 3.

Imagen
Estamos realizando una migración de version de GeneXus, a la última liberada.



Algunas de las tareas involucradas fueron las siguientes

Comparación de Navegaciones.  Use el KBDoctor para comparar las navegaciones de la Evolution 2 con la Evolution 3.
Unos cuantos objetos cambiaron su navegación, pues ahora cambia el ORDER de algunas sentencias.
En general, el criterio que vi es que toma en cuenta las condiciones del WHERE para considerar el orden. Parece mejor en casi todos los casos, pero igual hay que chequear contra la base de datos para ver si alguna sentencia que estaba optimizada no tiene problemas de performance.

Comparación de WSDL de servicios publicados.  Tuvimos diferencias en algunos pocos WSDL publicado, pero era por habíamos dejado el Namespace de la KB en su valor por default y como la KB toma el nombre de la KB como Namespace, al cambiar de KB cambiaba la definición del WSDL. Detectamos el problema y lo solucionamos rapido.

Objetos con  código nativo. Tenemos algunos pro…

Codigo simple

Imagen
Terminé de leer el libro Code Simplicity.



Trata el tema de desarrollo de software desde un angulo poco tecnico, pero tiene algunas cosas que me resultaron interesantes.

Enumera varias "leyes" que rigen el desarrollo de software.

A la que llama ecuación del diseño de software  que intenta medir como debo diseñar algo para hacer un cambio a un sistema.




Donde

D es lo deseable que puede ser un desarrollo, Vn es el valor actual de desarrollar una nueva featureEi es el esfuerzo actual al desarrollar esa feature Vf es el valor que va a tener dicha feature en el futuroEm es el valor de mantener dicha feature. 

Si dicha característica (feature) va a ser usada durante mucho tiempo, la ecuación va a tender a


La conclusion que puede sacarse, es lo que los desarrolladores sabemos por experiencia, que conviene dedicarle tiempo al diseño, para lograr simplificar el software de forma que sea mas fácil de mantener en el futuro.

O dicho de otra forma, es mas conveniente reducir el esfuerzo de …

PIENSOPIENSO: Cual es la salida de este programa?

Imagen
Temgo una tabla de Paises que esta vacia, en una KB GeneXus, generando con C#

*PaisID           C(2)
PaisNombre    C(100)

y un procedimiento Command line

//Doy de alta un registro en la tabla. 
&PaisNombre='Uruguay'
New
   PaisID='UY'
   PaisNombre=&PaisNombre
EndNew

//Consulto 1 Con Trim()
for each
where PaisNombre=&PaisNombre.Trim()
    Msg(PaisID,status)
when none
    Msg('No existe 1',status)
endfor

//Consulto 2 Sin Trim() for each
    where PaisNombre=&PaisNombre
    Msg(PaisID,status)
when none
    Msg('No existe 2',status)
endfor

//Consulto con Trim() en variable
&PaisNombre=&PaisNombre.Trim()
for each
    where PaisNombre=&PaisNombre
    Msg(PaisID,status)
when none
    Msg('No existe 3',status)
endfor

!) Cual es la salida de este programa en SQL Server. 

2) Cual es la salida de este programa en Oracle

Justifique su respuesta. 


UPDATE:
David ya dio las respuesta correcta en los comentarios, pero lo dejo aqui

En SQL Server, la salida es 

UY
UY
UY