Martín Cerdeira: La frase del día...

   Publicado: "Google+ isn’t about sharing cat pictures, it’s about serving ads. Twitter’s massive network of 140-character bits of information isn’t about connecting people across the globe or to view current trends in worldwide thinking, it’s about serving ads. Facebook isn’t about entertaining yourself with games or sharing interesting links, it’s about serving ads."

No es que no lo sepamos, pero...


Fuente.
Info relacionada.

Andrés Gattinoni: Sencillo parser para Apache mod_status en Python

   Publicado:

Cuánto hace que no actualizo este blog!! Hoy estuve jugando un poco con Python y me puse a hacer un pequeño script que supongo que a otros les podrá servir como base para hacer algo más interesante. Precisamente, tengo planes para hacer algo más interesante, pero como recién están en veremos, les voy pasando esta pequeña base a ver si alguien me gana de mano :-)

Como muchos sabrán, Apache (y otros web servers) tiene un módulo llamado mod_status que nos permite ver en tiempo real el estado del servidor (los requests que se están procesando, el uso del CPU, el estado de las conexiones, etc.). Esta información puede ser muy útil para hacer diagnósticos cuando está habiendo algún tipo de problema, para hacer monitoreo, etc. El módulo nos muestra una página web con la información y tiene dos interfaces: una está pensada para ser vista por seres humanos y otra para ser consultada por scripts (para ver esta segunda sólo hace falta pasarle el parámetro “?auto” en la URL). El problema es que esta segunda interfaz no nos muestra a qué dominios (virtual hosts) están dirigidos los requests que se están procesando (o si hay forma de que lo muestre yo no la encontré). Entonces me puse a hacer un sencillo script en Python para parsear la página “para seres humanos”.

Por suerte Python nos ofrece muchas herramientas muy útiles para este tipo de cosas, así que no me tuve que esforzar demasiado. En este caso utilicé urllib2 para acceder a la página de mod_status y BeautifulSoup para parsear el HTML. Por si no lo conocen, BeautifulSoup es un muy poderoso parser para XML/HTML hecho en Python. No viene con el código fuente sino que hay que instalarlo, pero hacerlo es muy fácil:

En Debian/Ubuntu:

apt-get install python-beautifulsoup

En CentOS/RedHat:

yum install python-BeautifulSoup

Con easy_install:

easy_install BeautifulSoup

El código tiene una clase Status que es la que hace la magia y una función main() que utiliza la clase para parsear una URL e imprimir algunos datos a modo de ejemplo.

import sys
import urllib2
from operator import itemgetter
from BeautifulSoup import BeautifulSoup

class Status (object):
    _url = None

    def __init__ (self, url):
        self._url = url

    def fetch (self):
        return urllib2.urlopen(self._url).read()

    def parse (self):
        html = self.fetch()
        soup = BeautifulSoup(html)
        status = {}
        status[‘server_info’] = [i.string.strip() for i in soup.findAll(‘dt’)]
        status[‘requests’] = []
        requests = soup.find(‘table’).findAll(‘tr’)
        keys = [i.string for i in requests.pop(0)]
        for tr in requests:
            req = {}
            for n, td in enumerate(tr):
                req[keys[n]] = td.string
            status[‘requests’].append(req)
        return status

def main (argv):
    if len(argv) < 2:
        print "Usage %s "%argv[0]
        return 1

    status = Status(argv[1])
    data = status.parse()
    print "SERVER INFORMATION"
    print "=================="
    for v in data[‘server_info’]:
        print v

    print "REQUESTS BY VHOST"
    print "================="
    entries = [i[‘VHost’] for i in data[‘requests’]]
    requests = sorted([(entries.count(i), i) for i in list(set(entries))], reverse=True)
    print "\n".join(["%d: %s"%(a,b) for a,b in requests])

if __name__ == "__main__":
    sys.exit(main(sys.argv))

La forma de uso es:

python status.py "http://localhost/server-status"

Y en este caso la salida del script es algo así:

SERVER INFORMATION
==================
Server Version: Apache/2.2.19 (Unix) mod_ssl/2.2.19 OpenSSL/0.9.8e-fips-rhel5 DAV/2
Server Built: May 26 2011 15:14:47
Current Time: Sunday, 31-Jul-2011 00:53:59 ART
Restart Time: Saturday, 30-Jul-2011 12:07:12 ART
Parent Server Generation: 0
Server uptime:  12 hours 46 minutes 47 seconds
Total accesses: 407813 - Total Traffic: 3.7 GB
CPU Usage: u2.05 s3.23 cu52 cs0 - .125% CPU load
8.86 requests/sec - 85.0 kB/second - 9.6 kB/request
10 requests currently being processed, 8 idle workers
REQUESTS BY VHOST
=================
9: www.tail-f.com.ar
5: www.otro-dominio.com.ar
4: www.not-a-domain.com.ar
3: www.algunlado.com.ar
2: subdominio.dominio.com.ar
1: www.pepe.com.ar
1: www.no-votes-a-macri.com.ar
1: www.asd.com.ar
1: localhost

Obviamente esto no es una aplicación funcional, sino un ejemplo que espero que les sirva para hacer algo más copado. Yo seguiré jugando y si hago algo un poco más interesante, ya se los mostraré.

Marcos Vanetta: Book Review: The Clean Coder

   Publicado:

Book Review: The Clean Coder

Hace un par de semanas, luego de ver este video (que por cierto recomiendo mucho) me entere que Robert Martin (aka Uncle Bob) había publicado un libro llamado The Clean Coder: A Code of Conduct for Professional Programmers. Un código de conducta! Y eso, por supuesto me llamo profundamente la atención. Una semana después de "comprarlo" en Amazon ya lo había leído y hoy voy a escribir acerca del mismo.

El libro está escrito en un lenguaje "piola", de lectura fácil y sin cosas rebuscadas. Por supuesto no contiene detalles técnicos, ya que no es un libro técnico, pero si mucha mucha experiencia encima y eso me gustó mucho. En lo personal me sentí muy identificado con el libro, el capítulo "saying No". Me gusto mucho como trato el tema de las estimaciones, por supuesto, siendo Bob uno de los firmantes del Agile Manifesto, todo está visto desde un enfoque agile. También destaco el capítulo sobre como practicar programación con los Katas, etc. Yo desconocía acerca de esas prácticas. El libro en general me pareció más que recomendable para cualquiera que trabaje con desarrollo de software, diría que es obligatorio (is a must). No se si estoy del todo de acuerdo con el tema de "avoid the zone" o con el tema de capacitación. Explico un poco: Cuando programamos y nos concentramos mucho, por ahí entramos en una fase en la que el código parece fluir de los dedos de manera natural, se podría decir el momento de máxima concentración y producción. Este momento según Bob es conocido como "the zone" y justamente lo que no me termina de cerrar es el: "eviten la zona". Por supuesto, viene con justificaciones, pero igual, no me terminan de convencer.

Con todo el libro es genial y lo recomiendo 100%.

BTW, aquí está el video que video que les comente.

Martín Cerdeira: Otra idea loca: MyGoogle

   Publicado:

Lamentablemente, esto no puedo, ni siquiera soñar con llevarlo a la práctica (ni siquiera sé si lo puede hacer google) y, aunque la idea es simple, su implementación no lo es tanto.

Google, como buscador es un servicio, personalizado (hasta cierto punto) pero... Qué pasa si yo quiero mi buscador? Y no me refiero un buscador de mis archivitos en mi pc, no.

Yo quiero mi google.

Quiero decirle a mi "googlito" que indexe, por ejemplo, datos sobre fútbol, porque quiero una base de datos del tema, o que indexe info sobre la bolsa, porque soy un corredor de bolsa y quiero datos estadísticos.
Es decir, quiero que mi "googlito" me genere una base de datos, que yo pueda consultar (como hoy se consulta el google normal) pero, "saborizada" con mi forma particular de indexar.

Así, tendría una cuenta de google index (como hoy tengo de Gmail, por ejemplo)  donde customizo "mi google", diciendole (de alguna forma) como quiero que indexe, con qué criterios, qué relaciones, etc, etc.

Así mismo, puedo publicar esos "googles" customizados para que los usen otras personas.
De esta forma, no sé, Bonadeo capaz tiene su google (como hoy tenés tu twitter) donde, vas a www.google.com/#bonadeo y buscás data sobre, que se yo, tennis de forma más personalizada y enfocada en el tema tennis, y no tan general como hoy buscaríamos sobre tennis en el google normal.

Es medio porrera la idea, pero, ojalá papa noel me traiga algo así para navidad.

Marcos Vanetta: Y paso el PyDay Gonzalez Catan

   Publicado:

Y paso el PyDay Gonzalez Catan

Como les había comentado hace unos días atrás. El sábado pasado (16/07/11) asistí al PyDay González Catán. El evento me gustó mucho! Los organizadores se re portaron y a los disertantes (sí hable de un tema) nos mimaron bastante. Hay fotos del evento en el sitio del mismo y yo aquí posteo 2 en las que salgo yo jeje.

Organizadores y desertantes

Y una durante mi charla que me saco lipe. PyDay Gonzalez Catan

La charla que di se titula Modelo de Objetos con Python, salió bien, pero podría haber salido mejor, creo que tengo que practicar un poco más. De todos modos, aquí dejo las diapositivas:

Por último, algunas de las charlas fueron filmadas, aquí los videos:

Martín Cerdeira: Led fucking Zeppelin

   Publicado:

No hay mucho que agregar, Black Dog + muchos fans toncandola + muy buena edición = este video :)

Martín Cerdeira: Volvi a programar en mi "spare time": web_alert - Parte 2

   Publicado:

En un post anterior, estuve contando sobre un proyectito que arranqué, por puro hobbie pero, esperando que sea útil a la vez.

La cosa es que me encontré con algo que me desaminó un poco: http://www.webalertpro.com/

Primero, es casi exactamente la misma idea.
Segundo, tiene casi el mismo nombre!

Obviamente, esto es culpa de mi, evidente, falta de inventiva.

Por ahora sigue el proyecto, pero lamentablemente, perdió un poco de empuje.

Marcos Vanetta: Torneos de programación

   Publicado:

Torneos de programación

Varias comunidades de software libre que promocionan distintos lenguajes de programación suelen organizar torneos de programación. Con el fin de promocionar el lenguaje o plataforma, innovar con tecnologías nuevas o simplemente divertirse. Tienen una línea común, un grupo o una única persona debe desarrollar una aplicación desde cero en un tiempo fijo y luego, la comunidad o un grupo de personas votan y eligen la aplicación ganadora. Existen torneos de lo más variados y para todos los gustos. Aquí voy a nombrar algunos relacionados con los lenguajes que suelo usar:

  • PyWeek: Quizás uno de los más viejos, la idea es desarrollar un juego en una semana. El torneo se larga 2 veces por año y dura una semana de desarrollo. Parece muy muy divertido y por supuesto sus concursantes usan python.

  • The Rails Rumble: La idea es construir una aplicación web usando Ruby on Rails en 48hs. Más que interesante y en la página se pueden ver algunas de las aplicaciones que salieron durante este concurso y la verdad que muchas sorprenden de lo buenas que estan.

  • Django dash: Muy similar a la anterior, pero aquí tenemos que usar django. Esta larga en este mes, por si les interesa y también cuenta con un listado enorme de aplicaciones que realizaron los concursantes en torneos anteriores.

Hasta aquí con los concursos en inglés. La gente que está organizando la PyConAr en Junín (que por cierto pinta genial), proponen este año el concurso: PyConApp a realizarse en la misma PyCon en vivo! El objetivo es construir una aplicación en python en 3hs en grupos de no más de 4 personas. La idea es más que tentadora! El último concurso que les quiero comentar es la Rally on Rails, organizado por miembros de la comunidad RubySur. Aquí nos proponen codear toda una aplicación rails en 48 horas con un equipo también de hasta 4 personas. Nos van a juzgar el diseño, la integridad, innovación y utilidad. Las inscripciones ya comenzaron y tenemos hasta el 16 de Julio para anotarnos. Por último les comento que pienso participar del último listado con unos compañeros del trabajo. De ser así, voy a estar bloggeando más al respecto.

Maximiliano Robaina: PyConAr 2011

   Publicado:

Se viene la 3er conferencia internacional de Python en Argentina, organizada por el grupo de usuarios pyar. Más información en http://pyconar.blogspot.com/

pyconar-banner

Martín Cerdeira: Volvi a programar en mi "spare time": web_alert

   Publicado: Proyecto: web_alert
Objetivos: Divertirme, aprender y, en una de esas, sale algo útil.
Lenguajes: Python, obvio!

Queriendo meterme un poco con python+web, empecé un proyectito al que nombré "web_alert".

Primero lo armé versión consola y "on demand", luego la idea es que sea una especie de servicio web.

Qué haría? Fácil, toma como input urls que el usuario suministra y tags de interés que el usuario suministra, por ejemplo:

urls: http://barrapunto.com, http://www.lanacion.com.ar
tags: panchos, celulares, perros

La aplicación 'mira' esas urls, y genera como output links relacionados con los tags que le pasas como input y, te lo presenta donde vos le digas, por ejemplo:

mail, twitter, facebook.

Sirve? No se, pero que me voy a divertir, seguro. =)

P.D: Previews y el código en google, coming soon...

EDITADO: Este post estaba en planeta python y desapareció, jua! =)
Share