Desarrollando herramientas bajo Linux para una cadena de Ópticas

ArticleCategory

Applications

AuthorImage

El autor transformado despues de ser tocado por el Linux

TranslationInfo

Original in es Juan Pablo Rosas Duran

AboutTheAuthor

Actualmente es Gerente de sistemas en Óptica LUX en México. Esta involucrado con la informática desde los 3 años, cuando revolvía los lotes de tarjetas perforadas en el trabajo de su padre y usaba los manuales de un Gamma10 como cuaderno de dibujo. Cuando conoció Linux su vida profesional fue transformada, y desde entonces trata de aplicar (con cierto éxito) el software de fuente abierta en cualquier problema donde se requieren computadoras.
Se encuentra promoviendo la formación de un grupo para el desarrollo de aplicaciones de negocios bajo licencia GPL: http://www.pochtecah.org.mx/.
Agradece encarecidamente a _LF_ la oportunidad de compartir sus experiencias sobre Linux y el software de fuente abierta.

Abstract

En este artículo conoceréis la historia de como una empresa mediana dedicada a la comercialización y fabricación de anteojos ha utilizado el linux y el software libre para atender mejor a sus clientes.

ArticleIllustration

Tux con gafas

ArticleBody

Sobre Óptica LUX.

Óptica LUX es una empresa dedicada a la fabricación y comercialización de anteojos para sol y graduados. En Marzo del año 2000 cumplirá 58 años de permanencia en el mercado, y en los últimos ocho años ha duplicado el número de sus sucursales hasta llegar a 40.

Desde su fundación Óptica LUX ha desarrollado una mística de trabajo orientada a la plena satisfacción de los clientes, la cual exige el máximo conocimiento sobre los gustos y necesidades ópticas de cada uno de ellos.

Se estima que al cierre de 1999 se contaba con la preferencia de varios cientos de clientes, los datos generales y optométricos de todos ellos se han conservado en fichas de cartón (Con las limitaciones derivadas de su operación manual).

El problema fue encontrar una solución viable que permitiera sistematizar la atención a los clientes, sin restar agilidad ni calidad al servicio, sino todo lo contrario, que agregara más valor a cada anteojo entregado.


Actividades de una óptica.

Para empezar, se debe reseñar brevemente el proceso general de atención a clientes en Óptica LUX, con el fin de comprender el alcance de la aplicación que será descrita más adelante. Cuando un cliente llega a cualquiera de las Ópticas LUX, es atendido siguiendo los siguientes pasos:

  1. Son tomados los datos generales del cliente, entre otros su nombre, dirección y buzón de correo electrónico.

  2. El cliente es conducido a un gabinete, donde se le realizan distintos tipos de mediciones y exámenes, entre ellos se encuentran la lensometría, la refracción, la queratometría, la medición de la agudeza visual, etc.

  3. Con base a las pruebas efectuadas se asesora al cliente sobre las tecnologías ópticas que pueden ayudarle en su problema de visión.

  4. El cliente selecciona tanto la tecnología de lentes como el modelo de armazón que más le acomoden.

  5. El cliente otorga un anticipo o la liquidación de su trabajo, mismo que es remitido a la fábrica para su pronta elaboración y entrega.

Del estudio del proceso de atención a clientes se derivaron ciertas consideraciones, las cuales son cruciales para la implementación de cualquier aplicación que pretenda apoyarlo, a saber:

De todo lo expuesto se ve que la aplicación para apoyar la atención a clientes es bastante especializada e innovadora.


Búsquedas infructuosas.

Desde 1990 se han estudiado diferentes sistemas propietarios especializados en puntos de venta para ópticas, pero ninguno de ellos se apega completamente a los procesos de atención a clientes y fabricación de anteojos de Óptica LUX. De haberlos adoptado hubiera implicado cambiar los procesos o pagar el doble del costo original del software por concepto de adecuaciones y modificaciones, sin mencionar el costo implícito de la dependencia a una casa de software.

En el año 1995 se consideró la posibilidad de desarrollar in-house el software justo a la medida de las necesidades de Óptica LUX. No obstante al proyectar los costos de licenciamiento de la plataforma y herramientas que en aquel entonces estaban en uso (SCO Unix e Informix), resultaba que se tenía que erogar un monto equivalente a la apertura de una nueva óptica!!!, incluyendo instalaciones, equipo de medición optométrica y mercancía.

Fue entonces cuando se decidió buscar soluciones viables que no implicarán inversiones multimillonarias en licencias. Las plataformas que más llamaron la atención fueron coherent, qnx y Linux.

Tratamos de contactar a coherent, pero en esa época cesaron de operar.

Qnx contaba con un representante en México (en la ciudad de Monterrey N.L.). Su labor se concretó a enviarnos folletería, pero el tiempo de respuesta y su atención dejaron mucho que desear.


Descubrimiento de Linux.

Se conoció a Linux por medio de un artículo titulado ``Linux una propuesta indecorosa'', escrito por Fernando Magariños (mejor conocido en los grupos de correo como la mítica ``Mancha de la Calabaza que ladra''). Le mandamos un correo, el cual fue contestado por el mismísimo Miguel de Icaza (dudo que él lo recuerde). Él dio sus puntos de vista, los cuales reforzaron aún más el interés hacia Linux.

En un principio se vio a Linux sólo como una plataforma ``Royalty free''. Sin embargo los principios en los que se basa, así como el dinamismo y espíritu de las comunidades alrededor del mismo fueron impactantes y cautivadoras.

El soporte técnico que se obtiene de las listas de correo es más efectivo que cualquiera de sus contrapartes comerciales. Linux es una plataforma estable en constante perfeccionamiento y tiene gran cantidad de aplicaciones ampliamente disponibles.

Además, la información sobre Linux y el software libre es mucho más asequible que la de su contraparte propietaria, haciendo factible un auto-aprendizaje de estas herramientas.

Actualmente Linux es usado en Óptica LUX no sólo en las sucursales, sino también en las oficinas ejecutivas, sobre todo en el lado del servidor, para compartir archivos e impresoras, almacenar bases de datos y ejecutar aplicaciones desarrolladas para otros Unix.

También es utilizado como base de la infraestructura de comunicaciones, como servidor ppp, servidor de web, correo electrónico y ftp (nuestra pequeña ``intranet''), así como para el control y segmentación del tráfico de la red.

Últimamente se ha introducido el Linux como plataforma de escritorio para usuarios finales, pero esa es otra historia. :-)


Errores en la adopción de Linux.

Todo inicio es difícil, y el factor crítico en Óptica LUX fue el convencer a los Directivos no tanto de las bondades técnicas de la plataforma, si no más bien el que tomaran conciencia de que el costo de desarrollo de nuevos sistemas, sobre todo altamente especializados, no es barato ni rápido.

Fueron 7 empresas o grupos quienes cotizaron el desarrollo del sistema sobre Linux, pero sus propuestas sobrepasaban el costo de las soluciones propietarias de las que ya se ha hablado.

Se intentó reclutar programadores para el desarrollo in-house. Sin embargo aún son pocas las personas que realmente programan en esta plataforma, y quienes se encuentran disponibles cobran (y con justa razón) más allá de la media del mercado.

Hoy se reconoce que el desarrollo de aplicaciones basadas en software de fuente abierta podría ser más caro que el dependiente de herramientas propietarias, pero los resultados son mucho mejores. De cualquier forma, los ahorros en licenciamiento se pueden aplicar al desarrollo de este tipo de aplicaciones.


Desarrollo de la aplicación.

A mediados de 1999 se contrató a un grupo de consultores para desarrollar la aplicación de atención a clientes teniendo como base Linux y software GNU.

El desarrollo se abordó con un enfoque de prototipos incrementales. Primero se elaboró un análisis donde se obtuvieron :

  1. El diseño detallado de la base de datos.

  2. Los casos de uso de la aplicación.

  3. Las interfaces de usuario.

Con base en ello se programó un primer prototipo, el cual fue evaluado por optometristas expertos, derivándose más detalles sobre los requerimientos y comportamientos del sistema, los cuales se concretaron en un nuevo prototipo un tanto más perfeccionado, continuándose así en ciclos sucesivos de refinamiento.

El poder de las herramientas utilizadas permitió acelerar el proceso de programación, reutilizando y perfeccionando los componentes de la aplicación.

Las herramientas seleccionadas se pueden agrupar en dos divisiones: las empleadas durante el análisis, diseño y documentación, y las empleadas en la construcción de la aplicación.


Herramientas utilizadas para el análisis, diseño y documentación.

Xfig (http://www.xfig.org)
Herramienta usada para dibujar diagramas generales.
Dia (http://www.lysator.liu.se/~alla/dia)
Herramienta usada para dibujar diagramas en notación UML.
VisualTCL (http://www.neuron.com/stewart/vtcl)
Instrumento empleado para elaborar prototipos de la interface de usuario.
LYX (http://www.lyx.org)
Procesador de documentos donde fueron escritas las especificaciones de la aplicación.
StarOffice (http://www.sun.com/staroffice)
Procesador de palabra donde fue escrito el manual para el usuario final.

Herramientas utilizadas para la construcción.

PostgreSQL (http://www.postgresql.org)
Manejador de base de datos, el cual fue elegido por su flexibilidad, poderío y capacidad para manejar grandes volúmenes de datos.
Perl (http://www.perl.com)
Lenguaje base para toda la programación, el cual fue seleccionado por su gran expresividad y potencia, además de considerarlo fácil de dominar por cualquier persona con cierta experiencia en programación.
Módulo Tk (http://www.cpan.org/modules/by_module/Tk/tk_modlist.html)
Funciones de perl para la interface de usuario. pTk es fácil de programar y ofrece una amplia cantidad de widgets.
Módulo DBI (http://www.fugue.com/dbi)
Funciones de perl para el uso de bases de datos SQL. De muy alto nivel, ahorraron mucho tiempo de programación.
Módulo DBD::Pg (http://www.bawue.de/~mergl/mergl_DBD_Pg.html)
Manejador específico DBI para postgreSQL.
Emacs (http://www.emacs.org)
Medio ambiente integrado para la programación, prueba y depuración de aplicaciones.
CVS (http://www.gnu.org/software/cvs/cvs.html)
Instrumento usado para la sincronización del código de los prototipos y subprototipos, mucha de la labor de seguimiento de propuestas y revisiones hubiera sido imposible sin una herramienta como esta.

La aplicación en sí.

Es difícil reseñar brevemente una aplicación tan especializada y densa. El esquema o script para la creación de la base de datos tiene más de 1000 líneas sql, y la aplicación más de 15,000 líneas perl. Así que sólo se mencionarán los aspectos más relevantes.


La interface con el usuario.

El punto más importante de está aplicación es la interface de usuario. Para facilitar la labor del usuario se decidió un diseño lo más plano y sencillo posible, en donde el experto en optometría se sienta cómodo e identifique los elementos de información por sus conocimientos en óptica y no tanto por su experiencia en cómputo.

Los elementos de la interface de usuario se agrupan en pestañas siguiendo la metáfora de un cuaderno (ver siguiente figura). A pesar de ser construida en un medio ambiente gráfico, la aplicación no necesita del mouse para poder ser manejada. De hecho con una combinación de teclas se puede acceder a cualquier pestaña o botón.

Las pestañas que conforman la aplicación son las siguientes:

Datos Generales
contiene el nombre del cliente, sus señas y buzón de correo electrónico.
Anteojos iniciales
resguarda la información de los anteojos con los que se presentó por vez primera a la óptica.
Antecedentes
consigna datos sobre las molestias ópticas, estado de salud, actividades del cliente y todo lo que es necesario saber para ubicar su problemática en cuanto a visión se refiere.
Exámenes
donde se captan los resultados de las revisiones y mediciones ópticas de los clientes.
Lentes de contacto
el cual constituye todo un módulo dentro de la aplicación, y en donde en una serie de subpestañas se realizan una serie de cálculos necesarios para determinar el mejor lente de contacto para cada persona.
Recetas
contiene la especificación final del anteojo, u orden de trabajo que se ha de remitir a la fábrica para su elaboración.
Historiales
donde se consultan los exámenes y ventas anteriores que se le han efectuado al cliente.
Ventas
conexión con el módulo de ventas donde se elabora la factura y se realiza el cobro de anticipos y liquidaciones de las órdenes de trabajo de cada cliente.

A continuación se expondrán los aspectos más importantes relacionados con estos grupos de información.


Datos Generales.

Lo que se destaca en esta pestaña es la facilidad con la que se pueden buscar y encontrar datos. Por ejemplo, se puede introducir parte del nombre de la colonia, seleccionar un estado de la lista e inmediatamente la aplicación proveerá de una lista con los códigos postales (C.P.) que cumplan con esas dos condiciones.

En lugar de colonia pudo haberse seleccionado Delegación/Municipio, o ambas, en cuyo caso el sistema habría provisto una lista más específica.

En la base de datos se encuentran cargados todos los códigos postales, colonias, delegaciones y municipios del país en una tabla de más de 60,000 renglones. En las búsquedas más largas la aplicación no tarda más de 3 segundos en elaborar y presentar una lista de los códigos postales.

Tales facilidades de búsqueda se extienden a lo largo de toda la aplicación. Si el usuario desea encontrar a una persona llamada ``Juan'', pero no recuerda si su Apellido es ``Pérez'' o ``Penas'', entonces escribirá ``Pe'' en el Apellido Paterno y ``Juan'' en el Nombre, oprimirá el botón ``Buscar'' (o mejor aún oprimirá la combinación de teclas Ctrl-B). El sistema le presentará una lista con todos los clientes de la base de datos que cumplan con las condiciones solicitadas.


Clientes en proceso.

En cualquier parte de la aplicación, se puede oprimir la combinación de teclas Ctrl-A, con las cuales se presenta una ventana con los clientes que se están atendiendo en ese preciso momento, permitiéndose identificarlos por su nombre y pudiendo acceder inmediatamente a cualquiera de sus datos.


Antecedentes.

Esta es una de las pestañas que más trabajo causó a los programadores, porque implicó efectuar modificaciones al código fuente de los widgets de pTk, en particular el frame de ``Revisiones de Medios Externos y Transparentes''.

En dicho frame el usuario puede seleccionar cualquiera de las revisiones que se ponen a su disposición, apareciendo a su lado derecho otra lista con las anomalías que se pueden dar, tanto en el ojo derecho como en el izquierdo, para tal revisión.

Cuando el optométrista activa el ``check button'' automáticamente aparece una cruz al lado derecho de la etiqueta de la revisión que seleccionó previamente. (¿Alguien sabe si tal cosa se puede programar fácilmente, digamos en VB?).


Exámenes.

En la pestaña de Examen se realizan una serie de validaciones un poco complejas. Cuando el optometrista anota las lecturas que arrojan cada uno de los instrumentos y toma la decisión de la graduación que ha de prescribir al cliente, entonces el sistema valida las correlaciones que hay entre todos los datos y avisa al usuario si existe alguna condición errónea.


Lentes de contacto.

¡Esta es la joya de la aplicación!, es la parte del código que más discusiones y esfuerzos costó al equipo de desarrollo. Cuando una persona usa lentes de contacto no se imagina la maravilla tecnológica que tiene puesta en sus ojos.

Los lentes de contacto son como los zapatos. Así como no hay dos pares de pies iguales en todo el mundo, tampoco hay dos pares de ojos con idénticos padecimientos visuales.

La aplicación está diseñada para ayudar al optometrista a determinar el tipo de lente de contacto más viable para cada cliente. No es posible que la aplicación determine (o ``recete'') una graduación de manera automática, ya que hay varias condicionantes ``no medibles'' que se han de tomar en cuenta (como las asentadas en la pestaña de antecedentes). Sin embargo puede servir como herramienta para evaluar el impacto de determinados valores sobre la agudeza visual de cada ojo.

Así por ejemplo, para cierto tipo de lente llamado tórico, la aplicación pone a disposición del optometrista un medio para ensayar y corregir la desviación del eje del lente de contacto (esquina inferior derecha de la figura anterior). Como ya hemos dicho, no hay dos ojos iguales en todo el mundo, y cuando los lentes de contacto se colocan en ellos sufren ciertos acomodamientos derivados de la curvatura de la córnea, los cuales afectan a la graduación final del ojo en cuestión.


Duplicación de la base de datos vía correo electrónico encriptado.

Existen otros aspectos de la aplicación que por su singularidad son dignos de mención, uno de ellos es un mecanismo de duplicación de base de datos vía internet, el cual pretende la transmisión segura de los datos de todas las ópticas para su concentración en una enorme bodega de datos residente en las computadoras de las oficinas ejecutivas.

Dicho mecanismo esta implementado en una serie de módulos que pueden ser conseguidos en cualquier espejo de CPAN, así como con código escrito para el manejador de la base de datos PostgreSQL, tal y como se aprecia en la siguiente figura:

De hecho esta implementación tiene tantos detalles interesantes, que se espera exponerlos en un articulo futuro en _LF_, esto es, si los editores nos dan nuevamente la oportunidad. :-)


Computadoras light.

El último aspecto importante que se ha de mencionar es el uso de clientes ligeros. Como se indicó al principio de este artículo, se requería que las computadoras empleadas en la aplicación ocupen el menor espacio físico posible. Por ello se emprendió la tarea de buscar la mejor opción entre computadoras 486 usadas, computadoras con gabinetes slim, ultra-slim y network computers.

Las alternativas que resultaron más viables fueron:

Computadoras con gabinete ultra-slim
Para las cuales se integró una distribución Linux que abarcara un sólo disco (imagen del kernel mínima y comprimida), con la configuración de red básica y con un cliente vnc basado en svgalib. Dicho disco de arranque habilita computadoras 486 en adelante como unidades de despliegue gráfico, no requiriendo disco duro y funcionando con apenas 8MB de memoria RAM.
Network computers
Sin disco ni floppy, con arranque remoto vía DHCP y basadas en procesador PowerPC. Aunque el modelo específico del procesador aún estaba en pruebas para Linux cuando se tuvo que tomar la decisión, existe una imagen de kernel disponible por ftp (tal y como se menciona en el HowTo de las NetStation).

Como el factor crítico es el espacio físico se eligieron las Network Computers con monitores SVGA de 9 pulgadas, ya que sus dimensiones (19.05 x 26.67 x 3.18 cm) permiten ubicarlas hasta en cualquier cajón de los aparadores.

La experiencia respecto a los clientes ligeros también esta repleta de detalles interesantes, por lo que se propone describirla en un futuro articulo en _LF_, si es que los editores nos conceden su venia.


Honor a quien honor merece.

Sólo resta reconocer la labor de todos aquellos que con su creatividad y esfuerzo hicieron posible que la aplicación de atención de clientes se basara completamente en Linux:

Citlali Calderón de Anda: citlali@galois.fciencias.unam.mx

Liliana Araceli Cabello: liliana@galois.fciencias.unam.mx

Juan José Alba

Edgar Raúl Acosta Villaseñor: edgar@galois.fciencias.unam.mx

Gunnar Wolf: gwolf@chmd.edu.mx

Roberto Andrade Fonseca: randrade@abl.com.mx

Existen partes de código que creemos que pueden ser de interés general para la comunidad, tales como las modificaciones hechas a los widgets de pTk, la implementación para enviar e-mails encriptados desde perl, los programas para la sincronización y duplicación de bases de datos PostgreSQL, así como las imágenes de discos de arranque para despliegue gráfico. Todo ello se podrá encontrar en la siguiente dirección: http://www.pochtecah.org.mx/ABL_GNU.html.