martes, 12 de junio de 2012

Mexico Dice: Tras bambalinas

Ultima actualización del post: 24 de septiembre de 2013, al final del post vienen las anotaciones de dicha actualización.





Hola que tal. Bueno antes que nada gracias a todos los que le han dado "like" a la página. En realidad se trata un derivado de un proyecto escolar que tenia que ver con mineria de datos. Les contaré como se me ocurrió. 

Estaba yo pensando en la nada cuando de repente se me ocurrió crear un bot para twitter que estuviera emitiendo mensajes relacionados con los candidatos a la presidencia de la republica. Ya tenia una base de datos con poco más de 40 mil tweets y ni uno solo repetido en el sentido estricto (ningun id repetido) pero sin embargo si tenia algunos registros en los que el texto se repetia en muchos tweets y lo mas chistoso de eso es que eran los bots de EPN.



Los PeñaBots en cuestión...

 El paso siguiente era filtrar los mensajes para el bot, pensé en un algoritmo de procesamiento de lenguaje natural pero eso llevaria mucho tiempo asi que...

Tomé los tweets que tuvieran al menos 70 caracteres, la mitad de los que permite twitter.

Muy bien, aun asi eran varios miles de tweets que quedaban en la base de datos. La siguiente cuestión era que la API de twitter solo me permitia ejecutar alrededor de 70 peticiones por usuario cada hora por lo que era imposible mostrar todos los tweets de aquí a que fueran las elecciones, los tenia que mostrar al ritmo de un tweet cada 51 segundos para aprovechar al máximo el uso de las peticiones, total ese algoritmo ya lo tenia hecho desde Diciembre de 2011 cuando mi cuenta se volvió un bot (durate una hora) que felicitó a todos mis followers :P

La idea del bot era muy buena, pero habia un pequeño inconveniente, necesitaba que el programa estuviera activo las 24 hrs. Gracias a un manejo decente de las excepciones nunca iba a dejar de twittear e incluso si ocurriera un error twittearia desde (el ultimo tweet + 1) que hubiera lanzado así que no iba a twittear dos veces la misma cosa. Pero tenia que estar las 24 hrs activo, la solución inmediata valemadres era dejar la pc vieja encendida pero sería un gasto de luz innecesario así que opte por usar Heroku, un servidor de aplicaciones gratuito hasta cierto punto. Pues manos al teclado dije. El bot lo programé con Python y usando las prestaciones del motor de acceso a bases de datos de Django, era genial porque no tenia ni una sola línea de código sql en mi boot, es más nisiquiera la conexión a la bd era explicita, estaba espeficicada (como debe ser) en otro archivo xD.

Pues bien, subí la aplicación a Heroku y leí la documentación de los workers y queuing jobs. Fue fácil configurar el entorno virtual para ejecutar el worker de manera local dejándolo así trabajando las 24 hrs en segundo plano a menos que claro apagara la computadora, pero los servidores de Heroku nunca se apagan así que todo iba viento en popa hasta que de repente me enteré que para poder hacer uso de los workers debia pagar con tarjeta de credito. En ese momento mi expresión fue...

Aborten la misión...


Posteriormente se me ocurrió la idea que hoy ven en la app. Pero no exactamente como la ven ahorita, seguía de terco queriendo usar la base de datos. Pensé en usar el carrusel de Bootstrap y sí me salio pero la carga era demasiado lenta dado que era aproximadamente 2 mil tweets (aumenté el número mínimo de caracteres). Otro detalle era que los tweets se mostraban en el mismo orden, mientras pensaba en solucionar en como los ordenaria aleatoriamente se me vino a la mente el script de twitter que tengo en mi blog y dije, si pudiera modificarlo... Y entonces comenzé a buscar más scripts de ese tipo hasta que dí con TweetQuote que me gustó bastante, bajé el js y lo primero que hice fue añadirlo al html y funcionó! Entonces me fui al código del script y lo estudié... 

Que va, me fui directo a la parte donde mostraba los tweets...

Solamente modifique la parte en que da formato a los tweets. En realidad solo cambié la forma en que vomitaba los tweets, de esa manera conservé un poco el formato de twitter y crear una especie de debate cibernético. Sé que hubiera quedado muchísmo mejor que los tweets se fueran mostrando en formato de chat, tal cual What's app pero no lo hice porque aun ando estudiando esa parte, para evitar que se muestre el mismo tweet en más de una nubecita de texto.

Esto posiblemente sería un debate ciudadano.

Pero en fin, como dijera el candidato Cuadro, candidato Quadri (sic!)  la app está ahi y las mejoras vienen con el tiempo...

Como fin del post aquí está el enlace al repositorio del git y para ser más específicos este es el html de /mexicosays/ y finalmente el script de TweetQuote modificado sin embargo no indico donde modifiqué, aunque realmente no fue mucho pero si analizan el código original de TweetQuote lo verán :P

Así mismo como bonus del post les dejo el enlace al despliegue de la base de datos que tenia pensado usar para el carrusel así como el carrusel en sí:

Base de datos(postgresql): http://mexico-says.herokuapp.com/tweets/




Carrusel: http://mexico-says.herokuapp.com/carrusel/  *notese el tiempo de carga.



Bueno, este es el fin del post. Me agradó escribirlo y bueno espero lograr lo de tener una interfaz tipo whatsapp...

Gracias por leer el post :)


Actualización del 24 de Septiembre de 2013:
Dedicidí elminar la aplicación por dos razones:
1. Hace mas de un año que ya pasó toda la fiebre de las elecciones en México. Ganó EPN, como era de esperarse en un país lleno de corrupción y en donde se jugaban los intereses de algunos de los dueños de las grandes empresas del país.
2. Como mi cuenta en Heroku.com no está verificada solo puedo tener 5 aplicaciones en el servidor y pensándolo bien, mantener MéxicoSays no tiene ningún sentido por lo comentado en el punto anterior.
Gracias a los que se esfuerzan por leer. Sawa-Chan los saluda! #FuckYeah!


1 comentario:

  1. Interesante, mineria de datos, le di una revisada y para el Carousel no es bueno que traigas todos los datos el 'objects.all', hay que repartir la carga, eso es facil, en cada botonaso del carousel pues pones banderas y vas cargando de 5 en 5 por ejemplo, es solo un algoritmo banal puede mejorarse, el chiste es de entrada no caragar todo, mucho trafico, mucha carga para el servidor.

    ResponderBorrar