Entradas

Mostrando las entradas de octubre, 2010

Fechas nulas y XML/SOAP

Imagen
Hoy cuando escribimos una fecha nula (date o datetime) en un archivo XML con GeneXus, está grabando
<Fecha>0000-00-00T00:00:00</Fecha>
Que problemas trae esto?

Esa no es una fecha válida en XML por lo que cuando esto se intenta utilizar interactuando con otros sistemas, da errores al intentar leerlo. Por ejemplo, si el xml que se esta generando es un SOAP, el mismo no pasa la validación del XML schema del mismo. Si queremos recibir un parámetro fecha con un valor nulo, hay que ponerle algún valor artificial al mismo (que simule el nulo, como DateTime mínimo o máximo) lo cual complica la programación o hay que recibir/enviar el parámetro como string y manipular el formato del mismo.

Seria conveniente, que cuando aparece una fecha nula se pudiera grabar

<Fechaxsi:nil="true"></Fecha>
que es una forma “mas correcta” de escribir estos XML.

Revisando los SACs veo que hay varios que tratan el tema y es bueno que se solucione pronto.

29347  Agregar el Valor de…

Comentarios en el blog

Imagen
Quise poner un sistema un poco mas prolijo de comentarios en el blog. 
Probe durante unos dias el de IntenseDebate. Esta se  integra con otros sistemas, tiene un editor de comentarios mejor que el de Blogger (no se necesita nada para esto). 
Lo que me gustaba mas es poder responder a un comentario y que los mismos quedaran indentados correctamente.  


En Blogger, todos los comentarios quedan ordenados en forma cronológica, lo cual es bastante incómodo para seguir intercambios de ideas. 


Si bien tiene muchas ventajas, no encontré una forma que los comentarios estuvieran solamente en los post nuevos, sino que ocultó también los comentarios de los post antiguos. 


El principal motivo que tengo para tener un Blog, es poder aprender de los comentarios de los lectores, por lo que perder los comentarios viejos, no era una opcion valida. Realicé el rollback de todos los comentarios.


Por ahora, reescribí todos los comentarios de la última semana, manteniendo los nombres y el texto, en el formato de co…

GXwiki - Sobre websession, tiemout y cambios perdidos.

Imagen
En Concepto y en nuestros clientes tenemos varias instalaciones de GXWiki. Es una herramienta maravillosa para capturar conocimiento e ideas en grupos de trabajo. Recomiendo a todos los que tengan proyectos donde trabaje mas de 5 personas, que se instalen uno.  Es notable como se va evolucionando y los usuarios usan nuevas funcionalidades. Si todos se acostumbran a registrar sus ideas en forma mas o menos sistematica, con el correr del tiempo las buenas ideas salen a luz..


Como lei en un tweet que mando @guscarr:


Para conseguir buenas ideas, alcanza con tener muchas ideas y desechar las malas

Una evolución natural que he encontrado es que quienes redactaban procedimientos escritos, pasaron a grabar videos con Jing e incorporan dichos videos al Wiki, facilitando el aprendizaje a los usuarios finales. Lo que antes costaba explicar por escrito, ahora lo muestran con un video sobre la aplicación.


Con el paso del tiempo, los usuarios van pidiendo mas funcionalidades.


La principal molestia qu…

PiensoPienso: Porque esta lento este programa?

Imagen
Tengo una tabla Documentos de la forma


DocumentoId*N(10) AutonumberClienteIdC(10)  //Codigo de clienteDocumentoNombreC(256)DocumentoFechaDate //Fecha del documentoDocumentoKBytesN(10) //Tamaño en KBytesDocumentoBlobBlob //Contenido del documento

Hay un webpanel (GeneXus Xev1) que muestra todos los documentos de los clientes

Documentos del Cliente:  MOOGLE    //Filtro por ese cliente
NombreFechaComo dominar el mundo2000/01/15Como hacer el primer billon de dólares2005/03/09Haciendo un click en el nombre del documento, se puede bajar/abrir el documento en la maquina del cliente.
En el evento Load de la grilla se tiene

for eachwhere ClienteId=&ClienteId&DocumentoNombre=DocumentoNombre&DocumentoNombre.Link=PathToUrl(DocumentoBlob)&DocumentoFecha=DocumentoFechaendfor
La funcion PathToUrl() devuelve el una URL con el link necesario para bajar el documento.


El cliente se queja que la consulta esta muy lenta y tiene razón.


Preguntas
1) Cual es el motivo para que el webpanel se ponga tan …

Sentencias lentas en SQL Server 2008.

Imagen
Una aplicación GeneXus, tenia una sentencia SQL parecida a esta:
SELECT T1.[SKMovId], T1.[SKMovFch], T2.[DepositoId], T2.[DepositoTipo], T1.[ProductoId], T1.[SKMovCantidad] FROM ([SKMovimientos] T1 WITH (NOLOCK) INNERJOIN [Depositos] T2 WITH (NOLOCK) ON T2.[DepositoId] = T1.[DepositoId]) WHERE (T1.[SKMovFch] >= @AV6cFechaInicial) AND (T1.[ProductoId] = @AV9cProductoId) AND (T2.[DepositoTipo] = @AV7cDepositoTipo)
Hace un join entre dos tablas SKMovimientos que tiene cientos de miles de registros y Depositos que tiene menos de 10 registros. Demoraba 24 segundos y devolvía 17 registros. Extremadamente lenta.

Viendo el plan de ejecución de la sentencia pudimos ver que utilizaba un índice incorrecto en la tabla SKMovimientos.

Hacer un select en la tabla SKMovimientos sola, sacando la condicion que restringe por DepositoTipo y era instantánea y utilizaba el índice adecuado.

Revisando las estadísticas y tenia la creación de estadísticas y su actualización en forma automática.

Rev…

Como programan los niños hoy.

Imagen
Ayer Felipe (11 años) me pidió que le instalara Alice 2.2 (el sitio se ve bien con IE, pero mal con Chrome y FF).
No lo conocía y le pregunte que era. Su respuesta fue:
Es un lenguaje de programacion como el Scratch, pero en 3D. Después de instalarlo, pude ver que el entorno de programación es bastante potable y permite a los niños crear animaciones de personajes en 3D (bien al estilo Second Life) con poco esfuerzo. Esta bien resuelto la interaccion entre los personajes y los objetos del entorno.


La forma de programar es a traves de "Drag and Drop". Es muy conveniente para aquellas personas que no conocen la sintaxis un lenguaje pues es mucho mas difícil cometer errores, pues la programación consiste en arrastrar objetos a la pantalla o cajitas a donde se almacena el código y luego llenar los campos que quedan libres. 


Pensando en los nuevos dispositivos tipos tabletas, los ambientes de programación van a tener que cambiar la forma de interacción e interfaces y esta es una posib…

Cotización de Servidor - 1997

Revisando unos papeles viejos, encontré una cotización que un proveedor me hizo llegar el 15 de abril 1997. ServidorCompaq ProsigniaProcesadorIntel Pentium ProVelocidad de reloj180 mhzMemoria RAM64 MB ampliable a 256 MBCache Interno16 KbyteCache Secundario512 Kbyte Two way associativeControlador de video1 MB DRAM ampliable a 2 MBDisco duro1.08 GBTotal precio Unitario……………………………U$S 5.770Una verdadera bicoca.A eso habia que agregarle el software Backoffice Server  U$S 2.718 y licencias para cada cliente. Muchas cosas han cambiado en estos años.

Reglas en tiempo de ejecución (runtime) en aplicaciones GeneXus (2da. Parte)

Imagen
En el post anterior, escribí sobre la posibilidad de tener reglas que puedan ser ejecutadas en runtime y modificadas por los usuarios y las ventajas de las mismas. 


En los comentarios Gustavo Proto pedía ejemplos para facilitar el entendimiento del problema, que es el primer paso para poder resolverlo.


Algunas características deseables de las reglas (para la primera version):


1) Asociado a una transacción. 
Las reglas/formulas que puedo escribir, son las que puedo escribir con los atributos de una transacción. Si en runtime tengo que utilizar un atributo de la extendida en las reglas, que no esta en la transacción no se puede utilizar. 


2) Las reglas no acceden a la base de datos. 
En una primera etapa no es necesario que la regla acceda a la base de datos. Por ahora alcanzaría que accedan a un XML que pueda generarse desde los datos de la transacción. Si por ejemplo se necesita condiciones del tipo si Cliente in TablaClientesImportantes, se debera definir una formula del que se llame Clien…

Encuesta Anual CUTI - 2009

Estuve analizando la encuesta de la Cámara Uruguaya de Tecnologías de la informacion del año 2009.
Por primera vez en muchísimos años bajaron las exportaciones de software y tambien bajo lo generado por persona.
Aumentamos en cambio la cantidad de personas ocupadas y las ventas en el mercado interno.

Software en Uruguay20082009Variacion

Personal Ocupado11.70012.7009%▲
Mercado Interno (Millones U$S)3303558%▲
Exportacion (Millones U$S)220

Reglas en tiempo de ejecución (runtime) en aplicaciones GeneXus.

Imagen
En Concepto desarrollamos aplicaciones con GeneXus, para varios clientes. En las mismas aparecen muchas veces situaciones donde la aplicación debe tomar decisiones basadas en los datos de la misma.
Algunos ejemplos de estos problemas:
Documentos que hay que exigir para una determinada operación. A que oficina debe pasar el tramite dependiendo su contenido (monto, producto, etc.). Controles a aplicar a una determinada operativa Descuentos a realizar a una venta (depende del cliente, de la cantidad vendida en el año, la cantidad del pedido actual, etc.) Esto se puede resolver de varias formas.
Opción 1)
Una fácil, es hacer un programa de la forma (para el último ejemplo)
do case case TipoCliente='IMPORTANTE' &Descuento=20 case FacturaImporte>1000 and TipoCliente='CHICO' &Descuento=10 case TipoCliente='CHICO' &Descuento=5 otherwise &Descuento=0 enddo

Que problemas tiene este enfoque? Cada vez que el departamento comercial de la empresa d…