Archive for March, 2010
Llegaron las vacaciones!!!

Saludos a todos los lectores d emi blog, especialmente a los de Ingenieria en sistemas. Este post lo he pensado especialmente para compartir algunos de los problemas con los que me encontre durante este mes y un poco de lo que hice dentro del ejercito.

Luego del último post que publique, obtuve mi tafkid (rol) por lo cual ingrese a una unidad de inteligencia militar dentro de la base central Tel Hashomer. Estuve en mefakedet meytab que traducido al español querra decir algo como la mejor sede. Mefakedet (sede) y meytab (lo máximo). Adentro de Mefakedet Meytab estuve en una célula que se llama Ta Hatzabot dentro de ella se evalúan los perfiles de los soldados que se van evaluando y se define hacia que divisiones van a ir de acuerdo a muchas características, en realidad no puedo contar mucho de lo que se hace ahi y tampoco es la idea del post, solo para dar un panorama de mas o menos en donde estaba.

En la oficina en dónde estaba hay un software que accede a la base de datos y genera consultas. Es un software especial de inteligencia israeli, mas bien es un interprete que entiende consultas en un lenguaje que solo se conoce dentro de la célula y genera un SQL que es quien busca dentro de la base de datos. Esto se hace por razones lógicas, con ello se evitan ataques de SQL Injection o que un buen hacker pudiera intentar robar información. La única forma de acceder a la base de datos es mediante este software.

Cuando llegue el primer día el encargado de la oficina me dijo “mira vos, tenemos este un software (otro distinto) que va a buscar ciertos datos através de el software antes mencionado y genera un archivo de salida separado con comas, luego abre excel y dentro de excel hace varias otras tablas y configuraciones; el problema que tenemos es que es demasiado lento y aca en el ejercito cada minuto vale oro”

Le conteste “Ok voy a chequear el codigo de programación y le cuento”. El programa estaba hecho en VB6 y me puse a debuggear el programa. La última vez que programé creo que o fue en el concurso de programación en COECYS 2008 o fue en Bases2 mas o menos en las misma fecha. Así que bastante oxidado de año y medio de no programar me puse a revisar que pasaba. Inicialmente hacia una consulta y la enviaba como archivo de entrada al software que les mencione anteriormente para hacer la busqueda en la base de datos, luego el software generaba el archivo de salida. Lo primero que noté es que el archivo de salida se generaba alreves pero tambien los datos salían alreves, luego habia un procedimiento que invertia cada dato y despues tambien invertia el archivo tambien. Y no se, como por arte de magia regresó mi amor a programar. Me recordé de porque habia estudiado sistemas. Luego de haber programado años de años en la facultad hasta llegar a detestar la progra, creo que ese descanso de año y medio me hizo bien. Me senti emocionado que tenia que resolver un problema de lógica. Ese primer dia solo chequié el código y me regrese a mi casa, todo el tiempo pensando en que era una perdida de tiempo tener que dar vuelta a tanto. Asi que pedi que me explicaran un poco de como funcionaba el software de las consultas para comprender lo que pasaba. Y juaz!!! me di cuenta en donde estaba el error.

Resulta que nuevamente el hombre es mejor que la computadora quien solo puede leer de izquierda a derecha, mientras que el hombre puede tambien de derecha a izquierda. El primer problema que me di cuenta fue el de porque el archivo se generaba alreves. Les pondré un ejemplo:

Una consulta de tipo: “Select codigo, nombre, apellido, perfil, fecha_nacimiento from soldado” al escribirla en hebreo se vería algo asi: “soldado from fecha_nacimiento, perfil, apellido, nombre, codigo select”. Para un israeli que su lengua madre es el hebreo su forma de pensar es la misma que la nuestra, solo que de derecha a izquierda el problema era que la base de datos y las computadoras estan hechas de izquierda a derecha, por lo tanto al escribir el archivo la base de datos lo generaba asi

codigo, nombre, apellido, fecha_nacimiento y luego el software que yo estaba revisando lo invertia todo para que quedara fecha_nacimiento, apellido, nombre, codigo porque en hebreo esa es la forma correcta de verlo. Le explique eso al director de la unidad y entonces obtuve los permisos para modificar las consultas de manera que quedaran “soldado from codigo, nombre, apellido, fecha_nacimiento select” y solucione el primero de los problemas. De la misma manera ahora los soldados cuando quieran hacer nuevas consultas saben que las tienen que hacer alreves.

El siguiente de los problemas era que por lo mismo la base de datos generaba los datos alreves. Es decir, mi nombre en hebreo se ve asi: “יצחק” pero cuando se generaba el archivo de salida, salía “קחצי” (no importa si saben o no hebreo, solo les comparto el concepto). Pero por ejemplo el numero de telefono esta en nuestro alfabeto normal que conocemos, entonces no habia que invertirlo, sin embargo el programa era tan tonto que no solo lo invertía, sino que despues verificaba si era numero y lo volvia a reinvertir xD. Pero no podia hacer un simple if isnumeric(dato) then dato=dato else dato=strReverse(dato) porque tambien habian ciertos datos encripatados que tienen letras y numeros mezclados. Pero por algo fui auxiliar de compi durante tantos años :).

Lo primero que pense fue “Un compilador!!!!” pero no necesitaba utilizar un software tipo JLex y Cup va, peor para VB6 xD esque me rio solo de recordarlo. Simplemente tokenizar las cadenas e invertir de modo que una cadena “יאבג0200ש” se viera “ש0200גבא”. Sencillo, tokenizaba y ahora si ya tokenizado entonces lo que puse arriba if isnumeric… etc etc

A final de cuentas el programa que hacia 11 minutos en generar todo lo que tenia que generar ahora solo tardaba 2 minutos.

Estuve resolviendo muchos de estos tipos de programas, programitas que algun soldado que era programador habia hecho, que funcionaban pero que no eran óptimos, además me tope con otro tipo de problemas de lenguaje. La mara que programa tiene malas practicas como crear nombres de variables o procedimientos en su propio idioma, en hebreo es peor porque como el compilador no reconoce los id en ese alfabeto, entonces la mara escribe en fonetica pero es peor aún porque la fonetica de un Israelí, no es la misma que la de un gringo o que la de un ruso y la mía. Por ejemplo “fecha” en hebreo es “תאריך” pero como no pueden hacer un dim תאריך as date xD!! entonces escriben Dim tarih as date pero para mi es “taarij” y para un ruso era “tarix” y para un gringo “taarih”. Entonces shhhhhh que aveces no entendía que habia tratado de hacer.

Bueno en fin amigos lectores, queria compartirles un poco de lo que hice en el ejercito, eso sin contar las salidas a correr a las 5 de la mañana, despechadas y dias de ir al polígono de tiro porque tambien hay que estar preparados por si hay guerra, la vida no es solo de programar va :) pero ayer mi superior me dijo que me necesitan en una unidad mas científica ya que según los examenes que pase y las entrevistas aparezco como sobrecalificado y me dieron descanso una semana que pasaré en mi casa, regresaré a trabajar un turno al bar y a continuar con escribiendo un libro que estamos desarrollando con el Ing. Javier Gramajo acerca de la importancia que tiene para América Latina la inversión en proyectos de ciencia y tecnología. La próxima semana tengo una entrevista en la nueva base haber que tal.

Espero que pasen una excelente semana santa mis amigos chapines y para todos mis amigos aca en Israel que leen mi blog que pasen un Pesaj alegre y kasher. ;)