Trucos y misterios de meneame

He decidido hacer un paréntesis en el tipo de entradas que agrego al blog, de carácter técnico y dirigidas a un público muy concreto, para hacer una entrada que llevo tiempo queriendo hacer (desde mucho antes de abrir este blog).

Para los despistados, una de mis aficiones es colaborar con el meneame de una forma un tanto friki (si es que todo lo que toco, lo convierto en friki) que consiste en auditar su código y comunicar los errores de seguridad que encuentro, a Ricardo, para que los arregle.

Pese a que el meneame está muy bien programado, en contra de lo que dicen algunos sujetos, es cierto que ha tenido ciertos problemas de seguridad durante su historia, desde que colaboro, he encontrado varios problemas y de gravedad variada, sin embargo, el número total de problemas de seguridad, ha sido mucho menor que en otros sites populares y con mas tiempo, y el tiempo de reacción ante estos problemas, ha sido de minutos, por lo que considero a meneame, un site muy seguro y una demostración irrefutable de que el software libre es beneficioso cara a la seguridad.

Dejando de lado las presentaciones y la explicación de mi relación con meneame, este post trata sobre algo que llevo tiempo queriendo escribir…y es que auditando meneame continuamente, he aprendido mucho de su código y sus secretos, el como funciona, etc…y hay algunas cosas que siempre he querido documentar, pero nunca he encontrado el momento.

Antes de empezar, podemos ver el código de meneame, navegando por la carpeta www/ de su repositorio svn:

http://svn.meneame.net/index.cgi/branches/version3/www/

El primer directorio que vemos, es admin/, del cual nos llama la atención que no tiene index.php, por lo que si hacemos:

http://meneame.net/admin/

Veremos un forbidden, que nos impide listar el contenido del directorio, el único archivo que hay en ese directorio, es el archivo bans.php:

http://svn.meneame.net/index.cgi/branches/version3/www/admin/bans.php?rev=1372&view=markup

El cual, nada mas empezar hace una comprobación:

if ($current_user->user_level==”god” || $current_user->user_level==”admin”) {

Esto nos lleva a nuestra primera deducción: en meneame hay dos tipos de administradores, unos conocidos como admin, y otros conocidos como god, como si fuesen dos niveles distintos de acceso.

La primera pregunta que se nos viene a la cabeza es: vale, ¿Pero que es eso de $current_user? $current_user es una instancia de la clase User, que se encuentra en:

http://svn.meneame.net/index.cgi/*checkout*/branches/version3/www/libs/user.php?content-type=text%2Fplain&rev=1547

Esta clase, como vemos, es una clase que representa a un usuario del meneame, y maneja su información, tanto su karma, como su nivel de acceso, etc.

Todo el meneame funciona con clases como esta, que representan cosas en meneame, están todas en:

http://svn.meneame.net/index.cgi/branches/version3/www/libs/

Otro ejemplo de clase como user, pero que representa links, es Link:

http://svn.meneame.net/index.cgi/*checkout*/branches/version3/www/libs/link.php?content-type=text%2Fplain&rev=1550

Para los javeros, estas clases podríamos decir que son una mezcla entre DAO y TO (Transfer Object), pero todo junto en una misma clase.

Aparte de este mecanismo de clases que representan cosas en meneame, existe otro mecanismo interesante usado en el meneame: el de los backend.

En meneame, en muchos sitios, pasamos el ratón por encima y sale un cartelito con información, por ejemplo, cuando alguien cita otro comentario en una noticia, usando #X, si pasamos el ratón por encima del #, veremos el comentario número X en una cajita amarilla, que sigue al ratón.

Esto lo consigue con unos pequeños php, que están en:

http://svn.meneame.net/index.cgi/branches/version3/www/backend/

Y que reciben un argumento, por ejemplo, el numero de comentario, y devuelven un pequeño código html, que es el que va dentro del cuadro amarillo.

Ademas de los cuadros amarillos (que también van por ajax), el backend se utiliza en realidad para recibir las peticiones Ajax de toda la web, y procesarlas, así está todo bien ordenado.

Un ejemplo de esto es el backend get_user_api_key, que está en:

http://svn.meneame.net/index.cgi/branches/version3/www/backend/get_user_api_key.php?rev=1431&view=markup

Que es quien atiende a la llamada Ajax que se produce, cuando en tu perfil, haces click sobre ver tu clave api, como vemos en su código:

if ($id != $current_user->user_id && $current_user->user_level != ‘god’ ) {

Cada usuario puede ver solo su API key, excepto los gods, que pueden ver las de todos, sin embargo, los admins no pueden.

Esto aclara un poco lo de los dos distintos niveles de acceso, admin y god.

Aparte de todo esto, tenemos otra carpeta interesante en el svn:

http://svn.meneame.net/index.cgi/branches/version3/www/api/?rev=1550

Api, que es donde se alojan los archivos php que atienden las llamadas a la API pública del meneame, una API que podemos usar, para comunicar nuestros blogs, webs o aplicaciones de terceros con meneame, vamos a ver alguna interesante:

http://meneame.net/api/url.php?url=http://www.adn.es&all=1

Con esto obtenemos todos los enlaces en meneame hacia el site http://www.adn.es.

Existen algunas otras API en el meneame, todas en esa carpeta, sin embargo hay un archivo muy curioso ahí:

http://svn.meneame.net/index.cgi/branches/version3/www/api/check_url_test.php?rev=1340&view=markup

Que como se puede ver, es alguna especie de prueba, pero que está en el svn desde hace mucho tiempo, y ahí sigue…misterios del código.

Aparte de todo esto, en el código de meneame hay algunas otras curiosidades, por ejemplo, un site accesible llamado mueveme, aquí:

http://meneame.net/mueveme/

El cual parece algo para acceder desde el mobil, o algo así, ni idea, no navego con el mobil.

Otra versión alternativa accesible de meneame, es la versión para nintendo DS:

http://meneame.net/nds/

Y por si la nintendo DS fuese poco, también hay para la WII:

http://meneame.net/wii/

Otra curiosidad que no acabo de entender (aunque seguro que ha sido dicha en el blog de meneame…), es por que hay un icono en el svn con nombre: apple-touch-icon.png:

http://meneame.net/apple-touch-icon.png

Supongo que sera para cuando entras con el iphone, a saber, ya lo buscaré por el código.

Como conclusión, decir que si eres informático, el código de meneame tiene muchas cosas interesantes y muchos ejemplos de como hacer cosas…como hacer un portal para la WII, para la NDS, etc etc.

Normalmente la gente no suele mirarse el código de meneame (me refiero a la gente que lo podría entender,a los desarrolladores), incluso si deciden bajarlo y usarlo en su site, no suelen estudiarlo ni un poco, y si lo hacen, no suelen compartir sus cambios con meneame.net.

Yo soy uno de los talibanes que sigue pensando que una web como meneame, donde el modelo de negocio es la publicidad, puede ser compatible con tener una comunidad a su alrededor, sin embargo, el caso de meneame me ha demostrado que muchos “webmasters” (como llamarlos?) solo buscan aprovecharse de que meneame comparte su código, y no buscan ni ayudar, ni colaborar, ni enriquecer nada mas que sus bolsillos.

Se que es una conclusión un tanto rara para un artículo como este, pero tenía que decirlo🙂

29 Responses to “Trucos y misterios de meneame”


  1. 1 Javier Checa septiembre 17, 2008 a las 2:02 pm

    Muy bueno el artículo. Se nota que le has dedicado tiempo. Sigue así.

    Saludos.

  2. 2 TuxMeister septiembre 17, 2008 a las 2:31 pm

    Buenas,

    Una aclaración. El logo apple-touch-icon.png es usado en el iPhone/iPod Touch cuando se añade la web de meneame como enlace desde la pantalla principal (un bookmark que se convierte en “pseudo-aplicación”). También es usado para la versión imeneame.net para iPhone, que por cierto, olvidaste mencionar aquí.

    Espero que esta explicación te haya servido de algo :p

    Un saludo!

  3. 3 rooibo septiembre 17, 2008 a las 2:45 pm

    Gracias por la aclaración TuxMeister.

    Llevaba unos días intrigado con esa imagen.

  4. 4 Scipion septiembre 17, 2008 a las 4:01 pm

    Gracias por las aclaraciones, muy utiles para los que estamos empezando en estos lares.

  5. 5 bitblitter septiembre 17, 2008 a las 4:20 pm

    Un artículo interesante y didáctico.

    Nunca me tomé tiempo para mirar el código de Meneame, y eso que de hecho me lo bajé, lo probé, pero no pasó de ahí. Se quedó sin usar, como otros tantos CMS, frameworks, etc, que me bajo, trasteo un poco y me olvido de ellos.

    Con este artículo me han dado ganas de trastear de nuevo a ver que encuentro, y quien sabe, puede que también colaborar en él humildemente.

  6. 6 Kisky septiembre 17, 2008 a las 4:23 pm

    Bueno, como ‘meneador’ de tu artículo, no me queda otra que dejarte un comentario. No suelo leer los blogs más que a través del feed, pero hoy te lo has ganado, por ayudar a entender un poco mejor la API, jeje.

    Espero que tus premoniciones en los comentarios del meneo no se cumplan y esto no se llene de comentarios no deseados, sería lo que menos me gustaría😦

    Un saludo.

  7. 7 rooibo septiembre 17, 2008 a las 5:15 pm

    Gracias por los comentarios.

    Y me alegro si esto le es de ayuda a alguien.

    Acerca de meneame…siempre que sales en portada de meneame pasa lo mismo, la última vez borré 10 comentarios, aunque evito hacerlo y recurro a ello solo cuando son muy salidos de tono.

    Gracias!

  8. 8 TuxMeister septiembre 17, 2008 a las 5:42 pm

    Tranquilo rooibo, aun queda gente decente que le parece curioso pasarse 2 horas mirando el código de un amigo, solo para darle su opinión. Eso lo hacía con 12 años y lo hago ahora con 21. Los que tenga comentarios salidos de todo son por que han transformado la notícia en sus cabezas de tal forma y hasta tal grado, que parece que el blog de permiso a los HOYGAN, TROLLS y demás personajillos del cybermundo, a meterse con el que parezca solo por ser diferents.

    Ánimo, rooibo. Me gusta pensar que gracias a ti, Meneame será cada vez un poco más seguro.

    P.D. Libertad de expresión significa que puedes expresar algo siempre y cuando sea bien recibido por los demás. Los TROLLS son como Homer: si no se entera de algo, se lo inventa.

    UN SALUDO!

  9. 9 Sauco82 septiembre 17, 2008 a las 7:36 pm

    Una pequeña errata, móvil, no mobil (que eso es una petrolera)

    Por lo demás, interesante artículo, ojalá tenga tiempo un día de revisar parte del código de meneame.

  10. 10 esteve septiembre 17, 2008 a las 7:44 pm

    Gracias por el artículo introductorio. Sin embargo, me cuesta estar de acuerdo con esta afirmación:

    Pese a que el meneame está muy bien programado

    de acuerdo, Menéame funciona (y muy bien), pero podría estar mucho mejor programado. Por ejemplo, cogiendo uno de los fallos que has arreglado hace poco (http://svn.meneame.net/index.cgi/branches/version3/www/api/url.php?rev=1551&view=diff&r1=1551&r2=1550&p1=branches/version3/www/api/url.php&p2=/branches/version3/www/api/url.php):

    if(strlen($url) < 8 || ! ($p_url = parse_url($_GET[‘url’])) || strlen($p_url[‘host’]) get_results(“select SQL_NO_CACHE link_id, link_votes, link_anonymous, link_status from links where link_url like ‘$url%’ order by link_date DESC limit 100”);

    ¿porqué no hay una función (getLinksFromURL($url) por ejemplo) que encapsule esa consulta? Mismo problema que antes, si quisiera modificar una consulta así, tendría que revisar todas las consultas
    “por si acaso”. Si tuviera una función, así me aseguraría que al cambiar la consulta dentro de esa función, todas las llamadas usarían la nueva función.

    De todas formas, sé que sólo has corregido un bug y el código no lo has escrito tú, pero son cosas como estas y otras por las que no puedo estar de acuerdo contigo.

  11. 11 esteve septiembre 17, 2008 a las 7:55 pm

    Vaya, parece que o me olvidado de enviar el texto o se lo ha comido el wordpress. Cuando he hecho referencia a:

    if(strlen($url) < 8 || ! ($p_url = parse_url($_GET[‘url’])) || strlen($p_url[‘host’])

    he escrito sobre los números mágicos. ¿Qué pasará cuando alguien lea ese código y tenga que modificarlo? ¿Qué significan 8 y 5? Si ese programador se encuentra con otro 5 en otra parte del código, ¿es el mismo 5 que en el ejemplo? Incluso quien lo haya escrito puede olvidarse de su propósito de aquí unos meses.

  12. 12 rooibo septiembre 17, 2008 a las 8:21 pm

    Estoy totalmente de acuerdo contigo esteve, pero para entender meneame, hay que entender un contexto en el que vive:

    – Lo programa una sola persona
    – No es su trabajo, es un hobby
    – Recibe muy poca colaboración en lo que a código se refiere
    – Requiere poder funcionar en una sola máquina y atender a cientos de miles de clientes

    Etc.

    Estoy de acuerdo en muchas cosas sobre la crítica constructiva a la arquitectura de meneame, pero el problema aquí, es que lo que algunos tachamos de “error” de diseño, en meneame tiene un sentido y está puesto así por algo, normalmente por simplicidad, eficiencia, o por que gallir no tiene tanto tiempo para dedicar.

    Yo tampoco veo con buenos ojos ese 8 y 5 hardcodeado, y que no se apoye mas en funciones, como getLinkFromUrl etc etc, pero hay que entender su entorno y su razón de ser así.

    Gracias!

  13. 13 rooibo septiembre 17, 2008 a las 8:23 pm

    Me olvidaba, cuando digo que está bien programado, lo digo por que ha pensado en muchos detalles, muchísimos, y esto lo podrás ver si un día hablas con Ricardo o acudes a alguna ponencia.

    El código es muy eficiente, es seguro a día de hoy (relativamente) y funciona bien, pensando en cientos de detallitos que normalmente uno no piensa al programar una web.

    Pero si, la arquitectura no es su punto mas fuerte.

  14. 14 rooibo septiembre 17, 2008 a las 8:38 pm

    Por último (no termino nunca…) lo que he puesto en los comentarios de arriba, no le resta ninguna validez a tus comentarios, con los cuales estoy totalmente de acuerdo, esteve.

    Solo estaba intentando explicar un poco la situacion del código, de quien lo mantiene y los motivos (buenos o malos) de algunas cosas.

    Las cosas desde “cerca” del código se ven de otra forma.

  15. 15 josecb septiembre 17, 2008 a las 8:42 pm

    realmente clarificador, en un lenguaje ameno me has hablado de temas que desconocia.
    me apasiona el mundo de la red pero soy un absoluto catatulfo en lo que a los aspectos tecnicos se refiere. personas como tu dberian, gracias a sus conocimientos, contribuir a eliminar la plaga pirata, promovida por personas que yo creo que no saben hacer otra cosa en la vida que no sea j…r.
    un abrazo desde torrelavega.jose

  16. 16 JOselo septiembre 17, 2008 a las 10:12 pm

    Yo creo que las principales personas que deberían colaborar de manera… digamos obligatoria en el desarrollo y testeo del “núcleo” de meneame.net son los servicios tipo enchilame, floreame y afines, que usan el código de meneame. Me gustaría saber cual es la realidad del asunto.

    Joselo

  17. 17 OceanO septiembre 17, 2008 a las 11:25 pm

    Enhorabuena, rooibo, por otro artículo excelente. El hecho de que llegue o no a portada en meneame no lo hace ni más ni menos importante, aunque sí más notorio para muchas personas. Y por lo menos esta vez, parece que tu blog no se ha llenado de críticas simplonas.
    Hace tiempo que estoy fuera del mundo de la programación, y nunca lo he estado en el de la programación web, pero tu colaboración altruista con meneame es realmente digna de elogio.
    Enhorabuena de nuevo.
    Te seguiré siguiendo.

  18. 18 rooibo septiembre 17, 2008 a las 11:57 pm

    Gracias OceanO, y gracias también por lo del blogday, yo no hice un post ese día, por que no había preparado nada, tendré que esperar al año que viene.

    Gracias!

  19. 19 miguel barraza febrero 22, 2011 a las 5:14 pm

    hola, soy miguel, programador de jimobi, una red social creada y encabezada por personas discapacitadas. muy bueno tu artículo, felicitaciones!, buscando info sobre la api de meneame caí aquí, y me parece genial. quiero aprender mas sobre esta api para lanzar una aplicación accesible para que las personas puedan conectarse a meneame desde su escritorio y además también utilizar sus lectores de pantalla para simplicidad de uso para personas ciegas… Además, quiero quedar a dispocición del desarrollo de meneame, o de estos sitios con apis abiertas para todos, dejo aquí mi mail: miguel (arroba) jimobi.net.
    saludos!

  20. 20 Bejerano - Piscinas Prefabricadas noviembre 7, 2011 a las 12:07 pm

    No me parece muy correcto que se filtren tanto los comentarios, se supone que si quieres que la gente comente en a las buenas y a las malas… sino pon tus propias opiniones. Me parece muy contradictorio crear una web con solo comentarios convenientes a la misma.

  21. 21 Lautaro noviembre 25, 2011 a las 3:13 pm

    Primero, Gracias por el interés de compartir. En este momento tengo un trabajo que me asignaron y es la clonación de mename.net. Antes no lo conocia, pero ahora me veo obligado a estudiar el código. Lamentablemente el código no esta comentado y no encontré un manual al respecto. Me gusta bastante la programación y vivo de ella. La mutua colaboración de un proyecto abierto debe ser desarrollada. Esta es muy incipiente en este proyecto.
    Si alguien sabe de explicaciones sobre el código le rogaría que me pase los enlaces. Pienso dedicar bastante al asunto y estoy seguro de poder ayudar en el mismo. Gracias de antemano.


  1. 1 Los Trucos y Misterios de Meneame: Visto en la Red Trackback en septiembre 17, 2008 a las 3:10 pm
  2. 2 Trucos y misterios de meneame | Internet | Pecadoweb.com Trackback en septiembre 17, 2008 a las 4:01 pm
  3. 3 Top Posts « WordPress.com Trackback en septiembre 19, 2008 a las 12:02 am
  4. 4 Toronto Tiburon Trackback en septiembre 25, 2014 a las 1:16 am
  5. 5 trip Trackback en febrero 26, 2015 a las 11:09 pm
  6. 6 qq44368 Trackback en agosto 2, 2015 a las 1:56 pm
  7. 7 voyage au maldives club med Trackback en agosto 4, 2015 a las 8:03 pm
  8. 8 0120988456結婚調査・人探しなら探偵社FUJIリサーチ相談FUJIリサーチ Trackback en octubre 17, 2016 a las 12:51 pm

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s





A %d blogueros les gusta esto: