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!


sábado, 2 de junio de 2012

De Github y servidores virtuales...

Hace ya un buen rato que no escribo aquí. Poco más de un mes de hecho. Sin embargo eso no quiere decir que no tenga cosas que escribir. Más bien, se trata de cuestiones más personale, me he dado cuenta que mi manera de pensar ha cambiado bastante comparada a la que tenia hace 4 años cuando entré al IPN en 2008.

De cualquier manera, no tengo intenciones de escribir sobre mi aburrida vida. Mejor pasemos a temas de geeks. Que clase de geek-developer sería si no tuviera mi cuenta de Github y un servidor virtual donde subir mis aplicaciones web desarrolladas en Python (sí, leíste  bien: Python) y llevar un control de versiones para no estar con las tonterias de tener como 7 u 8 carpetas con nombres como ProyectoFinalRedes1, ProyRedes, ProyectoRdesFinalBueno, etc, etc.

Con Github se acabaron esos problemas, no voy a hablar sobre que es Github porque ya hay demasiada documentación en la red así que hacer un tutorial sería muy poco útil realmente. Mejor les doy el enlace a mi cuenta de Git, por el momento solo tengo un proyeco que realicé para la materia de Ingeniería Económica, yo diría que nisiquiera se acerca al grado de proyecto (el código es realmete asqueroso hasta me da pena decir que estudio en el IPN :( ) pero hice más de lo que muchos hicieron o hubieran querido o ser capaces de hacer.  Se trata de una simple aplicación que realiza el calculo del pago a principal de un producto y el FNE y varias cosillas más.

Una captura de pantalla:

Ahi está la descripción de la aplicación a la cual hay que mandarle los valores por URL de una manera peculiar. Sé muy bien que es mucho mejor tener un formulario pero me dio weba poner uno aparte fueron cuestiones de tiempo. Con esto ya aseguré al menos 4 puntos en el departamental final. 


Notan los links hacia los planes? Pues bien, cada que envio un valor distinto aparte de que se actualiza la página también los links se actualizan y de esa manera puedo ver la evaluación de todos los planes con los ultimos valores dados sin tener que reescribir los datos para cada plan, eso es bueno, no?. Sí, también se puede hacer eso con un formulario, en este caso sería abrir una ventana con jquery y modifiar el formulario.


Ven como sí modificó los datos :P

La aplicación la desarrolle bajo el paradigma modelo vista controlador utilizando el framerwork de moda para web de python que es Django el cual es fabuloso. Me encanta usarlo para desarrollar cualquier cosa, tiene una enorme capacidad en cuanto a portabilidad incluso llevándola al ámbito de las bases de datos. Yo puedo utilizar el mismo código exactamente para usar bases de datos sin importar que motor este usando ya que Django tiene la bondad de ahorrarnos todo ese rollo. Solo defines tus tablas relacionadas como si fueran clases y Django se encarga de traducir todo eso a código SQL ya sea de MySQL, SQLServer, Oracle, Postgress y Sqlite y lo mejor es que dentro de un mismo proyecto puedes usar varias bases de datos sin tener necesidad de tocar el código SQL a menos que te hayas equivocado en definir tus tablas ¬¬.

Ya he hablado bastante de Django y algunas de sus muchas bondades como framework MVC. Ahora hablaré un poco de Heroku el cual es un servidor de aplicaciones. Uno instala el software en  su PC para configurar el entorno virtual y subir los archivos al servidor. En realidad es muy fácil hacer eso, te permite manejar Java, PHP, Ruby entre otros y por supuesto Python. La mecánica es la misma de github. Incluso la misma llave ssh que usas para git es la que usas para Heroku, de alguna forma se trata de que mantengas un control de versiones de tus aplicaciones en la nube :D

Otra cosa que quería platicar pero no lo haré porque es un proyecto del cual no quiero revelar nada aún... sólo diré que se trata de mineria de datos y les dejaré ua captura de pantalla de mi base de datos, que aun no es la final y sí, está desarrollada bajo Django pero sin usar Django, como? Es decir solo estoy usando las funcionalidades con bases de datos del framework para guardar en le base de datos :P....


Esta es la imagen (obvio no es nuestro proyecto pero por ahi va la idea xD ): 


Esto de la política está bueno. Sobre todo si te pones a discutir/platicar con El Guerreo Exiliado y su frase "Pero no hay pedo sigan votando por su pinche PRD.

Bueno, eso ha sido todo en este post, espero no la haya cagado por publicar la ultima imagen...