Beer Over IP

Bruno Bord

24 avril 2010 - Rencontres Django-FR, cong !

Beer Over IP

Principe

Envoyer des bières virtuelles via le Protocole Internet

Diagramme

Le principe

Avantages de ce protocole

Avantage FONDAMENTAL !

C'EST GRATOS !!!

Les origines

Tweet

Ça a commencé par un tweet :

Tweet de dotwaffle

Les origines

Money

Credit card

Les origines

Whois ?

$ whois beeroverip.org
[..]
Domain ID:D153587789-LROR
Domain Name:BEEROVERIP.ORG
Created On:13-Aug-2008 13:59:17 UTC
Last Updated On:29-Jul-2009 08:54:38 UTC
Expiration Date:13-Aug-2010 13:59:17 UTC
Sponsoring Registrar:Gandi SAS (R42-LROR)
Status:CLIENT TRANSFER PROHIBITED
Registrant ID:BB2872-GANDI
Registrant Name:Bruno Bord

Pourquoi pas "overip.org" ? parce que c'est déjà pris, banane...

Les origines

Une page statique, méthode RACHE

static

Les origines

Pour les curieux

Le code source se trouve sur Launchpad

$ bzr clone lp:beeroverip/1.0

Bon, et après...

Django !

Gestionnaire de "contenu" développé en Django 0.96

... vu que, vraisemblablement, Drumla! n'avait pas le module adéquat.

Projet

Mais POURQUOI ?

Pourquoi BZR ?

Pour emmerder @benoitc ?

benoitc

Pourquoi BZR ? (sérieusement)

Pourquoi Launchpad ?

Pour emmerder @benoitc ?

benoitc
http://launchpad.net/beeroverip/

Pourquoi Launchpad ? (sérieusement)

Pourquoi cette double licence ?

Pour emmerder @benoitc ?

benoitc

(ah, non)

Pourquoi cette double licence ?

WTFPL

TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. You just DO WHAT THE FUCK YOU WANT TO. -- Sam Hocevar

Comment être plus adéquat ?

Pourquoi cette double licence ?

Beerware

Si on se voit dans la vraie vie, paie moi une bière -- Poul-Henning Kamp

Comment être plus adéquat ?

Tu as échappé à...

Une triple licence

Licence IV

Tu as échappé à...

Une quadruple licence

Licence IV (groupe)

Pourquoi Alwaysdata ?

Parce qu'avec toute la pub que je leur fais, ils vont devoir me faire une ristourne.

Dive into code

Version 1.0 -> 2.0

URLs

info_dict = {
    'queryset': Beer.objects.order_by('slug'),
}
urlpatterns = patterns('',
    (r'^all/?',
        'django.views.generic.list_detail.object_list',
        info_dict),
    (r'^(?P<slug>[\w-]+)?/',
        "beers.views.beer_detail"),
)

URLs

Views

beer_detail

def beer_detail(request, slug=None):
    if not slug:
        slug = "default"
    queryset = Beer.objects.order_by('slug')
    return object_detail(request,
        queryset = queryset,
        slug = slug,
        slug_field = 'slug',
        template_object_name = 'beer',
    )

404 !

404

Modèles

class Beer(models.Model):
    name = models.CharField(_('name'), maxlength=100)
    slug = models.SlugField(_('slug'),
        maxlength=100, prepopulate_from=('name',))
    picture = models.ImageField(_('picture'),
       upload_to='beers/', blank=True)
    credits = models.TextField(_('credits'), blank=True)

Arrivée d'une nouvelle bière

Déploiement

Fabric

$ fab deploy

Déploiement

Fabric

Beer-Driven-Development

Je teste tout

Beer-Driven-Development

Fixtures

Depuis la version 2.0

Features

Depuis la version 2.0

pour @MrJMad

http://beeroverip.org/notabeer/
Not a beer

Depuis la version 2.0

Statistiques

Graphe sur un an

Depuis la version 2.0

Statistiques

Planète Beer Over IP

isitbeeroclock.co.uk

Is it beer o'clock

merci à William Anderson

Planète Beer Over IP

teaoverip.co.uk

Tea over ip

merci à Sean Anderson

Planète Beer Over IP

Cassoulet Over IP

Cassoulet

(non propulsé par Django)

Contribuer ?

Futur ?

€€€ Valoriser ? €€€

Futur ?

Meta-informations

Futur ?

Interactions

Futur ?

API Ouaible Deux Machin ?

Futur

Vos idées ?

... One more thing

Comme @Rik24d qui l'a souligné : Beer Over IP est un protocole sain pour la santé :

Alors...

Beer Over IP

À consommer sans modération

     _.._..,_,_
    (          )
     ]~,"-.-~~[
   .=])' (;  ([
   | ]:: '    [
   '=]): .)  ([
     |:: '    |
      ~~----~~

Merci à tous

Les bières virtuelles, ça va un moment, passons aux bières IRL...

Crédits