Mi punto de vista sobre JSON y XML

Las ultimas semanas he estado notando inestabilidades del browser conocido como chrome o chromium, específicamente en sitios que sirven subconjuntos de java o LJS. (http://www.google.com/#sclient=psy&hl=es&source=hp&q=ljs+java&aq=f&aqi=&aql=&oq=&pbx=1&bav=on.2,or.r_gc.r_pw.&fp=5e1f10055c27afe0)

Uno de los paneles de control de dominios que uso, HSPHERE, tiene una sección mas o menos amplia de control de cuentas, que tiene bastante LJS.

Aunque los problemas de caché de chromium es algo de lo que hablaré después, El origen del problema de momento es por el uso de LJS o java cuando no es necesario.

Vamos por partes:

Javascript muestra información en la computadora del usuario, y no realiza cambios en el servidor.

Los lenguajes como Php, realizan algo en el servidor, y después muestran los resultados en la computadora.

Esto significa que Php carga/cambia cada vez la página , y javascript muestra algo que se cargó una sola vez.

Ajax es una tecnología / metodología que permiite hacer algo en java y pasarlo al servidor. Pero muy pocos sitios avisan si algo no paso al server. Así que podemos ver un «editor» java, donde se capturó datos de un producto o cliente, que se ven como guardados, pero que realmente no existen en el servidor.

Para evitar la recarga de archivos servicios como yahoo han estado sirviendo desde cachés hasta LJS y estandares JSON en lugar de XML. Si bien creo que XML no es seguro, es mucho mejor que JSON.

La principal limitación de JSON es la obligación de hacer un parser adicional (porque no identifica elementos), y si NO sabes hacer un parser como Dios manda, probablemente se acaba ejecutando un eval sobre el conjunto de datos. Resultado, JSON es absolutamente inseguro , o tu haces tu parser espcializado. Si bien el volumen de datos es mas pequeño, es mas ambiguo, hay unos ejemplos claros en http://es.wikipedia.org/wiki/JSON

La mayoría de los servicios JSON o XML que he visto no regresan una hora en formato UTC o de cualquier tipo, asi que no estás seguro si estas viendo o no resultados en caché.

El problema es que muchos grandes proveedores de servicios, están haciendo con JSON los que les da la gana. Hay diversos artículos acerca de como hacer crossforge con JSON (por el problema de rutas predecibles), pero lo que regresan muchos idiotas es «ese JSON está mal implementado porque permite objetos», y no conocen el estandard que dice

http://tools.ietf.org/html/rfc4627

Extracto:
JSON can represent four primitive types (strings, numbers, booleans,
and null) and two structured types (objects and arrays).

A string is a sequence of zero or more Unicode characters [UNICODE].

The terms «object» and «array» come from the conventions of
JavaScript.

JSON’s design goals were for it to be minimal, portable, textual, and
a subset of JavaScript.

Lo cual significa que tienes dos o tres entradas de datos que no autentifican nada, no guardan nada en server (al ser javascript), o de plano te limitas a un absurdo límite sin objetos de java, que ya no es JSON sino un XML mal diseñado, que no tiene validadores en línea y sin XSLTs.

Creo que a mediano plazo, todas las aplicaciones de seguridad caerán en un modelo mas «xml-rpc», de autentificación pero JSON será para mi un riesgo de seguridad. El colegio que he mencionado antes, tuvo el viernes un problema bastante extraño por unos cachés, que de entrada hubieran llevado a pérdida de datos o respuestas parciales.

Asi que, la solución a corto plazo es:
1 ) Evitar usar jquery
2 ) usar bitácoras via APACHE o similares.
3 ) No usar JSON excepto si XML o XML-rpc no son viables.

La real sería eliminar LJS completammente, o su evaluación de Objetos. El eval es quizá el problema de seguridad mas grande del diseño online, y aunque ne php podemos prohibirlo en nuestro servidor, como el java es por pc, puede hacerse lo que le de la gana… y ser diferente a lo que está en nuestro servidor.

Y en la mayoria de los casos Es mucho mejor usar un FTP o un XML-RPC que JSON.

O que de plano le quiten el manejo de objetos, creo yo.

Cuatro sistemas operativos

Una nota de sentido común: No necesariamente lo que tiene precio no es gratuito.

He seguido viendo problemas varios en el trabajo por la migración a Linux, y supongo que los problemas provocados por Skype en Ubuntu Nerval van a ser peor.

Explico el contexto:
Como parte de las políticas de uso, y porque varias implementaciones las están haciendo in site, y uno de los «programadores de formatos» (angel) está ahora escribiendo desde otro estado, en el trabajo requieren conectividad con varios de ellos. Ya tuvimos un problema cuando alguien se le ocurrió dar los skypes a todos los clientes.

El caso es que deben usar skype para comunicarse con clientes. Ayer tuve un problema con el nuevo ubuntu 11.04, ya que no instala bien desde el apt-get a menos que uses primero un repositorio de Maverick (ubuntu 10.10). Si bien la solución evidente es usar jabber, nuestras políticas de seguridad lo impiden.

Así que , tuve que permitir el uso de repositorio de Maverick, en una de las pc.

Por cuestiones del personal nuevo, llevo un mes usando mi laptop propia dell inspiron 1525, y se supone que en unos días reponen mi laptop toshiba, aunque a esa le pondré mint o algún slackware.

De las 4 pc que tengo, la dell tiene de momento xp downgrade de vista , la mini hp traer windows7 starter, la lg del disco duro dañado ubuntu 11.04 y la desktop de 23 pulgadas windows 7 home premium.

No faltará el que diga que «usa linux por tal tal tal».

Es una herramienta. Lo que sé es que todas vienen con sistema operativo incluido y una de las razones de usar monitor de 23 pulgadas en mi desktop de la casa es para poder cargar maquinas virtuales de debian al mismo tiempo que uso los programas de windows que necesitamos por dependencias oficiales.

http://h10010.www1.hp.com/wwpc/es/es/sm/WF06b/382087-382087-64283-3181048-3181048-4184767-4173677.html

Un problema de principios… y de sentido común. Si bien la dell tiene dual boot con slackware, no tiene caso cambiar de sistema operativo al ubuntu reciente en las live usb que uso, sobre todo considerando el problema de skype en instalaciones limpias que no tienen las dependencias de maverick establecidas.

Es decir, es extraño que si instalo skype desde un paquete de versión bajado hace dos o otres meses si se instala en nerval, pero en instalaciones limpias, como máquinas virtuales remotas, por lo general no se tiene acceso a bajar paquetes , y el hecho que el paquete de skype esté roto, no implica que lo mejor sea buscar paquete viejo o ubuntu viejo. Si las pc ya vienen con licencia de windows, y el problema es skype, es una estupidez cambiar a linux, sobre todo considerando que hay paquetes de solo windows, y que las reinstalaciones como las de la HP que me pasaron hace una semanas para revisarla no tienen discos de instalación correctos.

Un efecto secundario mas de hacer lo simple. Cuando a mediados de año pasado coincidió la enésima falla de fuente de poder de la pc armada con la necesidad de un monitor de 23 pulgadas, me resultó mejor comprar la desktop de hp. Y quitarle windows puede ser poético, pero es estúpido.

Profesionales y tiempo de respuesta

En el medio que me muevo, de programación, servidores, seguridad y cosas web, el tiempo de respuesta es algo buscado pero que pocas veces obtiene uno de ciertos individuos.

Por ejemplo, de momento tengo detenidos cuatro proyectos porque he hecho lo posible con el material que me han dado.

Hace una media hora, despues de una cuidadosa selección de un bien necesario de licencia de un shareware, lo compré. Esperaba yo recibir un software de tipo digital, hice mi proceso y el intercambio se terminó en menos de 15 minutos, sin ser automatizado.

Ojalá Amazon, Barnes and Nobles y otros sistemas de cobro de bienes digitales fueran tan directos.

Lo malo es que es un producto Unico de esa empresa, así que los tiempos no se volverán a repetir, con ellos al menos.

El problema del login movido

Me reporta hoy uno de los programadores nuevos un problema con el sistema anticopia del sistema que hice hace casi ocho meses y que desde hace cinco meses revisa otra unidad.

Cambiaron la pantalla de login interna por una externa con photoshop, pero al accesar al certificado via direccion ip, no entra porque se compró a nombre del dominio.

Todo esto porque a alguien se le ocurrió hacer una redirección de puertos a través de las máquinas virtuales.

Tuve que comentar el código antiinyeccciones que evitaba malos referer, y deje este comentario en el código:
=========
El proceso de bloqueo de inyeccion SQL queda desconfigurado por que se supone, por ser https, que usamos DOMINIO.
Cuando usamos direccion ip, parece que es inyeccion , porque una ip no puede correr bajo https AOA deshabilita el sistema de inyeccion de referers, cambiando la condicion a 1<>1 el 18 abr 2011,
basicamente porque la direccion ip desvirtua la llamada normal de posts, y el referrer solo funcionaba por dominio, no por ip. Hacer una regla que considere tanto ip como dominios (www), seria redundante porque estamos hablando de https. Asi que, la decisión tomada por terceras personas de llamar a direccion ip fija, deja de lado a fuerza la validacion de puerto 443, porque entra por 80. Y si lo están corriendo por direccion fija, desde firefox (linux), solo pueden entrar por excepcion autorizada de
seguridad, asi que, de entrada no se respetan los criterios de seguridad.

A opinion de AOA, este puede ser un punto de inyeccion SQL. Es responsabilidad de otro checarlo.

Solución real: no redirects. La pantalla que pide el login deberia ser parte de este código, no el añadido, que deshabilitó la original ya incluida en este archivo. El problema tiene origen estético, y DESCONOZCO como llaman o entran desde maquinas virtuales. AOA 18 ABR 2011.

Cuando usar qué panel de control

Una de las consecuencias del proceso de borrado del buzón de 460 mil (334 mil al momento )ha sido acordarme de tiempos pasados en tecnología. Cuando trabajé en supermercados por el 95, recuerdo que lo normal era usar MOSAIC y trumpet para ver el correo.

En este momento el problema son herramientas de monitoreo de servidores de dominios web, que sean mainstream, soportados por proveedores con mas de cinco años de experiencia, que soporten clusters (necesidades propias y del trabajo).

Los paneles de control como webmin, software libre, no son soportados y no cumplen las necesidades de cluster ni permanencia del trabajo, lo que me limita a hsphere, ccpanel, plesk, ensim, helm y direct admin.

Sin embargo, en cosas mas modernas me puse a buscar en el API de Cpanel (porque la asociación de marras está en un sitio bajo cpanel del que no tengo acceso como root) si existía una función para borrarel contenido de una cuenta de correo primaria (es decir, la automática, si no fuera esa con borrarla y recrearla).

Al final me puse a verificar el método simple de Fetch por CURL que he usado desde hace años para comprobar los contenidos de los diferentes servers/clusters bajo cpanel que he manejado. Si bien de momento tengo dos servers cpanel de los que soy admin, mas los dos del trabajo, creo que el poder de cpanel depende de otra cosa.

Básicamente, me interesa una API para paneles de control que me de informaciòn estadistica sobre cuentas de correo y bases de datos,asi como uso actual y disponible de disco y ancho de banda.

Un punto secundario es que las funciones de API de cpanel bajo Hash y no password lo hacen mejor que otros paneles para sistemas automatizados de verificación. Las Apis de Hsphere no están expuestas por los tres proveedores principales, y de todos modos los tres proveedores dan tan buen servicio que sale sobrando.

Sin embargo, algo esta extraño con Cpanel.

Por principio de cuentas, en el caso de un macrositio (con trafico a lo bestia) parte de las pymes, consume muchisimo ancho de banda, que a su vez no lo harían recomendable para un cluster.

Si hablamos de un dominio que consume de 100 a 120 gb de ancho de banda al mes, por le principio del 30% de repartición de recursos de los clusters, sale mas barato un servidor dedicado para el dominio en sí, que contratar el cluster del tamaño en sí.

Asi que eso me obliga a por lo menos, tener un servidor dedicado para los sitios dedicados cuyo conjunto de clientes usa demasiado ancho de banda. Por ejemplo, hace unos años tuve bajo CPANEL que administrar los sitios de una agencia de publicidad, que por separado manejaban un manejable 8 a 10 gb por sitio de ancho de banda, pero eran 12 sitios, lo que daba un consumo promedio de 120 gb, lo que para fines prácticos los volvía un macrositio. (offtopic, de todos modos se pasaron a hsphere y reduje su costo a la mitad )

De entrada, un sitio solitario, de un macrositio, en una instalación «limpia», (sin estadisticas ni respaldos) probablemente iría bien bajo direct admin o bajo cpanel con lightspeed.

Plesk es pesado, y cobran por dominio (y su api es muuuy rudimentaria). Los quebraderos de cabeza bajo un cluster plesk deben ser predecibles, y en lo personal por su medio infame de respaldos, solo los usaría para clientes que usen archivos .war, pero dejé de manejarlo hace unos tres años.

Helm solo sirve para ASP especializado y no tiene api para helm3 porque todo se hace bajo objetos com o activex. El control y la apariencia eran bonitos, pero después de las dos catástrofes ajenas que tuve que migrar a cpanel hace unos años, no gracias. Ni mis clientes, ni mis dominios donados los voy a poner en riesgo. La api de helm4 https://www.dcontrol.net/serviceapi/httpapi.aspx no se ve mal, pero no tiene funciones para retrieve de bases de datos, asi que , tampoco sirve para mis necesidades.

Repito, Básicamente, me interesa una API para paneles de control que me de informaciòn estadistica sobre cuentas de correo y bases de datos,asi como uso actual y disponible de disco y ancho de banda.

Ensim ahora es parallels pro, que no uso porque ensim no era fiable (desde el 2007), y su api tambien se ve limitada.

Esto me deja en la obligación de usar de monitoreo, a fuerzas, cpanel. Y además, hsphere sale el segundo candidato natural, porque complementa uno de los puntos debiles de cpanel en cuanto a sitios estáticos.

(tema para hablar otro día)

Sobre Consolidación de servidores y algunos puntos sueltos

El trabajo del jueves al viernes quedó bien y la interfaz RVM es funcional. Sin embargo, los cambios de los ultimos días en el corporativo me muestran un problema en ciernes y no mio. El dia de hoy los dos programadores nuevos, que a la hora de la hora contrataron sinseguir el procedimiento que yo fijé en agosto/septiembre, están teniendo problemas. Uno de ellos es mas bien becario que programador y no vino hoy (2do dia en una semanas ?) Y el que se ve mas prometedor, pidió permiso. Por lo que se no le hicieron exámen de programación, solo entrevista (y las notas que vi le pusieron medio).

Es una consecuencia lógica de no pasar sufiiente tiempo haciendo la selección de personal. Los dos que contraté el año pasado me tardé casi un mes , y fueron los mas decentes.. pero la rapidez en la contratación en labores especializadas, es contraproducente. Afortunadamente no laboran directamente en la empresa en que estoy, pero la presión sobre el programador que queda en esa empresa, va a ser mayor y va a estar mas propenso a errores.

Paciencia y esperar.

Los 460 mil mensajes se han reducido a 420 mil. Por cuestiones de load no puedo usar scripts pesados de telnet ni de php, asi que estoy usando un método seguro pero lento. Cada paso elimino unos mil y dura 10 minutos cada paso pero es recuperable a fallos.

En cuanto a los servidores, de momento me encuentro con dos servidores cpanel, mas tres clusters que desaparecerán a dos. Me doy cuenta que hay problemas no solamente delconsumo de ancho de banda de algunas personas a las que dono espacio (que impiden un cluster), sino que algo esta mal con mayúsculas en la economía mexicana y rotación de personal. Por lo general C-P hacía su pago puntual (simbólico) pero en esta ocasión, no. Uno de los clientes fuertes de la PYME mas antigua ha cambiado a su personal de sistemas unas tres veces en el último año, y ninguno contesta lo evidente.

¿Quien está comprando los productos?

Los supermercados (SAMS, bodega aurrerà, comercial mexicana etc) que voy mas o menos frecuentemente, muestran una cantidad tremenda de espacios muertos no importando el día de la semana, así que si hago caso a los comunicados de AMECE sobre ventas y desplazamiento, se sigue vendiendo igual, pero el espacio muerto me lleva a la conclusión que se vende igual en dinero pero menos articulaje.

A su vez, por los cambios en la certificación del corporativo, y su relación con secretarías de estado, nos es materialmente imposible tener nuevos clientes hasta que salgan los nuevos parámetros, pero sè que los productos que manejan las PYMES propias o de las que soy apoderado legal, funciona. Sin embargo, las opciones relativas a servidores web y su consolidación tienen cierta relación y nada que ver con espacios muertos.

Tendré que echar números el fin de semana y un pronóstico de entradas, ya que debe quedar repartida la carga entre las PYMES.

Desvelada en ciernes

He comentado que hace poco mas de seis meses recibí una llamada del corporativo donde estoy en este momento. Hay acuerdos pesaditos de Confidencialidad (mismos que yo escribí y fui el primero en firmar), pero a veces me pregunto si pasa con el conocimiento esotérico lo mismo que con los RVM (http://en.wikipedia.org/wiki/Relevance_vector_machine), en pocas palabras, si tienen métodos de auto corrección por relevancia iterativa .

Esta noche me espera una buena desvelada. He estado haciendo a ratos un módulo de RVM en php usando XMLRPC pero para que los clientes sean terceras personas. Ya hice el cliente en menos de cuatro horas el lunes o martes ignorando lo que hizo el programador jefe de otra unidad, mismo que me hizo perder dos días haciendo algo no funcional.

Reviisando con otra tercera unidad (donde estàn Aidee y jaime) ellos no tuvieron problema al leer el cliente.

El problema es que uno de los socios se comprometió a regresar información valida de una base datos (que no existe ni esta diseñada en este momento), con datos estadísticos de muestra, para servir a seis procesos XML-RPC. Lo que me obliga a desvelarme para tener para mañana tanto la estructura de la base de datos,como datos de ejemplo, asi como seis receptores de método (no complicado porque ya está), pero además automatizar un método de respuesta por cada receptor.

En la práctica implicaa hacer seis métodos que cada uno haga inserción y consulta a la base, así como una bitacora e interacción con la base de datos final.

Afortunadamente pude elegir y me aprobaron usar INNO.

Creo que lo mas trabajoso va a ser el parser para interpretar las respuestas sin usar clases como la que pasó el jefe de unidad mencionado. Espero tenerlo a la una de la mañana, pero no se si me voy por un ejemplo de array simple, o simpleXML.

Es cuestión de pensarlo.

Mientras, tengo que hacer pausa para ir al baño, y media hora para hacer el esquema mental antes de ir a la escuela por mis hijos.

Java y edad

Una de las cosas que me choca de java, es el problema para saber que version de java se está usando. Les pregunta a programadores y no saben si es Java, jquery o javascript. Y los que usan Java noi saben que version de java es. En entornos web bajo php es mas fácil, por lo general lo que llaman java que se usa es una librería llamada jquery, que por lo general se usa mal.

Y el mejor ejemplo lo vi en el sitio de la asociación, hecho por terceras personas. Básicamente manejan una actualización masiva de tarjetas de socios mediante AJAX e innerhtml, usando un campo calculado mal, que calcula la edad de un socio de este modo aprox en una orden sql:

year(curdate())-year(fecha_nacimiento) as EDAD

Ese es uno de los códigos mas ESTUPIDOS que he visto. Por principio de cuentas:

1 ) No se actualiza con el paso del tiempo o el dia que se muestra. Asi que solo se actualiza cuando se edita. El dato va eternamente desfasado
2 ) Lo correcto es similar a integer((curdate()-fecha_nacimiento)/365)

Pero por la actualizacion hecha por innerhtml, el código está en tres lugares diferentes y es dificil componerlo.

Existian tres opciones:

a ) Editar el código actual para poner esa formula.
b ) Poner en la entrada del administrador una rutina que haga
update tabla set EDAD=((curdate()-fecha_nacimiento)/365)
c ) Hacer el recalculo de la fecha en la llamada SQL y mostrar el dato (sale sobrando el campo en realidad)

Se hizo la opción tres.

Es un código poco manejable el existente, ya me autorizaron purgar los 460 mil correos de basura, y estoy tomando estadísticas antes de hacerlo.

Servidores a Granel y un script para saber que es qué

Ayer estuve revisando problemas de load alerts en cuatro servers diferentes, en tres datacenters diferentes.

Cada uno se contrató en un lugar diferente, pero todos con las mismas características.
Y uno me dice : 1024 (lo que es)
Otro : 1512 (50% bonus, ok)
Otro : 2048 (100% bonus, ok, ese proveedor es conocido que actualizó todo)
Otro : 4096 ???

Asi que resulta que o cpanel maneja diferente la forma de dar el burst ultimamente, o el proveedor que esta dando 1024 me quitó el burst cuando separé el cluster.

Hice este script que da bastante información util, aunque debe saberse que esperar de los diferentes buffers bajo Linux. En lo personal, este script es el que decidió mi auto pregunta de ayer.

El gethostbyname lo uso para saber la ip aunque esté corriendo bajo IIS y no Apache.

http://www.alfonsoorozcoaguilar.com/codigo/memoriaburst.txt

La caída de CGI y la victoria de PHP

Hace unos años era habitual usar sistemas en modo cgi-bin , y PHP tiene soporte para modo CGI además de texto. Normalmente Cgi no tiene problemas si esta bien documentado, y pasé una buena parte del día de hoy configurando un software de CGI en perl bajo Cpanel.

Por lo menos ya pasé de la ventana de setup, pero que me costó, me costó.

El problema estaba en dos factores después de instalar los módulos de Perl:

1 ) El instalador del software no es intuitivo. Pude resolver la mayor parte del problema gracias a que si no estaba el archivo de configuración, un «check» avisaba si faltaba algo. Me decía que el host cumplía los requisitos. Así que pude saber que el problema era el config.
2 ) el software de marras estaba diseñado para jalar en perl, y trae mal la ruta del script . Ensayo y error funcionó.. ruta por ruta.

Ahora entiendo porque este es el primer programa en cgi obligatorio que veo en en los ultimos cinco años. No creo que Movable Type pase del 2013. Se estpan dando en la torre solos.