Archivo del sitio

Del por qué un desarrollador NO ES un Database Administrator?

O del por qué podría ser, pero debería primero cambiarse la camisa …

Este POST no busca explicar postgreSQL, ni siquiera es un artículo acerca de trucos o buenas prácticas, es simplemente una reflexión acerca de cómo pequeñas cosas que muchos pasan desapercibidas causan impacto profundo en el diseño de una aplicación.

Preámbulo

Tomé un servidor físico GNU/Linux que únicamente ejecutaba una base de datos y lo mudé a una máquina virtual restringida (¡conchale!, hay que ahorrar recursos!, pensé), pensando que todo quedaría bien.

Sin embargo, los usuarios del sistema (en producción) comenzaron a quejarse de lentitud, además, los administradores de sistemas comenzaron a notar excesivos picos de uso de CPU (¿en un equipo que sólo tiene postgreSQL?) e incluso en varias oportunidades se iba a SWAP.

Antes de devolver la base de datos al equipo físico, decidí hacer una revisión (les dije, “no solo monto sistemas, también sé de programación y mucho de base de datos, lo olvidan?”) y estas son las impresiones de la muy breve (pero exitosa) revisión.

El análisis

Lo primero que siempre hago cuando voy a analizar un sistema conectado a postgreSQL, es activar el slow log, esto es, comenzar a medir aquellos queries que consumen más del tiempo que uno supone debería asumir cierto tipo de consulta; paralelamente es daba una clase rápida de postgreSQL, de la importancia de entender el ciclo de parsing/análisis de una consulta SQL y más aún, de la importancia de entender SQL; por ejemplo, dos casos reales extraídos de este caso:

“fecha_inscrito” es un campo VARCHAR, donde almacenan algo como “12/04/2012”; si desean sacar el año, hacen un SPLIT de la cadena con un SUBSTR y sacan el tercer valor luego del “/” … ¿les parece eso correcto?, pues veamos el resultado:

postgres=# SELECT substr(’12/04/2012′, 6);
substr
——–
/2012
(1 fila)
Duración: 61,300 ms

Versus:

postgres=# SELECT EXTRACT(year from ‘2012-04-12’::date);
date_part
———–
2012
(1 fila)
Duración: 0,468 ms

Y comenzaron las alarmas!, 60 milisegundos menos!, pero chamo, a mi no me gusta trabajar con formato ANSI!, y luego les recuerdo que existe la variable de conexión DATESTYLE:

postgres=# SET datestyle to sql;
SET
Duración: 0,124 ms
postgres=# SELECT ‘2012-04-12’::date;
date
————
12/04/2012
(1 fila)
Duración: 0,154 ms

INSOLITO! ¿cómo es posible que una simple función SET cause que todas las fechas salgan con el formato que yo desee?, esto pasa cuando se desconocen los detalles de la base de datos con la que se trabaja.

Igual sucede cuando la gente comprende la diferencia entre usar ON y USING cuando se construyen JOINS (diferencia claro está, a nivel de planificador).

El tercer caso de no-entendimiento de postgreSQL ocurría con un “pseudo-ORM hecho a mano” por los mismos programadores, que no solamente escapaba mal las cadenas:

Esto:

(‘Empresa’, ‘   MATURIN’, ’15/04/2014′, …

No es igual a esto:

(‘Empresa’, ‘MATURIN’, ’15/04/2014′, …

Ya que la cadena ”    MATURIN” no es igual a “MATURIN”, a menos que se haga un TRIM adicional, afectando el performance de la consulta, sino que además, hacen cosas como esta:

’21’, ’32’, ’16’, ‘8’, …

¿Esos son cadenas o números?, luego de ejecutar un DESCRIBE a la tabla, encontramos con que son campos numéricos, y aunque postgreSQL hace la conversión, lanza un WARNING indicando que esos valores son “not integers”, lo cual obviamente no es para nada óptimo.

Esto es lo que pasa cuando los programadores, pensando como programadores, intentan diseñar bases de datos.

El extraño caso del CPU consumido

Me he encontrado con una consulta muy repetida, con esta forma:

SELECT * FROM sol_solvencia WHERE cod_aport = $1 and estatus = $2;

La consulta se repetía muchísimo (sobre todo en temporada de mucho uso de la aplicación web hecha en PHP) y los logs del postgreSQL reportaban que su duración, promedio, era de 550 milisegundos … grité (como gritó Emmet Brown cuando le dijeron que debía alimentar el D’lorean con 1.1Gigawatts) ¡550 milisegundos!, yo en 550 milisegundos corría una nómina y ellos sólo ejecutan un query!.

Luego de usar EXPLAIN ANALYZE nos encontramos con la sorpresa de que la tabla no posee índices de ningún tipo (alegan que es un sistema legado y viene así de informix) y en la actualidad posee unos 98 mil registros; por ende, postgreSQL no le queda de otra para hacer el WHERE que ejecutar un SEQUENTIAL SCAN; o lo que es lo mismo, postgreSQL iteró de manera secuencial por los 98 mil registros para sacar ámbos criterios, ¿en conclusión?, allí se van los 550 milisegundos.

Si el query se ejecuta a un ritmo de hasta 50 veces en un minuto, se imaginan el uso de CPU de postgreSQL para poder mantener ese ritmo.

Indizar, y sino, indizar también …

Luego de construir un par de índices sencillos:

CREATE INDEX idx_sol_solvencia_cod_aport ON sol_solvencia USING btree (cod_aport NULLS FIRST);

Y

CREATE INDEX idx_sol_solvencia_estatus ON sol_solvencia USING btree (cod_estatus);

El EXPLAIN cambia considerablemente:

Aggregate  (cost=32.19..32.20 rows=1 width=4)
  ->  Index Scan using idx_solvencia_fecha on sol_solvencia  (cost=0.00..31.96 rows=94 width=4)
        Index Cond: (fecha_now = ’11-04-2014′::date)
        Filter: ((estado = 1) OR (estado = 15))

Al realizar un escaneo sobre índices y luego una función de agregado sobre ámbos índices, la consulta se ejecuta en 1.7 milisegundos …

¡toda una mejora!, ¿no les parece?

Prepáralo, ponlo para llevar

Luego, les expliqué el concepto del planificador, del GeQo de postgreSQL, y de cómo se analizaban las consultas, luego de ello, les dije “¿y se imaginan que ese tiempo pudiera bajarse más?” … te miran con cara de gallina comiendo sal y tú les muestras PREPARE.

PREPARE genera sentencias preparadas, toma una consulta común, la pasa por el planificador, construye el plan en base a criterios pre-definidos y compila este plan, presto a simplemente recibir los parámetros, ¿y qué ganamos con esto?, ¡ahorrarnos milisegundos valiosos de planificación!.

PREPARE pln_obtenersolvencia (int, varchar) AS
SELECT * FROM sol_solvencia WHERE cod_aport = $1 and estatus = $2;

Como ven, la sentencia preparada es simplemente un QUERY tradicional, al cual hemos pasado sus condiciones (que deben ser criterios, no metadatos) como parámetros, así, postgreSQL puede analizar, planificar y compilar la sentencia y esperar únicamente a que pasemos los parámetros:

EXECUTE pln_obtenersolvencia(682185, 1);

Total runtime: 0.473 ms
(1 filas)

De 1.7 a 0.4 ha sido una mejora interesante, ¿no?.

Conclusiones

No busco “echarme de enemigos” a los desarrolladores, yo también soy uno (de diseñado APIs, frameworks, y módulos en python y PHP), pero, cuando se trata de bases de datos, los desarrolladores deben quitarse los audífonos, la sudadera geek y ponerse en la camisa y anteojos nerd de los DBA; porque al final del día, la aplicación no se está diseñando para yo sentirme cómodo para trabajar con fechas o agregar y agregar campos sin mantener un diccionario de datos simplemente porque me pidieron en un lugar meter el RIF como J310210423 en otro como J-31021042-3 y en otro el tipo de contribuyente por un campo y el código del mismo por otro; no se trata de nuestra comodidad (o de nuestro limitado conocimiento como desarrolladores) sino de la eficiencia y la funcionalidad que deben garantizar que sea el USUARIO FINAL (y sólo él, porque al final, es el que usará todos los días la aplicación) quien disfrute el uso de nuestra aplicación.

Por cierto, como colofón, habrán notado que la tabla se llama “solvencia”, si, es un sistema que genera solvencias al público en general, ahora las consultas duran menos de un milisegundo (y no casi un segundo en cargar) por lo que la mejora impacta a miles de personas que solicitan la solvencia en ese sistema …

… Y ya el CPU no se agota en la máquina virtual! …

 

Software Libre versus Software Privativo, respuesta a achepe.NET

Este artículo nace como una respuesta a un otro, posteado en Achepe.NET

Lean el artículo original: http://achepenet.blogspot.com/2010/05/software-privativo-vs-software-libre.html

Lo respeté el artículo hasta que agregó FrontPage a la ecuación de aplicaciones … Si hasta textMate de macOSX es muchisimo mejor editor que FrontPage!. xD

El artículo va dirigido directamente a él, acá mi respuesta:

Y hablando en serio, Compara “Adobe Photoshop” (con los 12 años de experiencia del Indú que lo hizo), Autodesk Autocad (con su motor de diseño hecho en Lisp, no hay lenguaje en la tierra más eficiente para eso), Adobe Flash (y la imposibilidad de la comunidad libre en ponerse de acuerdo para hacer un “fork” funcional y decente), e incluso Eclipse, Komodo, Kdeveloper y NetBeans con Visual Studio .NET … pero la comparación que hiciste hoy para argumentar tu idea fue de lo más fuera de foco …

De hecho, la comparativa además de sonar rebuscada es mala; comparas:

Aptana Studio (Eclipse Add-on para desarrollo javascript y HTML)
Eclipse (un IDE de desarrollo de aplicaciones que no tiene un WYSIWYG para HTML)

Con editores (x)HTML WYSIWYG, que es donde entra:
Quanta+
Komposer
SeaMonkey

O editores WYSIWYM como Bluefish y screem xhtml editor.

NVU ni lo nombro, pues es un proyecto detenido hace mucho tiempo en favor de SeaMonkey (¿lo sabias?).

Hay cerca de 12 editores WYSIWYG en Linux … solo podías comparar con NVU? …

Se seguirá defendiendo Internet Explorer, bajo los argumentos incorrectos …

Eclipse ni es comparable, es un IDE (Entorno Integrado de Desarrollo, si lo compararas con Visual Studio te creo, pero con Dreamweaver?), permite conectarse a repositorios GIT, SVN y Mercurial, edita directamente desde servidores web, webDAV, tiene auto-completado de código para más de 8 lenguajes de programación (y otros via plugin), Aptana (un Add-On de Eclipse) trae más de 20 bibliotecas “ya listas” para javascript y ajax, como jquery, YUI, Döjo o soporte completo para estilos CSS3, incluyendo selectores, etc …

No tiene “visualizador” en vivo?, Configura Aptana para que sepa que navegador usará y te lo mostrará dentro de la misma ventana de Aptana, en una pestaña nueva como navegador.

¿Hay esas características en Adobe Dreamweaver? …

Puede que tenga otras características, pero insisto, Comparamos herramientas de manera equivocada …

Quieres comparar Visual .NET con OpenOffice …

Te digo “exactamente” lo mismo que le dije al chamo de la ponencia de GIMP, que dijo “aún uso Adobe Photoshop porque en GIMP no hay efectos de capa y sombras de texto como en Photoshop” …

Hay que ser humildes, quitar de la ecuación el decir “no hay” como si se fuera un experto del área y decir “no sé si existe, o no lo sé”; puesto que aunque defensor del SL; no permití que se fuera impune, “SI EXISTEN” dichos efectos, son parte de un set de plugins descargables e instalables fácilmente desde la web de GIMP.
Incluso, hay un proyecto para entender los 8BF (formato de plugins de Adobe) dentro de GIMP.

Que no conozcas que existe una herramienta, no quiere decir que no se puede hacer! …

Reconozcamos con humildad este asunto …

Y ¿Sábes por qué ya no existe WYSIWYG en Entornos de desarrollo?, porque estamos en una nueva época, basadas en aplicaciones web, Ajax, SOA, donde los frameworks te desarrollan todo el código por tí, donde editores como Aptana te permiten trabajar el CSS de manera adecuada, en este mundo, HTML es un esqueleto vacio donde gracias a los templates y vistas (puede tu Dreamweaver trabajar templates de Savanna o de Python Django?), metemos todo lo que desarrollan nuestras aplicaciones.

La época de mezclar HTML y PHP en una mísma página es casualmente un exhabrupto a lo que acostumbró la gente Dreamweaver … enseñarles verdadero MVC, separación lógica de roles, un buen lenguaje de programación o Framework que luego “te guíe” a aprender HTML (como lo haría Ruby on Rails) es la forma …

Porque si aprenden “a lo chaborro de mezclar todo”, luego sacarlos de dreamweaver es un verdadero suplicio … Llorarán hasta que no vean un Dreamweaver libre! …

Y si aún quieres WYSIWYG en Eclipse, ¿por qué no pruebas Visual Designer? > http://www.myeclipseide.com/module-htmlpages-display-pid-12.html

No es “purismo”; al contrario, es “practicidad”, si te especializaste en “web”, deberías pensar en una herramienta que:

* Se conecte a tu sistema de versiones (si no usas, empieza a usarlo)
* a tu sistema de debug y permita code breaks y debugging de variables (si no programas, ¿para qué haces HTML?, ¿vendes temas para wordpress?)
* permita integrarse a tu cruisecontrol y el gestor de auto-build y de pruebas unitarias (me interesa más que una aplicación funcione bien, a que se vea “bonita”)
* Que se integre a tu PHPdocs y genere automáticamente la documentación (porque siempre “tiran etiquetas y código” y jamás agarran la práctica de documentar)
* Que permita la integración y auto-completado de código de diversas librerías (si, interfaces “plugin” es lo que sobra, no solo Dreamweaver las tiene)
* Que permita hacer switch rápido entre entornos de desarrollo y producción (para que no seas el fastidioso “wannabe-developer” que quiere modificar los HTML que están en el servidor web!)

Si tu única herramienta no hace esto pero si “te muestra como se va a ver tu página web”, pues dejame decirte que estás demasiado lejos de ser un desarrollador web y sigues en la época de los HTML estáticos, de la mezcla horrenda de código HTML y PHP y de los gifs animados …

Hemos evolucionado (gracias a Dios!), Visual Fox Pro ha muerto! …

El “Cascarón” o esqueleto HTML es de por sí, la última cosa en la que se piensa (existiendo incluso librerías para ello, como librerías para normalizar el aspecto de tu CSS o del XHTML) cuando se trata de aplicaciones web.
Y para ello, tenés seaMonkey y las mil extensiones (firebug, webdeveloper) que hay para Firefox.

¿o acaso jamás haz probado las capacidades de edición in-line de HTML que permite Firebug?

Seguimos en la “búsqueda de paquetes” versus “cambio de paradigmas”, es como el “Quiero un crystal reports, pero web y en PHP, sino, no migro” que escuché yo alguna vez, ¿acáso hay un Crystal Reports que corra en web para Visual Basic .NET?, quieren exigirle más al Software Libre que al Software Privativo, porque el miedo al cambio (y no la dificultad “asumida” de las herramientas) es lo que enfrentan.

Como sería un Mario Bros más “humano”?

Con el artículo anterior; recordé unas ilustraciones de un artista en DeviantArt conocido como living-oxymoron.

Uno de los que más me gusta es sobre como sería en realidad Mario Bros:

No tiene así como un *cierto* parecido con V de Vendetta?

Puedo asegurar que Chun Li (Street Fighter) le quedó fascinante:

Los “consoleros” viejos jugadores gozarán un puyero con este “diagrama esquemático” de Rockman X:

Y algo a lo que no le pondré nombre, pero me imagino comenzarán a rodar cédulas de identidad por acá:

Al Natalicio de Norman Rockwell

Norman Rockwell recibirá mañana 3 de Febrero en Google un logo como parte de la celebración  de los 116 años de su natalicio.

Para quienes no lo conocen; Norman fué un famoso ilustrador y caricaturista norteamericano; famoso por sus ilustraciones sobre la vida cotidiana norteamericana, fue durante muchos años el ilustrador oficial del Saturdary Evening Post y de los Boys Scouts; además fué el autor de la afamada serie “four freedoms” como ilustraciones motivacionales durante la segunda guerra mundial.

Acá, su ilustración sobre la Libertad de Expresión:

Libertad de Expresión

Libertad de Expresión (free speech)

O su ilustración acerca del apoyo femenino a la Guerra en la obra “Rosie la remachadora”:

O su primer (de los miles que hizo) panfleto ilustrativo sobre los Boys Scouts:

Hace ya 16 años; mi madre me compró un cuaderno para la escuela (en realidad, liceo), de esos de múltiples tapas para múltiples materias; el motivo del cuarderno era sobre los 100 años del artista e ilustrador Norman Rockwell y se llamaba “Posters of America” y me pareció tan extraordinario su trabajo; como representaba las cosas cotidianas con esa ilustración que jamás buscaba la perfección; solo la representación de lo que somos.

Recuerdo que la portada traía una ilustración, que formó la portada del Saturday Evening Post el 24 de Abril de 1926; la obra se llamaba “Sunset” (puesta de sol) y casualmente mañana será portada en Google:

Además traía en la ante-portada una ilustración llamada “Auto-retrato” (self-portrait) y que fué el motivo de mi mamá para comprarlo, me dijo aquella vez “se parece a tí cuando estás estudiando” … fué portada del Saturday Evening Post el 8 de Octubre de 1938.

Cada tapa del cuaderno de múltiples materias traía una obra de Rockwell; una que me gustaba mucho la encontré en Internet y se llama “Making Friends”:

Su ya famoso “Triple auto-retrato” es pieza magnífica que estaba en una de las portadas de mi cuaderno:

¿Qué hice con el Cuaderno?, pues no lo usé para el liceo!, me encantó y lo usé para anotar recuerdos, llevar bitácoras, ideas, dibujaba, tomaba notas de mi mundo; escribía notas para mí y para los demás:

Mi Arma es la escritura, mi escudo el silencio, mi daga son las palabras y mi fuerza el pensamiento …

No está demás afirmar que sus dibujos me llevaron a tomar la pluma por primera vez; a escribir las cosas que veía del mundo y además, a dibujar mis primeros bosquejos; agradezco mucho ese cuaderno y las ilustraciones de Norman Rockwell.

La contra-portada del cuaderno; traía otra interesante obra de Rockwell; se llamaba “Pintura fresca” y muestra a una joven ávida por la pintura (en esa época, me hubiera gustado ser artista, como ella, si mi familia no hubiera estado en tal situación económica en aquella época):

A Norman Rockwell mi agradecimiento, donde quiera que esté …

CADIVI – oops! i did it again!

Y si!, los diseñadores web de CADIVI siempre lo logran!, aún no sé como le hacen para todos los días sorprenderme con la cantidad de cosas extrañas que hacen para que la experiencia de tramitar los dólares se convierta en una abrumadora pesadilla, pero me quito el sombrero, siempre lo logran! …

Mil felicidades! …

CADIVI-RUSAD en la Historia

RUSAD es la aplicación diseñada para que todos los venezolanos accedamos al cupo de dólares y las empresas a los servicios de importación y exportación; hasta hace poco tenía la interesante (y bizarra) cualidad de que la clave primaria del sistema era la combinación “cédula+correo”, por lo que una misma cédula podía tener (con distintos correos) más de una cuenta RUSAD.

Más allá de ser un error de diseño de la base de datos; demuestra el poco estudio serio y la improvisación detrás del diseño de la aplicación RUSAD; aun no sé si en ese menester se ha corregido el sistema; pero si puedo asegurar que un mismo correo no puede servir a distintas cuentas (no sé si sea buena o mala esa decisión pero bueno).

El proceso de cambio de correo es toda una aplicación aparte; ¿por qué?, mi “constraint” debería ser la cédula y el correo electrónico mi canal de comunicación, ¿no?, qué validaciones se inventaron como para que el correo electrónico solamente pueda ser cambiado via una solicitud especial?, me parece que la gente del SENIAT requiere enseñarle a los de CADIVI a hacer sistemas ligados a la cédula y el RIF y no a un correo electrónico.

El Captcha que cura la presbicia

Ya me he quejado antes de él, pero lo agrego a mi lista de quejas porque aún no lo han corregido; el captcha (diseñado por ellos) rota aleatoriamente a partir de una lista de colores; el grandioso ingenio de los diseñadores les dispuso usar la misma lista para fondo, granulado y letras; por lo que en la mayoría del tiempo veremos colores iguales o complementarios cayendo juntos en combinaciones bizarras y por ende ininteligibles; como por ejemplo:

Y el clásico favorito de los niños: verde manzana sobre verde chillón y granulado verde!:

Pronto tendremos el mágico captcha de “vaca blanca bebiendo leche en la nieve” …

Por lo general hay que recargar un par de veces la página hasta que caiga una combinación que sea “legible”.

No es bueno equivocarse …

Con CADIVI nunca es bueno equivocarse; una amiga (vecina) me dió en un papel sus datos para que le creara la cuenta CADIVI-RUSAD; pero habia escrito mal su número de cédula; ahora el sistema no permite cambiar el número de cédula y tampoco me permite registrar el número de cédula corregido con el mismo correo, ahora 2 venezolanos no tienen cuenta CADIVI; mi vecina, que ahora tiene que abrirse un nuevo correo solo para CADIVI y algún venezolano que tiene la cédula errónea que metí (y que tampoco podrá registrarse).

NO HAY en ninguna parte la opción de “deseo eliminar esta cuenta de CADIVI” o “deseo cambiar la cédula” (pero ilógico, si puedo cambiar el correo electrónico con una aplicación aparte, por qué no hacen una aplicación aparte? …

Nota mental: por qué no hacen como BANAVIH, MF, SENIAT y otras aplicaciones web y por FIN se pegan a la DB del SENIAT?, es decir, pidan el RIF (porque toda persona que solicite dólares debería tener el RIF actualizado) y tras consultar este debería indicar “Buen día señor phenobarbital, como le va?”; así al meter los datos de mi vecina, no hubiera dejado a otro venezolano sin la posibilidad de inscribirse (al menos hasta que los de CADIVI se les ocurra crear una “aplicación aparte” para borrar cuentas erróneas o que permita cambiar la cédula).

Imaginen el siguiente caso; fulanito buendia necesita viajar y necesita dólares, yo quiero joderlo?, pues me creo una cuenta gratuita en cualquier servicio de correo, meto su cédula, ese correo y pas!, sin verificar si en verdad soy fulanito buendia el sistema RUSAD me creará la cuenta y dejará a fulanito buendia sin la posibilidad de crear su cuenta CADIVI.

Y la ayuda?, pidesela a Dios …

Y el gran problema que presentaría Fulanito Buendía sería porque la única forma de contacto regular estaría en enviar un correo a la gente de atencionusuario@cadivi.gob.ve y esperar pacientemente a que los funcionarios respondan; ya que, digamos que Fulanito Buendía para aligerar procesos se inscribe (con otra cédula, jodiendo a otro venezolano) y otro correo e intenta acceder al sistema de reporte de atención a usuario del sistema RUSAD:

°.Reportar una Duda o Problema con Respecto a una Solicitud

Verá que el sistema “no sirve” y cada vez que haces click este indica “Usted no ha reportado incidencias”,  y es que de eso se trata!, quiero reportar una incidencia! …

Al final de cuentas, no hay una forma directa de quejarse dentro del sistema …

Los instructivos (todos mal cuadrados, hechos con screenshots hechos en Windows con Microsoft Internet Explorer) no son para nada explicativos y hasta tienen errores ellos mismos en sus propios formatos instructivos.

(lo apuesto a que son capaces de decirme que el sistema de incidencias solo funciona en Windows y con Internet Explorer … es que son capaces!, lo sé).

Es obligado ser web 2.0

Me sorprendí también (actualizando los datos de la mamá de mi vecina, que también vino) que el correo electrónico secundario ahora es un campo obligatorio!; es decir, DEBO tener dos correos, completamente distintos, so-pena de no poder actualizar mis datos, mi mamá que es una señora mayor, no tenía correo electrónico y se lo tuvo que abrir para lo de CADIVI, ahora debe tener DOS!, de cuando acá un correo de comunicación alternativo es algo obligatorio?.

Para colmo, la obligatoriedad es ABSOLUTA, yo por ejemplo no puedo servir de respaldo (en caso que a mi mamá se le olvide su correo o su contraseña) para la cuenta de mi mamá porque el correo electrónico secundario TAMPOCO puede estar registrado ante CADIVI.

¿Qué más?, me tocará hacer uso de google tags en CADIVI y poner correo primario pericodelospalotes@gmail.com y como secundario a pericodelospalotes+cadivi@gmail.com; espero que después de este tip no se le ocurra a CADIVI filtrar el simbolo + de los campos correo o peor aun!, sacar una providencia que prohiba esta actividad.

Hay soluciones?

Hay quienes no aceptan críticas y ya mi persona y muchos compañeros de la comunidad hemos reducido el número de correos “crítica” como este, porque siempre nos toman como “opositores recalcitrantes golpistas oligarcas” que deben ser quemados en la hoguera, sin aceptar en lo más mínimo las críticas a las deficiencias de sus aplicaciones …

Recuerdo que cuando el fallo de la clave de CADIVI existía, me imagino que hicieron caso porque en cientos de eventos de software libre donde presenté mis ponencias sobre bases de datos en software libre, hablaba de “las cosas que no se debían hacer” y mi ejemplo clásico era CADIVI.

Debemos ser protestatarios, debemos quejarnos!, aceptar las quejas!, porque si algo no funciona correctamente, uno se queja para que este mejore; porque a la final lo que todos queremos es que las cosas mejoren y no que empeoren con el tiempo.

Mis posibles soluciones.

* Consumir los servicios web de SENIAT: deberían hacer uso de la DB de RIF del SENIAT, así, no tendríamos este despelote con las cuentas de CADIVI, es más, todo venezolano y empresa debería estar ya pre-inscrito en el sistema (como en el SENIAT) y solamente “activar” la cuenta dando los datos de correo electrónico y de seguridad.

* No re-inventar la rueda: cosas como el captcha (que captchas eficientes y funcionales hay por miles y en software libre) deberian ser componentes de terceros, yo sé que como programador estan aprendiendo a hacer captchas y pues se sienten felices de que la cosa “les sirve” como lo planificaron; pero son una aplicación pública con miles de usuarios, no podemos estar pagando por los aprendizajes y noveles decisiones de los programadores de RUSAD; ya basta de tanta improvisación.

* Si aun así quieren seguir haciendo captchas; pongan colores opuestos complementarios y una lista completamente distinta para fondo, granulado y para las letras; así no ocurrirá más ese choque.

* Usar PNG para el captcha, a JPEG se le aplica una compresión de pérdida (conocida como pérdida del algoritmo de Hauffman) que causa esas horribles difuminaciones alrededor de todas las letras y que hacen imposible leerlas en algunas condiciones de luz o de combinaciones de color.

* Me gusta como validan las inyecciones SQL (SQL Injections), con javascript! … ¬¬ (léase el sarcásmo acá) …

var vseguridad=/^(\%3C)|<|(\%3E)|>|(^[uU][nN][iI][oO][nN]\s|^[sS][eE][lL][eE][cC][tT]\s|^[iI][nN][sS][eE][rR][tT]\s|^[uU][pP][dD][aA][tT][eE]\s|^[dD][eE][lL][eE][tT][eE]\s|^[dD][rR][oO][pP]\s|^[tT][aA][bB][lL][eE]\s|^[iI][nN][tT][oO]\s)|(\%3D)|(=)|(\%3B)|(;)|(\%27)|(\')|(\-\-)|(\%23)|(#)|(\%2F)|\/|\%|(\n)$/;

* Las claves viajan en un algoritmo de cifrado en dos vías base64, ¿para qué?, acaso “descifras la clave del lado del servidor” para hacer la comparación?, no es más fácil cifrar con un hash de una via (MD5, ejemplo) y hacer una comparación de hash?, así mi clave no anda viajando en un algoritmo descifrable por la red.

* Creo que ya va siendo hora de que migren esa aplicación a PHP5, no?, recuerden que ya vamos para 2 años (si, 2 años, se lee 2) que PHP4 ha quedado excluído de todos los repositorios, incluyendo el old-stable que usan: PHP/4.4.4-8+etch6

Y como último pero el más importante; deberían revisar sus procesos y hacer una verdadera “re-evaluación” de las cosas que se quieren lograr con la aplicación; así, si se hacen mejor algunas cosas, se podría redundar en beneficio para los usuarios y no se tendría que estar “parcheando” a CADIVI vez tras vez.

Señores de CADIVI, cojan consejo!, que el Dr. Hipólito Izquierdo advirtió hace más de 4 años que las previsiones para el fenómeno “el niño” para Venezuela serían terribles y ven?, nadie siguió sus consejos y ahora pagamos las consecuencias …

Si hacen una aplicación que funcione, decente, que le sirva a todo el mundo, simplemente NADIE se quejará de ella y hasta pasará desapercibida ¿o acaso ustedes ven a alguien quejándose de la aplicación de BANAVIH? …

Espero que esta vez tomen algunas ideas y las implementen y por favor; quien venga aquí a decir que quejarse de una aplicación MAL HECHA del o para el estado Venezolano es “anti-revolucionario” y “escuálido”, pues etiquetenmente como les dé la gana, pero no me voy a seguir calando malas aplicaciones, sistemas y procedimientos burocráticos solo porque “son del estado” …

Con esa actitud, al contrario, el gobierno no mejora, no aprende de sus errores ni se corrige y corre derechito al colapso …

A %d blogueros les gusta esto: