sábado, 19 de febrero de 2011

Integracion con sabor internacional

Pues el Tuzo y yo (2 de los 3 lectores de este blog) tuvimos una aventura de miercoles a jueves. Para evitar problemas de no thiklozur (hablando a la Doriga) no voy a decir nombres de empresas
El caso es que donde trabajamos, se aventaron un sistema en Java para obtener todas las facturas electrónicas de los proveedores. Todo hubiera ido bien si no hubieran utilizado el java.io.FileReader de Java, pero lo hicieron y cuando escribieron esos archivos al sistema de archivos le dieron mas feo que FECAL al país. Perdieron las secuencias especiales de los acentos y caracteres anexos.
El caso es que esos benditos archivos en formato XML, al momento de querer ser verificados contra el sistema de Factura electrónica del SAT, pues era rechazado, por que no era integro.
Sepa San Donald Knuth por que nunca los desarolladores hicieron una mondriga prueba con un solo archivo XML que pasara un ciclo completo, o quiza nunca probaron los acentos, para que si nadie los usa en este país
El caso es que el miercoles, su servidor que tenía planeada otra actividad mas interesante a las 20 pm, recibe una llamada de auxilio en el batiphone y tuvo que oir.
Para aquello de ls 19:30 pm, retoma el tema, que ya el Tuzo estaba viendo, y el panorama se veía oscuro. Ya los desarrolladores habían confesado su pecado y por lo menos ya habían corregido y usando Input/OutputStream.
Y pues me avente un programa en C, usando getchar y explore los 25,000 archivos. Como 14,000 estaban con problemas. Y ahora, que hacer. Pues dije, a sustituir byte por byte. El reto era que se le tenia que hacer al detective, por que si se alteraba algún byte, todo era inutil. Tres horas de infructosa manera de volver a los archivos a su estado original y mejor ya tirar la toalla y esperar mi indeminización, ya que el problema era mío; le digo al Tuzo, vamos a poner en Google, para buscar algo. Que le pongo criterios como acentos, UTF8. Y me encuentro que alguien mas ya había pasado la misma situación.
Eureka! Encontramos un hechizo mágico, iconv.
Gracias a que pudimos trabajar en UNIX/Solaris, empezamos a probar y por fin un archivo pudo ser validado con uso de la razón. Eras casi las 12. Dado que nuestros jefes no daban pista de darnos ni una triste mijaga, bajamos por la comida clasica de desarrollador, sabritones, cocacola, donas bimbo, fastfood microondas. Y a aventarse un script para automatizar todo. A las 2 am ya estaba todo. De ahí a sacar muestras y dejar en manos de San Meyer todos. A las 4 am acabo todo
Pero me pregunto, que necesidad había de pasar todo esto. No hubiera sido mejor tomar en cuenta los acentos.
La verdad, estas lecciones le dan a uno humilidad. Se da cuenta cuan ignorante es su servidor. Por mas de una decada ignore el tema de acentos y anexas, Unicode, internacionalización. Ahora me doy cuenta que si queremos lograr una integración es muy importante. UTF 8 e ISO 8859-1 no deben ser magia negra ni ignorados, por algo existen.

Y por favor, prueben antes de liberar a producción!

Por cierto, el equipo de desarrollo al otro día les pregunto sobre como manejan su conexión a la base de datos, si estaban usando algun pool. Su cara me lo dijo todo... Es la próxima aventura de la siguiente semana !

3 comentarios:

gusdelact dijo...

Por cierto, dejo esta liga http://www.i18nguy.com/index.html

Oscar dijo...

Ahhh que si no es importante la codificación de caracteres, si no me habré peleado hasta el cansancio en un proyectillo de un portal institucional :P con esos mentados caracteres especiales :O

ChilliCoder dijo...

Otra historia de horror de la oficina :-S
Si bien no entiendo al 100% el tema de las codificaciones y así, sé que es un tema que se tiene que manejar desde el inicio de una aplicación. También sé que hay ambientes (windows) que no te ayudan mucho y el salto entre plataformas (unix-like a windows y de vuelta) no ayudan...
Solo sé que debo dar preferncia a utf8 y nada más :P