Archivo para Enero 2009
Pro bono
Esta mañana leí Europa reconoce el mal estado de la Informática en nuestro país (vía), aunque no me sorprendió nada –los tengo luego de alumnos– me entristeció un poco. Siempre consideré que la informática en los institutos –que no en ciclos formativos– era más que pobre, con asignaturas que repetían hasta tres veces lo típico de MS Word, MS Excel, MS Access y un poco de gráficos o multimedia. Es decir,a demás de reiterativo y de “academia de Microsoft”, sólo se enseña/ba la informática como “herramienta” –con un enfoque bastante naïf– y no como “ciencia”.
Hoy también recordaba una frase de Obama en su discurso:
Estamos viviendo la paradoja de elevadas tasas de paro cuando hay mucho trabajo por hacer.
Hoy ví una tras otra la series Eli Stone y luego Boston Legal, en ambas trataron el tema del pro bono publico, una obligación ética que tienen los abogados (al menos los de EEUU) pero que no es muy común en otras profesiones. Aquí estamos muy acostumbrados a quejarnos del mal estado de la informática, de los malos salarios –incluso en la universidad– y muchos optan por exigir regulaciones o incluso llegan a la locura de poner sitios webs para desaconsejar el estudio de la informática.
País de quejicas y cómodas falacias… entre los que me cuento.
Puedo perder horas escribiendo y analizando datos para mi blog, pero no me dediqué seriamente a las actividades profesionales pro-bono (aunque sí dí muchas conferencias y clases en institutos sobre software libre). Así que ya es hora de empezar a poner el hombro un poco.
Desde ahora asumo un compromiso, dedicaré como mínimo dos o tres horas mensuales para dar alguna clase de informática pro bono en bachillerato o ciclos formativos en Palma o alrededores. El profesor o preferentemente el jefe de estudios [*] me puede contactar en gallir[arroba]gmail. com o gallir[arroba]uib.es. Negociaremos el día, hora y tema (preferentemente relacionados con sistemas operativos, multiprogramación/concurrencia, lenguajes dinámicos, desarrollo web, software libre, …).
Animo a todos los profesionales informáticos que me lean que hagan lo mismo –y que esos colegiados exijan que sus colegios obliguen o recomienden y organicen estas actividades pro bono–. Ya está bien de tanto lloriqueo y de hacer tan poco, incluso en esos temas que presuntamente dominamos y formamos parte de la “elite”.
[*] Podría servir para cubrir bajas sin sustituto.
Ley de Kerensky
Hoy a la tarde, después de escribir más de una hora sin darle al botón de “Guardar borrador” [sí, imbécil titulado] perdí un cacho de apunte que estaba acabando. Ya venía escaso de ideas y motivaciones, pero eso me quitó hasta las ganas de tener un blog (no es nuevo el sentimiento).
Pero un par de horas después concí a la recién parida ley que justifica este boboapunte para que el blog sobreviva un tiempo más –a ver si se me quita la sequedad y desgano–:
Al final todo invento tecnológico acaba sufriendo las modificaciones necesarias para ver tías en pelotas.
En inglés sonaría bastante bien:
Given enough time every new technology will be accordingly adapted to watch naked girls.
Genial el tío. Yo también estuve presente
¿A quién daña la estulticia?
Se puede ver en la portada de esa infame web:
Testimonio ganador del mes de diciembre
Me lo contaron en el colegio, entre y me bajé películas, me entraron virus y me tuve que cambiar el cpu porque los virus se metieron en el procesador, no os bajéis cosas, son gente que pone cosas malas dentro de los archivos y te roban tus datos, tus fotos, y todo!!!! Se legal FACILMENTE!!!
Lo cuenta con más detalles David Bravo. Los que se han creído semejante tontería… ¿son los intelectuales especialistas? Más bien no tienen idea del tema, ni de leyes, ni de P2P, ni de ordenadores, ni de la mínima rigurosidad. Pos i fuese poco, hasta ponen en su portada un HOYGAN de libro (o de Yahoo Answers).
No dejan de hacer el ridículo día tras día, lo malo es que son “nuestros dirigentes” y están gastando nuestros dineros para tratarnos como imbéciles al mismo tiempo que demuestran su ignorancia. Relacionado: Es que soy de letras… y estaba en Internet y ¡Lista de Ministros de Cultura de España… Este país tiene un problema!
Es que soy de letras… y estaba en Internet
Después de la pifia bestial en su “Experimento” (vaya paradoja, los experimentos los hacen los de “ciencias”) pusieron una errata:
Este cálculo erróneo ha sido difundido por Internet desde hace unas semanas y ya fue objeto de una reflexión de Rosa Montero en una columna titulada ‘El tópico’, que apareció también en la última página el 23 de diciembre de 2008, y en la que la escritora subrayaba el éxito que estaba teniendo en la red a pesar de que ‘la cuenta está mal hecha’.
![]()
Es la disculpa típica de los “escritores serios”, escriben basura pero luego le echan la culpa a Internet… para poder seguir diciendo que en Internet hay sólo basura.
No sé qué “Internet” ven estas señoras, pero en la “mía” no tienen mucho éxito esos bulos de ignorantes. Será que la visión que tenemos de Internet en realidad –como en todas las cosas– responde a nuestra perspectiva, inteligencia, intereses y amigos. Es como ir a visitar el Red Light District en Amsterdam y luego escribir que Holanda es muy decadente y lleno de putas.
Bueno, tampoco conozco mucha gente que diga eso, quizás sólo lo hagan los puteros. Sin alusiones.
No sé por qué me meto tanto con estas cosas. Hace poco más de una hora me llamó un amigo mío, periodista de los “tradicionales” muy conocido y me dijo:
Ricardo, deberías dejar de criticar a los “escritores”… te explico… no es que no tengas razón, es que somos una especie en extinción y deberiáis cuidarnos y mimarnos como a una tribu del Amazonas de la que sólo quedan 12 personas.
Luego me contó que quizás veamos a algún medio importante que no saque periódicos durante tres días… también me dijo que es posible que desaparezca. Pero no se refería a Público, donde han relevado a Nacho Escolar de director. Mis felicitaciones a Nacho por el enorme trabajo hecho [*]. Aunque cada vez me gustaba menos la parte política de Público –parecía un pasquín del PSOE escrito por progres barbudo de salón con TV de plasma–, sus páginas de ciencias, cultura el apoyo explícito a la cultura y software libre era todo un aire fresco y renovador en los periódicos nacionales.
[*] No debe ser nada fácil montar un periódico nacional, debe ser tarea inmensa. Y hacerlo con sólo 32 añitos –un par de años más que Cebrián cuando fundó El País con Polanco pero 30 años más tarde– tiene muchísimo mérito.
Es que soy de letras
Me entero por este comentario de Mankel que se encargó de divulgarlo (gracias), Almudena Grandes vuelve a las andadas. Escalofriante, todo un discurso hiperdemagógico montado a partir de un bulo, toda una presunta clase de matemáticas de alguien que no sabe hacer divisiones básicas. Todos cometemos errores en los cálculos, pero antes de enviar el artíuclo a un periódico tan importante podría haber usado la calculadora que propone usen los lectores para verificar sus cuentas ante la magnitud absurda de los resultados que tenía. Además agravado por el hecho que no le saltaron las alarmas generadas por el mínimo de escepticismo requerido, ni que haya leído el artículo de una colega en el mismo periódico unos días antes.
Parece que en este país para ser un “intelectual” reconocido y premiado no sólo hay que ser ignorante de ciencias [básicas] sino que hay que presumir de ello.
Por eso me da escalofríos cada vez que leo a esos mismos “intelectuales” reclamando que se enseñen más humanidades y menos ciencia. Parece que no se dan cuenta de su ignorancia, ni de que la ciencia es fundamental para entender al mundo (tal como evidencia este artículo). El problema es bastante general, basta mirar como en las carreras de magisterio se preocupan fundamentalmente de los “conocimientos de métodos de enseñanza” (i.e. pedagogía) pero muy poco sobre las “ciencias”.
La teoría de la portada
Este es uno de los momentos que suelo despotricar a los responsables de El País Digital por no permitir comentarios en sus artículos. Al menos cuando son de opinión y hablan de gente de carne y hueso que podrían responder en el mismo sitio (y creo que mejorarían mucho los artículos). Pero en fin, afortunadamente tengo un blog donde contestar, aunque no me lea ni mi familia.
Javier Sampedro en su artículo de El País Una portada que no podrá rechazar habla del Menéame y de Digg. Acaba con una curiosa como interesante teoría sobre el “porqué se vota a la noticia”:
Eso implica que la gente no manda las noticias que le interesan, ni vota por las que le gustan. Manda las que cree que les van a interesar a los demás, y vota por las que supone que les gustan a todo el mundo. Esa portada no es un promedio de lo que le interesa a cada lector. Es un compendio de sus prejuicios sobre los demás.
No estaré de acuerdo en generalizar así –sobre todo sin haber hecho una mínima encuesta– pero debo admitir que el caso se da, de hecho hay largos debates y flames sobre ello casi cada día. Lo que pasa es que nosotros le llamamos karmawhorismo.
Es interesante porque es novedoso, no dudo que en los periódicos serios como El País no se elige la portada pensando en que van a gustar más a sus lectores. Tampoco se escribe o elige tema, supongo, pensando en atraer o contentar a la audiencia. Esos prejuicios son cosas de eso que llaman 2.0
Un par de matizaciones “técnicas”
Lo de “enterrar” no es originario de Digg, es de Menéame, las “descartadas” por los votos negativos. Al principio en Digg lo hacían manualmente vía los avisos de “reporte de problemas”. En Menéame a eso lo convertimos en un voto negativo para mover las noticias a otra cola secundaria y así dejar más visibles a las pendientes. Es el único objetivo, en Menéame las enterradas descartadas se pueden seguir votando, pueden volver a pendientes e incluso salir en portada, la única diferencia es que hace falta un clic más.
La otra matización. Supongo que en Digg hacen lo mismo que en Menéame, trabajar y mejorar los algoritmos para poder evitar controlar los “abusos” de grupos minoritarios (o “endogámicos”) pero muy activo que pueden llevar a portada los que les interesa a ellos, incluso a monopolizar la portada con las del gusto personal de una minoría usando trucos y tretas de las más variadas (no podemos pedir DNI en la boca para votar). La diferencia es que la filosofía de Digg (como de Reddit) es que esos algoritmos deben ser secretos para evitar que los puedan engañar.
A nosotros eso nos parece una chorrada error conceptual más importante que la “seguridad por oscuridad”. Por eso seguimos la filosofía del software libre y de los expertos de verdad en seguridad, lo mejor es que sean públicos, además de la transparencia y confianza mínima que tienes que ofrecer –obligada en nuestra cultura, no hubiésemos aceptado de la misma forma que aceptan a Digg los anglosajones– es la forma de detectar los errores y mejorarlos. No nos ha ido tan mal, pero cuesta trabajo. Aunque el código está disponible para controlar, debemos invertir esfuerzos en explicarlo de forma simple para los que no quieren mirar el código (todos menos unos pocos frikis).
Los algoritmos no definen tendencias ni temas, tampoco tenemos –ni creo que lo tenga Digg o Reddit– intención de usarlos para eso. Se trata simplemente de evitar el spam, el predominio de unos pocos y de asegurar un mínimo de “fair play”. A veces fallamos por defecto otras por exceso, es lo que necesita corrección y mejora . Por ejemplo me enteré de ese artículo por los siguientes logs del servidor:
Jan 10 23:34:43 eli1 : Meneame, forbidden due to overflow to the same site (xxxxxx): http://www.elpais.com/articulo/panorama/portada/podra/rechazar/elpepusocdgm/20090111elpdmgpan_8/Tes
Jan 10 23:36:15 eli1 : Meneame, forbidden due to overflow to the same site (xxxxxx): http://www.elpais.com/articulo/panorama/portada/podra/rechazar/elpepusocdgm/20090111elpdmgpan_8/Tes
Jan 10 23:40:35 eli1 : Meneame, forbidden due to overflow to the same site (xxxxxx): http://www.elpais.com/articulo/panorama/portada/podra/rechazar/elpepusocdgm/20090111elpdmgpan_8/Tes
Jan 10 23:42:16 eli1 : Meneame, forbidden due to overflow to the same site (xxxxxx): http://www.elpais.com/articulo/panorama/portada/podra/rechazar/elpepusocdgm/20090111elpdmgpan_8/Tes
Jan 10 23:42:39 eli1 : Meneame, forbidden due to overflow to the same site (xxxxxx): http://www.elpais.com/articulo/panorama/portada/podra/rechazar/elpepusocdgm/20090111elpdmgpan_8/Tes
Jan 10 23:43:59 db2private : Meneame, forbidden due to overflow to the same site (yyyyyyy): http://www.elpais.com/articulo/panorama/portada/podra/rechazar/elpepusocdgm/20090111elpdmgpan_8/Tes
Jan 10 23:46:23 eli1 : Meneame, forbidden due to overflow to the same site (xxxxxx): http://www.elpais.com/articulo/panorama/portada/podra/rechazar/elpepusocdgm/20090111elpdmgpan_8/Tes
Jan 10 23:47:57 eli1 : Meneame, forbidden due to overflow to the same site (yyyyyyy): http://www.elpais.com/articulo/panorama/portada/podra/rechazar/elpepusocdgm/20090111elpdmgpan_8/Tes
Jan 10 23:49:11 eli1 : Meneame, forbidden due to overflow to the same site (yyyyyyy): http://www.elpais.com/articulo/panorama/portada/podra/rechazar/elpepusocdgm/20090111elpdmgpan_8/Tes
Jan 11 00:08:25 eli1 : Meneame, forbidden due to overflow to the same site (yyyyyyy): http://www.elpais.com/articulo/panorama/portada/podra/rechazar/elpepusocdgm/20090111elpdmgpan_8/Tes
Jan 11 00:09:31 eli1 : Meneame, forbidden due to overflow to the same site (yyyyyyy): http://www.elpais.com/articulo/panorama/portada/podra/rechazar/elpepusocdgm/20090111elpdmgpan_8/Tes
Jan 11 00:12:31 eli1 : Meneame, forbidden due to overflow to the same site (yyyyyyy): http://www.elpais.com/articulo/panorama/portada/podra/rechazar/elpepusocdgm/20090111elpdmgpan_8/Tes
Jan 11 00:13:39 eli1 : Meneame, forbidden due to overflow to the same site (yyyyyyy): http://www.elpais.com/articulo/panorama/portada/podra/rechazar/elpepusocdgm/20090111elpdmgpan_8/Tes
Jan 11 00:13:56 eli1 : Meneame, forbidden due to overflow to the same site (xxxxxx): http://www.elpais.com/articulo/panorama/portada/podra/rechazar/elpepusocdgm/20090111elpdmgpan_8/Tes
A veces los controles van en contra de nuestros propios intereses
Nota: los xxxxxx e yyyyyyy reemplazan a los nombres de karmawhores usuarios que estaban intentando enviarla (finalmente lo han conseguido, pero no tocamos nada del “algoritmo”)
. La hora es UTC.
Segunda nota: JRMora le dedicó una viñeta al tema.
Los peor de los gilds de la edad media… “brought to you by SGAE”
Hace varias semanas, criticando a las pretensiones de privilegios especiales de “algunos colectivos” escribía (o una versión más extensa y “académica” sobre esa historia):
Este poder de los gilds se fue perdiendo con el nacimiento de los estados europeos, especialmente notable en la República Romana y a partir del Renacimiento, donde se consideraba que los gilds limitaban el comercio y el ejercicio profesional. [...] Lo que en un principio surgió como una asociación que promovía la “libertad ciudadana” que marcaría los inicios de lo que hoy conocemos como profesión definiendo estándares de conocimiento y capacidad, responsabilidad social y códigos de funcionamiento social y ayuda mutua se convirtieron en grupos de élites excluyentes, sostenedores de monopolios, lobbies políticos poderosos, fijación de precios y cuotas. [...] No quedan muchos documentos sobre la historia de los gilds, salvo en los de Derecho Romano. Éste limitaba el poder los gilds bajo la teoría que debían estar sujetos a la “lay natural”, y en casos muy específicos mencionados en el Digest 3.4.1
La historia nos enseña que cualquier privilegio que se le otorgan a grupos sociales acaban siempre en abusos. Los abusos de la SGAE con el canon y sus métodos de cobro y espionaje son ya bien conocidos. Pero hay otros que aunque siguen la lógica del empeoramiento de los abusos anteriores son pocos conocidos, o ignorados (especialmente por los que deberían velar que eso no ocurra).
Sino basta leer una tremenda historia: como me has criticado en tu blog no te dejeremos organizar un concierto, aunque pagues y cumplas los procedimientos más arbitrarios que te pongamos. Alucinante, pero eso –que seguranmente es ilegal además de increíble– es lo que acaba de hacer la SGAE aquí en Mallorca. Suena sensacionalista, pero no exagero nada: Consecuencias del meneo, Consecuencias del meneo – Parte II (vía Consecuencias del meneo criticando el canon de la SGAE: un concierto bloqueado).
El cierre de ADN.es
Hace unas horas me enteré del cierre de ADN.es. Aunque en este caso pertenece a una gran empresa que controla muchos medios –y hasta premios, dicen– también me entristeció (y no tengo relación alguna) porque se pierde una empresa del entorno, y los puestos de trabajo buenos profesionales (que no dudo lo superarán muy rápido). Es una muestra más de lo difícil que es hacer negocios en Internet, sobre todo en este país. No se sólo una cuestión de la crisis actual, pero tampoco es lo algunos dicen de costes de servidores. No es lo más costoso, ni de lejos, siempre lo mayor es el gasto en personal (he leído que el coste anual de ADNS.es supera los dos millones de euros al año).
El problema de fondo, que se repite, es la muy mala situación de la publicidad en Internet en España.
Comparado con los volúmenes relativos que se mueven en EEUU y países del entorno, es insoportable por paupérrimo. Por ejemplo en Menéame hemos podido aguantar todo este tiempo sólo porque hemos sido extremadamente conservadores con los gastos –no tenemos ni oficina física– y le hemos dedicado muchísimo tiempo “gratis” además de la colaboración desinteresada de la gente. Si hubiésemos tenido que pagar sólo un salario razonable de programador y un diseñador ya hubiésemos estado agobiados. Si esto pasa con un sitio que no genera contenido propio y que se nutre de la colaboración de sus usuarios, mantener un sitio de contenidos propios con profesionales pagados como tocan es casi un acto heroíco.
Algunos achacan este problema a que AdSense tiene más del 50% del mercado publicitario de Internet en España –factura más que Microsoft en España en todas sus ventas– y sus ventas de anuncios bulk. Puede ser parte del problema, pero creo que hay algo más de fondo: el conservadurimo y la falta de vista de las empresas a la hora de invertir en publicidad, pero también del propio mercado y las agencias publicitarias que en una gran parte actúan sólo de intermediarias –quedándose con un buen porcentaje–. Estas últimas han fallado porque están muy acostumbradas a jugosisímos contratos y seguramente les parecía que la publicidad en Internet no valía la pena por sus márgenes más ajustados. Así AdSense se encontró con un mercado casi sin competencia seria, y con su “democratización” de la publicidad tiró tanto los precios que benefician a corto plazo a los anunciantes, pero perjudica a los que generan software y fundamentalmnente contenidos.
A largo plazo no es sostenible y terminará perjudicando a todos. Si Planeta recoje sus trastos y empieza la retirada, ¿qué se puede exigir o criticar a los que lo intentan sin caer en demagogias de adolescentes con hormonas desordenadas obsesionados con “cancamusas” u obsoletos reclamos de “buhos” hechos para violarlos cuando convenía?
Dicho esto, no entiendo que un gigante como Planeta, que hace un año atrás parecía querer posicionarse como líder en Internet, haya tenido tan poca vista de cerrar uno de sus pocos sitios que generó interés. No será por falta de dinero, han tirado mucho más dinero en el coup d’estat en Vueling (cuando actualmente la aviación comercial es un negocio mucho más costoso y de alto riesgo).
En fin. Sólo unos privilegiados pueden tener canon, los demás que no somos considerados como “creadores culturales” –enanos y gigantes– tendremos que pelear duro. Como está claro que los gigantes son los primeros en replegarse cuando pintan malas, sólo nos queda hacerlo entre enanos [*] [**] y/o esperar que el mercado publicitario se blanquee de una vez y de finalmente el vuelco tantas veces pronosticado.
[*] Si antes no te masacra alguna parte de la blogocosa, escribidora y cool aunque improductiva, que a diferencia de los gigantes tratan a los enanos casi como delincuentes.
[*] Hablo en general, a pesar de las referencias a personas de baja estatura, no se trata de una auto alusión personal
Encontrando patrones en “entradas no controladas”
Actualización: modifiqué radicalmente el algoritmo de selección de HTML alternativos. Es más elegante y predecible, ya no funcionan con pesos sino fundamentado en múltiples colas ordenadas por la “diferencia de texto” usando el algoritmo de Levenshtein.
Hoy se cumplen dos semanas desde que escribí el último apunte. Como cada puente e inicio de vacaciones, estuve muy líado. Con Benjamí hemos quedado de acuerdo que cada seis meses introduciríamos cambios importantes en el Menéame, solemos aprovechar el inicio de las vacaciones de verano y las de navidades para concentrarnos e implementarlas en poco tiempo.
Para estas vacaciones teníamos planeado varias, entre ellas una reprogramación de la versión móvil del Menéame y la inclusión completamente automática de imágenes miniaturas de las webs enlazadas.
La programación de la versión móvil fue trabajosa aunque muy sencilla una vez decidido cómo se iba a hacer (subclases de “Link” y “Comment” con la sobrecarga de las funciones de “imprimir” -print_summary()–). Ojalá todos los desarrollos de web fuesen así de sencillos y programáticos.
Pero lo que más me obsesionó y me llevó mucho tiempo y neuronas quemadas fueron los ciclos de diseñar implementar y probar los algoritmos para detectar las imágenes candidatas y que valiesen la pena para generar e incluir una miniatura. Al final el programa funciona bastante bien y da muy buenos resultados.
Estuve mirando cómo se hace la selección en otros sistemas, aunque no encontré ninguno que sea totalmente automático, si hacen un filtrado para que el usuario seleccione –paso que queríamos evitar–. Analicé por ejemplo el código de Reddit, pero éste es muy simple, demasiado, naïve. Da muchos positivos (logos, publicidad, imágenes no relevantes…) y muchos negativos (por ejemplo por el coeficiente de aspecto que no puede ser mayor a 1.5, lo que por ejemplo no incluiría las fotos panorámicas que suele incluir 20 Minutos en sus noticias).
La complejidad –y lo divertido– de este tipo de programas es que no puedes conocer de antemano todas las “entradas” posibles, es increíble la cantidad de variantes que hay en la forma de incluir imágenes en el HTML –con sus distintas versiones–, dintinguir cuáles de ellas son de la noticia y cuál de otras –por ejemplo “noticias relacionadas”, cuáles son de publicidad o enlaces externas, cuáles son más visibles, etc. Esa es la parte complicada, pero también tiene una ventaja, no hace falta”precisión” abosulta en los resultados, unas pocas miniaturas de menos o más no molestan ni llaman la atención.
El primer paso fue analizar el HTML, encontrar todas las imágenes y elegir entre ellas a la mejor candidata. Para ello se toma primero en cuenta el tamaño si es que tienen especificado en la etiqueta IMG. Si no están completa pero tampoco son menores al mínimo y además no incluyen palabras como “ads” en el URL se marcan como candidatas.
// First filter to avoid downloading very small images if (($this->x > 0 && $this->x < 100) || ($this->y > 0 && $this->y < 100)) { $this->candidate = false; return; } if (!preg_match('/button|banner|\Wads\W|\Wpub\W|header|rss/i', $this->url){ $this->candidate = true; }
Luego se bajan cada una de esas candidatas y se completa la información de tamaño faltante, por lo que se vuelve a hacer un filtrado. Una vez calculado el tamaño de todas se elige a la mejor candidata basada en su posición en el HTML (las primeras tienen más peso), su superficie y aspecto (las más cuadradas y grandes tienen más peso):
$img->coef = intval($img->surface()/$img->max()); if (!$this->selected || ($this->selected->coef < $img->coef/1.33)) { $this->selected = $img; $n++; echo "<!-- SELECTED: ". htmlentities($img->url). " X: $img->html_x Y: $img->html_y -->\n";}
Pero los filtros anterior, aunque ya es bastante más sofisticado de lo que he visto no es suficiente ni mucho menos. Estos filtros dan muchos falsos positivos: imágenes de logos, publicidad insertada como imágenes (no como javascript), imágenes no relevantes (como índices de otras noticias, bastante habitual en medios digitales), etc.
El primer diseño lo que hacía era sólo permitir imágenes del mismo servidor. Como esto no era suficiente –muchos sitios incluyen imágenes de otros servidores de la misma red (como Yahoo de yimg.com), de Flickr u otros sitios de almacenamiento– tuve que agregar excepciones.
|| preg_match('/images\W|wp-content\W|upload\W|imgs\W|pics\W|pictures\W/', $this->url) || preg_match('/gfx\.|cdn\.|imgs*\.|\.img|media\.|cache\.|\.cache|static\. |\.ggpht.com|upload|files|blogspot|blogger|wordpress\.com|pic\./', $this->parsed_url['host'])
Aún así esto se convirtió en una pesadilla, cada día me encontraba con nuevas excepciones. Así que finalmente tuve que eliminar esas restricciones/excepciones y generalizar aún más el algoritmo: permitir imágenes de cualquier dominio, pero que no apareciesen en “páginas similares” al URL enlazado. La idea es analizar los enlaces hacia el mismo sitio, elegir un par de ellas, bajar el HTML y almacenarlos para comparar si cada una de las candidatas aparece en las páginas “alternativas”:
function check_in_other($str) {
if (preg_match('/'.preg_quote($str,'/').'/', $this->other_html)) {
echo "<!-- Skip: " . htmlentities($str). "-->\n";
return true;
}
return false;
}
Hasta aquí muy fácil, pero me encontré de nuevo con el problema de elegir qué páginas debería bajar y almacenar (en $this->other_html) para la comparación. La decisión no es sencilla porque de ella depende que el filtrado funcione. Así por ejemplo interesa –por ejemplo– bajar una noticia de la misma sección o categoría (el “template” será muy similar) y no bajar la página principal o el índice de categoría/sección que seguramente también incluyen la misma imagen relavente pero que harían que no fuese seleccionada.
Primero se aplican filtros básicos para ignorar enlaces que no aportan nada, cuyo URL es “demasiado similar” (los primeros 45 caracteres del URI son iguales) y también se tienen en cuenta sitios que usan “queries”:
if ( preg_match('/\.(gif|jpg|zip|png|jpeg|rar|mp3|mov|mpeg|mpg)($|\s)/i', $url) ||
(!empty($this->parsed_url['query']) &&
substr($this->parsed_url['query'], 0, 20) == substr($parsed_match['query'], 0, 20)) ||
(empty($this->parsed_url['query']) &&
substr($parsed_match['path'], 0, 45) == substr($this->parsed_url['path'], 0, 45)) ||
preg_match('/feed|rss|atom|trackback/i', $match[1])) {
continue;
}
Pero luego de eso me volví a encontrar el mismo problema que con las imágenes, ¿cómo seleccionar los dos “mejores”? Volví a recurrir al mismo truco de asignar pesos según unas pocas características, similitud en el URI entre el origen y las enlazadas:
// Assign weights
if (!empty($parsed_match['query'])) {
if (empty($this->parsed_url['query'])) $weight *= 0.5;
elseif ($this->parsed_url['path'] == $parsed_match['path']) {
$weight *= 2;
if (preg_replace('/(.+?)=.*/', '$1', $parsed_match['query']) ==
preg_replace('/(.+?)=.*/', '$1', $this->parsed_url['query'])) {
$weight *= 2;
}
}
}
if (preg_match('#/[\d/]{6,}#', $parsed_match['path']) &&
preg_match('#/[\d/]{6,}#', $this->parsed_url['path']) ) {
// Decrease weight if the path has numbers which resemble a date
// of the type /aaaa/mm, /aaaamm or /aa/mm/dd
if (preg_replace('#.*?/([\d/]{6,}).*#', "$1", $parsed_match['path']) ==
preg_replace('#.*?/([\d/]{6,}).*#', "$1", $this->parsed_url['path'])) {
$weight *= 0.1;
}
} else {
$equals = path_equals($parsed_match['path'], $this->parsed_url['path']);
if ($equals > 0 && $equals < 5) {
$weight *= 1.1 * $equals;
}
}
$weight *= strlen($url);
De esta forma no se “ignoran” candidatas pero la probabilidad de elegir las dos mejores aumenta considerablemente. Esta técnica de asignar pesos es una sobre simplificación bastarda de conjuntos difusos –los matemáticos me matarían–, pero es muy efectiva en casos como este:
- Entradas desconocidas y de formatos variables pero que siguen unos patrones básicos.
- No se necesita precisión matemática, sino una buena aproximación.
Lo curioso de esto es que resultó como un flashback o una deformación profesional de algo similar que hice en 1991 para un proyecto del [viejo] aeropuerto de Palma de Mallorca. Yo estaba acabando mi PFC en el Dept. de Control de Procesos del Centro Atómico Bariloche (tenía un título pomposo: “Resolución de problema de asignación dinámica –scheduling– de recursos usando satisfacción de restricciones”) cuando nos visitó un profesor de la UIB que vio lo que estaba haciendo y nos propuso intentar solucionar un problema del aeropuerto de Palma usando técnicas similares (exactamente éste es el origen de mi historia personal en Mallorca).
El problema era que había pocas plazas de aparcamiento de aviones –71 si lo recuerdo bien–, cada una con caracterísiticas propias: tamaños y modelos de aviones, necesidad de pushback, con rampa o jardinera, con boca de combustible o necesidad de camión, con boca de bomberos o no, etc. A su vez cada empresa tenía preferencias de las más diversas: no usar pushback en algunos modelos de avión, boca de combustible en la plaza si la estancia era corta, aparcamiento cercano a otros aviones de la misma compañía, etc. Además cada comandante podía solicitar cambios o requermientos especiales según las condiciones del vuelo.
El problema era muy diverso, luego de probar la resolución con diferentes métodos optamos por asignar pesos “relativos” (significando “poco importante”, “importante, “muy importante”, “…) a cada requisito, sumar los pesos de los requisitos que cumplia cada plaza, ordenarlas y luego mostrarlas ordenadas a los responsables de la asignación. Un chapuza matemática, pero funcionó muy bien durante los meses del verano de 1991 que probamos en el aeropuerto [*].
Esta misma idea de la chapucilla de “pesos” me sirvió para resolver este otro problema. También funciona bastante bien, mucho mejor de lo que esperaba inicialmente, se puede ver en las de portadas o en esta otra como ejemplo curioso de que funciona (la imágen no se ve en la primera pantalla, pero está
) [**].
La reflexión seria es que este tipo de problemas –aunque no tan simples como los que acabo de describir– serán cada vez más frecuentes, sobre todo con datos masivos y “entradas inciertas” (o “no controladas”). Es algo bastante habitual en Google –su PageRank ordenado y elegante al principio evolucionó en complejos sistemas de “pesos”– y en empresas que tratan con muchos datos y cuya “precisión” no es lo más importante. Es un tema muy interesante en informática, lo mencioné hace un año y dos días (en el #7), otra vez hace 8 meses, y suelo insistir bastante que deberíamos estudiar y enseñar estos tipos problemas en las carreras informáticas.
Hay otra curiosidad relacionada con el tema del “tratamiento de formatos inciertos”. Hay muchos que ven al problema como casi intratable y pretenden que los humanos den mejor “formato”, y más “controlado”, a los datos que exponen en la red. Algo así como “hagamos que los humanos ordenen los que no podemos hacer automáticamente con los ordenadores”. A mí me parece una actitud o proyecto muy poco ambicioso, pero muchos –aunque no todos– usan un nombre pomposo para camuflarlo: “web semántica”.
[*] El sistema estaba formado por dos PCs, con DOS y programado en Turbo/Borland C++. Uno mostraba el mapa con el estado de cada plaza (y permitía editarlas), el otro era el “asignador” con la interfaz y la conexión con puerto serie a uno de los PDP-11 (que se usaban para registrar en tiempo real los eventos el mismo del que se obtenían los datos para las pantallas de anuncio) para obtener los datos de vuelos. Obtenía los estimados una día antes para preparar la lista de asignaciones “preferidas” del día siguiente, luego la modificaba en tiempo real con los datos que recibía del PDP-11 y/o de los responsables. El sistema al final no se usó más. A los pocos meses cambiaron los sistemas informáticos por otros montados sobre un mainframes Xerox –si mal no recuerdo– y al año siguiente se empezó la construcción del macro aeropuerto que tenemos ahora.
[**] Incluso pensé en programarlo en Python y ponerlo en marcha en Google AE para que de este tipo de servicios a los que lo necesiten. Pero luego pensé que es una chorrada, el código está disponible y es libre, el que lo necesite lo puede usar y/o adaptar mejor que yo.
