martes, 15 de enero de 2008

Jaybird Problemas ?

5 de Diciembre 2007

He desarrollado ya varias entradas de datos y la verdad con los objetos de acceso a datos que desarrolle las cosas ya son mas aceptables y puedo desarrollar bastante rápido esto me esta gustando.
Toda estaba bien hasta que me percato de algo extraño cuando procedía a grabar datos en una tabla con llave primaria compuesta se modificaban todos los registros para los cuales coincidía el ultimo campo de la llave compuesta me explico mejor con un ejemplo:

TABLA=DEMO1
sistema codigo campo valor
002 1 UNO 100
002 2 DOS 200
002 3 TRES 5000
002 5 UNO 300
002 10 DOS 100
002 20 UNO 200

PRIMARY KEY = CAMPO+CODIGO+SISTEMA

Si yo actualizo el campo valor de 200 a 10 para los registros con el campo sistema='002' y ademas con el campo codigo='20' esto deberia afectar solo a un registro.

Después de realizar la actualización el resultado debería ser este:

sistema codigo campo valor
002 20 UNO 200

Pero los resultados fueron diferentes obteniendo los siguientes datos:

sistema codigo campo valor
002 1 UNO 10 (*)
002 2 DOS 200
002 3 TRES 5000
002 5 UNO 10 (*)
002 10 DOS 100
002 20 UNO 10 (*)

Esto para mi es un Horror, bueno pensé algo estoy haciendo mal así que a revisar todo el código que he avanzado para detectar el posible error ese día me amanecí para variar (jajaa casi siempre lo ago) . Analizando todo llegue a la conclusión siguiente el controlador Jaybird tiene un problema muy pero muy grande como antes no se percataron de eso realmente es algo terrible.

Decidí escribirle a Roman Rowinsky el creador de Jaybir para que me oriente que cosa estava haciendo mal. Roman Rowinsky me contesto lo siguiente:

Please post this email into our bug tracker at
http://tracker.firebirdsql.org

It looks like a bug in JDBC driver when handling the compound primary keys.

Aqui me esta confirmando que efectivamente existe un problema con el controlador JDBC de Jaybird en la actualización de registro con tablas que tienen Llaves primarias compuestas.
Bueno esto me puso muy preocupado, publique el bug en la dirección que Roman me indico y en esa dirección me percate que existen Bugs desde el 2006 que no se solucionan hasta la fecha o si se solucionaron no se menciona nada de ello.

Al percatarme de ello estaba al borde de a locura y que hago me dije lo primero tranquilizarme y pensar friamente que seria los mas adecuado hacer, entonces se me ocurrieron las siguientes alternativas:
  • Cambiarme de Motor de Base de datos
  • Pedirle Porfavor a Roman que me Ayudase con el problema
  • Yo mismo corregir el controlador
Asi que empece a analizar las diferentes alternativas que tenia, la primera cambiarme de base de datos bien a Postgress o Mysql me decidí por Mysql así que estuve explorando las posibilidades con esta base de datos, como se sabe Mysql apartir de la versión 5.0 comienza a dar soporte a Procedimientos almacenados,disparadores , funciones definidas por el usuario, etc. estuve revisando el lenguaje de programación que utiliza Mysql y toda la información que encontré me llevo a pensar que Mysql todavía no esta muy maduro en estos temas como RBDMS, mi conocimiento con Firebird data desde el 2004 y con el cual he desarrollado muchos sistemas, esto me garantizaría tiempo y funcionalidad para la generación de cualquier tipo de reporte por mas complejo que este fuese, con IBSQL (Lenguaje de Firebird) todo lo podría resolver. Así que me propuse Corregir el Controlador yo mismo si en 24 horas no lo podía corregir el cambio de motor de base de datos era inevitable.

Le pedí a Roman que me diga donde podía conseguir el código fuente de Jaybird 2.1.1 (Es la versión que estoy usando) pq' en la pagina de descarga solo se encuentra los fuentes de Jaybird 2.1 Roman me contesto lo siguiente:

You have to check out the sources from the CVS

cvs -d :pserver:anonymous@firebird.cvs.sourceforge.net:/cvsroot/firebird
co -R Jaybird_2_1_1 client-java

Aca entra el excelente soporte que tiene Netbeans 6.0 para el trabajo con CVS es de lo mejor que yo he visto.
Una ves trabajando con los fuentes de Jaybird detecte el problema en la clase FBRowUpdater realice la corrección de manera exitosa compilando nuevamente Jaybird con la versión parchada dando resultados satisfactorios, sinceramente que al ver que la nueva versión compilada de Jaybird funcionaba correctamente, la tranquilidad regreso a mi. Corregir el controlador no fue tarea fácil lo primero, hay que aceptar el reto y tener la seguridad de que todo se puede solo el factor tiempo era mi enemigo. Con este problema superado y habiendo ganado mucho mas experiencia en Java con 1 mes de estar desarrollando en este lenguaje, en ese momento me sentí muy contento y con la confianza de que ningún problema me detendría para desarrollar este sistema.

Le escribí a Roman un correo con el código corregido:

Te agradesco por el apoyo y los fuentes de Jaybird. te envio la correccion que he realizado.
saludosy y Nuevamente Gracias.

Atte.
Oscar Zelada Pozo

//***********************************************************************************************
private int[] getParameterMask() throws SQLException {

// loop through the "best row identifiers" and set appropriate falgs.
FBDatabaseMetaData metaData = new FBDatabaseMetaData(gdsHelper);

ResultSet bestRowIdentifier = metaData.getBestRowIdentifier(
"", "", tableName, DatabaseMetaData.bestRowSession , true);
try {
int[] result = new int[xsqlvars.length];
boolean hasParams = false;
while(bestRowIdentifier.next()) {
String columnName = bestRowIdentifier.getString (2);
if (columnName == null)
continue;

boolean found = false;
for (int i = 0; i <>) && "DB_KEY".equals(xsqlvars[i].sqlname)) {
result[i] = PARAMETER_DBKEY;
found = true;
break;
} else
if (columnName.equals(xsqlvars[i].sqlname)) {
result[i] = PARAMETER_USED;
found = true;
break;
}
//---------Este Else--No es necesario Pq' los elementos del Array se inicializan en cero-----
//---------Como el for siempre recorre todos los parametros de Xsqlvars siempre setea todos los anteriores a cero-----
//----------y si ya se asigno un valor diferente a cero sera chancado por eso esas lineas estan de mas---------
//---------el error era que siempre queda el ultimo campo de la llave primaria y sera el unico------
//--------Que se tomara en consideracion para el where del Update------------------------------------
//--------------Gracias por Todo Roman Saludos desde Peru Atte. Oscar Zelada--------------------
// else
// result[i] = PARAMETER_UNUSED;
}

// if we did not found a column from the best row identifier
// in our result set, throw an exception, since we cannot
// reliably identify the row.
if (!found)
throw new FBResultSetNotUpdatableException(
"Underlying result set does not contain all columns " +
"that form 'best row identifier'.");
else
hasParams = true;
}

if (!hasParams)
throw new FBResultSetNotUpdatableException(
"No columns that can be used in WHERE clause could be " +
"found.");

return result;
} finally {
bestRowIdentifier.close();
}
}


Aqui pongo los binarios de Jaybird 2.1.1 que corrige el problema de llave primaria compuesta por si alguien los necesita.

miércoles, 9 de enero de 2008

UNS Sistema de Planillas/ Control de personal

Después de renunciar a la Agroindustria San Jacinto, estuve desarrollando todo el año 1999 y 2000 principalmente en la Universidad Nacional de la Santa y el SIMA Chimbote.

El primer sistema que desarrolle en la UNS fue el sistema de planillas el cual tiene una historia.
La UNS por ser una universidad del estado está sujeta a la burocracia y los temas administrativos propio de instituciones de este tipo. Pero también me enfrentaba a otro problema la confianza que tenía la administración de poner este proyecto en las manos de unos de sus egresados, aunque suene contradictorio la parte administrativa no confiaba en el potencial y la capacidad de sus egresados es escuchaba comentarios como los siguientes:

• Como va desarrollar UNS sistema tan complejo como el de planillas donde ni gente de Lima ni Huaraz han tenido éxito.
• No creo que lo desarrolle si mira la clase de docentes que ha tenido
• Esperemos es cuestión de meses para ver como el sistema nunca funcionara.

Yo ya tenia la experiencia del desarrollo en San Jacinto con los 4 sistemas que desarrolle esto me daba la seguridad de desarrollar el proyecto.
Tuve un gran apoyo de un amigo entrañable (Víctor P.) que me daba confianza y apoyo, el tema de este sistema se transformo en un reto personal de demostrar a la gente de los que se era capaz, el desarrollo empezó inicios de Abril de 1999; la primera planilla se probo finales de mayo y entro en funcionamiento para el mes de Junio de ese mismo año.
En ese lapso de tiempo me enfrente a muchos problemas de diferente índole, pero finalmente el proyecto se termino satisfactoriamente.
Como desarrollador de Software uno se siente contento cuando un sistema tiene una vida no menor de 5 años, fue el tiempo que estime que mi sistema funcionaria y para mi sorpresa el sistema funciono hasta inicios del 2007. Según el comentario de los usuarios que trabajaron con el sistema este pudo realizar los procesos y cálculos de manera correcta, he escuchado muchas críticas positivas tal es así que hasta la fecha se comenta que fue el mejor sistema con el cual los usuarios de planillas han trabajado.
Finalizado el sistema de planillas empezamos con el sistema de registro de personal el cual se desarrollo utilizando las siguientes herramientas:

• PowerBuilder
• Ms Sql Server
• Sybase Adaptive Server

El sistema leía a través de un lector de código de barras el código del trabajador registrando los datos de este en el sistema, también se contemplaban la cuantificación de los descuentos por tardanzas e inasistencias que tenían que reflejar en el sistema de planillas. El sistema funcionaba en línea cuando el trabajador se registraba se podía visualizar la información en el dpto. de personal, el sistema utilizaba la tecnología text to speech para pronunciar el nombre del trabajador registrado así como mostrar su fotografía en el sistema.

Anteriormente en la versión de PowerBuilder 6.5 se podía crear servidores de aplicaciones que utilizándolos con objetos proxy se realizaba un desarrollo de N capas. Utilizábamos esta tecnología para los objetos de la lógica del negocio.

En aquel entonces las redes inalámbricas no eran tan usadas y conocidas como hoy debido al alto costo que esto involucraba. Teníamos 2 Locales que comunicar El campus Universitario y Las oficinas administrativas, por ese entonces la UNS no contaba con internet para lo cual solo contábamos con una línea telefónica.
Se desarrollo un aplicativo para establecer una comunicación entre estos 2 locales, se realizaron 2 versiones del programa de comunicaciones realizando las pruebas con un cable modem null, en este punto 2 amigos me estuvieron apoyando para realizar las comunicaciones David P. Miguel B. después de superar algunos problemas el programa de comunicaciones quedo OK, de esta manera se demostró de manera fehaciente la capacidad y calidad de las soluciones informáticas que se estaban brindando.
recuerdo que le realizamos una demostración a las autoridades y en ese entonces el Decano de ingeniería había regresado de México de una maestría y su comentario fue:"no he visto cosas así por allá con el uso tan avanzado de tecnología"
En este proyecto aprendí cosas muy interesantes con respecto a las comunicaciones seriales y en general y se me abría otro mundo muy interesante para el cual en su momento estaría preparado.
Las tecnologías en este proyecto fueron Sistemas de N capas, Codigos de Barra, text To Speech y comunicaciones seriales.

domingo, 6 de enero de 2008

Remplazar Novell Netware por Linux

En el Sima Chimbote se contaba con Novell Netware 4.11 como servidor de archivos hasta finales del 2002 fecha en la cual se decide remplazar este servidor por uno Linux. Yo particularmente me había concentrado el el sistema de Gestión de Calidad para apoyo a la cerificación ISO 9000 versión 2000.
La licencia de Novell Netware para la cantidad de PCs que teníamos le costaría a la empresa entre 15000 y 20000 $ , frente a ello se planteo la migración asia Linux. Recuerdo que se adquirió un servidor HP con 2 Microprocesadores 2.8 MGZ, 2GB de Ram, 3 discos SCSI configurados en RAID 5, 2 tarjetas de Red una de Fibra óptica, y otra UTP 10/100/1000. La versión que decidí instalar fue Red Hat 9.0, recuerdo mucho cuando el Jefe de la oficina se acerco y me converso preguntándome de si podría realizar la configuración del nuevo servidor y si se obtendrían resultados similares al funcionamiento de novell (colas de impresión, mensajería de usuarios y como servidor de archivos) y repuesta fue firme ! Le ahorraremos 20000 $ a la empresa ! si se puede hacer.
Mi experiencia con Linux principalmente se había centrado en la configuración desktop y había configurado servidores SMB. servidores de correo, etc. Pero una cosa es realizar configuraciones a nivel Desktop y configurar servidores con el afán de aprendizaje y la otra es configurar un servidor de producción con mas de 100 usuarios y poder brindar los diferentes servicios que tenia Novell.
Empece un día por la mañana realizando la primera instalación de Red Hat 9.0, el sistema se instalo sin problemas, realice las configuraciones de Samba para poder compartir los recursos en la red y realizar las pruebas en las estaciones, aparentemente sin ningún problema, cuando de repente el servidor se planta bueno algo extraño realmente me pareció así que analice mas detalladamente si los componentes Hardware estaban todos correctamente reconocidos ho sorpresa Red Hat 9.0 solo reconocía 1 microprocesador pese a que había instalado el kernel SMTP, solo se reconocía 1GB de Ram. Lo primero que pensé fue algo en la instalación he hecho mal asi que nuevamente formatee el servidor y a reinstalar todo. La verdad que no recuerdo cuantas veces realice la instalación en el servidor y siempre el mismo problema ya el día se acababa y sinceramente no había nada concreto, me imagino que el Jefe de la oficina se percato de ello cuando me pregunto si existía algún problema le respondí que no había ningún problema y todo caminaba según lo planeado.
Finalizando el dia me puse muy tenso porque ya había dado mi palabra de que todo iba a funcionar y sobre todo el area de Sistemas y la oficina de planificación se habían comprometido con la jefatura y que la migración seria un éxito. Cabe recalcar que la gerencia del SIMA Chimbote la manejan militares (específicamente oficiales de la marina) y la formación de un militar y el trato que tienen es duro y no se andan con juegos. Todo eso me tenia muy tenso y preocupado siendo casi las 10:00 p.m. y sin resultado concretos pensé que es lo peor que puede pasar, ya me tire a la piscina aprendo a nadar o me ahogo evaluando las diferentes alternativas que tenia pensé Linux es libre el problema esta en el kernel precompilado de Red Hat 9.0 para este hardware en particular así que porque no descargar los códigos fuentes y compilarlo, dentro de mi era consiente que nunca lo había hecho pero mi formación profesional y mi inquietud por solucionar el problema me daban la fortaleza de enfrentar este reto asi que manos ha la obra, descargue la ultima versión del kernel recuerdo la 2.4.x y prosedi a leer sobre el proceso de compilación y la creación de imágenes el gestor de arranque, los drives ,etc. recuerdo que sin darme cuenta ya había amanecido y recién pude obtener un kernel funcional que arrancara y reconociera todo el Hardware del servidor...

jueves, 3 de enero de 2008

PowerBuilder en Escena

La aparición de Windows 95 con fuerza en el mercado supuso también un cambio en las herramientas de desarrollo, empezaron ha reinar los lenguajes visuales.
Si bien es cierto que windows 95 apareció el año 95, pero su reinado en el medio se acentuó los años 96 y 97, los lenguajes visuales también existían hace buen tiempo pero con windows 95 empezaron a reinar con fuerza.
Clipper intento hacer algo con visual Object pero fracaso, Foxpro saco Visual Foxpro el cual tuvo relativo éxito.
Así que yo me incline por Visual Foxpro empece ha desarrollar algunos programas no muy complejos, con la intención de conocer el lenguaje. Pero también en ese entonces apareció Powerbuilder en mi vida.
Empece a programar en PowerBuilder 4.0, tuve la suerte que en la universidad empezaron a dictarlo en un curso de Base de datos (Gracias Hugo C.) , uno de los primero trabajos que me trace fue la migración de un sistema de conciliación bancaria que había desarrollado en Foxpro, esto lo hice para aprender el lenguaje, como siempre pienso si quieres aprender un lenguaje de programación pues desarrolla un proyecto con el, es la manera mas adecuada de lograr esto. En la universidad desarrolle algunas cosas, pero nada complejo.
La migración del sistema de conciliación bancaria me ayudo mucho, con ese proyecto me introduje en el mundo de PowerBuilder y la verdad que no me arrepiento esta es una herramienta creada para desarrollar sistemas de base de datos y tiene una elevada productividad, un manejo excelente de objetos y herencia, su parte medular es el control Datawindow definitivamente una maravilla.

Recuerdo que estaba cursando el ultimo ciclo de la Universidad cuando se me presento un trabajo en una azucarera de la región y necesitaban desarrolladores a tiempo completo, un amigo me paso la voz y pude entrar a trabajar en esa empresa.
En esta azucarera como en otras empresas de la región la mayoría de sistemas estaban desarrollados en Foxpro y las redes que existían eran Novell Netware, algo que por suerte ya conocía de mis anteriores experiencias.

Me encargaron la automatización de los procesos de la Fabrica, esto comprendia los siguientes sistemas:
  • Sistema de balanza
  • Sistema de Laboratorio
  • Sistema de Liquidaciones
  • Sistema de Producción
Todos estos sistemas eran complejos, ya que habían muchos cálculos que realizar y también tenían que coexistir con otros sistemas y diferentes bases de datos.
Me paso una experiencia cuanto recién tenia 3 semanas en la empresa, ellos tenían un servidor Novell netware 3.x y querían migrar a Novell Netware 4.11 y me preguntaron si antes había instalado un servidor Novell y obviamente mi respuesta fue si la mala costumbre me persigue , en realidad nunca había instalado un servidor Novell Netware 4.11, así que manos a la obra recuerdo que me quede dos fines de semanas a probar y reprobar con los manuales y ahora si ya contaba con Internet, finalmente despues de esos 2 fines de semanas pude instalar Novell Netware 4.11 en un servidor alternativo, y estaba finalizando las pruebas para poner a producción el servidor. Cuando de repente el servidor Novell Netware 3.11 deja de funcionar en apariencia el disco duro estaba fallando y el servidor no arrancaba, parando toda la parte administrativa que trabaja con sistemas (Contabilidad, personal, caja, facturación ,etc.) el jefe del área no sabia que hacer recuerdo que llamaba a todas partes para que lo puedan ayudar, pero a nosotros los desarrolladores nuevos no nos decía nada, tal era su desesperación del jefe de sistemas que empezó a darse de cabezazos contra una mesa y esta rojo rojo parecía que iba explotar. Después de haber parado el servidor toda la mañana y las parte administrativa sin funcionar, me acerque al Jefe de Sistemas (Nick R.), le pregunte si lo podía ayudar bueno me explico el problema, y por mis conocimientos en ensamblador supuse que había que realizar una copia de todo el disco pero lo realizaría sector a sector, desarrollaría un programa para esto desde ensamblador, el requerimiento que tenia era que necesitaba un disco físicamente igual, para que mi programa funcione, me proporcionaron el otro disco y manos a la obra desarrolle el programa y en 4 horas ya tenia un disco clonado en el cual la falla física se había transformado en lógica, pudiendo levantar el servidor y empezar a funcionar los sistemas, se que de repente existirían herramientas alternativas pero en ese momento no las conocía así que tuve que desarrollar el trabajo.
Al solucionar este problema me gane toda la confianza de mi jefe dándome mas responsabilidad y mejores condiciones.
Luego actualice el servidor Novell Netware a la version 4.11 y configure todos los clientes esto fue una experiencia muy interesante, esa red si bien es cierto era desordenada pero existían todo tipo de cableados, UTP, Coaxial y fibra óptica, era una red regular casi un Kilometro desde los puntos mas distantes, teníamos que utilizar repetidoras en algunos casos para que la señal llegue, Fueron 2 semanas de arduo trabajo pero al finalizar la satisfacción de ver todo funcionando y haber aprendido muchas cosas. Me convertí en el administrador de la red y desarrollador de aplicaciones, empece ha desarrollar los sistemas en PowerBuilder y como motor de base de datos utilice Microsoft Sql Server. Todo esto sobre una red de Windows Nt 4.1 y también accediendo ha archivos dbf (via ODBC) de Novell Netware.
Esta empresa me dio muchas oportunidades, como ninguna otra la plana de funcionarios era A1 tuve el honor de trabajar con muchos de ellos, la mayoría eran extranjeros hasta el día de hoy no he conocido en la región ninguna empresa con esa calidad de funcionarios. Todo esto me nutrió como profesional recuerdo mucho la frase del contralor general cuando me pregunto sobre la evolución de un sistema me dijo "Como van las cosas" yo le respondí técnicamente (jajaja de repente quería marearlo) el me contesto " Mira yo desconozco la complejidad técnica sobre lo que me hablas, lo único se es que esto entra y esto es lo que yo quiero que salga ahora dime la puedes hacer o no" el me enseño que los problemas son una caja negra y uno tiene que abstraerse y pensar a nivel macro la caja negra es el problema del técnico ahora lo puede hacer o no esa es la pregunta, muy sencillo pero muy cierto pq' aveces cuando converso con desarrolladores te empiezan a marear y te hacen un espagueti y las finales no te dicen nada, simplemente se que esto es lo que entra yo quiero que esto salga lo puedes hacer o no.
Estuve un año en la azucarera atraves del cual aprendí mucho ya que el entorno era muy enriquecedor el nivel profesional de los funcionarios y la manera como se tomaba las decisiones era muy interesante, todo esto a nivel de procesos, en informática me dieron amplias libertades para probar las tecnologías que yo sugería. Lo malo de esta empresa es que te absorbía demasiado francamente que trabajaba duro un promedio de 12 a 14 Horas diarias yo ya estaba acabando la universidad y tenia que hacer mis papeles para poder sacar el titulo de Bachiller y luego el titulo de Ingeniero así que renuncie.

Foxpro 2.6 y los Sistemas

Con las experiencias que había tenido, ya tenia una visión de como se debería desarrollar los sistemas para una empresa. Fue cuando se me presento la oportunidad de trabajar en una empresa que brindaba el servicio de desarrollo de sistemas en diferentes empresas de la región.
Me presente me hicieron la entrevista y en esta oportunidad me pidieron que desarrollara en Foxpro 2.6. Yo ya tenia la mala costumbre de decir si a todo y esta vez no iba ser la excepción obviamente dije que si sabia Foxpro (Bueno ya conocía Clipper 5.3 y como Clipper y Foxpro son primos) . Me probaron dejando un programa para hacerlo en 2 días, bueno felizmente pude hacerlo en ese lapso de tiempo y me puse las pilas para dominar Foxpro y empezar a desarrollar sistemas. En esta empresa conocí a una persona que me ayudaría mucho en el desarrollo de sistemas, Gracias Flor V.
Mi primer Trabajo en esta empresa fue desarrollar un sistema de Facturación para la Empresa de Servicios de fluido eléctrico (Hidrandina).

El problema que encontré fue que el sistema ya se encontraba avanzado y yo tenia que terminarlo, aquí aprendí que es mucho mas difícil entender las Lógicas ajenas que desarrollarla uno mismo. No existía documentación alguna y había que bucear en el código y parchar y cambiar, etc.
Recién estaban madurando mis conocimientos en Foxpro así que no me atreví a cambiar todo el sistema esto fue al inicio pero al las final todo el sistema tuvo que ser reescrito. El sistema se termino, al inicio presentaba algunos problemas pero los cuales se superaron en el camino y empezó a funcionar en Chimbote, un tiempo después ese sistema se instalo en las diferentes ciudades del departamento.
En el mundo de las redes reinaba Novell Netware que era un estándar en la mayoría de las empresas, Windows NT recién estaba ingresando al mercado con fuerza.
Las redes que mundo maravilloso sera ese, algo que me dejaba intrigado, como sera veo que existe una persona exclusivamente dedicada a la administración de la red en Hidrandina existen como 50 estaciones de trabajo y veo que el administrador realiza unas configuraciones especiales para dar acceso y permitir que los usuarios puedan trabajar sin problemas.
Mi curiosidad me hizo aprender Novell Netware 4.11 recuerdo esa versión pq' era la que reinaba en la mayoría de las empresas. aprendí Novell Netware en teoría y lo poco que podía hacer era curiosear en la red de Hidrandina pq' no tenia mas privilegios y mis conocimientos eran básicos.

Terminado el sistema de Hidrandina, la empresa en la cual estaba trabajando me envió ha desarrollar un sistema en una Pesquera "Consorcio pesquero Carolina" allí tuve que desarrollar un sistema de conciliación bancaria, el proceso de las cuantas corrientes y las conciliaciones con los movimientos que hace la empresa. Ya había ganado experiencia en Foxpro que era el lenguaje en el que se iba a desarrollar así que no tuve mucho problema en temas de programación.
Lo que no conocía era contabilidad y como funcionaban el plan de cuentas en una empresa el famoso Debe y haber o Cargo y Abono , etc. así que esto de contabilidad era nuevo para mi, en la universidad no me habían enseñado nada de ello, esto que era algo desconocido para mi.
En esta empresa aprendí mucho mas sobre la organización en si misma, algo de contabilidad y un poco de redes Novell Netware.
Recuerdo mucho a la encargada de sistemas una Ingeniera que tenia sus puntos de vista de como deberían desarrollarse los sistemas, yo en aquel entonces estaba cursando los últimos ciclos de la universidad, recuerdo mucho las discusiones sobre el modelo relacional y la lógica de negocio de la empresa y el modelo de data de la empresa. Yo le daba mi punto de vista en aquel entonces, de como ya veía los sistemas y como deberían ser desarrollados.

Aquí aprendí a conocer los diferentes tipos de usuarios que uno puede tener en el proceso de desarrollo de sistemas, para mi mala suerte me toco un usuario con pocos conocimientos y criterio lo cual ocasionaba discusiones y ciertos problemas en el desarrollo del sistema.
Definitivamente para evitarme problemas, tenia que introducir un mecanismo de seguimiento de las diferentes actividades que se hacían en el sistema para determinar que cosas hacia el usuario.
Esto me sirvió mucho ya que en en sucesos posteriores podía determinar el día y la hora de ciertas operaciones que los usuarios habían realizado en el sistema.

Clipper, Foxpro y Pascal

En esa época el lenguaje dominante para la creación de soluciones para la empresa eran los lenguajes XBase principalmente Clipper 5.3 y Foxpro 2.6, los software que había desarrollado eran netamente con el objetivo de aprender pues no había tenido la oportunidad de desarrollar algún software para una empresa. Fue un colegio recuerdo que me contrato para desarrollarles su sistema de matriculas y notas con la condición que se utilice Foxpro 2.6.
La verdad mi programación era mas académica y solo había desarrollado pequeños programas en Clipper como el famoso "Hola Mundo" y nada mas, Bueno acepte el proyecto del colegio y les dige que desarrollaría el software en Foxpro 2.6, bueno la verdad no sabia nada de Foxpro y decidí hacerlo en Pascal pq' era el lenguaje que conocía. Al inicio no les dije que el proyecto lo estaba desarrollando en pascal no fue hasta ya haber entregado los primeros resultados que converse con el director del colegio y me sincere, explicándole el porque había procedido de esa manera. Los resultados fueron buenos y como en la vida la gente trabaja en función a hechos y resultados el proyecto continuo.
La verdad que fue uno de los trabajos mas duros que me toco hacer (Quien me mando hacerlo en Pascal ?) pues tuve que desarrollar todas las estructuras de archivos similar a los Dbfs que utilizaba clipper, los indices para los ordenamientos las impresiones, los browses, etc la verdad un trabajo bastante tedioso, pero gratificante.
Al finalizar el proyecto me dio la seguridad de que se podrían hacer muchas cosas pero también aprendí que no tengo que volver a inventar la rueda si ya esta creada.
Tuve la satisfacción de haber creado muchas cosas y que estas funcionen pese ha la complejidad interna que tuve que desarrollar. El software estuvo funcionando en el colegio por unos años mas es lo ultimo que supe.
Clipper y Foxpro están orientados al trabajo especifico de manipulación de data con archivos Dbfs y la verdad que son muy buenos en lo que hacen estos lenguajes, lógicamente que en la actualidad las cosas han cambiado tenemos mejores herramientas para hacer mejores sistemas. Pero acá tengo una reflexión muy grande Antes los desarrolladores en su mayoría tenían un mejor nivel de preparación pues los sistemas funcionaban mejor en muchos casos sin gozar de las ventajas de hoy en día.

Actualmente estoy buscando entre mis viejos Cds y Disquetes haber si encuentro el programa para mostrarles algunas capturas de pantallas de ese software.

miércoles, 2 de enero de 2008

Mi primera Broma en la UNS

Después de haber aprendido lenguaje ensamblador y haber realizado algunos programitas interesantes, decidí adentrarme dentro del mundo de los programas residentes en memoria, simule un interprete de comandos como el DOS residente en memoria el cual interceptaba la interrupción del teclado para saber que cosa estaba tecleando el usuario y llamar al verdadero interprete de comandos, pudiendo el programa auto replicarse reproduciéndose en los diferentes ejecutables que habían en el sistema, este programa lo desarrolle en pascal y ensamblador, esto lo realice con fines netamente de investigación jugandole algunas bromas a compañeros y profesores que lógicamente no sabían que es lo que sucedía, después de comprobar el funcionamiento del programa y el éxito que tuvo al reproducirse rápidamente, pare la broma eliminado al programa que estava contaminando varios Pcs. Para esto desarrolle un software que me permitía anular las funciones del programa nocivo. Este utilitario que desarrolle le agrege una funcionalidad muy interesante, que era la de verificar si un sector del disco realmente se encontraba dañado ya sea disco duro o Floppy. Algunos virus en ese tiempo marcaban algunos sectores en la fat como dañados los cuales no lo estava estos sectores dañados aparentemente no hacian mas que ser utilizados por virus para ocultar parte de su código maligno en el disco. Aqui algunas capturas del software que desarrolle:




En estas capturas se puede apreciar los caracteres assci modificados como los diferentes bordes de los cuadros en el programa, este programa funcionaba en una resolución de 80*25 en modo texto, actualmente tuve que ejecutarlo desde linux con Dosemu y Freedos ya que en Widnows Xp se ejecuta con problemas.

Programando a bajo Nivel

Después de ganar un poco de experiencia en Turbo Pascal y C empece a llevar lenguaje ensamblador en la Universidad en la que he estudiado Universidad Nacional del Santa (UNS) es allí en el cual me empiezo ha interesar por el diseño del sistema operativo en ese entonces DOS y Windwos 3.11 mis preguntas eran como se podría realizar un software que no se pudiera copiar? como se administra la memoria en la PC ? como funcionan los programas residentes en memoria? y como funcionan los Virus?. Todo esto me apasiono muchísimo con la poca información que podía conseguir y sin acceso a Internet era muy poco lo que se podría aprender. No tuve la suerte de contar con docentes que podrían haber ayudado a despejar muchas dudas e inquietudes que se me presentaron.

El lenguaje ensamblador era un mundo nuevo las interrupciones Bios y DOS un manjar en el que deleitarse, junte un dinero y logre comprar un excelente libro que me serviría de mucho "Programación en DOS manual de Referencia de Kris Jamsa" también pude adquirir el PC a Fondo de Peter Norton y el manual del programador del IBM PC de Peter Norton así como libros de Macroassebler programación avanzada, eran libros que para un estudiante de provincias era muy difícil conseguir.

Allí me embulli en el mundo de las interrupciones Bios y DOS las interrupción de video 10H y la la de disco 13H son las que mas recuerdo. Recuerdo con mucha nostalgia el uso del antiquísimo debug y del exe2bin para convertir exes a formato com uff tiempos aquellos.

Lo primero que puse a prueba era la manipulación de la Fat de 16 bits en los disquetes, recuerdo que les jugaba bromas a mis compañeros de estudios marcandoles sus Fats con sectores defectuosos( Lógicamente defectuosos pero físicamente buenos) , a las finales me dejaban sus disquetes pensando que estaban inservibles, desarrolle algunos programitas para tal caso.
Luego el mundo de las particiones, la mejor seguridad que yo concebía en aquel entonces era mover mi tabla de particiones a un disquete y escribiendo basura en mi tabla de particiones de mi disco duro, solo se podía arrancar con un disquete con clave el cual volvía a mover la tabla de particiones al disco duro a través de un programa en ensamblador que había desarrollado.

Recuerdo que la interrupción 10H tenia una función que me permitía redefinir la tabla de caracteres assci para mostrar caracteres que el programador podría crear, recuerdo que ese fue uno de mis objetivos a lograr.
De esos programas queda el recuerdo y el conocimiento que tuve, todo eso me prepararía para poder solucionar los problemas que se me presentarían en el futuro.

Mi primer Problema a resolver

No fue hasta el 4to Ciclo de la vida universitaria que me empezó ha apasionar la programación fue un curso de métodos numéricos en el cual se calculaban las raíces de funciones matemáticas así como derivadas he integrales. Fue allí que le pregunte al profesor si podríamos tener un programa interactivo donde se podrían ingresar diferentes funciones matemáticas y calcularles las raíces sin necesidad de estar modificando el código fuente a cada momento. El profesor un matemático de mucha calidad y un buen profesional en su rama no conocía mucho sobre programación y me contesto que eso no se podía hacer. Fue entonces que encontré mi primer problema ha resolver recuerdo que me propuse aprender Turbo pascal a Fondo, pero ya había realizado algunos programas en C (Turbo C) en el semestre anterior que lo aprendí y desarrolle algunos programitas algo sencillos en gráficos y modo texto.

Identificar el problema.- Tenia que crear un interprete para poder entender las diferentes funciones que se podían ingresar tomando en cuenta que estas podrían ser recursivas es decir solucionar esto:

Fx=Sin(cos(x)+abs(34+2*x) )+ sqrt(abs(x*x+23*sqrt(x))) o formulas de ese tipo.

Identificado el problema empece a darle solución al problema en mi universidad no contábamos con Profesionales que habían desarrollado software ni eran desarrolladores, así que estaba solo en mi entorno, quería preguntar a alguien y no me daban respuesta la bibliografia era muy escasa y no como ahora que tenemos información en abundancia y solo hay que buscarla.
El programa debería permitir ingresar cualquier formula matemática Graficarla, determinar su deriva en un punto especifico así como su integral en un intervalo.
Bueno me metí al problema y aprendí Turbo pascal dando solución ha este problema aquí unas capturas de Pantalla de ese programa:






Tuve algunos problemas para realizar las capturas en windows xp sobre todo con aplicaciones DOS que cambian el modo de vídeo no encontré un utilidad al respecto, en esta direccion
me dice que es un problema de windows Xp, en todo caso lo solucione ejecutándolo en Linux con dosemu y freedos (un problemita mas tuve que compilarlo para 64 bits en Fedora Core 8 64bits) .
En esa época en las PCs de la universidad donde estudiaba no teníamos windows y por lo tanto no tenia a la mano un editor gráfico así que decidí desarrollar uno, también lo desarrolle en turbo pascal 7.0 aqui 3 capturas del software:



Primer Contacto con la Computadora

Junio 1992

Fue en los primer ciclo de la vida universitaria cuando escuche el termino programación que sera programar ? que es Turbo pascal? términos totalmente extraños para mi. Después de unas semanas Al fin pude conocer al señor Turbo pascal y no entiendo nada recién conozco una computadora es una 286 tiene un sistema operativo se llama D.O.S. y la verdad no parece gran cosa he aprendido dos ordenes el comando "Dir" y el comando "cls" esque en mi universidad como en muchas universidades del Perú no hay muchas Pcs tenemos que hacer las clases de 2 Alumnos por PC yo y mi compañero (Milton R.) nos turnamos para escribir estos extraños comandos en la PC.
Tengo entendido que llevaremos el D.O.S. asi como una hoja de calculo llamada Lotus 123 bueno ya las iremos conociendo. La verdad que no me esta gustando mucho esto de tipear unos comandos y que me salgan unos listados de archivos y otras cosas.

Estamos por finalizar el 1er ciclo de la universidad y ya que se que es el D.O.S. es un sistema operativo que permite que las cosas funcionen en el computador tb. nos permite ejecutar programas de diferente naturaleza. Lotus 123 es una Hoja de calculo y se utiliza como su nombre lo indica para realizar cálculos matemáticos y también nos permite realizar gráficos a partir de datos. He escuchado de Turbo pascal es un lenguaje de programación y se utiliza para hacert programas de todo tipo, solo lo he visto pq' todavía no se que es programar en los ciclos siguientes llevaremos un curso que se llama LPI (Lenguaje de programación I ) pues alli sabre con mas certeza para que sirve.