jump to navigation

Me llegó el vino! January 30, 2009

Posted by Bosco in : Uncategorized , add a comment

Finalmente los amigos de bodegas vihucas me han enviado un pack de 6 botellas de vino! Todo muy bien embalado y en solo 48 horas!!

Muchas gracias por el pack, todavía no lo he probado, pero en cuanto lo haga lo comentaré en el blog.

Bodega Vihucas January 27, 2009

Posted by Bosco in : web2.0 , 1 comment so far

Una bodega de Toledo (Vihucas),ante la situación de crisis, proponía el trueque como forma de seguir haciendo negocio. Como explican en loogic, el trueque consiste en hacerles un post en el blog a cambio de 6 de sus botellas.

A mi que me encanta el vino, me parece una buena idea, rollo viral. A ver si hay suerte!

pdb.set_trace() en Google App Engine January 25, 2009

Posted by Bosco in : django/python, programación , add a comment

GAE redirecciona todo el stdout a la salida del navegador (response), por lo que el pdb tal cual no funciona. Para hacerlo funcionar hay que hacer un pequeño truco:

import sys, pdb
for attr in ('stdin', 'stdout', 'stderr'):
    setattr(sys, attr, getattr(sys, '__%s__' % attr))
pdb.set_trace()

Yo lo he encapsulado en un fichero, así puedo usarlo más o menos como antes. Lo he llamado gpdb.py:

import sys
import pdb

def set_trace():
    for attr in ('stdin', 'stdout', 'stderr'):
        setattr(sys, attr, getattr(sys, '__%s__' % attr))

    return pdb.set_trace()

Y para usarlo, en mi código añado:

            import gpdb; gpdb.set_trace()

Y el Amigo Invisible llegó a la nube January 25, 2009

Posted by Bosco in : amigoinvisible, django/python, programación, web2.0 , 1 comment so far

He subido el amigo invisible versión Django + GAE y ha funcionado! Aquí tenéis una versión primitiva de la aplicación, pero que funciona al 100%. Y con múltiples exclusiones!

TODOs:

PD. Tengo un límite de 2000 emails por día. Esto puede ser un problema, estas navidades estuve enviando más de 4000 al día, tendré que preguntar precios.

Primeros pasos con GAE y Django January 25, 2009

Posted by Bosco in : django/python, programación , add a comment

Mi tutorial step-by-step:

application: aio
version: 1
runtime: python
api_version: 1
handlers:
- url: /static
static_dir: site_media
- url: /.*
  script: main.py
import logging, os, sys

# Google App Engine imports.
from google.appengine.ext.webapp import util

# Remove the standard version of Django.
for k in [k for k in sys.modules if k.startswith('django')]:
  del sys.modules[k]

# Force sys.path to have our own directory first, in case we want to import
# from it.
sys.path.insert(0, os.path.abspath(os.path.dirname(__file__)))

# Django imports and other code go here...
os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'
import django.core.handlers.wsgi

def main():
  # Run Django via WSGI.
  application = django.core.handlers.wsgi.WSGIHandler()
  util.run_wsgi_app(application)

if __name__ == '__main__':
  main()

Tengo el amigo invisible más o menos listo, tengo que probar el envío de mails, y luego lo subiré a los servidores de Google. A ver si mañana lo termino.

Google App Engine January 24, 2009

Posted by Bosco in : amigoinvisible, django/python, programación , add a comment

Llevo esta tarde peleándome con el Google App Engine, para portar el amigo invisible a esto. Y no ha sido trivial. Por un lado, te quedas sin admin. La consola de administración del GAE no es para nada lo mismo. Por otro lado, y mucho mucho mucho más importante, no puedes usar import pdb;pdb.set_trace() Cómo puedes debugar sin eso?!!

Las diferencias con django se producen en la parte de BBDD, ya que se sustituyen los models de django por el sistema de Google. La definición es sencilla, pero los métodos para hacer queries dejan mucho que desear. Y las exceptions lanzadas también son diferentes.

Ojo también con los forms. Los ModelForms se extienden de un paquete de GAE, mientras que los forms normales son los de Django.

Por último, es posible y fácil utilizar Django en su versión actual. Simplemente hay que definir un archivo main.py (y declararlo en el app.yaml), con el siguiente contenido:

import logging, os, sys

# Google App Engine imports.
from google.appengine.ext.webapp import util

# Remove the standard version of Django.
for k in [k for k in sys.modules if k.startswith('django')]:
  del sys.modules[k]

# Force sys.path to have our own directory first, in case we want to import
# from it.
sys.path.insert(0, os.path.abspath(os.path.dirname(__file__)))

# Django imports and other code go here...
os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'
import django.core.handlers.wsgi

def main():
  # Run Django via WSGI.
  application = django.core.handlers.wsgi.WSGIHandler()
  util.run_wsgi_app(application)

if __name__ == '__main__':
  main()

Aplicaciones biyectivas January 16, 2009

Posted by Bosco in : amigoinvisible, programación , 2comments

Lo prometido es deuda. David nos explica lo que son aplicaciones biyectivas. Lo había puesto como comentario, pero mejor lo destaco en un post completo. Con todos ustedes, David Serrano:

Ya que me invitas a hacerlo, explicaré lo que es una aplicación biyectiva. En realidad es un concepto que a todos nos enseñaron en las clases de mates del cole…, tanto tiempo atrás, que se nos ha olvidado a la mayoría.

Si tenemos dos conjuntos de amigos, uno A y otro B (en principio diferentes y con posiblemente diferente número de integrantes) de manera que los amigos del conjunto A hacen regalos a los del conjunto B y los del conjunto B reciben regalos de los del conjunto A, una CORRESPONDENDIA es cualquier ley que dicte quién regala a quién de un conjunto al otro.
Si en dicha ley se ordena que TODOS los amigos del conjunto A deben regalar a UNA sola persona del conjunto B, entonces nuestra correspondencia se denomina APLICACIÓN.
Dicha ley (aplicación) puede incluir otras disposiciones; por ejemplo si todo amigo del conjunto B sólo puede recibir regalos a lo sumo de un amigo del conjunto A diremos que se trata de una APLICACIÓN INYECTIVA.
Otra posible disposición de la ley (aplicación) es que todos los amigos del conjunto B tienen que recibir regalos. Entonces estamos ante una APLICACIÓN SOBREYECTIVA.
Si una aplicación es inyectiva y sobreyectiva se dice que es BIYECTIVA.
Para poder construir aplicaciones biyectivas entre los dos conjuntos de amigos A y B, ambos deben tener el mismo número de integrantes.

En el caso del juego del “Amigo Invisible Online“, los conjuntos A y B son el mismo conjunto, esto es, el de la gente que juega.
El objeto del juego consiste en encontrar aleatoriamente aplicaciones biyectivas que sean compatibles con las exclusiones manifestadas por los participantes.

Si el lector está interesado en ver qué estrategias se han seguido para lograrlo, no tiene más que estudiar el módulo appl_bij a través del vínculo facilitado por Bosco. Dicho módulo está a nuestro parecer suficientemente explicado y documentado.

+3 millones de parados… January 13, 2009

Posted by Bosco in : dooplan, programación , 2comments

Pero no será por culpa de dooplan! En dooplan estamos buscando (ofertas 1 y 2) un nuevo programador para unirse al equipo. Actualmente somos 3 personas en el equipo técnico Hector, Robert y yo, y tenemos la suerte de estar bastante compensados, donde uno cojea el otro le puede ayudar.

Llevamos ya casi 3 meses de beta, tenemos lista una pequeña gran refactorización de la aplicación, y ya solo le queda poner una capa de pintura para que salgamos en serio. Así que queremos fichar a un junior developer, para poder formarle en django, python, jQuery… y nos ayude a todas las tareas que vayan a surgir a partir de ahora, ya que entramos en una fase crucial.

Los requerimientos son básicamente tener ganas de aprender, que le apasione internet y la programación web, que sea una persona inquieta, que no se conforme con lo que se le dice y sepa proponer sus ideas. La parte técnica ya llegará.

Si alguien le apetece probar, o conoce a alguien que encaje en este perfil, por favor, que me envíe un email.

Amigo Invisible Online en Google Apps January 13, 2009

Posted by Bosco in : amigoinvisible, programación , 2comments

Este fin de semana he avanzado bastante con la nueva versión del Amigo Invisible, integrando la clase de aplicaciones biyectivas de David Serrano. Resulta que el sorteo del amigo invisible es un subconjunto de las aplicaciones biyectivas, que pueden ayudar a resolver el problema de las múltiples exclusiones.

En otro post explicaré lo que es una aplicación biyectiva, o mejor, que lo haga David, que yo no lo tengo tan claro ;)

Lo que quería comentar es que el desarrollo en django me ha llevado 5 horas, un tiempo ridículo, así que para hacerlo un pelín más interesante lo voy a migrar a Google App Engine, a ver que tal. Ya contaré.

Estadísticas finales AIO 2008-2009 January 11, 2009

Posted by Bosco in : amigoinvisible , add a comment

Desde el 1 de Noviembre al día de hoy: 70154 jugadores. 70154 emails con destinatario real, 70154 impactos publicitarios directos (como dejásteis pasar esta ocasión!)

Comparando con las gráficas del año pasado:

Un éxito abrumante.
Es interesante también ver los paises de origen de las peticiones. El país que más ha utilizado la web ha sido España con un 71,91%, seguido por Chile con un 13,48 y muy de lejos por Argentina, con solo un 3%.

En idiomas, el español supera el 85% de uso, mientras que el catalán es segundo con casi un 7% de uso. No está mal. Y el inglés, en tercer lugar, un 3,2%. Del euskera no hay noticias, parece que nadie lo ha usado…