Personal Website

My Web: MindEchoes.com

Sunday, October 31, 2010

NINJATON!

Ayer tuvimos la NINJATON!! :D ... si, muy geek!

Pero fue un día re productivo para juntarnos entre varios, ver varias cosas de NINJA-IDE, definir otras tantas, mejorar cosas en NINJA, etc!
Casi quedo lista la página oficial de NINJA-IDE, hace un par de días que tenemos autocompletado (y seguimos mejorandolo), y se siguen agregando y mejorando cosas para que sea realmente una buena experiencia desarrollar en NINJA-IDE.

Y como no podía faltar, fotos de la juntada sacadas por Elias:









Friday, October 29, 2010

Google App Engine Roto en Ubuntu 10.10

Para quienes hayan instalado Ubuntu 10.10 y quieran usar el servidor de desarrollo de Google App Engine se van a encontrar con la misma sorpresa que me encontre yo:
NO ANDA!!

Pero... arreglarlo es muy fácil!
Google App Engine requiere Python 2.5, esta reportado que con 2.6 o superior se rompe:

Simplemente tenemos que instalar Python2.5 que por defecto no lo vamos a encontrar en el repositorio.
Intente compilarlo e instalarlo, y corría Python, pero seguía sin funcionar con Google App Engine, me tiraba una excepción de que faltaba un módulo.

Y después encontré esta solución (Agregando un repositorio para instalar Python2.5):

sudo add-apt-repository ppa:fkrull/deadsnakes  
sudo apt-get update  
sudo apt-get install python2.5  

Una vez que realizamos eso, solo tenemos que hacer:

python2.5 dev_appserver.py [path-proyecto]

Y Listo!
Problema solucionado!

Wednesday, October 27, 2010

Mi Gata LeeLoo

Un merecido Post a una grosa gata!!
LeeLoo (se llama como la mina de "El Quinto Elemento")







Y para que vean que esta gata se agarro costumbres de perro, acá esta la LeeLoo jugando a que le tire cosas y me las trae para que se las vuelva a tirar :P

Ubuntu 10.10 Instalado!

Tradicionalmente siempre instalaba Ubuntu el mismo día que salia la nueva versión... pero esta vez no pude porque andaba con varias cosas... PERO HOY YA ME HICE TIEMPO!

Y la verdad muy bueno! Me gusta mucho que cada vez que instalo una nueva versión me encuentro con que las cosas siguen mejorando y tengo un muy potente sistema operativo!
Hice una instalación desde cero, y en menos de 2 horas tenia el sistema operativo completamente andando, totalmente tuneado y TODOS los programas que tenia antes de formatear instalados!
(me llamo la atención como cada vez es más rapida la instalación... impresionante!)


Tuesday, October 26, 2010

25 Aniversario: Back To The Future

UNA DE LAS MEJORES TRILOGIAS DE TODOS LOS TIEMPOS!! (para mi al menos :P)

Hace poco se anuncio que Michael J. Fox y Christopher Lloyd reaparecerían juntos en los premios Spike 2010 para conmemorar el 25° aniversario de la película que los inmortalizó junto con su salida en Blu Ray. Aqui podemos ver el vídeo del reencuentro de estos dos grandes actores y ver cómo, aunque sea una aparición bastante corta, apenas se nota el paso del tiempo en ellos y sí se demuestra el cariño que todo el mundo le tiene a los únicos viajeros en el tiempo capaz de hacerlo… en un Delorean.
[fuente: cinefagos]


Monday, October 25, 2010

NINJATON


Este Sábado 30 de Octubre vamos a hacer una NINJATON en la casa de Elias, para dedicarle un día a full de programación para NINJA, en el cual vamos a estar:

  • Probando NINJA e intentando buscar cualquier bug que exista
  • Hacer un brainstorming de plugins que se podrían crear
  • Dejar funcionando la página oficial de ninja
  • Fijarse en que estado estamos con respecto a las funcionalidades definidas para la Versión 1.0
  • Programar lo que más se pueda de las funcionalidades restantes previas a la Versión 1.0
Quienes estén interesados en participar del Sprint avisen así le pasamos los datos de como llegar a lo de Elias, o consulten en la Lista de Correo de NINJA-IDE.
Arrancamos a las 9am y para aquellos que quieran aprovechar para preguntar como esta programada tal y tal cosa de NINJA, o por qué algo se hizo así, o donde se podría agregar X cosa, les recomiendo que vayan a las 9 que ahí vamos a estar recién arrancando.


Sumando Lecturas

Acabo de terminar de leer "Trilogía del Imperio", el cual contiene los siguientes libros:

  • Polvo de Estrellas
  • Las Corrientes del Espacio
  • Un Guijarro en el Cielo


Personalmente "Un Guijarro en el Cielo" fue el que más me gusto y se me hizo re atrapante la historia,  y en general me pareció muy interesante ver como se va construyendo el imperio con el que nos encontramos en los principios de la Saga de la Fundación.

Hoy comienzo a leer "Flashforward" el libro en el que estaba basada la serie, como para cambiar un poco de autor, y después seguiré con los libros de la Fundación que me quedan hasta terminar :D

Hace unos días me compre igual "El Juego de Ender" de Orson Scott Card, libro que también pertenece a una saga, pero el resto de la saga no la veo disponible... esperemos que no tenga que luchar como tuve que hacerlo para conseguir la Saga de la Fundación...

Thursday, October 21, 2010

Como manejar Post-Commit Web Hooks

Estaba buscando una forma de poder hacer que NINJA-IDE se actualizara automáticamente sin tener que andar haciendo nuevos instaladores, o paquetes con código que hubiera que bajarse, etc. Sino que fuera mucho más directo, simplemente notificara que hay actualizaciones y que prioridad tienen y si el usuario confirma baja los nuevos archivos y actualiza la aplicación.

El siguiente problema es que tampoco quería tener que ir armando la lista de archivos que deberían actualizarse a mano, porque se me podía olvidar alguno, pero más que nada porque seria molesto...

Entonces buscando encontré: "Post-Commit Web Hooks" de Google Code!!
NINJA-IDE tiene su  repositorio en Google Code, y si dentro del proyecto (cualquier de Google Code) van a la solapa de "Administer" y luego a la opción "Source" van a encontrar al final de la página esta opción para habilitar los "post-commit web hooks":

Básicamente que es lo que permite esta opción? simplemente que al subir código al repositorio se envié un request HTTP POST a la url que especificamos, la cual recibe un JSON con la siguiente estructura:

{
   "project_name": "atlas-build-tool",
   "repository_path": 
   "http://atlas-build-tool.googlecode.com/svn/",
   "revision_count": 1,
   "revisions": [
     { "revision": 33,
       "url": 
   "http://atlas-build-tool.googlecode.com/svn-history/r33/",
       "author": "mparent61",
       "timestamp":   1229470699,
       "message": "working on easy_install",
       "path_count": 4,
       "added": ["/trunk/atlas_main.py"],
       "modified": ["/trunk/Makefile", "/trunk/constants.py"],
       "removed": ["/trunk/atlas.py"]
     }
   ]
 }

Más información acerca de: PostCommitWebHook

Y teniendo esta información puedo hacer tranquilamente una aplicación en Google App Engine que almacene esos datos esperando que yo los acepte y los catalogue con algún tipo de prioridad para que luego puedan ser notificados a las distintas aplicaciones clientes de NINJA-IDE.

Entonces para la aplicación de Google App Engine es necesario definir en el archivo "app.yaml" los distintos handlers:

handlers:
- url: /static
  static_dir: static
  
- url: /favicon.ico
  static_files: static/img/favicon.ico
  upload: static/img/favicon.ico
  
- url: /admin
  script: administrator.py
  login: admin
  
- url: /adminrpc
  script: administrator.py
  login: admin
  
- url: /commit
  script: commit.py

El primer handler especifica donde van a estar los recursos (que usualmente se usa para los archivos de javascript, imágenes, y css).
El segundo es el icono que le vamos a dar a la aplicación.
El tercero "/admin", va a ser donde vamos a entrar a través de "http://ninja-ide.appspot.com/admin" para el cual se necesita permiso de administrador y es donde voy a ver cuales son los nuevos commits y les voy a poder setear la prioridad.
El cuarto "/adminrpc" es adonde van a estar dirigidas las llamadas RPC (con permiso de administrador).
Y el quinto "/commit" es el que va a recibir los request HTTP POST de Google Code y tiene permiso para que pueda ser accedido por cualquiera.

En mi caso decidí almacenar cada una de las revisiones que me lleguen de Google Code como una entrada en la Base de Datos, para lo cual cree la siguiente estructura dentro del módulo "datamodel":

from google.appengine.ext import db

class Updates(db.Model):
    timestamp = db.IntegerProperty()
    modified = db.StringListProperty()
    removed = db.StringListProperty()
    message = db.StringProperty()
    marked = db.BooleanProperty()
    priority = db.BooleanProperty()

Y luego solo me faltaría crear mi módulo "commit.py" al que van a estar dirigidas las request a "http://ninja-ide.appspot.com/commit".

Para que no cualquiera pueda enviar datos a "http://ninja-ide.appspot.com/commit" (por si alguien ya lo estaba pensando :P) se usa autenticación por cada request recibido.
Post-Commit Web hook hace uso de HMAC-MD5 para autenticar las solicitudes. Cada proyecto tiene una única "llave secreta", visible para los propietarios del proyecto en el Tab Administer/Source. Esta clave se utiliza como semilla en el algoritmo HMAC-MD5. Cada encabezado de la solicitud POST contiene un HMAC utilizada para autenticar la carga. Este valor es una cadena hexadecimal de 32 caracteres que figuran en la cabecera de "Google-Code-Project-Hosting-Hook-Hmac". Mediante la combinación de la clave secreta de su proyecto y el valor de la solicitud POST de HMAC, puede autenticar la solicitud.

#import para autenticacion
import hmac

#Agregamos los imports necesarios
from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app
from google.appengine.ext import db
from django.utils import simplejson
#Agregamos la estructura definida para la BD
from datamodel import Updates

class Commit(webapp.RequestHandler):

    def post(self):
        # De: Administer/Source tab
        project_secret_key = "123456789qwertf"

        #Autenticamos la solicitud
        m = hmac.new(project_secret_key)
        m.update(self.request.body)
        digest = m.hexdigest()
        if digest == self.request.headers[
          "Google-Code-Project-Hosting-Hook-Hmac"]:
            #Si la soliciud fue válida creamos 
            #el diccionario con los datos
            data = simplejson.loads(self.request.body)
            #Recorremos las distintas revisiones
            for rev in data["revisions"]:
                #Creamos por cada revision un 
                #Objeto Updates
                up = Updates()
                up.timestamp = rev['timestamp']
                up.message = rev['message']
                up.marked = False
                up.priority = False
                up.modified = rev.get('added', []) + \
                                 rev.get('modified', [])
                up.removed = rev.get('removed', [])
                #Guardamos el Objeto Updates en la BD
                up.put()


def main():
    application = webapp.WSGIApplication([
        ('/commit', Commit)
        ], debug=True)
    run_wsgi_app(application)

if __name__ == "__main__":
    main()

Y si colocamos en Google Code la URL para el Post-Commit Web Hook como se mostró al principio, ya tenemos una aplicación de Google App Engine que recibe notificaciones de Google Code y las almacena para su posterior utilización!! :D

Esta es la pantalla de Administración que tengo para NINJA-IDE:

Ninja News!

Esto ya  parece un Blog de NINJA más que de otra cosa... prometo volver a postear cosas de programación en general dentro de poco :P

Pero no podía dejar de contar que el Sistema de Plugins de NINJA fue mejorado y que la documentación ya se encuentra disponible:

Actualmente esta en Español, pero en breve estará traducida al Ingles también! :D


Además en estos días se han estado incorporando varias nuevas funcionalidades, y así como el otro día agradecíamos a Matias Herranz por el port a Mac, hoy agradecemos a Martin Alderete por sus aportes para:
  • Indentar Derecha
  • Indentar Izquierda
  • Comentar/Descomentar
  • Y varios aportes más!
Próximamente estará disponible la posibilidad de actualizar el IDE de forma automática!

Monday, October 18, 2010

Charla de PyQt

Este Viernes 22 a las 17:30 hs voy a dar una charla de "Introducción a PyQt" en el Primer Piso de la UTN-FRC, en las aulas de extensión universitaria.
A los que le interese se pueden acercar, la entrada es libre y gratuita!


La charla se encontrara dentro del Ciclo de Charlas del Grupo UNI-CODE

Los Esperamos!

NINJA Multiplataforma!

El Proyecto sigue avanzando, agregando nuevas cosas cada día, y a la vez estamos muy contentos por todo los aportes que estamos recibiendo que hacen que se pueda avanzar muchísimo más todavía!

NINJA-IDE ya cuenta con un gran soporte para muchas funcionalidades, pero lo importante de hoy es poder ver a NINJA-IDE corriendo en MAC OS X (Gracias a la contribución de Matias Herranz, que próximamente tendrá disponible el instalador) y en Win... jeje si, tuve que usar un Windows para probarlo :S

En Linux:

En Mac:


En Windows:

Como siempre la página del Proyecto es: http://ninja-ide.googlecode.com
Y la lista de correo es: ninja-ide@googlegroups.com

Sunday, October 17, 2010

PyCon 2010 Muy Buena!

Y bueno... Paso la PyCon 2010... PERO QUE BUENA QUE ESTUVO!
Muchas Charlas copadas, gente muy piola, muy buena organización, de todo!
Y estuvo muy bueno poder conocer en persona a algunos GURUs de PyAr :D

Acá dejo algunas fotos que saco Elias durante la PyCon:

(Charla de "Taint Mode en Python" por Juanjo Conti) 

(Charla de "Taint Mode en Python" por Juanjo Conti) 

(Con Mariano esperando para la Charla Relámpago)

(Roberto Alsina en la Charla Relámpago) 

(Charla "import antigravity" por Roberto Alsina... MUY BUENA ESTUVO!)

(Fallen demostrando como se puede ser un cavernicola con internet)

(Charla "Conejos de birmania en 3D" por Silvestre Huens)

(Charla "La guerra de los sistemas de Tipo y Python" por Daniel Moisset) 

(Charla "La guerra de los sistemas de Tipo y Python" por Daniel Moisset) 

(Charlas Relámpago del segundo día en el auditorio) 

(Charla Plenaria de Leah Culver)

(Presentando el Poster de NINJA-IDE) 

(Programando NINJA-IDE en la PyCon: esto si que es meter código a cuatro manos :P)

(Mostrando NINJA-IDE en la Charla Relámpago) 

(Mostrando NINJA-IDE en la Charla Relámpago) 

El resto de las fotos las pueden encontrar en:

Tuesday, October 12, 2010

Screencast NINJA-IDE

Acá les dejo un Screencast de NINJA-IDE que hice hoy para mostrar el grado de avance del proyecto, hay más cosas además de las que se muestran en el vídeo y pueden consultarse a través de la página de Release Notes.

Ya el soporte para Plugins esta completo y en breve agregaremos en la página del proyecto la documentación para escribir Plugins. Por lo pronto con lo que si se cuenta es con un Plugin para crear Plugins :P
Este plugin básicamente arma la estructura del proyecto y los métodos que deberíamos implementar en base a las interacciones que queremos que tenga el plugin siendo desarrollado con el IDE. Y luego nos permite empaquetarlo automáticamente en un ZIP para que pueda ser instalado a través de la opción de instalación de un plugin externo. Además por defecto el Manejador de Plugins muestra la lista de aquellos disponibles en la página de NINJA, y aquellos que sean seleccionados los descarga e instala automáticamente.

Screencast:


Para más información del Proyecto:
http://ninja-ide.googlecode.com

Thursday, October 7, 2010

PyCon 2010


Ya sea que seas un fanático del lenguaje Python, o estés a punto de convertirte en uno :P
No te podes perder la PyCon de este año!!

Resumen

PyCon Argentina 2010, la segunda conferencia internacional de Python en Argentina se realizará el 15 y 16 de Octubre de 2010 en la sede céntrica de la Universidad Empresarial Siglo XXI (Ituzaingó 484, Nueva Córdoba) ciudad de Córdoba, Provincia de Córdoba Argentina. Líderes de negocio, desarrolladores y entusiastas se reunirán en una de las más importante conferencias en español. Python, el conocido lenguaje de programación de software libre, visto como una creciente alternativa a Java, es usado actualmente por miles de empresas, incluyendo a Google, Industrial Light & Magic, iRobot, NASA, y YouTube.

Mas Información: http://ar.pycon.org/2010


Sobre PyCon Argentina
Organizada por el Grupo de Usuarios Python Argentina, es la primer conferencia sobre Python en español, e intenta unir a un grupo diverso de desarrolladores, entusiastas y organizaciones para explorar nuevos desafíos, comenzar nuevos negocios y forjar nuevas conexiones dentro de la comunidad. PyCon otorga a los asistentes la oportunidad de sumergirse en el mundo de este lenguaje dinámico empleado por varias compañías muy conocidas, como Google, Cisco y el New York Times. PyCon ayuda a la gente a conocer nuevas herramientas, técnicas, proyectos y a conocer otros fans de Python.
[fuente: http://ar.pycon.org/2010/about/press/]

El evento será de entrada libre y gratuita, previa Registración Web.

NO TE LO PODES PERDER!!