jueves, marzo 31, 2005

Mi vida cambió por culpa de Internet

Recibido por mail el dia de hoy:

Querido(a)s amigo(a)s:

Con motivo del inicio de año, estuve haciendo un repaso de todas las idioteces que me envían por internet y cómo han cambiado mi vida, y quiero compartirlo con ustedes.

* Primero dejé de ir a bailar temiendo ligarme una mujer buenísima, pero que estuviera conectada con ladrones de órganos y que así me robaran las córneas o me sacaran los 2 riñones y hasta el esperma, dejándome tirado en la bañera llena de hielo que dijera: "Llama a Emergencias o te morirás".

* Luego dejé de ir al cine por miedo a sentarme en una butaca con una jeringa infectada con SIDA o que hablen a mi casa diciendo que estoy secuestrado.

Después dejé de recibir llamadas telefónicas temiendo que me pidan marcar *9 y me llegue una cuenta telefónica astronómica porque me robaron la línea.

* También vendí mi teléfono movil por que me iban a regalar uno más nuevo en Ericsson, pero nunca me llegó. Entonces compré otro, pero lo dejé de usar por miedo a que las microondas me afectasen el cerebro o me diese cáncer.

* Dejé de ingerir varios alimentos por miedo a los estrógenos.

* También dejé de comper pollo y hamburguesas porque no son mas que carne de engendros horripilantes sin ojos ni pelos, cultivados en un laboratorio.

* Dejé de tener relaciones sexuales por miedo a que me vendan condones pinchados y me contagie de algo.

* Además dejé de tomar cualquier cosa que venga enlatada por miedo a morir intoxicado con orines de rata.

* Le prohibí a mi mujer ir de compras por miedo a que la secuestren y la obliguen a gastar todo el saldo de la tarjeta de crédito, o que le hechen un cadaver en el maletero del coche, o que le ofrezcan éter en vez de perfume, o que la asalten en un baño del centro comercial.

* Doné todos mis ahorros a la cuenta de Brian, un chico enfermo de una enfermedad que no se puede ni pronunciar y que ha estadoa punto de morirse unas 700 veces en el hospital.

* Participé arduamente en la campaña contra la tortura de unos osos asiáticos a los que les sacaban bilis, contra los inhumanos que vendian gatitos metidos dentro de unos frasco y contra la tala de pinos del Amazonas.

* Quedé arruinado por comprar todos los antivirus y anti-spyware que me ofrecian, con tal de cuidar mi privacidad y evitar que la ranita de budwiser, los teletubies, o el General Failure se apoderaran de mi disco duro.

* De de hacer, tomar y comer tantas cosas que casi muero.

* Casi muero de hambre esperando juntoa mi buzón el cheque de $ 150,000 USD que me mandaría Microsoft y AOL por participar en una prueba de rastreo de e-mails después de enviarlo a 1,500 de mis amigos y conocidos.

* El telefono de Ericcson nunca llegó y mucho menos el viaje a Disneylandia con todos los gastos pagados.

* Quise hacer mi testamento y dárselo a mi abogado para legar todos mis bienes a una institución benefica que recibe 1 centavo de dólar por cada persona que se anote al final de la cadena de la lucha por la independencia de las mujeres en Pakistán, pero no pude entregarlo, porque tenía miedo de pasarle la lengua al sobre para cerrarlo, cortarme con el borde, porque se iba a llenar la boca de cucarachas que se iban a incubar dentro de la herida.

* No me gané el 1,000,000 de dólares, ni el Porsche, ni tuve sexo con Angelina Jolie, que fueron las 3 cosas que pedí como deseo luego de mandar El Tranta Mágico enviado por el Dalai Lama de la India.... Y siempre creí que el origen de todos mis males eran por causa de alguna cadena de olvide seguir y por eso me había caido una maldicion.

Moraleja: No te dejes influir por todas las estupideces que te llegan por internet, pero si no reproduces este mensaje en tu blog y las personas que lo lean no lo envian por e-mail por lo menos a 2,400 personas en los proximos 8 segundos, se te va a aparecer el diablo cuando estés tomando y baño y tengas que agacharte por el jabón.

miércoles, marzo 30, 2005

Xailer.... saliendo del closet (armario)

Salir del closet (u armario, como dirian en España)....este es un título un poco gay para denominar un fenómeno muy interesante en cuanto de desarrollo de sistemas se refiere que es el aceptar que nos estamos vinculando a otra preferencia que no es la que nos ha caracterizado.

En mi caso SIEMPRE he programado con Clipper, conozco algo de Pascal, algo de "C", un poco de HTML y poco mas, cuando salió Visual Objects, y dada mi larga experiencia con Clipper, me viculé muchísimo en VO, al grado tal de llegar a concluir una aplicación a un 90% después de sudar sangre, y casi al mismo tiempo un buen amigo, Lalo Méndez de Informática y Capacitación, me "introdujo" en el misterioso mundo de un producto de shareware llamado FiveWin, por ahí de 1998.

Mi primer salida del closet fue admitir publicamente que dejaba de usar Visual Objects, cosa que sorprendió a mas de uno, sobre a todo a buenos amigos que entonces tenía en Computer Associates (saludos John Zakarin) y que me dedicaba a poner todos mis esfuerzos en utilizar FiveWin, que como lo dijo en su momento Al Acker, Editor de la revista Clipper Advisor, es el verdadero Clipper para Windows.

El tiempo ha pasado, muchos productos han ido y venido, y ahora llama mi atención Xailer, mas que nada porque parece que en la carrera de GUIs para (x)Harbour al final parece que tendrá 3 claros finalistas:

FiveWin, que es la GUI por excelencia para desarrollar aplicaciones Windows con Clipper y (x)Harobur y por otra parte su autor, Antonio Linares es el responsable de haber iniciado el proyecto Harbour, y es en buena parte gracias a él que el proyecto llega a feliz término, con sus altas y su bajas, sus dimes y diretes, como en todo. FiveWin es y seguirá siendo hoy por hoy, la herramienta para desarrollar aplicaciones Windows con (x)Harbour, porque ha demostrado ser un producto terminado, estable y que entrega resultados.

Pero nuevos jugadores entran al partido:

En segundo lugar de este competencia yo pondría a Xailer, resultado del genio de 2 mounstros de la programación como son Ignacio Ortiz y José Gimenez y que recién ha liberado su versión Pre-release a finales del Enero, Xailer, al igual que FiveWin es una libreria de nos permite crear aplicaciones para Windows, haciendo uso de las funciones estandares del API de Windows, solo que su filosofía es un tanto distinta. Xailer apuesta por una GUI totalmente orientada a 32 bits (de hecho no hay soporte para Windows 95, ni anteriores) con una jerarquía de clases similar a la de Delphi y su propio IDE, entorno integrado de desarrollo, totalmente construido en Xailer que te permite realizar desde dentro de él, todas las tareas de desarrollo, desde crear formularios, escribir código fuente, hasta compilar, enlazar y ejecutar el programa, es decir, a diferencia de FiveWin, donde tienes que tener la librerías de FW por un lado, el compilador de (x)Harbour por otro, las pantallas en RC creados con algun editor de recursos, y luego recurrir a alguna herramienta de compilación para gener el EXE, Xailer lo hace todo desde su ide, simplemente oprimiendo un botón, incluso atrapando los errores de compilacion y llevandote a la línea del código fuente donde se generó dicho error.

Finalmente, en tercer lugar, está la GUI "de casa", el Visual xHarbour o VXH para llamarlo de manera abreviada. VXH es la apuesta de la empresa xHarbour.com, de Patrick Mast y Ron Pinkas para tener su propia librería para desarrollo de aplicaciones Windows, integrada a la versión comercial de (x)Harbour (www.xharbour.com) y que claro, no forma parte del proyecto Open Soruce, por lo que se comercializará de manera separada, como un componente adicional. VXH también apuesta por un entorno integrado de desarrollo, como Xailer y por una librería de clases / funciones para manipuación del API de Windows, hasta el momento de escribir estas líneas desconozco el avance que tiene la librería de clases y su contenido.

Pues bien, he decidido entrar a programar en Xailer, y lo acepto abiertamente, estoy haciendo desarrollos en Xailer, pero a diferencia de lo que me paso con Visual Objects, definitvamente NO ABANDONO FIVEWIN, ¿ por qué ?, pues porque desde mi punto de vista, FiveWin es el camino lógico para aquel programador que viene de Clipper DOS y que quiere moverse a Windows (que hay montones), que no tiene absolutamente ninguna experiencia con programación orientada al objeto y que nunca ha desarrollado una aplicación para Windows. El desarrollo con Xailer requiere de cierto grado de "expertise" como dicen los yankis, sobre todo en lo que a POO se refiere, es necesario entender como funcionan y como se comunican entre si los objetos, además de que requiere conocer como se comporta una aplicación Windows, y esta experiencia solo se adquiere despues de haber pasado algún tiempo programando con estas herramientas.

Luego entonces.... ¿ para donde moverse ?, bien la cosa es clara, si tienes programas hechos en FiveWin/Clipper 16 bits, que ya te funcionan y quieres moverte a 32 bits, no hay que buscarle 3 pies al gato, tu decisión debería decantarse sin dudas por FiveWin Harbour con (x)Harbour.

Si aun estás programando en Clipper para DOS y quieres comenzar a moverte a 32 bits, con el código fuente que actualmente tienes, entonces no hay dudas, (x)Harbour es para tí, comienza con lo básico, pasando tu aplicación Clipper DOS a (x)Harbour en modo de consola, y luego vete moviendo hacia el mundo de la Programación Orientada al Objeto, y una vez que ya tengas ese conocimeinto podrás decidir entre las 3 opciones de GUIs para xHarbour, FiveWin, Xailer o VXH.

Finalmente, si ya tienes experiencia en FiveWin, y quieres aprender algo mas, como es mi caso, tus nuevos proyectos los puedes comenzar a trabajar con Xailer, encontrarás una forma nueva de trabajar, claro, hay que ajustar un poco la manera de pensar, pero en menos de una semana te sentirás cómodo trabajando con Xailer, sobre todo por que la experiencia de programación orientada al objeto que haz tenido con FW o (x)Harbour te servirá mucho, la filosofia de programación es un tanto distinta, pero no cuesta nada de trabajo adaptarse a ella, encontrarás que hay nuevas maneras de hacer viejas cosas y que estas nuevas maneras son sumamente eficientes y rápidas. También encontrarás cosas nuevas en cuanto a controles y componentes.

Sobre VXH no puedo opinar, se que han liberado una parte, pero desconozco si en este momento se puede utilizar para realizar alguna aplicación completa, supongo que no, porque de ser así estaría mucha gente utilizandolo, de todas formas es conveniente darse una vuelta por el sitio de xHarbour.com y revisar los avances del proyecto.

Por el momento, baste saber que he salido del armario con Xailer, que lo utilizo y que me gustan los resultados que voy obteniendo y que sigo trabajando y dando soporte a FiveWin, y que quizá en un futuro me ligue también a VXH, depende de los progresos del producto.

martes, marzo 29, 2005

It's time to get Funcky.... again !!!!

En los viejos tiempos del Clipper, una de las librerías que mas era utilizada por los programadores era precisamente Funcky.

Funcky era seguramente la librería de funciones mas completa que existía para Clipper, con mas de 1,000 distintas funciones que cubrian muchas de las necesidades de cualquier programador.
El tiempo ha pasado, y hace como 4 años años, Dirk Lesko, el autor de Funcky original, decidió embarcarse nuevamente en el proyecto de crear Funcky para los lenguajes de programación para Windows.

La versión de Funcky 6.0 es el resultado de mas de 2 años de desarrollo, el nuevo Funcky es un componente OLE que puede ser accesado desde cualquier lenguaje de programación, llamese como se llame, C++, Visual Basic, Delphi, CA-Visual Objects, etc.

Siendo (x)Harbour un proyecto solo conocido por una comunidad determinada (leáse nosotros), no figura dentro de lista de preferidos de Funcky, peeeerooo, si tomamos en cuenta que el código (x)Harbour es en realidad código en "C", luego entonces, podemos deducir que si hay Funcky para Borland C++, podemos utilizar esa versión para nuestro programa (x)Harbour.

Esto es cierto, pero hay aún una forma mucho mas sencilla de utilizar Funcky y es por medio de OLE, xHarbour tiene soporte nativo OLE con lo cual no debe significar ningún problema utilizar Funcky, con Harbour la cosa cambia, porque hay que linkear externamente la clase TOLEAUTO para hacer funcionar la librería.

Funcky no es un componente exclusivo para aplicaciones gráficas de Windows, es decir, con ventanitas, es perfectamente utilizable también desde aplicaciones (x)Harbour que se ejecuten en una ventana de terminal (DOS).

Funcky tiene funciones para un montón de cosas, algunas extremadamente útiles y otras que solo por diversión es interesante mirar. Varios objetos constituyen la librería completa de Funcky, y es sumamente simple utilizarlos, basta con crear un objeto TOLEAUTO y listo:

oFuncky := TOleAuto():New("Funcky")

A partir de este punto tenemos listo un objeto llamado oFuncky el cual podemos explotar a nuestras anchas, por ejemplo si queremos obtener una lista de todas la unidades de disco conectadas a nuestra computadora haremos una llamada al método :AllDrives() :

cDrives := oFuncky:AllDrives()

Y esto nos devolvera una cadena de caracteres con las letras de todas las unidades que existan conectadas ("a: c: d: w:" por ejemplo), de esta forma tendremos acceso a mas de 400 métodos para hacer práticamene cualquier cosa que deseemos.

Adicionalmente al objeto Funcky, existen otros 30 objetos dentro del mismo componente, cada uno con sus propios métodos, eventos y variables de instancia. Hay práticamente un objeto para cualquier cosa que quieras hacer.

Por ejemplo si queremos hacer un TraceRoute a una dirección IP, podemos hacer esto utilizando un objeto FunckyTraceRoute (ejemplo escrito en FiveWin + xHarbour + Borland C++):

oFunckyTrace := TOleAuto():New("FUNCkyTraceRoute")

nTotal = 0
aTrace := {}

oFunckyTrace:FindFirst("ciber-tec.com")

DO WHILE oFunckyTrace:Found()
AADD(aTrace,oFunckyTrace:Name+" "+ALLTRIM(STR(oFunckyTrace:RTT))+" ms")
oFunckyTrace:FindNext()
ENDDO

MsgList(aTrace)

¿ Y que pasa si queremos una lista de todas las impresoras conectadas a la computadora ?, bueno pues utilizaremos un objeto FunckyFindPrinter de esta manera:

aPrinters := {}

oFunckyPrinters := TOleAuto():New("FUNCkyFindPrinter")
oFunckyPrinters:FindFirst()

DO WHILE oFunckyPrinters:Found()
AADD(aPrinters,oFunckyPrinters:Name())
oFunckyPrinters:FindNext()
ENDDO

MsgList(aPrinters)

Como ves es super fácil utilizar Funcky, además la documentación viene super completa, con ejemplos y todo lo necesario, no esperes encontrarte una documentación para (x)Harbour tal cual, no existe, pero te las puedes arreglar con la documentación para Visual Basic o Delphi.

Una de las principales ventajas de Funcky es que tanto los valores pasados como parámetros como retornados por los métodos solo son de 3 tipos: Lógicos, Caracter o Numéricos, con lo cual te ahorras tener que complicarte la vida con cosas propias del "C" como bytes, chars, longs, doubles, etc.

He escrito un pequeño demo del uso de Funcky con FiveWin, que puedes descargar haciendo click aquí incluye código fuente y el EXE en caso de que no tengas manera de compilarlo, claro necesitarás tener Funcky instalado en tu computadora para poder ejecutarlo.

Si no cuentas con Funcky, puedes descargarte una version "lite" del su sitio en Internet www.funcky.com, solo asegurate de que descargues el componente COM, que es el que se utiliza con (x)Harbour.

Para comparlo, bueno, aquí es donde se le acaba la gracia, Funcky cuesta 349.00 USD la versión completa.... pero si tienes una Funcky para Clipper DOS solo pagas 149.00 USD, siendo sincero, es la unica librería de funciones que vas a necesitar y vale la pena el gasto.

domingo, marzo 20, 2005

Advantage lo hace de nuevo !!!!

Acabo de regresa de pasar una semana en la ciudad de Chetumal, Capital del Estado Mexicano de Quintana Roo, para que se ubiquen mis lectores no mexicanos, es el estado (provincia/departamento) donde se encuentra el mundialmente conocido centro turístico de CanCun.

No, no estaba en una playa del Caribe Mexicano tumbado al sol, estuve trabajando en la dirección de informática de la Secretaría de Hacienda del Estado, dándole los toques finales al sistema ISTUV y poniendo a punto un ADS para 100 usuarios.

ISTUV son la iniciales de Impuesto Sobre Tenencia y Uso de Vehículos, y es el sistema que utiliza el gobierno del estado para controlar automóviles, moticicletas, jets ski, botes, yates, etc. Todos los vehículos del estado y el cobro de los impuestos que el uso de estos genera, están controlados por el sistema ISTUV, el cual posteriormente los reporta al gobierno Federal.

ISTUV originalmente estaba desarrollado en Clipper 5.2, e instalado en redes de area local con servidores Novell 4.11 dentro de los centros de atención al público del gobierno del Estado, esto dificultaba contar con información en línea debido a que las redes no estaban conectadas a la central, lo cual demoraba la integración de la información hasta en 5 días.

Con el programa de modernización del gobierno, se decidió enlazar a todas las oficinas de atención al publico y centralizar la información de tal forma que todas las operaciones del padrón vehicular se pudieran llevar a cabo en tiempo real.

Se hizo una importante inversión tecnológica para conectar a todas las oficinas remotras a través de un enlace dedicados E3 a un super servidor HP Xeon Dual processor 2 procesadores de 2.8 GHertz cada uno, 2 Gbytes de memoria ram y un array de 8 discos duros de 40 gigas cada uno... un sueño de servidor.

Con tan buen hardware y excelente ancho de banda, nadie tomó en cuenta el software... y cuando se montó la version Clipper en este ambiente WAN, con todas las bases de datos a su maxima capacidad.... ¡ oh desilusión !, los sitios remotos tardaban más de 20 minutos solo en abrir la tabla del padrón vehicular (mas de 200 mil registros) y mas de 3 horas en abrir los movimientos del padrón (1,200,000 registros), fue entonces cuando entramos en acción nosotros, para sugerirles el uso de Advantage Database Server como su solución.

Cabe señalar que no es la primera vez que voy a Chetumal, ya he estado allí 3 veces, la primera fue para hacer una demostración del ADS y dejarles instalada una copia de evaluación, enseñarles las bondades de los indices CDX contra los NTX que estaban utilizando y mostrarles las técnicas de programación que debían seguir para migrar su aplicación a ADS. La dirección quedó sumamente satisfecha con los resultados de esta primera visita, que quedó pendiente una segunda visita.

La segunda vez que los visité, fue para impartir un curso intesivo de (x)Harbour y FiveWin, ya que en las pruebas efectuadas, vimos que la aplicación de Clipper DOS se volvía mas rápida usando ADS, pero debido al uso del ADSDosIP (interfaz ADS para que aplicaciones DOS puedan utilizar el protocolo TCP/IP) , había cierta caída de velocidad que no resultaba satisfactoria para el uso del programa en oficinas remotas, así que se decidió mover la aplicación completa a una Interfaz Visual de 32 bits, y dada la amplia experiencia de los programadores en Clipper, el camino obvio fue utilizar (x)Harbour con FiveWin Harbour como interfaz gráfica.

Para esta última visita, el avance del proyecto era ya del 90% y durante 5 días nos dedicamos a resolver dudas técnicas de programación y a hacerle un ajuste fino al servidor ADS.

El sistema está programado en FiveWin Harbour 2.4, con xHarbour 0.92, los reportes están hechos con Crystal Reports 8.5 utilizando el Cliente Crystal de ADS, adicionalmente cuenta con una aplicación PHP para Internet que le permite consultar al público los importes correspondientes a los impuestos de sus vehículos.

Los usuarios no son pocos, en total 75 estaciones de trabajo remotas están conectadas en la WAN via Advantage Internet Server, 10 Estaciones más utilizan el servidor ADS remoto dentro de las instalaciones del departamento de informática, y 20 usuarios adicionales se conectan utilizando Clientes Delgados de Windows Terminal Server.

Las bases de datos no son precisamente pequeñas, el padrón vehicular sobre pasa los 220 mil registros, mientras que el archivo que contiene los movimientos del padrón son aproximadamente 1,200,000 registros.

Durante los días de prueba, el servidor ADS registró mas de 300 mil operaciones a las mas de 50 tablas DBF e índices CDX que componen el sistema, sin experimentar absolutamente ningún problema y entregando la información a las estaciones remotas casi como si fuera una red de área local.

Surgieron algunos problemas con la aplicación PHP, debido a que los programadores deseban integrar algunas cosas adicionales a las tablas, como procesos almacenados (store procedures) y esquemas de seguridad a las tablas, por esa razón se decidió migrar todos los DBF y sus índices CDX al formato nativo de ADS, archivos ADT, con índices ADI todos integrados dentro de un Diccionario de Datos Advantage.

Debido a la premura del tiempo, me tocó realizar a mí la parte de la migración de los DBFs a ADT, para lo cual escribí un pequeño programa en XAILER que realizara esta tarea, el programa quedó bastante decente, pese a mi evidente inexperiencia utilizando Xailer, pero este pequeño programa cumplió bien su objetivo, con algunos pequeños bugs. Si deseas verlo en acción, puedes descargarlo haciendo click aqui, (proyecto, ejecutable y DLLs incluidos). Necesitarás Xailer para volverlo a construir.

Una vez cambiadas todas las estructuras de las tablas, únicamente tuvimos que agregar a nuestro código fuente la función ADSSetFileType(3) (para definir el formato ADT como predeterminado), volvimos a compilar el programa y ¡ listo !, nuestra aplicación estuvo lista para funcionar con tablas ADT en pocos minutos, ahora hay que cambiar todos los reportes de Crystal, pero eso es lo de menos.

Las tablas ADT se portaron bastante bien con el programa, sentimos que la velocidad del programa se incrementó, no de manera radical, pero si se siente un poco (no mucho) mas rápida que con DBFs e índices CDX, los usuarios remotos nos notificaron también de un incrmento de velocidad.

Dejé Chetumal con el servidor ADS montado y bien configurado, listo para entrar en producción, las dudas de los programadores totalmente resultas y en pocas palabras....

¡ Advantage lo hace de nuevo !

lunes, marzo 14, 2005

Una ejecución sin visión.....

A mi amigo José Ramón le escuche una frase (que seguramente la escuchó en algún lado) que me dejo gratamente impresionado y la aplico con mucha frecuencia... mas de la que me gustaría.

Una visión sin ejecución, es un sueño.....
pero una Ejecución sin visión, es una pesadilla

Esto pasa TODOS los dias en el área de informática sobre todo, cuando ponemos al frente de un proyecto importante a personas que no tienen la experiencia necesaria para llevarlo a cabo.

Si por antiguedad, o porque "ya le toca", ponemos al frente de un proyecto importante, a un buen programador, con muchos años de experiencia, pero que lo unico que sabe hacer es programar, lo mas seguro es que el proyecto vaya directamente al fracaso en el peor de los casos, y en el mejor, a una demora considerable en el tiempo de realización.

Y no tengo nada contra los programadores experimentados, al contrario, he aprendido muchisimas cosas de ellos, sin embargo hay que conscientes que un buen programador, no necesariamente es un buen analista, por eso hay niveles... hay analistas, hay programadores y hay analistas-programadores.

¿ Qué se espera de un buen analista ?, bueno, por lo menos que conozca la teoría de lo que es el diseño de sistemas, y eso no se aprende en ningún libro, ni leyendo ningún manual de Clipper, SQL o Windows, algunas universidades dedican 2 o mas semestres al estudio de estas materias, porque no es cosa fácil hacer un diseño exitoso de un sistema.

El problema es que a nivel microcomputación, la carencia de tiempo para hacer las cosas, demanda que se atienda primerlo lo urgente y que lo importante se deje para después, o que se nos olvide totalmente, así hemos estado acostumbrados a trabajar y el modelito nos ha funcionado... total ¿ para qué cambiarlos ? si así hemos trabajado hasta ahora y hemos salido adelante.....

Ese es el error mas común de todo el microinformatico, que no pensamos a futuro y cuando nos llegan los grandes proyectos, no sabemos como enfrentarlos, porque simplemente realizamos ejecución sin visión.

Esto quiere decir, que nos ponemos a tirar líneas de código como tontos, dejando de lado la parte mas importante del sistema que es .... EL OBJETIVO y cuando vienen los cambios comienza el sufrimiento porque no previmos que los requerimientos podian cambiar.

Plantear el objetivo puede parecer simplista, pero no, el objetivo no es simplemente " voy a hacer un sistema de facturacion que trabaje en entorno cliente/servidor con SQL y usando un servidor Linux", decir que este es nuestro objetivo, es una gran tonteria, ¿ porqué ?, pues porque verlo asi de simple es arrancar de ningún lado, para intentar ir a ninguna parte.

Hay muchas cosas que analizar en tan aparentemente simple objetivo. Veamos:

Vamos a relizar un sistema de facturación, bien, asumo que conozco las reglas de negocio que intervienen en una facturación, como el control de clientes, proveedores, inventarios, punto de venta, etc.

En entorno cliente/servidor, quiere decir que por lo menos conozco la arquitecutra C/S y sus ventajas contra la Arquitectura Distribuida, conozco conceptos como Rollback, transacción, seguridad, DBA, arquitectura de 3 capas, etc, los manejo con soltura y estoy dispuesto a aplicarlos.

Con SQL, lo que quiere decir, que UNA de mis herramientas va a ser este lenguaje de programación, ojo: SQL es un lenguaje de programación, no es una base de datos, ni un producto ni nada por el estilo, es simple y llanamente un vil lenguaje de programación, solo una herramienta mas del desarrollo de nuestro sistema

A partir de este conocimiento básico de lo que queremos hacer, debemos proceder con la parte mas básica de un sistema diseñado sobre arquitectura de 3 capas, que es el modelo sobre el cual se deben construir las aplicaciones Cliente / Servidor.

El primer nivel, el básico y el primero que debemos comenzar a construir, es la capa de BASE DE DATOS, es decir, el diseño de nuestro esquema de almacenamiento, este proceso requiere de mucha mas habilidad que simplemente conocer el lenguaje SQL (el SQL entra en la segunda capa del modelo, la de negocios). Para realizar un analisis exitoso y triunfador (como dice mi amigo AGG), es necesario conocer conceptos como Analisis Top-down, diagramas entidad-relación, formas normales, diagramas CRUD, la aplicación de todas estos conceptos al diseño de la base de datos (Base de datos = coleccion de tablas) nos garantiza que los siguientes pasos van construidos sobre cimientos solidos y que el proyecto no se nos vaya a venir abajo a la mitad.

SAP es el sistema ERP de mayor uso en el mundo ¿ por qué ? porque sus ingenieros se llevaron 2 años SOLO EN EL ANALISIS DE LA BASE DE DATOS, pero un buen analisis de la bd los consagro en el gigante del software que son hoy.

Un buen analisis de una base de datos, implica precisamente no casarse con ninguna marca en especial o con algún producto, nuestra base de datos debe de ejecutarse perfectamente en MySQL, Informix, Sybase, SQL Server sin alterar el diseño orignal de la misma, o bien con muy pocos cambios, a fin de cuentas el objetivo es utilizar el Cliente/Servidor, sin especificar ninguna marca de SGBDR en especial, esto no significa que tengamos que tener un servidor por cada base de datos a probar... ¡ por su puesto que no !, eso es precisamente lo que tratamos de evitar, nuestro modelo debe estar tan bien analizado, que se pueda ejecutar sobre cualquier plataforma.

Una vez que tengamos bien analizada nuestra base de datos, el objetivo esta cumplido a la mitad, ya no partimos de ningún lado puesto que ya tenemos un punto de partida bien analizado y establecido: nuestra base de datos.

Bien, ahora hacia donde vamos.... ¿ seguimos el camino a ninguna parte ?, por su puesto que no, nuestro objetivo ahora es claro, vamos a trabajar CON CUALQUIER BASE DE DATOS, esto evita que a mitad del proyecto venga algún otro programador brillante con nuevas ideas o casado con alguna marca a vendernos la moto de que tenemos que ir a donde el dice... porque claro, el que no sabe a donde va, cualquier camino le parece bueno, pero no en nuestro caso, nosotros ya sabemos a donde queremos llegar, y estamos decididos a no casarnos con ningun producto en especifico.

Vamos ahora a la segunda capa, la Capa de Negocios en esta capa se establecen las operaciones que van a hacer uso de nuestras bases de datos, es decir, las reglas de negocio, lo que conocemos a nivel programación como Queries, es decir, las instrucciones SQL que van a realizar la explotacion de nuestra base de datos, debemos siempre de tratar que nuestras instrucciones sean lo mas estandarizadas posibles al estandar SQL, y evitar en lo posible utilizar extensiones propias de algun SGBDR en particular. Si programas en Windows, la interfaz ADODB te soluciona una buena cantidad de esos problemas y nuevamente aquí tenemos que evitar casarnos con cualquier plataforma o sistema operativo.

Y finalmente, pero no por eso menos importante, la capa de interfaz, esta es la capa que le da la cara al usuario, que puede ser que se trate de un programa en Windows, una aplicacion en modo terminal, o un programa PHP o CGI corriendo sobre WEB.

La importancia de entender esto y muy poca gente lo hace, radica en que cada capa es independiente de las otras, lo que garantiza que nuestro sistema sea suficientemente versátil para soportar cualquier cambio que se haga en el diseño sobre la marcha.

Entender estos conceptos es basico para realizar un proyecto chico, mediano o grande de manera exitosa y nos capacita para responder mejor a los cambios que vayan surgiendo durante el desarrollo del proyecto.

A nivel software "en caja" tenemos que ser lo mas genericos posibles, porque no sabemos con que equipo cuente el usuario final, algunos productos como los de ASPEL en México, ahora trabajan la multiplataforma de la base de datos para que se puedan montar sobre el servidor de base de datos que se requiera, los manuales proveen de un buen diccionario de datos perfectamente documentado que permite montar productos como SAE sobre cualquier servidor de base de datos relacional..... eso si fue una "visión con ejecución".