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

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 albinworld

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 albinworld

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 albinworld

¿Qué haces con las versiones antiguas de tu producto?

Asumes que tu software se piratea, asumes que no todo el mundo necesita todas las funcionalidades … y la decisión de ofrecer las viejas versiones como versiones gratis parece lógica. En cierto modo, es como tener un producto gratuito, y otro de pago con más funcionalidades.

Bueno, todo esto para comentar que está disponible Camtasia 3 ¡de gratis! como diría Barragán. A mi me gustó mucho este software cuando lo utilicé.

¿Qué no lo conoces? Pues te facilita capturar la pantalla mientras haces una demo, y luego editar el vídeo y ponerle cartelitos.

November 27th, 2007 by albinworld

Flickr Uploader 3.0 (beta)

Hombre! Ya era hora.

Mucho mejor. Empezando porque puedes poner muchas fotos en el área de trabajo, y si tienes que irte, y cierras la ventana, cuando vuelves te encuentras tu área de trabajo tal cual la dejaste.

Aunque poner títulos y descripciones es un trabajo árduo, y aunque su interface basada en Ajax lo pone facil, para lo que podría haber sido en otras épocas, se agradece que la aplicación de escritorio te permita subir las fotos ya ordenadas, aseadas, y con toda su información.

No tiene, como Picasa, manera de retocar las imágenes. Pero, a mi personalmente, me da igual porque nunca lo hacía.

Lo que me gustaría es poderlo utilizar con los Sets que ya tengo creados y que en su día no organicé por falta de tiempo y/o de ganas.

Yo tengo una cuenta Pro, la alquilé por capricho hace mucho tiempo, y aunque a veces no la uso durante meses, me encanta saber que la tengo ahí, para cuando la necesite, para compartir con la gente todos mis viajes y todas mis excursiones.

Y lo que no estaba bonito, es que un servicio tan bueno, popular, poderoso, y mantenido por una empresa tan grande, tuviera una chufa de programa para subir fotos. Vamos, que desmerecía.

Que es beta, no me importa, es cuestión de tiempo que se estabilice del todo, pero me ha alegrado ver que le han puesto interés en cuidar ese detalle. Aunque esto no salvará a mis acciones de Yahoo de estar en rentabilidad negativa.

A descargar!

November 25th, 2007 by albinworld

Ser, Estar, y … Haber

Lo he escrito originalmente en mi blog sobre Gramática Alemana en verdad es válido también para el inglés.

Tenemos asumido que en otros idiomas no existe diferencia entre ser y estar, pero estaba pensando el otro día cómo suele traducirse haber y me dí cuenta que en muchas ocasiones son estos tres verbos uno mismo en inglés.

Cuesta encontrar un ejemplo, porque en muchas ocasiones existe una traducción alternativa que evita discretamente esta curiosidad, como es el caso para preguntar si hay más cerveza en la nevera.

Do you have more beer in the fridge?
¿Tienes más cerveza en la nevera?

Pero podemos esforzarnos por provocar la necesidad de utilizar el verbo haber en nuestra traducción mental y entenderemos que hay, no entenderemos que está (aunque lógicamente lo está), la cerveza en la nevera.

There is more beer in the fridge.
Hay más cerveza en la nevera.

October 28th, 2007 by albinworld

Meme: Por qué escribo un blog

  • Porque en la vida real me comunico bastante. En el bus, en la piscina, enseguida hablo con cualquiera, le cuento el lado superficial de mi vida o hablamos del tiempo como suele decirse.
  • Porque a veces necesito contar las cosas, aunque no me escuche/conteste nadie, simplemente desahogarme, quién sabe quién acabará leyéndolo.
  • Porque algunas dudas nunca llegan a un foro, sino que encuentro su respuesta, y un blog es un sitio perfectamente válido dónde exponerlas, por si le sirven a otra persona.
  • Por motivos caducados, como las categorías para las que nunca tuve tiempo y a penas tienen entradas asignadas.
  • Porque había que tenerlo…

En general no parece haber un objetivo concreto, pero se pueden hacer estas afirmaciones anteriores.

Una buena pregunta también sería ¿Porqué escribo un meme? :o) Porque Juanjo me ha pasado el testigo … y ahora ¿He de pasar el testigo a alguien? Se va a notar que no tengo muchos amigos, bien pues a mi compañero Peter Parker y a mi hermano.

October 25th, 2007 by albinworld

Blog de Gramática Alemana

Le he cogido gusto a personalizar el Wordpress (aunque no se note en este blog) y la otra tarde en un ratico preparé un Blog dónde iré hablando sobre los “retos” que me encuentre durante este curso de alemán.

Me servirá para apoyar el proyecto principal, tanto a nivel de indexación, como de contenidos.

October 22nd, 2007 by albinworld

El Quick Time Player y sus efectos paranormales.

En general, es un player que siempre ha tenido comportamientos realmente curiosos. Por ejemplo, si tienes un navegador con un object reproduciendo un VR y solapas esa ventana con cualquier otra, al pasar el puntero sobre la zona donde está el QTPlayer escondido, el puntero cambia somo si realmente pudieras interactuar con él. También he tenido problemas de poderlo reproducir únicamente en el monitor principal (cuando habían dos monitores con dos gráficas, no desde que una gráfica puede tener dos monitores).

Pero el colmo ha sido que, si trato de usar el más que recomendable script de Granny Smith para activar objetos ActiveX, a veces pinta y a veces no pinta la barra inferior con los botones …
Realmente está siendo una odisea conseguir que aparezca el player activado, estoy por preguntar a Microsoft cuanto valen esos royalties y se los pago yo … ¿Qué les faltará dinero en la empresa?

October 11th, 2007 by albinworld

Personalizando el WordPress

Tal cual lo descomprimí, lo configuré, y lo he utilizado durante … una jartá de tiempo.

No serían más de las 15.00 horas cuando me ha trincado mi hermano, que ha contratado el hosting gratuito que comenté hace unos días, porque tenía el capricho de crear una web de chistes estilo “se abre el telón”, y me ha tenido ahí hasta las 21.30 horas que son, modificando el theme. Bueno, para no mentir, me ha dejado tomarme un sabroso helado de chocolate y nata a eso de las 19.15 horas, con derecho a pegar una meadita después -no mientras-. Nos quedan algunos flecos, y queremos poner algún plugin más a funcionar, pero … aún así me ha parecido un logro. No teníamos ni diseño, y los primeros bocetos, más que dar ganas de llorar, daban ganas de vomitar.

Total … que a veces, lo que no harías para tí, lo acabas haciendo para otros, pero ahora que lo tengo controladillo, no descarto personalizar un poco el aspecto de este blog.

Es más facil de lo que me pensaba. Tampoco es que pensara en realidad, simplemente temía instintivamente tener que comprender y modificar consistentemente las capas y estilos creados por otros, a saber qué retorcidas mentes han creado tan compleja estructura.

Los estilos originales, los he borrado directamente, y después, según veía las capas que aparecían, iba creando los estilos necesarios. He puesto capas de mi cosecha. He decidido no reutilizar algunos “id” que se reutilizaban. He capado el plugin de los votos para que no tirase su propio css y centrar así todos los estilos en mi hoja … en fin, que me he involucrado bastante a toquetear. Lo siguiente, quién sabe, … hacer mi propio plugin que haga alguna cosa trivial …

October 9th, 2007 by albinworld

MySQL - Exportando procedimientos almacenados al servidor de hospedaje (II)

Ya comenté hace tiempo cómo exportar un stored procedure al servidor dónde tienes contratado el hosting, requisitos: acceso directo al servidor MySQL. Pero qué pasa si has seguido mi consejo sobre Hosting Profesional Gratuito -o si de cualquier otro modo- has acabado en 1and1 -u otro Hosting Provider- dónde no se puede hacer semejante cosa …

Aunque “DELIMITER” es una palabra reservada a partir de MySQL 5.0, si utilizas PhpMyAdmin y tratas de ejecutar en la pestaña de “SQL”

DELIMITER $$
DROP FUNCTION IF EXISTS `newsletters`.`f_inGroup` $$
CREATE FUNCTION `f_inGroup`(nUser int, nGroup int) RETURNS tinyint(4) BEGIN
DECLARE yon TINYINT;
SELECT count(*) INTO @yon FROM t_usersgroups WHERE idUser=nUser AND idGroup=nGroup;
RETURN @yon;
END $$
DELIMITER ;

Te dirá que tienes un error de sintaxis en “DELIMITER”

Así que me he tenido que construir (no prometí que fuera muy usable) un pequeño fichero php:

$sql  = "";
$sql .= "DROP FUNCTION IF EXISTS f_inGroup";
mysql_query($sql, $dbLink) or die("Error :: ".mysql_error($dbLink)." :: ".$sql);
$sql  = "CREATE FUNCTION f_inGroup (nUser int, nGroup int) RETURNS tinyint(4) BEGIN n";
$sql .= "DECLARE yon TINYINT; n";
$sql .= "SELECT count(*) INTO @yon FROM t_usersgroups WHERE idUser=nUser AND idGroup=nGroup; n";
$sql .= "RETURN @yon; n";
$sql .= "END n";
mysql_query($sql, $dbLink) or die($sql);

¿Porqué funciona mejor esta solución? o simplemente ¿Porqué funciona? o ¿Qué te hizo pensar que funcionaría? (en este caso, gracias por no considerarme un desesperado que prueba cualquier cosa).

La necesidad de usar DELIMITER surge de separar lo que son consultas puntuales, de conjuntos de consultas. En verdad, la declaración de un Stored Procedure o una Function o un Trigger podría detectarse al encontrar un END que cierre el BEGIN con el cual empezó todo, pero como es costumbre en MySQL que exista un caracter que indique al parser “hasta aquí” pues se encontraron con este problemita, y se debió proveer una manera de establecer un segundo caracter (o conjunto de carácteres) que dijeran “punto final”.

Bueno, una vez entendido esto, esperas pacientemente a que una vocecita interna te diga “cuando haces un mysql_query no necesitas poner el punto y coma final, porque se entiende que cada ejecución de esa función es un comando por si mismo” entonces se enciende la luz de idea, ese momento mágico en que el sislogismo se completa sin ser conscientes del razonamiento intermedio, bien por el subconsciente, e imaginas cómo todo ha subido un nivel en una jerarquía imaginaria, y te dices “si no necesito un punto y coma para separar los comandos, ya no necesito un DELIMITER que indique el final del comando, y puedo usar el punto-y-coma tan tranquilamente para separar las instrucciones internas del Stored Procedure, Function, o Trigger. Pruebas, y cuela.

Y mientras escribes en tu blog, porqué el día parece más soleado, te das cuenta que seguramente hubiera pasado lo mismo de haber puesto el contenido de $sql en la pestaña de SQL del PhpMyAdmin … porque seguramente lo que hará es recuperar el contenido del TextArea y lanzarlo con un mysql_query … pero esa experimentación la haré otro día, para que no se pierda la curiosidad.

October 9th, 2007 by albinworld

Hosting Profesional Gratuito

Pues me he enterado que 1and1 quiere comenzar a ofrecer Hosting en España y quiere hacese con un capazo de clientes que pongan a buena prueba sus sistemas, así que está regalando dos años de hosting con registro de dominio incluido.

Hasta ahí la noticia. Ahora …

He convencido a unos cuantos buitres que tenía a base de Add-On Domains para que se registren y de momento me ha ido bien. Pero el link de login en la home lleva roto unos días.

Tiene panel de control propio (nada de Plesk ni CPanel) pero es completo y poderoso.

Tienen phpMyAdmin. Pero el servidor de bbdd no se deja acceder desde fuera, así que nada de MySqlQueryBrowser de casa al server, ni consola tampoco.

La base de datos no es localhost, sino que te dan un server (ej. db123.1and1.es) al cual debes conectarte, esto es meramente una curiosidad, el nombre de usuario, de base de datos, no son de tu elección, sino que te los asignan (ej. db223344 y dbo223344 respectivamente).

Los subdominios no necesariamente deben corresponder con una carpeta en el raiz, pueden ser subcarpetas de subcarpetas.

El precio de los dominios es realmente bajo.

A parte … si alguien controla un poco de Alemán, que eche un vistazo a 1and1.de y vea el precio que dan para VPS … flipante! aunque me pasó hace tiempo con una empresa alemana de este tipo que solo quería clientes alemanes, con lo cual, mi gozo se quedó en un pozo (frase que sin duda alguna debió poner de moda algún granjero zoofilo cuando se le cayó la gallina al pozo).

October 3rd, 2007 by albinworld

Etam - Newsletter - Ofertas

Bien por Etam, por ser una empresa que aprovecha internet para llegar a sus clientes, no solo mostrando parte de su catálogo, sino interactuando con ellos.

Me suscribí a su newsletter y casi todos los meses me llega alguna invitación a participar en un jueguecito donde me preguntan mi opinión, y participo en un sorteo.

La gran pregunta, es … con el dinero que les debe de costar el flash y el envío del newsletter (profesionalmente no lo valoro en menos de 6.000 euros) porqué el premio es tan … irrisorio (180 euros en el último caso).

October 1st, 2007 by albinworld

Hackeo WiFi

Listado de passwords por defecto de muchos muchos muchos pero que muchos routers.

Ya se sabe, el técnico de instalación de Ono te hace el agujero en la pared, te pasa el cable, te desempaqueta el router, lo activa, y se marcha … y ahí te quedas con tu red Wi-Fi sin encriptar y con los datos de acceso por defecto.

October 1st, 2007 by albinworld

Un diagrama gracioso de informáticos

“A mi me lo han pasado” frase típica cuanod llegué a este curro.

El diagrama.

September 24th, 2007 by albinworld

Visual Studio 2003 olvida guardar con codificación UTF-8

Ese ha sido mi problema durante … 3 años.

Configuraba el web.config para que las cabeceras indicaran como codificación UTF-8

<globalization requestencoding=”utf-8″ responseencoding=”utf-8″ />

Guardaba mis ficheros .aspx como UTF-8 y todo funcionaba ricamente. Pero a veces, abría un ASPX para hacer un cambio y al guardar, podía ser que siguiera siendo UTF-8 con firma, o puede que inconscientemente pasase a ser UTF-8 sin firma, con lo cual salían mal los acentos en la web … y tenía que volver a abrirlo, y hacer varios clicks (guardar como - pestaña guardar - guardar con codificar - decir que si lo quiero reemplazar - elegir la codificación - aceptar) … hasta que el otro día por fin encontramos DONDE COÑO se configura eso … ¡en el web.config! no lo hubiera pensado en la vida, que una característica del editor se configurase en un fichero del proyecto WTF!

<globalization requestencoding=”utf-8″ responseencoding=”utf-8″ fileencoding=”utf-8″ />

Bueno, llevo unos días probándolo y parece que es la solución … justo cuando parece que migraré a Visual Studio 2005 en cualquier momento …

Eh! qué pasa? en esta empresa somos así … a nuestro ritmo … que lo prueben otros primero, por si da cancer …

September 24th, 2007 by albinworld

Las rosas son rojas

Del libro “The Faerie Queene” de Sir Edmund Spenser que data de 1590 nada más y nada menos, se ha extraido popularmente el siguiente poema:

Roses are red,
Violets are blue,
Sugar is sweet;
And so are you

Este poema ha aparecido en repetidas ocasiones, sufriendo algunas modificaciones, a destacar una canción de un grupo escandinavo llamado Aqua

Roses are red and
Violets are blue
Honey is sweet,
but not as sweet as you.

Hace tiempo me hice mi propia versión, versión Geek.

Roses are #FF0000
Violets are #0000FF
and my love points to null
without you.

Fuente: Wikipedia

September 17th, 2007 by albinworld

Repasar Inglés - PodCast

Pues, no recuerdo cómo, pero encontré ESLPod (English as Second Language Podcasts) dónde puedes escuchar gratis diálogos en diferentes situaciones. Cada fichero MP3 consiste en un diálogo lento, un repaso al vocabulario y a las frases hechas, y finalmente el diálogo a velocidad normal. Luego, por un módico precio (10$/mo.) puedes acceder a la transcripción en PDF de cada PodCast.

Es lo bonito del Inglés, que como todos sabemos un poco, se puede explicar Inglés en Inglés, y tan ricamente, una web para todo el planeta.

Pero si explico Alemán en Alemán pues sería más absurdo que hacerle una paja a un muerto, así que yo seguiré con mi página de gramática alemana en Español, aunque su idea me gusta mucho, y me gustaría encontrar la manera de hacer algo similar, osea, la técnica está clara, la cuestión es encontrar quién me haga los contenidos, pueda gravar con calidad, y se pegue el curro de montar los diferentes trozos. Y todo por un bajo precio, pues yo no tengo visión de negocio y no le puedo pagar mucho.

September 12th, 2007 by albinworld

La Alberca, y la publicidad contextual

He estado en La Alberca, Salamanca y paseando por las calles, entre sus casas, miraba esa arquitectura tan bonita y tan peculiar, y miraba las tiendas establecidas en sus bajos, y pensaba … es lo mismo que tener un Blog y poner AdSense.

Ellos tienen un contenido que reclama a las visitas que sería la arquitectura, el paisaje, el embutido, … y tienen una venta para satisfacer tu natural necesidad de llevarte un recuerdo ya que has ido hasta allí, que en parte es contextual, como la cerámica, el propio embutido, y en parte no lo es, como las camisetas de frases graciosas, mantelerías, y objetos propios de cualquier mercado medieval …

August 23rd, 2007 by albinworld