Archivos de la categoría ‘software’

Miniaturas de imágenes, Shareaholic, Friendfeed y problemas con la base de datos

diciembre 23, 2008

Desde hace poco más de 24 horas está funcionando el sistema de imágenes miniaturas de cada enlace. La selección es completamente automática sin la mínima intervención de los usuarios (no queríamos dar todavía más trabajo). Por ahora éstas sólo se generan cuando una noticia entra en el “promote” (i.e. tiene karma más o menos alto y supera el mínimo para que sea analizado por el programa de promoción). Si véis noticias con poco karma pero con una miniatura es que estamos haciendo pruebas y ajustes al algoritmo de selección [*].

En pocos días agregaremos, poco a poco, miniaturas de lso vídeos de Youtube, Vimeo y los demás sistemas que tengan un API para obtenerlas.

[*] Diez o veinte años atrás hubiésemos dicho que se trata de un programa de inteligencia artificial, hoy sólo podemos decir que es un abuso desmedido de las expresiones regulares :-)

Shareaholic

Hace un momento nos escribió Jay Meattle, co-fundador de Shareaholic, para avisarnos que ha pedido de varios de sus usuarios han incluido al Menéame. Muchas gracias.

I had several users of Shareaholic request that Menéame be integrated into the add-on, and they got their wish today!

Shareaholic makes it easy for you to submit the web page you’re on to your favorite sharing or bookmarking service.  You also have the option to e-mail the web page directly to a friend.

Menéame en Shareaholic

Menéame en Shareaholic

Friendfeed

Es antigua pero no lo habíamos comentado. Friendfeed también nos incluyó desde el principio en su versión en castellano (las noticias votadas por un autor). Con la información que envía el Menéame en sus RSS, en Friendfeed también se visualiza la miniatura y la geolocalización de la noticia (si las tienen).

Menéame en Friendfeed

Menéame en Friendfeed

La base de datos

Ayer hemos tenido problemas con una veintena de noticias. De forma aleatoria y sin causa aparente fueron completamente eliminadas. Al final pudimos recuperar a todas desde un backup periódico de pocas horas atrás pero nos quedamos sin saber que había pasado. Lo único que habíamos hecho es agregar cuatro campos a la tabla de enlaes para guardar la información de las miniaturas, pero no tocamos nada del software que pudise afectar.

Hace unas horas hubo problemas con el URL de algunas noticias, no se guardaban al momento del envío. Hicimos un “repair” de la tabla de enlaces y todo parece correcto ahora mismo

mysql> repair table links;
+---------------+--------+----------+----------+
| Table         | Op     | Msg_type | Msg_text |
+---------------+--------+----------+----------+
| meneame.links | repair | status   | OK       |
+---------------+--------+----------+----------+
1 row in set (26.41 sec)

mysql> optimize table links;
+---------------+----------+----------+----------+
| Table         | Op       | Msg_type | Msg_text |
+---------------+----------+----------+----------+
| meneame.links | optimize | status   | OK       |
+---------------+----------+----------+----------+
1 row in set (2.52 sec)

Nuestro principal y único sospechoso por ahora es un bug de la configuración del Mysql y AppArmor en la Ubuntu 8.04 (que es la que usamos en el servido de base de datos) ya que nosotros tenemos modificado al menos un par de parámetros que están afectados (table_cache=1000 y max_connections=1000) . Disculpas por las molestias ocasionadas.

Penalización de “endogamia de votos”

septiembre 8, 2008

Desde hace unas horas está funcionando el nuevo “promote” (código fuente) que calcula y penaliza las “altas endogamias” (o afinidades) de votos entre usuarios. Así se evitarán que un grupo de usuarios se voten siempre entre ellos y puedan publicar las noticias más fácilmente.

La técnica es algo similar a la “diversidad” que usan en Digg –al menos así lo cuentan– pero en nuestro caso se usa directamente el karma que aporta cada usuario a una noticia y se aplicará a aquellos usuarios que votan a [casi] todos los envíos de otros usuarios.

La penalización consiste de un coeficiente entre 0 y <1  que se calcula al karma aportado por cada usuario. El coeficiente de afinidad representa el porcentaje de votos a los envíos de un usuario. Así en el último mes A votó un 30% de los envíos de B que obtuvieron muchos votos (aunque no haya salido publicada), los siguientes votos de A a B valdrán 0.7. Si en cambio votó al 90%, el voto valdrá 0.1 de su valor original –con un mínimo de 5–. Si en cambió no llegó a votar al 10% (por ahora, mientras está de pruebas) el voto no sufrirá penalización alguna.

Además de la ventaja fundamental de evitar “endogamias”, también penaliza a aquellos usuarios que votan “a lo loco” basado sólo en el título o autor del envío.

Pueden surgir problemas, como que requiera varias horas hasta que los coeficientes de cálculo se estabilicen, o que haya que hacer ajustes al promote por penalizaciones injustas. Estaremos muy pendientes de esto en los días siguientes.

Actualización (9/10 21 hs): Después de probar en parelelo durante casi 24 horas –casi no hay casos para comprobar–, lo mismo funciona para los votos negativos. El cálculo es similar pero negativos, es decir que el mínimo valor negativo que puede dar es -5.

Aclaración: No afecta al karma de los usuarios, sólo afecta al cálculo del karma total de las noticias. Aunque haya “afinidad” del 100% el voto siempre cuenta como positivo y suma karma según lo explicado arriba.

Nota: Para los que vayan a mirar el código fuente, la función que calcula la afinidad está al final, se llama check_affinity(). Puede verse como se aplica en el coeficiente un par de líneas más abajo desde donde es llamada la función (que devuelve un diccionario con los coeficientes para cada usuario).

[*] Sí, los hay, especialmente esos que usan foros –y mésenyers– para avisar que han subido noticias de sus sitios/foros/temáticas. Últimamente hemos detectado varios, es la motivación, para evitar estos “abusos” sin que nos obliguen a banear sitios o cuentas de usuarios.

Beta del Menéame v3

julio 11, 2008

Finalmente después de semanas de estrés. agobios, discusiones pruebas y correcciones ya podemos hacer pública para pruebas la tercera iteración del Menéame: beta.meneame.net.

El diseño lo hicieron y maquetaron Damián Vila y Benjamí, este pringao se ocupó de código y dar el coñazo a los dos. Pusimos tambień mucho esfuerzo en mantener la velocidad de carga y visualización de las páginas.

Pasamos los últimos días corrigiendo errores graves de visualización y usabilidad para IE, especialmente IE6 (incluso tuvimos que poner un fichero especial de hacks para el IE6) que representa más o menos un 16% de la audiencia del Menéame.

Aunque podríamos estar semanas perfeccionándolo, es hora de parar y que nos aviséis en los comentarios si veis problemas graves de usabilidad o visualización.

Si todo va razonablemente bien, lo pasaremos a “producción” a principios de la semana qe viene.

Qué hay de nuevo

En principio no queríamos cambiar la estructura básica. Pero con el tiempo nos dimos cuenta que la barra de la izquierda, con sus casi infinitas opciones, era prácticamente invisible a pesar que ocupaba la mejor parte de la pantalla. El objetivo era poner las noticias a la izquierda así darles más notoriedad y que sean más fáciles de leer en monitores pequeños o dispositivos móviles.

En la barra de la izquierda sí había unos enlaces importantes (enviar noticias, fisgona…) que debían seguir siendo relevantes, así que tomamos la decisión de ponerlas al lado del logo pero el mismo tiempo dar una imagen no tan tradicional y que al mismo tiempo “envolviese” mejor al megabanner superior. De allí la posición actual en diagonal. Además trabajamos en la cabecera para reducir al mínimo el espacio ocupado y que además diese más funcionalidad.

Las demás opciones de la barra de la izquierda las pusimos en el pié de página de las “página largas”, fundamentalmente los índices.

El otro objetivo importante era mostrar con más relevancia los comentarios más votados  y además mostrar en la misma portada las noticias más “populares” de las últimas horas. Así es que se hizo la barra lateral más ancha que además sirve para colocar el “robapáginas” de publicidad, que es lo más solicitado por los publicistas.

Aunque desde hace tiempo existe la pestaña de populares, esta no era muy visitada, y de hecho nos preguntaban muchas veces cómo hacer para ver esas noticias. Otros nos criticaban de que no lo hayamos hecho antes cuando es obvio. Había que darles más visibilidad, pero eso exigía una restructuración importante como la de ahora. Así, ahora  se muestran las más votadas en las últimas 24 horas pero ordenadas con una función que da prioridad a las más nuevas (un decay temporal). Usamos la misma técnica para ordenar los mejores comentarios, aunque en ese caso sólo se consideran los de las últimas 6 horas.

Siguiendo con la idea de ahorrar espacio vertical entre la cabecera y las noticias hemos reducido el espacio necesario para mostrar las meta y categorías que se están visualizando.

Aprovechando el espacio de la barra lateral también agregamos:

  • Las candidatas a ser publicadas –pero para votar con responsabilidad, recordad que el voto karmawhore o becerro está fuertemente penalizado :-) — en la página de pendientes. Esta información era accesible desde la pestaña “popular” en pendientes y también en el promote, pero poniéndolas allí damos una visión rápida.
  • Mapa de geolocalización de la noticia. Antes estaba incrustada en el texto, era muy pequeña y “molestaba” a la lectura. Ahora es más grande y a la derecha.
  • Comentarios más populares de la noticia. Cuando una noticia supera los 20 comentarios se le agrega una caja lateral que muestra ordenado los comentarios más valorados. El número de comentarios que aparecen en la caja depende del número de comentarios de la noticia (total/4 con un máximo de 25).
  • También agregamos la misma barra al nótame, allí también hay una caja con las notas más votadas (y más abajo la de comentarios).
  • La nube de etiquetas. Ya estaba en la versión anterior, pero ahora es más legible. Cuando se está en portada muestra las etiquetas más usadas –48 horas– en las publicadas, la nube de pendientes las etiquetas de pendientes.

Luego mejoramos o arreglamos varios detalles, entre ellos (me olvido de unos cuantos):

  • La referencia #0 –bastante usada en los comentarios para señalar al texto del envío– ahora se comporta igual que para las referencias cruzadas a otros comentarios. Es decir, mostrará un tooltip con el contenido.
  • El promote ya obtiene los datos de la base de datos (y valida correctamente).
  • Se agregó un ranking a cada usuario. Eso da una idea de cuántas personas tiene un karma superior. Así todos los que tengan 20 serán el #1, y los que tengan 6 –por ejemplo– también tendran el mismo ranking que todos los demás con el mismo karma. El ranking es visible en el perfil del usuario y también en los tooltips. Se actualiza al instante, es decir que si a alguien se le modifica el karma durante el día el cambio se refleja inmediatamente.

Sabemos que hay muchos otros detalles que mejorar y optimizar (o espacios que rellenar). Pero eso es parte de la evolución de esta versión –como las dos anteriores–, que esperemos tarde mucho en hacerse obsoleta, es como un parto y este ya es el tercero :-)

PS: Ojalá que para la siguiente iteración el IE6 ya no exista, en serio.

Novedades: votos a comentarios, anotaciones, cálculo del karma, promote, Amazon EC2 y fútbol

junio 26, 2008

Estos últimos días hemos hecho varias mejoras importantes (si fuésemos anglosajones diríamos algo como estamos realmente excitados). La principal es que los votos a comentarios son públicos desde hace unos días, se muestran en una ventana modal.

Votos de comentarios públicos

La idea de los votos a comentarios es para resaltar a los buenos comentarios y penalizar a aquellos que insultan o provocan gratuitamente. Al principio no pensábamos que hiciese falta hacer público los datos de estos votos, ya que hay suficientes controles para evitar los abusos de negativos y en general funcionan bastante bien.

Pero hay usuarios que abusan y votan negativo sólo para expresar su desconformidad con los argumentos expuestos, otros como “venganza”, esto generaba bastantes cabreos y consultas a los admins.

Así que habíamos decidido hace tiempo hacerlos públicos, sólo nos demoramos porque estábamos buscando la forma de hacerlo usable, simple y que no afecte la velocidad de todo el sitio. Creo que lo hemos logrado, so we are excited:-)

Servidor adicional en Amazon EC2

El otro cambio importante es más técnico y de las tripas del Menéame, pero casi obligaron a acelerar la implementación de las otras  características, tiene que ver con la avalancha de visitas que recibimos durantes las hora siguientes al partido contra Italia, tanto que la primera hora el sitio iba muy lento por llegar al límite de las 800 conexiones simultáneas.

Para prepararnos para el partido contra Rusia tuvimos que hacer modificaciones importantes al código del Menéame –pre-diseñada, pero pendientes de implementar– para permitir agregar servidores y réplicas remotas temporales de la base de datos.

Así fue que implementamos esta característica y ya está funcionan en un servidor alquilado en Amazon EC2 (amazon1.meneame.net). Si esta noche se produce otra vez la saturación lo habilitaremos para que también sirva al dominio meneame.net.

Sólo tiene un problema importante.

Los tiempos de latencias entre los centros de datos de Amazon en EEUU y nuestros servidores de Ferca en Madrid son muy elevados. Cuando un usuario modifica algo –comentario, voto, chat en la fisgona–, el servidor de Amazon tiene que enviar sincrónicamente los datos al de Madrid para que la visualización sea consistente. Así que en estos casos mencionados veréis –si lo habilitamos para después del partido– que la respuesta es lenta [*]. Pero compensa con la velocidad de navegación que aportará.

[*] No habría este problema si tuviésemos todos los servidores en Amazon EC2, pero los tiempos de ping de estos con Europa son muy malos.

Anotaciones

Al permitir tener varios servidores distribuidos y con altas latencias  ya no podíamos usar ficheros estáticos (compartidos vía NFS). Eso nos generó problemas con los logs públicos del promote y del karma que son visibles en el perfil de usuarios. Para solucionarlo hemos implementado un sistema de “anotaciones” de texto que permiten guardar los logs en la base de datos y así ser accesibles desde cualquier servidor.

Está diseñado para ser muy rápida y de uso genérico. En el futuro seguramente usaremos esta característica para otros tipos de avisos.

Cálculo del karma

En el perfil de cada usuario se puede consultar los resultados del karma. Al mismo tiempo que implementamos la visualización de votos comentarios hicimos algo similar para visualizar el log del cálculo.

Al tener las anotaciones hicimos los cambios para adaptarla y además tradujimos todo el texto al castellano, con mensajes más comprensibles.

Además aprovechando las características de las anotaciones, también se añaden en “tiempo real” los registros de cambios en el karma, por ejemplo con registros de incremento de karma por publicación de una noticia, las penalizaciones por votos cowboys, el descarte de noticias, comentarios con spam, etc. Esta información adicional al usuario ayudará a mejorar todavía más la “transparencia” del Menéame.

Promote

Al igual que tuvimos que adaptar el karma, también el log del promote donde se muestra el ajuste de karma que se hace a cada noticia (cada cinco minutos), o cuándo son seleccionadas para publicarse. Ahora tiene una nueva dirección meneame.net/promote.php.

Fútbol

Algunos dicen que el fútbol es pan y circo. Otros lo defienden. A otros les es indiferente (¿recordáis que podéis seleccionar o “anular” categorías en vuestro perfil?).

En cambio a nosotros nos da no sólo problemas y flames, también mucho trabajo de programación… y algo de gastos adicionales. But, it was quite exciting. ;-)

“Stemmer” en castellano del buscador

diciembre 20, 2007

Queda un problema con el buscador: que también busque por palabras raíces, y derivadas del lexema original. Con eso se mejora la búsqueda porque también busca las palabras en plural/singular, masculino/femenino, en diferentes tiempos verbales, gerundio, etc.

Para realizar ese proceso se reducen las palabras a sus lexemas básicos, el proceso se denomina stemming. El Sphinx sólo trae stemmers en inglés y ruso, afortunadamente Jose Manuel Peso desarrolló un stemmer castellano para el Sphinx. El problema es que ya no funcionaba con la última versión del Sphinx, por lo que le hice unas pocas modificaciones (parche) y ya lo tenemos en marcha.

Espero que mejore aún más la calidad de los resultados. Si no es así seguro que nos enteraremos rápido ;-)

Nuevo buscador

diciembre 11, 2007

Desde hace unos minutos está en funcionamiento “público” el nuevo buscador del Menéame basado en Zend Lucene. Así se soluciona –o eso esperamos– una de las cosas más criticadas por los usuarios habituales. El buscador anterior funcionaba con las búsquedas full text del MySQL y tenía sus “cosillas”. ¿Es ahora un poco menos saco? :-)

Escribí una pequeña ayuda en el wiki. Ya iremos solucionando todos los problemillas, el Zend Lucene también tiene sus glitches (además de numerosos, asustan al usuario desprevenido).

API para el Nótame y varios clientes ligeros

abril 26, 2007

La semana pasada desarrollé un “API” muy sencillo para el Nótame. Sólo se trata de un programa –newpost.php– que puede recibir vía HTTP el contenido de la nota e información de usuario. Para evitar transmitir la contraseña original por Internet, el servidor calcula una “clave API” de 10 caracteres visible en el perfil de cada usuario.

En sólo cuatro días se desarrollador ocho programas [*] que usan ese API y que facilitan el envío de notas:

(más…)

Liberado y publicado el código del daemon Jabber de Nótame

marzo 2, 2007

Acabo de publicar el código fuente del demonio Jabber del Nótame. Al igual que resto del código del Menéame, está publicado bajo la licencia Affero GPL. El código del programa y los módulos propios está disponible en el subversion (la parte web estuvo disponible en el subversion desde el primer día).

Hace unos días pusimos en marcha Nótame, que permite a los usuarios del menéame publicar notas cortas desde el web y desde cualquier cuenta Jabber, Google Talk o cualquiera de las redes afiliadas a ambos. Cada usuario tiene su “propia página” de notas, por ejemplo el usuario damianvila. Cada usuario además puede ver las notas de los demás o seguir las enviadas por sus amigos vía web, RSS (los enlaces aparecen en cada página) o desde su cliente Jabber.

En el caso del cliente Jabber se visualizarán en tiempo real las notas de los amigos y además se pueden escribir nuevas notas desde el mismo programa.

Hacer funcionar el daemon

Está todo programado en Perl, usando fundamentalmente el módulo estándar XMPP para actuar como cliente de un servidor Jabber. En nuestro caso usamos los propios servidores de Google –si funciona bien con éste, debería funcionar bien con cualquier otro–, así evitamos mantener infraestructura propia más compleja y aseguramos que todos puedan ir a la mejor velocidad posible por la distribución de carga que hace Google.

El fichero ejecutable es posts.pl, este programa lee la configuración de la cuenta a la que se conecta (como cliente) del fichero posts.conf. En el SVN hay un ejemplo. Si se ejecuta sin ningún argumento mostrará la actividad por la consola. Si se indica el argumento -d se pondrá en modo daemon y guardará los logs en el fichero indicado en posts.conf.

¡El retonno! (a las dos columnas)

febrero 13, 2007

Hoy Benjamí acabó de preparar la nueva navegación con “temas y subtemas” que teníamos pendientes. Desde que pusimos en marcha las metacategorías el menú de categorías quedó muy descolgado y prácticamente inusable en la barra de la izquierda (además que poca gente lo usaba, y algunos/nas incluso ni sabían que existían). Ahora creemos que es más visible, usable y práctico.

Moraleja 1: Si quieres dar importancia –o porque ya lo son, como en el caso de un sistema de decenas de noticias diarias– nunca las coloques a un costado, sino arriba de todo.

Pero al quitar las categorías del menú de la izquierdas, las barras laterales quedaron muy descompensadas respecto al contenido central, así que tocaba también unificarlas Además parece que las tres columnas no gustaban demasiado –a pesar que fue un coñazo lograr que funcionen bien y sean de la misma altura–. Era un trabajo que lo íbamos a dejar para más adelante. Pero la verdad es que no podía soportar el resultado, así que me puse a probar cómo quedaría en dos columnas. Lo hice en sesión maratoniana y le pedí opinión a Benjamí, su respuesta fue “¡qué guapo que queda así!” (supongo que era casi como volver a los inicios), así que lo publicamos inmediatamente en cuanto logré una versión minimamente correcta.

Moraleja 2: No es nada fácil que una estructura de tres columnas quede bien y balanceada. Ni desde el punto de vista del CSS –el IE6 nos daba el coñazo día sí y día también— ni de la usabilidad.

Todo estos cambios gordos –aproveché también para simplificar y recortar mucho código– son más fáciles de hacer para nosotros, entre otras cosas porque no usamos plantillas, pero putea de mala manera a los que tienen clones del Menéame instalado. Lo sentimos, de verdad, pero es que el sitio lo tomamos como “orgánico” y vamos haciendo pruebas casi cada día.

Moraleja 3: Ahora que el codigo está muy auditado y razonablemente confiable, necesitamos urgentemente un release manager del Menéame que se encargue de sacar distintas versiones numeradas y con parches para los demás usuarios. Pedimos encarecidamente un/unos voluntarios que tengan ganas de hacerlo –y de preparar un pequeño instalador y manual de instrucciones–. A estos voluntarios les daríamos una cuenta en el svn para que puedan mantener las “ramas” y “etiquetas”. Mucha gente estará muy agradecida.

JQuery integrado en el código del Menéame

febrero 2, 2007

Desde ayer integramos JQuery en el código del Menéame. JQuery es una librería Javascript similar a Prototype.js, pero más ligera y pequeña. Desde hace varias semanas estaba analizando a las dos para ver cuál de ellas usar, esencialmente para el tratamiento del DOM y propiedad HTML/CSS. Prototype no me acabó de convencer por su tamaño –70 KB– y sobre todo porque la gestión del timeouts AJAX –esencial para la fisgona– no está bien resuelto.

Al final me decidí por las JQuery y la verdad que facilita bastante la programación de cosas básicas de Javascript+Ajax. Por ejemplo el código de la fisgona está totalmente cambiado, gracias al jquery pude cambiar el tratamiento del HTML dinámico, ahora se hace a base de manipular el árbol DOM, por lo que es mucho más –muchísimo– eficiente y rápido.

Además fue muy fácil agregar nuevas características, como el ping para tener una idea de cómo funciona la conexión entre el navegador y el servidor del menéame (desde un cable modem que vaya bien debería dar valores entre 60 y 80, un ADSL unos valores un poco más altos, 100-150).

El telnet (o jefa) también recibió un regaltio casi gratis, un pequeño Fade In en los nuevos items.

También se cambió toda la parte genérica del código Javascript, ahora todo el Ajax usa funciones del JQuery, e incluso algunos de los efectos especiales estándares de las librerías –como el Fade In en el número de votos–.

Y todo eso con código bastante más pequeño y legible (siempre y cuando conozcas cómo funciona el JQuery, caso contrario parecen $(jeroglíficos).escritos en $Perl :-) .

El tamaño de la librería sin comprimir es de 55 KB, pero ellos se preocupan de codificarlas para que puedan ser comprimidas e incluso facilitan el código comprimido para que lo bajes. Es éste el que usamos y tiene unos 18 KB, que como además se comprimen en nuestro servidor lo que se transmite no llega a los 10 KB. Me parece un buen balance costo-beneficios.

No sé si es la mejor opción, pero ha sido divertido reporgramar el menéame, y si en el futuro hay que migrar a otra diferente, no hay problemas, será más diversión gratis :-) .


Seguir

Get every new post delivered to your Inbox.

Únete a otros 27 seguidores