Archive for julio, 2007

The setup files compression failed – Error GeneXus Wizard

jueves, julio 26th, 2007

The setup files compression failed

Intentando generar un setup wizard para una aplicación desarrollada en GeneXus 9.0 para Visual me apareció el error mencionado arriba.

Básicamente, existen 2 soluciones, pero la más fácil es bajar el GXSTWZ32.exe Upgrade 1 que se encuentra en el sitio técnico de GeneXus que está relacionado con el SAC 20523 donde puedes obtener más información y otros problemas ocasionados por no tener este ejecutable.

Fabricio De los Santos
Gerencia de Proyectos – Consultoría GeneXus –
ERP – Sistemas de Misión Crítica – Bases de Datos.

Vea mis blogs en:
www.fabriciodelossantos.com

Crónica de una tragedia anunciada. Vuelo JJ 3054 TAM.

miércoles, julio 18th, 2007

Otro día triste.
Lamentablemente, estas cosas hay que escribirlas, para ver si de alguna forma se puede tomar conciencia de que esos actos lanzados al azar, muchas veces ponen en riesgo cosas más valiosas, que el dinero, la vida.
Hace un poco más de 2 meses atrás escribí acerca del accidente de Gol y realmente después de eso, viajar en avión en Brasil se ha vuelto un caos total. Tanto así que un puente aéreo Sao Paulo – Río de Janeiro, muchas personas no lo piensan 2 veces y viajan en ómnibus.
Viajar en avión, es una aventura, nunca se sale en horario, tampoco se llega en horario y si tu avión tiene previsto llegar al aeropuerto de Congonhas después de las 22hs, es probable que termines en otro aeropuerto, como ya me ha pasado varias veces.
Esta tragedia es lamentable por donde se mire, va a llevar mucho tiempo en saber la verdad, porque lo que pasa siempre primero, es que todos tratan de cubrirse.
No voy a hablar de las hipótesis que hay muchas, pista mojada sin las ranuras para desagüe, pista corta, frenos, controladores, etc, etc, todo esto sin contar que el aeropuerto está en medio de una jungla de cemento.
Pero bien, hoy más de 180 familias están destruidas, y yo pienso, será que vale la pena jugar a la ruleta rusa entre una y dos veces al mes, al subirme a un avión?
Lamentablemente, no, pero como persona que trabaja en el área de TI, esto “es parte” de nuestro trabajo. Pero lo que si podemos y debemos hacer, es colaborar, en exigir más de la líneas aéreas, de las autoridades aeroportuarias, de todos los entes que deberían hacer de “volar”, la forma más “segura” de viajar.
Creo que debemos reclamar, cada vez que encontramos algo que no es correcto ya sea en nuestro viaje o atención.
A modo de ejemplo, en abril viajé a Montevideo, en uno de los peores horarios que existen para viajar desde Brasil a Uruguay. Estoy hablando del vuelo de Gol que llega en teoría a las 1.15 a.m. a Montevideo, el cual nunca llega antes de las 2 de la mañana.
Ese día, la madrugada del 29 de abril, me preparaba para aterrizar (esperando aquel golpe que da el avión contra el suelo) cuando veo que a escasos 10 metros del suelo, el avión comenzó a acelerar y ese golpe que se siente al tocar el suelo demoraba en acontecer.
Resultado, luego de ir rápido a baja altura por unos cuantos metros, el avión nuevamente levantó vuelo.
Error de torre?, error del piloto?, no había pista mojada, luego al pasar los días me enteré que por lo menos 50 fallas al mes acontecían en el radar del aeropuerto de Carrasco.
Hasta hoy no se que pudo haber pasado aquel día, pero viendo la tragedia de ayer donde al parecer el piloto intentó arremeter y levantar vuelo de nuevo, lo que no consiguió, pienso, porque dejamos al azar cosas con las cuales no se juega.
Tanto aquí en Congonhas como en Carrasco, se ha dado prioridad a lo “lindo” que se ve el aeropuerto en detrimento de que “seguro” es el aeropuerto.
Ojalá todos denunciemos y en algún momento quien tiene el poder de dar las órdenes, pueda leer nuestras quejas y tomar las decisiones correctas.
A las más de 180 familias, mi deseo de que sus seres queridos hayan encontrado la paz.

Fabricio De los Santos
Gerencia de Proyectos – Consultoría GeneXus –
ERP – Sistemas de Misión Crítica – Bases de Datos.

Vea mis blogs en:
www.fabriciodelossantos.com

No hay mejor escuela que la vida, decían…

miércoles, julio 4th, 2007

Seguramente, muchos de nosotros, hemos escuchado ese “proverbio” que nuestros abuelos acostumbraban a decir:

“No hay mejor escuela que la vida.”

Durante mucho tiempo en la adolescencia generalmente, uno ve eso con otros ojos, pero a medida que pasa el tiempo y ves algunos ejemplos reales, te das cuenta que en algo tenían razón, que en gran parte, no estaban equivocados, la escuela, el liceo,la facultad sirve de mucho, pero en realidad acaban formando la piedra en diamante bruto, pero es la vida quien lo deja fino. La experiencia, el rose del día a día, son las cosas que pulen ese diamante, y nunca definitivamente. Siempre hay algo para mejorar.
Pero como no quiero ser como mis abuelos y dejar esto en palabras, disponibilizé el acceso a un video de una persona que tiene mucho para enseñar, y que también no tengo dudas, tiene mucho para pulir, ya que se comenta que es arrogante, exigente y perfeccionista, pero, también es una persona que comenzó de la nada, hijo adoptado porque su madre no podía cuidar de él, (en realidad no quería, porque querer es poder), una persona que dejó la facultad para no ocasionar más gastos a sus padres adoptivos, alguien que fundó una gran empresa, y fue despedido de ella, alguien que luchó contra un cáncer de páncreas y por sobre todas las cosas, alguien que nunca desistió.

A continuación, los videos subtitulados en español, de una charla que recorrió el mundo en el 2005, pero que va a seguir vigente, por muchos años.

Steve Jobs en Stanford 2005

Primera parte

Segunda Parte

Fabricio De los Santos
Gerencia de Proyectos – Consultoría GeneXus –
ERP – Sistemas de Misión Crítica – Bases de Datos.

Vea mis blogs en:
www.fabriciodelossantos.com

Como simular una función Session o Variable Global en Win con GeneXus y Oracle

martes, julio 3rd, 2007

Cuando trabajamos en Web y queremos distinguir una sesión de otra podemos utilizar una variable de tipo WebSession.
Esto básicamente queda muy claro en cualquier ejemplo GeneXus generado por patterns, etc.

Un ejemplo puede ser el procedimiento SetContext de GxWiki

&Session.Set(WikiParameters.Context, &Context.ToXml())

Básicamente seteamos en la variable de tipo WebSession algo particular, en este caso un SDT que se llama context.

Ahora bien, por que querría o precisaría tener algo similar a una WebSession pero en una aplicación Windows?

Si bien desde siempre existen las funciones UserID() y Wrkst() que podrían darme esa unicidad que preciso, dependiendo de la aplicación o de algunas limitantes o que nos encontremos, cantidad de licencias, etc, puede ser que ni la combinación de estas 2 funciones mencionadas, nos pueda garantir el dato de una sesión dentro de mi aplicación.

Por ejemplo:

Tengo una aplicación corriendo bajo Terminal Services con licencia para 10 usuarios, donde el nombre de usuario podría no indicarme nada en particular, digamos podrían ser del tipo User1, User2, etc, para lo cual si usara la función UserID() para grabar una auditoría en un registro, no me serviría de mucho.

New
xxxx=yyyy
xxxx=yyyy
xxxx=UserID()
EndNew

Entonces podría llegar a otra solución

Aplico un login y password en una pantalla cuando ingreso al sistema y lo asocio con UserID()
Algo sencillo para ejemplificar (sin contemplar cientos de criterios de seguridad) sería más o menos así:

For Each //Usuarios
Where UsrCod=&UsrCod
Where UsrPsw=&UsrPsw
New //Log
LogUsrID=UserID()
LogUsrCod=UsrCod
EndNew
EndFor

Para luego volver a mi rutina de auditoria

New
xxxx=yyyy
xxxx=yyyy
xxxx=udp(pUserID)
EndNew

Donde “pUserID” seria una recorrida de la tabla Log usando como condición “LogUsrID=UserID()” y devolviendo como resultado el valor de “LogUsrCod” que podria ser “Juan”

Perfecto, ahora si tengo un Usuario que conozco registrado para auditoría.

Pero bien, complicándola un poco más, que pasaría si ese “User1” (del Terminal) está ejecutando mi aplicación y necesita ejecutar otra instancia?

No habría problemas, porque si bien no podría hacer el “New” en la tabla de “Log”, con la función “UserID()” obtendría el mismo dato, o sea “Juan”

Pero…

Si este mismo “User1” (del Terminal) en vez de entrar como “Juan”, necesita entrar como “Pedro”?
No podré hacer un “New”, y ni pensar de utilizar un “When Duplicate” porque reemplazaría un usuario por otro para dos sesiones distintas!

Mmm…
Esto me hace pensar que a partir de la primera pantalla, tendré que pasar por parámetro el usuario que se logueó. Es una solución un poco tediosa, porque objetos que no contemplé antes voy a tener que acomodar para recibir este parámetro.

Sería una solución contar con una función WinSession() que me devuelva la sessión del usuario que está conectado a la base de datos. Claro, su funcionamiento interno sería particular para cada DBMS. Pero, por mientras esto no esté en GeneXus, podemos simularlo mezclando algunos ingredientes de Oracle y luego cada uno puede aplicarlo en su DBMS de desarrollo.

1) Debemos crear una view en nuestra base de datos.

CREATE OR REPLACE FORCE VIEW MISESSION AS
select userenv(‘SESSIONID’) SESSIONID from dual;

2) En GeneXus, creamos un DataView a esa View de Oracle con un atributo para identificar la sesión.

3) Luego creamos un procedimiento que nos devuelva la sesión, para esto, hacemos un simple for each que recorra este data view, el cual para nuestra sesión solo va a devolver un registro.
En mi ejemplo lo llame “pmisession”

&MiSession=0
For Each //MISESISON
Defined By SessionID
&MiSession=SessionID
EndFor

Y listo, ahora simplemente en vez de utilizar la función UserId() o Wrkst(), llamaré a este procedimiento para obtener mi variable única.

Y si eres demasiado cómodo (y sólo si estás acostumbrado con el underground de GeneXus), puedes adicionar esta “función personalizada” a los archivos “*func.pst” en el directorio de GeneXus con la sintaxis

pmiession.Udp():Numeric

para que de esta forma cuando la quieras utilizar, simplemente presionando “Ctrl + U”, aparezca dentro de la lista de funciones.

Otras de las posibilidades sería usar el comando SQL de GeneXus, pero lamentablemente, no permite devolver resultados, si existiera una variante del mismo que permitiera en algunos casos devolver un resultado único para almacenar en una variable GeneXus, podría ser algo parecido a esto:

&sent=”select userenv(‘SESSIONID’) from dual;”
&misession= sql [!&sent!]

Pero… por ahora no existe.

Observación:
Puede parecer simple o de poco valor esta función de unicidad, pero realmente es algo útil.
Hace unos años en otra empresa, implementamos un sistema con una KB que usaba la función Wrkst() (y todavía lo sigue usando) para mantener la unicidad, y para que cada máquina corra en una sessión única, deshabilitamos la posibilidad que se ejecutara el sistema más de una vez por máquina, justamente para tener esa unicidad, algo que hoy realmente se podría solucionar de esta forma, que ya existía en aquella época, pero a veces uno toma las cosas como vienen y basados en el lema “lo que funciona no se cambia”, a veces perdemos eficiencia.

Fabricio De los Santos
Gerencia de Proyectos – Consultoría GeneXus –
ERP – Sistemas de Misión Crítica – Bases de Datos.

Vea mis blogs en:
www.fabriciodelossantos.com

iPhone, simplemente Steve Jobs

domingo, julio 1st, 2007

Este viernes 29 de junio, prácticamente antes de terminar la mitad del año, salió al mercado el iPhone de Apple. Un aparato touchscreen (sin teclado) con diversas funciones, para navegar en internet, suplantar el espacio que ocupa nuestro iPod entre otras.

En le mercado latinoamericano en principio quien tenga un iPhone, deberá conformarse con algunas de las funciones del aparato, excepto la de celular, ya que la exclusividad de uso es a través de la operadora de celulares Cingular de AT&T en Estados Unidos, es decir lo que conocemos como “bloqueado” para dicha operadora.

Pero esto último sería temporal, ya que el aparato es un celular, quatribanda GSM, lo cual comparándolo con cualquier aparato que tenga estas características, sería igual.

Entonces, porque no se puede usar ya en Brasil y Uruguay, por ejemplo?
En principio, aquí en Brasil, oficialmente no hay tratativas para que esté disponible a los usuarios de operadoras locales.
En realidad la negociación es un poco trabada. Para comprar un iPhone, en Estados Unidos, tienes que firmar un contrato por 2 años y en caso de desistir, pagar una multa. También no está muy claro respecto a la exclusividad en otros países, algo ya declarado como intocable en Estados Unidos, es decir si quieres usar el iPhone como celular te tienes que cambiar para AT&T.

Con tantas limitaciones, tendrá éxito el iPhone?

Es difícil en principio apostar por el futuro del iPhone. Técnicamente cuenta con 7 llaves de seguridad, lo cual para desbloquearlo no sería tan fácil, al menos en principio, ya que a todos siempre le llega su hora, pero en sus inicios, esto podría hacerlo no tan popular y de fácil acceso.

Y la competencia, podría sacar un producto parecido?

Es poco probable, el legendario Steve Jobs, en la dirección del Ave Fénix (Apple) ha introducido este producto con más de 200 patentes en sus componentes. Es decir, existen contratos de exclusividad con los proveedores de piezas para el mismo, lo cual frenaría lo suficiente a la competencia.

Entonces, el iPhone va a funcionar a prepo, porque no hay otro producto similar?

Existen productos que intentan ser parecidos, pero Apple, cuenta con algo que es inimitable, su cara ante el mundo, algo que hoy por hoy, vale la mitad de las acciones de la empresa, Steve Jobs, quien presentó el producto hace 6 meses y ni hizo otra cosa que dejar a todo el mundo esperando este día.

Fabricio De los Santos
Gerencia de Proyectos – Consultoría GeneXus –
ERP – Sistemas de Misión Crítica – Bases de Datos.

Vea mis blogs en:
www.fabriciodelossantos.com