Entradas

Eliminar namespace de Procedures

Imagen
Necesitaba utilizar Procedures que estaban expuestos como SOAP desde otra KB, que venian con un namespace incorrecto.  En mi KB debia usar el Namespace default, pero habia algunos que tenian un namespace fijo.  Lo que hice, fue procesar el archivo de export para eliminar el tag en el XML.  <Properties> <Property><Name>Name</Name><Value>Movimientos</Value> </Property> <Property><Name>ExternalNamespace</Name><Value>http://tempuri/Incorrecto</Value></Property> <Property><Name>IsDefault</Name><Value>False</Value> </Property> </Properties>     </Object>     <Object parentGuid="17460adf-89c4-f141-237b-252d2ccfdd60" user="" ..... Para cambiarlo, use Notepad++ y busque la expression regular <Property><Name>ExternalNamespace<\/Name>[\s\S]*?<\/Property> Volvi a importar y con eso logré eliminar esa pr...

Cohesión, acoplamiento e intereses separados en grupos de trabajo.

Imagen
  Quienes estudiamos computación en algún momento de la carrera nos han enseñado de la importancia de la cohesion, el acoplamiento y la separación de intereses. * Esas características tienen fuerzas en algún sentido opuestas, y la práctica nos ha enseñado a que cuando se logra hacer programas, clases, módulos, servicios, sistemas enteros, etc que tengan ALTA COHESIÓN, BAJO ACOPLAMIENTO e INTERESES SEPARADOS, es mucho más fácil mantener y agregar cambios a los sistemas. En conclusión, se tiene mayor productividad, se pueden hacer más cosas, con menos esfuerzo.  Esto es algo un poco contraintuitivo, pues lograr esto en los sistemas, da más trabajo al principio, pero se paga con creces en lo que se ahorra en el futuro.  En lo que no me había puesto a pensar nunca, era en aplicar estos conceptos, a los grupos humanos que producen software. Estudiando porque algunos grupos logran una alta productividad y otros no tanto, veo que muchas veces los grupos que tienen problemas de p...

Cambiar propiedades no exportables por script MSBUILD.

Imagen
 En el foro de la Beta de GeneXus, se quejaban que era una tarea engorrosa el cambiar propiedades de las conexiones a base de datos.  Es una tarea sumamente engorrosa y se comenten muchos errores en el proceso.  Estoy en un proyecto, donde vamos a necesitar unificar muchas propiedades de al menos 5 KB y ademas, personalizar muchas propiedades, por lo que valia la pena dedicarle un tiempo a automatizar dicha tarea.  Una de las contras que planteaban, era que no se puede exportar e importar las propiedades, pues hay muchas que son NO EXPORTABLES.  Desde hace tiempo, se tienen tareas MSBUILD para poder cambiar propiedades de la KB / Version / Ambientes / Generadores / Repositorios de Datos.   Había hecho varios scripts para cambiar propiedades, pero mi problema siempre había sido que tenia que encontrar el nombre de la propiedad, para poder implementarlo.   Para esto, exportaba las propiedades, abría el archivo XML, adivinaba cual era la propiedad, ...

Como usar GXTest para hacer el refactoring de una funcion de forma mas segura.

Imagen
En mi trabajo me encuentro a menudo con el siguiente problema: Optimizar un determinado objeto GeneXus que anda lento, o consume demasiados recursos (memoria, cpu, disco, ancho de banda, etc).  Por lo general, son objetos de los que son Legacy Code.  Me gusta la definición  Legacy Code = Code without automated unit test.  Tambien es comun que no lo haya programado y tengo una idea de que es lo que hace ese objeto, pero no un conocimiento profundo de como funciona.  Resulta entonces bastante peligroso hacer un cambio en un objeto para lograr que funcione mejor, sin tener una forma de comprobar que sigue teniendo el mismo comportamiento que antes.  Una forma de trabajo que me ha resultado muy util, es ejecutar muchas veces el objeto que debo cambiar, con una combinación de parámetros que sean representativos de los parámetros habituales y de borde del objeto y registrar su resultado. Luego de hacer la modificación, volver a ejecutar las mismas pruebas y asegu...

Ejemplo simple de Test Driven Development (TDD) con GeneXus

Imagen
  Hice un video de como utilizar la metodología de desarrollo TDD (Test Driven Development) con GeneXus y GXTest.   Me quedó más largo de lo que quería pero ya voy a aprender a resumir mejor.  Update: A pedido del publico, mejoro la resolucion del video. 

Entity Provider Pattern

Imagen
Estoy intentando hacer un pattern para lograr crear servicios que se puedan crear desde la estructura de una entidad (representada por una transacción).  La documentación va ir  quedando aqui .  Copio aqui la información para que quede documentado.  Objetivo: Facilitar y centralizar el acceso y modificación de los datos de una entidad.  Uso Dada una Entidad (en forma de transacción) facilitar el acceso a sus datos con operaciones comunes.  Ejemplo Dada la transacción Customer Customer * CustomerId CustomerName //tiene indice unico por CustomerName CustomerAddress CustomerType se pueden poner dicha transacción como BC y generar los objetos para lograr: //CONSULTAS (QUERIES) &CustomerCollection = GetAll () // Se implementa con un Customer_DP - Data provider &CustomerCollection = GetBy < Condition >( &ConditionParameters ) // Se implementa con un Customer_DP<Condition> - DataProvider que usa un Data Selector por <Condi...

Revision de mi lista de Pedidos a GeneXus - Año 2002

Imagen
  Estamos mudando un servidor a la Nube y en el mismo había unos cuantos archivos.  Como en toda mudanza, conviene revisar un poco que es lo que hay y tirar lo que no usamos mas.  Entre las cosas que aparecieron, esta un documento que redacte con pedidos para GeneXus, que tiene 20 años.  Tiene la lista de cosas que le pediamos a Artech (ahora GeneXus) que incorporara en la herramienta. Me gusta revisar estos documentos y ver que cosas se hicieron y cuales no. Tambien es bueno ver cosas que pedimos y que hoy ya no tienen sentido.  Pongo en rojo los comentarios actuales y en negro lo original.  Pedidos de Concepto a Artech (2002) Premisas:  Trabajamos con Bases de Datos Grandes  Trabajamos con Base de Conocimientos Medianas y Grandes  Se hace un proceso de Consolidación/Generación/Instalación con una frecuencia mensual o bimensual  La misma aplicación se instala en diferentes servidores  La misma aplicación se instala en un mismo serv...