Men sana in corpore insano.

El lunes cumplí 31 años.

El martes y el jueves ha habido huelga de autobuses, así que me he venido andando al trabajo. Como ha coincidido con mis días de piscina, la mochila ha sido bastante pesada. A pesar del fresco que hace, he llegado semisudado y ligeramente agotado. Culpo a la mochila, porque cuando estoy de viaje, anda que no pateo, y me alimento mucho peor, y aún así aguanto bien el tirón. Pero los hechos son los hechos.

Saber idiomas esta bien, bueno, estaría bien si los supiera, pero esta vida tan sedentaria …

De joven hacía bodybuilding, aerobic, y salía a correr con unos colegas. Ahora hemos hecho unos compis del trabajo un mini-concurso (de broma) de dominadas, y quién más se haga gana una tableta de chocolate. Ejem … me hice 2, vale que las vigas en H no son la mejor agarradera, pero es triste de todos modos.

March 4th, 2008 by albinworld

Relaciones : Vistas vs Trigers

El título puede resultar raro pero es que la idea -reconozco que- es un poco rara en sí misma.

En resumidas cuentas, para no complicarlo más de lo necesario, … ¿Creeis, o en qué circustancias creeis, que puede ser ventajoso tener una tabla con el resultado de una vista, para consultarla en lugar de consultar la vista?

Es decir, tener un conjunto de tablas relacionadas, con un triger que cuando sucede algún Insert, Update, o Delete,  vacían una tabla común y la rellenan con el resultado de la relación de estas tablas.

Principalmente me saltó la duda porque tengo una tabla de Municipios, una de Provincias, una de Paises, y una de Comarcas, lógicamente todas relacionadas entre ellas, y no son datos que cambien a menudo, como mucho añadimos algún municipio de vez en cuando, y me pregunto si tiene sentido estar consultando siempre una vista con todos sus inner join cuando el resultado es el 99.9% de las veces el mismo … y me planteaba que t_Municipios incluya sComarca, sProvincia, sPais y se rellenen con un Trigger …

February 27th, 2008 by albinworld

No me trata mal Google

eh! qué sorpresa … no me trata mal Google, y la verdad que le debo agradecer un gran porcentaje de visitas.

posicionamiento

January 31st, 2008 by albinworld

La paradoja del cumpleaños II

Curiosa entrada en Microsiervos sobre las posibilidades de que dos personas en un mismo grupo compartan cumpleaños. Personalmente conozco un caso aún más curioso. En la empresa dónde trabajo, trabajan dos personas que nacieron el mismo día, del mismo mes, del mismo año, vivieron en la misma calle, estudiaron en el mismo colegio (lo cual es relativamente lógico), fueron al mismo instituto, y ahora como he dicho trabajan en la misma empresa. Toma esa. A ver cuantas personas hace falta “arrejuntar” para que sea probable que esto suceda.

January 31st, 2008 by albinworld

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 albinworld

Mi Wordpress olvida el theme configurado

Miro estadísticas, veo un batacazo de visitas, y pienso, ya se ha vuelto a desconfigurar… por la razón que sea, el Wordpress olvida que mi theme es “AlbinWorld” y cree que es “Default”, al final me vaciaré la carpeta default y copiaré mi theme allí … a ver si tiene huevos a seguir sacando el diseño que viene de fábrica … hombre, tardé en hacerme el ánimo de cambiarlo, pero eso no le da motivos para negarse a tener un nuevo aspecto.

January 27th, 2008 by albinworld

Enlace desde la Wikipedia

Lo hice con los dedos cruzados, pensando que quizás lo considerarían oportunista y que me quitarían el enlace. Lo hice a sabiendas que no me daría PageRank porque los enlaces son “nofollow”.

Aunque solo representa un 2.5% de las visitas, me parece que bien mereció la pena, porque son visitas de 20 páginas y más de 10 minutos. Esta claro que una persona que conoce la Wikipedia, y que realmente la utiliza como fuente de información, es una persona con ganas de investigar y aprender sobre ese tema.

January 25th, 2008 by albinworld

Dominios .es con ñ

Es mucho decir… digamos que puedes usar carácteres no ASCII (midomiño.es) y los DNS los trasnforman en una secuencia ASCII (algo como xn--midomi-123o.com), pero no únicamnte a nivel interno, sino que el usuario aprecia -en condiciones normales- una especie de redirección, a efectos visuales, una transformación entre lo que él ha escrito y lo que queda escrito mientras navega la web.

Útil entonces para simplemente prevenir que una persona busque tu web con ñ (en el caso en que proceda) y evitar que se quede sin encontrarte … pero no muy estético.

Salvo, en Firefox, si haces lo siguiente, claro, que no puedes ir a casa de todo el mundo a decirle que lo haga, y ya sabemos que el usuario lego ni si quiera usa Firefox.

Escribes en la barra de direcciones “about:config” y buscas algo con el término “whitelist”, entonces añades un registro “botón derecho > nuevo > lógico” con los valores “network.IDN.whitelist.es” y el valor “es”.

Los que tienen I.Explorer 7 ni podrán acceder …

Algunos ejemplos simpáticos.

January 25th, 2008 by albinworld

Un Post tendencioso.

En estos momentos, el 10% de las visitas que llegan al blog de gramática alemana, son visitas que buscan información del proyecto rosen, un website viral de Audi para su nuevo A4, que simplemente reseñé porque durante unos segundos habla un presunto científico en alemán pausado. Lógicamente, el resto del weblog, incluso posiblemente ese post, les resulta indiferente, pero si no prestas buena atención a las estadísticas, pues te puedes llevar una falsa sensación de éxito que no corresponde.

En fin … lo que son las cosas. A partir de mañana hablaré en Alemán de Bridney Spears, y otras Celebrities (léase golfas) y voy a triunfar en visitas … es broma.

January 24th, 2008 by albinworld

Hace tiempo que debí hacerlo, segundo asalto.

Después de estrenar hace un mes el nuevo look para el blog, llegan ahora el resto de las secciones. Y quién sabe cuando tendrán un contenido más serio, o si es serio el contenido que tienen … en fin, poco a poco.

January 24th, 2008 by albinworld

La técnica y la creatividad

Aunque la persona que ha dicho esta frase es una modista, creo que nos podemos sentir bastante identificados al leerla.

La técnica condiciona la creatividad.

Cuantas veces, el saber cómo hace una cosa, o el trabajo que implica realizarla, se ha optado por otra solución…

January 17th, 2008 by albinworld

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 albinworld

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 albinworld

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 albinworld

Spam obcecado

Es curioso, pero tengo un post en otro blog que:

a) es el único post en el que tratan de poner spam como comentario

b) siempre es el mismo spam

y me pregunto

a) porqué ese post?

b) porqué Askimet no se lo aprende de una vez por todas?

January 4th, 2008 by albinworld

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 albinworld

El abandono de Netscape - Recomendación de libro

No quiero decir muerte, por aquello de “siempre estará vivo en nuestros corazones”.

Y no voy a repetir la noticia que seguramente habeis leido.

Quiero aprovechar para recordar a todos los nostálgicos de Netscape que existe un libro bastante interesante, y traducido al español, titulado “The new new thing” dónde se relata la vida de Jim Clark, fundador de Silicon Graphics, y Netscape.

December 29th, 2007 by albinworld

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 albinworld

Hace tiempo que debí hacerlo.

Y no me refiero a actualizar a Wordpress 2.3.1. Sino a quitar el Default Theme y hacerme uno.

La verdad que, cuando le coges el truco, y no cuesta mucho cogérselo, se hacen relativamente rápidos. Este me ha costado menos de tres horas. Me costó mucho más hacerme un diseño que me gustase.

Lo siguiente, o uno de los próximos pasos, es hacer limpieza de entradas, y dejar solo cosas serías.

December 22nd, 2007 by albinworld

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 albinworld