Entradas de la categoría: ‘Programación’

En qué se parece XUL a Java

Algunas personas, por circustancias, nunca hemos prestado a Java toda la atención que merece, aunque ha sido un lenguaje que siempre nos ha caido bien, creo que todas las personas que le dan una oportunidad, perciben de algún modo lo bien hecho que está.

Sin embargo, aunque toda su parafernalia de Look&Feel sea un excelente ejemplo de programación orientada a objetos, creo que nadie me discutirá lo excesivamente básicos que resultaban sus primeros LayoutManager. Luego JGoodies lo mejoró y luego hablé de Matisse que también ayuda a construir un UI decente.

Esta tarde he estado echando un vistazo a XUL y he tenido la sensación de que estaban dando los mismos pasos. Supongo que es lo correcto, parece óptimo para asegurarse que se ve igual entre plataformas, y es útil tener un layout que ponga una cosa junto a otra, pero … era tan igual a Java, y al mismo tiempo tan diferente a XHTML-CSS … qué sensación más curiosa.

January 27th, 2008 by admin

La política del Copy-Paste

¿Qué pensarias, si veis el código de una página que, para listar 10 registros hace 11 consultas a la base de datos? Una para obtener el identificador de los registros a mostrar, y otra para cada identificador/registro.

a. Que el programador es un escéntrico

b. Que el programador no tiene ni puta idea

c. Que el programador es un genio

Os voy a explicar en qué caso la respuesta c es la correcta. Pero primero, dos pregunas más.

¿Qué pensarias, si ves el código de una página que, para listar 10 registros, hace una consulta que devuelve 42.358 registros de casi 8 Kb cada uno (casi 330 Mb)?

a. Que el programador no tiene aprecio alguno por el hardware

b. Que el programador es un descuidado

c. Que la base de datos no ofrece manera de evitarlo

La respuesta correcta es, nuevamente, la c. Porque mientras que MySQL tiene la posibilidad de solicitar el rango de registros que vas a mostrar en un listado paginado (LIMIT), esto no es completamente posible con SQL Server 2000. Pero aún se pone más interesante …

¿Que pensarias, si ves el código de una página que, despues de traerse casi 300 Mb de registros, los mete en un array en memoria?

a. Que el programador esta mosqueadisimo con el departamento de administradores de sistemas

b. Que el programador obtuvo su calificación en una tómbola

c. Que el programador esta utilizando un componente sin saber qué hace ese componente

Pues para no variar, la respuesta correcta es la c.

La explicación.

Un buscador realiza consultas sobre una tabla con más de 100.000 registros, aunque el máximo que puede recuperar (debido a un filtrado mínimo) son algo más de 42.000 registros.

Se componía una consulta tal como “SELECT * FROM v_Whatever WHERE …” que básicamente tenía dos problemas:

1. No eran necesarios todos los campos que devuelve

2. La vista realizaba internamente un “cast” de dos campos tipo “text”, que además no se usaban en el listado.

Luego se utilizaba para recuperar estos registros un componente que permite paginar el listado, y que para su propia comodidad (a la hora de saltar de un registro a otro) utilizaba la función GetRows de ADO que vuelca los registros a un array.

Después de un poco de investigación, y de inspiración divina -lo confieso-, la solución ha sido construir una consulta tal como “SELECT idRegistro FROM v_Whatever WHERE …” y después dentro de la iteración del listado, hacer una consulta tal como “SELECT * FROM v_Whatever WHERE idRegistro=…” que aún prodía mejorarse con un “WHERE idRegistro IN (…, …, …)” pero … bah! atomarporculo, así va bien.

El resultado más apreciable es una página que carga muuucho más rápido.

La moraleja.

Me considero un desarrollador bastante convencido (debe ser la edad) de la reutilización, pero recurrir al copy-paste sin cuestionarselo, y sin curiosidad, es jugársela.

Y eso que tenemos en la pared el siguiente recorte:

“Do you chew gum you find on the street?”

También he de decir, al margen del tema principal, que aunque me gusta la reutilización, también me gusta la evolución, con lo cual cuando utilizo un componente que he desarrollado, no me pregunto solo si cumple mis necesidades, sino también si puede mejorarse para la ocasión, o qué aprendí de la última vez que lo usé, con lo cual, al final, reutilización-reutilización no hago casi nunca :o ) jejeje.

January 11th, 2008 by admin

Transgresión al Gestor de Contenidos

He hecho una web para una amiga que tiene una constructura (Procerper). Lo mas rompedor no han sido las animaciónes con jQuery, ni ha sido el gestor de contenidos, sino su ausencia.

Página maquetada en 8 o 10 horas. Cuando quiera un cambio, que me mande un mail. Si edifican una o dos fincas al año, para qué quieren herramienta de actualización. Aunque gaste 30, 45, o 60 minutos en cada cambio ¿Cuantos cambios harán falta para superar lo que hubiera costado hacerle una herramienta, una base de datos, explicarle cómo funciona, estar pendiente de hacer backups puntuales, … ? Que no, mira, que no, que a veces hace falta probar otras soluciones, hacer alguna locura, liberarse de costumbres, cuestionarse el porqué … de momento, a parte de ser todo un “puntazo retro”, está siendo una “liberación”, que quiere mas textos, pues abro el php y meto mas textos, ¿ves? así no echo de menos campos que no consideré poner en la bbdd, que en una quiere una sección más, pues pongo el link y creo el .php con los contenidos y atomarporculo …

January 10th, 2008 by admin

Añádeme a tus favoritos, es por tu bien.

He cogido un periodo “normal” (sin estar pagando Adwords, sin que hubieran vacaciones, …) de mitad de Noviembre del proyecto de Gramática Alemana, y con estos datos me hago una interesante pregunta:

En 3 semanas hubieron 1308 visitas, de las cuales 262 fueron reincidentes, y 99 fueron visitas directas, de estas últimas, 34 fueron reincidentes, es decir, el 13% de los reincidentes vienen escribiendo la URL (o bookmark), el 87% restante me vuelven a buscar.

La medida de páginas visitadas por cada reincidentes es de 9 … por lo tanto … ¿Tiene sentido contar cuantas páginas lleva visitadas un usuario, y a partir de 6 páginas, ofrecerle que me meta en su bookmark con un banner-animación estilo Antena 3? (algo que surge a los pocos segundos de la carga de la página y solapa una porción discreta pero resultona del texto).

¿Cuanta gente no supo buscarme de nuevo, o se despistó en otro enlace?

Parece pasado de moda eso de “pulsa aquí para meterme en tus favoritos”, o más propio de sitios con pornografía, pero … en este contexto, yo creo que estaría bien, no?

January 9th, 2008 by admin

Se busca: motor de base de datos.

No estaré los próximos días, pero podeis ir dejando alguna sugerencia.

Requisitos:

  • Que sea gratuita, da igual si no es opensource (esto descarta MS SQL Server).
  • Que permita más de una base de datos (esto descarta Oracle Express).
  • Que permita generar consultas dentro de los SP y devolver los resultados de dicho SELECT (esto descarta MySQL y HSQLDB).

He intentado probar DB2 Express-C 9.2 pero la instalación ha sido un desastre en un Win XP, y he probado en Win 2003 Server pero necesita SP1 el cual necesita que mi clave de producto no sea pirata -ejem- … igual cuando vuelva pruebo en un Ubuntu, pero Linux siempre me fustra.

December 29th, 2007 by admin

Más que una tabla es un tablón.

Un día necesitas cuatro campos para guardar una cosa, otro día necesitas dos campos para guardar otra cosa, otro día necesitas guardar más cosas y te creas unos cuantos campos más … un día dices “madre mía, siempre me cuesta un huevo encontrar aquí las cosas”, otro día dia dices “voy a contar los campos que hay” … 200 campos en una sola tabla, con dos cojones, si señor.

Pues nada, habrá que buscar un rato para partirla, tocar los stored procedures para que modifiquen cada campo en la tabla donde pase a estar, crear vistas que junten lo necesario para cada situación, … cruzar los dedos, poner un cirio, santigüarse (creo que no había escrito esta palabra en mi vida) … y a la pisicina, como un valiente.

December 28th, 2007 by admin

Una idea para desarrollar

Son múltiples las ocasiones en que permitimos la subida de ficheros al servidor.

Normalmente son imágenes, o ficheros PDF. Normalmente no va a realizarse ningun tipo de “ejecución” sobre ellos. Y normalmente los servidores tienen antivirus.

Pero quizás podría utilizarse la base de datos de algún antivirus GPL como Moon Secure Antivirus y hacer una librería que permita comprobar si el fichero uploaded tiene virus. No estaría de más, no?

Dim av as Antivirus
Dim path as String = Server.MapPath("justuploaded.pdf")
if av.check(path) then
System.IO.File.Delete(path)    ' Sin contemplaciones.
else
...
end if

December 4th, 2007 by admin

Cómo registrar accesos a descargas o páginas llamadas en background

A vueltas con el tema “cómo registrar la actividad del usuario en una página basada en AJAX” resulta que usmeando por código ajeno me he encontrado una grata sorpresa. Al introducir el código de Google Analytics en una página queda disponible para tu usufructo una función que te permite contabilizar accesos a otras páginas que cargues con AJAX, sin trampa ni cartón.

document.getElementById("aDownloadPDF").onclick = function() {
urchinTracker("el-usuario-solicita-un-pdf");
...
return false;
}

Esto hará que en las estadísticas aparezcan visitas a esa página, como si existiera y se hubiera cargado. Ahora, el tiempo de pemanencia en esa página será (o debería ser) cero patatero, supongo que también aparecerá como página dónde la gente abandona tu web, y otras consecuencias … pero supongo que en algunos casos es mejor eso que nada.

December 1st, 2007 by admin

Los 10 intentos testarudos de la informática.

Últimamente se ha hablado sobre los 10 errores tecnológicos más importantes de la historia, sobre los 10 peores productos de software de la historia, incluso no hace mucho me pasaron los 10 grandes fracasos del hardware (paso de ponerme a buscar).

El caso es que acabo de leer sobre un plugin para Firefox 3 que permite un objeto Canvas 3D accesible mediante Javascript. Y me ha hecho pensar cuantas veces se ha tratado de llevar el 3D a la web.

Y cuantas veces se ha intentado dar cancha al reconocimiento de voz. Y cuantas veces se ha intentado llevar internet a la TV (parece que finalmente será al revés, la TV en el ordenador a través de internet, y el media center cerca de la TV de verdad para verlo en grande desde el sillón). Y cuantos sistemas de identificación únicos (21 comentan) …
Pues ¿Qué pensabais que lo iba a publicar yo? A ver quién se curra un listado de los 10 intentos más testarudos de la informática en general.

November 29th, 2007 by admin

Análisis a Google Analytics

He creado un subdominio secret.topsecret.tld y he realizado diferentes accesos para testear Google Analytics. Estas son mis conclusiones:

¿Funciona Google Analytics en tiempo real?

No. Entro, salgo, espero, refresco, y no aparece mi visita.

La prueba se hizo sobre las 14h. Españolas, y la visita se reflejó sobre las 17h. lo cual tampoco concuerda con la media noche de ningún huso horario “lógico”.

Si elimino un filtro ¿Aparecen las visitas que se hicieron y fueron filtradas?

Sí, aparecen de nuevo. Así que no puedes ir poniendo y quitando el filtro de tu propia IP cada vez que esta cambia, no sirve de nada.

¿Cómo se mide el tiempo de permanencia de una visita?

Esta es una pregunta bastante interesante que me hacía desde hacía tiempo. Los sistemas basados en analizar logs no saben cuando te marchase de la página, solo saben cuando solicitaste otra, pero esto también pudo ser en una pestaña, con lo cual, sus datos son medias y especulaciones. Sin embargo, Google Analytics está basado en Javascript, y tiene acceso al evento onUnLoad, con lo cual esperaba que sus datos fueran más exactos y reales.

Esto es especialmente importante para páginas con mucho contenido, que puede tardarse varios minutos en leerse, y para páginas con mucha funcionalidad basada en AJAX dónde el usuario puede pasar varios minutos sin haber recargado la página que contiene el código de Analytics.

La respuesta es: Ni puta idea. Porque el tiempo que midió no coincide, ni con el tiempo que existió esa pestaña, ni con el tiempo que estuvo en primer plano, ni con el tiempo que estuve interactuando con ella (haciendo clicks en ciertas zonas que se recargan con AJAX, no sobre espacio en blanco como un bobo).

Otras interesantes preguntas que se desprenden son: Dado que el Javascript se ha vuelto tan poderoso y puede un objeto nativo ampliarse con funciones definidas por la página, ¿Intercepta Analytics las peticiones AJAX para contarlas como páginas visitadas? Si se basa en el lanzamiento del evento onUnLoad para calcular el tiempo de visita, ¿Cuanto dura mi visita si me dejo la pestaña abierta y me piro a jugar un partido de Tenis?

Las respuestas son: No, en ningún momento me ha aparecido como visitado un script PHP que sea ejecutado mediante AJAX. Y como he dicho antes, no tengo muy claro cómo tantea el tiempo que ha durado tu visita.

November 27th, 2007 by admin