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
Le principe
Avantages de ce protocole
- Sympatoche, Convivial
- Multi-vecteur : mail, IRC, Twitter, Forum...
- Ubiquité, Instantanéïté, Universalité
Avantage FONDAMENTAL !
C'EST GRATOS !!!
Les origines
Ça a commencé par un tweet :
Les origines
Money
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
Les origines
Pour les curieux
Le code source se trouve sur Launchpad
$ bzr clone lp:beeroverip/1.0
Bon, et après...
- Si j'ai envie d'envoyer une brune plutôt qu'une blonde ?
- Si j'ai envie d'envoyer un läger plutôt qu'une stout ?
- Si je ne sais pas quelle bière envoyer ?
Django !
Gestionnaire de "contenu" développé en Django 0.96
... vu que, vraisemblablement, Drumla! n'avait pas le module adéquat.
Projet
- Gestionnaire de révisions: bzr
- Gestionnaire de projet: launchpad
- License: Beerware et WTFPL
- Hébergement: Alwaysdata
Mais POURQUOI ?
- Pourquoi BZR ?
- Pourquoi Launchpad ?
- Pourquoi cette dual-license ?
- Pourquoi Alwaysdata ?
Pourquoi BZR ?
Pour emmerder @benoitc ?
Pourquoi BZR ? (sérieusement)
- DCVS que je connais et maîtrise (août 2008)
- Pas assez familier avec Git et Mercurial (août 2008)
- Intégration avec Launchpad
Pourquoi Launchpad ?
Pour emmerder @benoitc ?
http://launchpad.net/beeroverip/
Pourquoi Launchpad ? (sérieusement)
- Intégration avec BZR (comment ça, je me répète ?)
- gestion des bugs
- gestion des traductions
Pourquoi cette double licence ?
Pour emmerder @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
Tu as échappé à...
Une quadruple licence
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
- Django 0.96
- Une bière, une image
- Pas de random
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
- http://beeroverip.org/ -> Bière par défaut
- http://beeroverip.org/all/ -> Liste des bières avec lien
- http://beeroverip.org/<slug>/ -> La bière <slug> avec son image
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 !
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
- récupération de l'image / redimensionnement si besoin
- ajout dans les fixtures (via l'admin ou carrément à la main)
./manage.py test beers
(cf. la partie Test plus loin)bzr commit && bzr push
Déploiement
Fabric
$ fab deploy
Déploiement
Fabric
- se connecte sur le serveur d'alwaysdata
- fait un
bzr pull
sur le code - fait un
./manage.py loaddata
- normalement, ça suffit...
Beer-Driven-Development
Je teste tout
- la présence d'une image correspondant à une bière
- la taille max de l'image (500px) - Merci
PIL
- le renvoi d'une 404 en cas d'inconnu
- le fait que mes fixtures soient intègres
Beer-Driven-Development
Fixtures
- Nb de bières == identifiant max
- Au moins une image par bière
- Pas de doublons dans les URLs
- Correspondance media / fichier physiquement dans le bon répertoire
Depuis la version 2.0
Features
- Passage à Django 1.0
- Envoi aléatoire : http://beeroverip.org/random
- Plus d'une image par bière
- Ajout de 'flots' RSS
- Nouvelle classe par héritage : boissons non-alcoolisées
Depuis la version 2.0
pour @MrJMad
http://beeroverip.org/notabeer/
Depuis la version 2.0
Statistiques
Depuis la version 2.0
Statistiques
- Beer.objects.count() == 64
- 12 contributeurs
- environ 91000 visites depuis l'ouverture.
- 77362 pintes bues entre le 13 août 2008 et le 1er avril 2010
- page la plus "bue" :
/random/
- Bière la plus "bue" :
/guinness/
(1132 pintes)
Planète Beer Over IP
isitbeeroclock.co.uk
merci à William Anderson
Planète Beer Over IP
teaoverip.co.uk
merci à Sean Anderson
Planète Beer Over IP
Cassoulet Over IP
(non propulsé par Django)
Contribuer ?
- Envoyer des bières virtuelles à tous ceux que vous aimez
- Envoyer vos photos de bières (déjà référencées ou pas)
- Traduire (hem)
Futur ?
€€€ Valoriser ? €€€
- Pubs, partenariats, etc.
- Impossible pour certaines images en CC-NC
- Mais j'ai pas trop envie
Futur ?
- Indiquer si une bière est stout, brune, blonde...
- BIEN, car filtre + possibilité d'avoir une URL /stout/
- PAS BIEN, beaucoup de boulot + changement dans le modèle
Futur ?
Interactions
- Commentaires ?
- Notes ?
- Pas convaincu : le côté KISS disparaîtrait
Futur ?
API Ouaible Deux Machin ?
- Supaire, y'aurait une appli iPhone !
- Oh non, zût, y'aurait une appli iPhone...
Futur
Vos idées ?
... One more thing
Comme @Rik24d
qui l'a souligné : Beer Over IP est un protocole sain pour la santé :
- aucun risque de dépendance physique,
- de gueule de bois,
- de coma éthylique, d'amende sur la route...
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
- Cette présentation est sous contrat CC-BY-SA
- Photo "carte de crédit" : Cheon Fong Liew (CC-BY-SA)
- Cliparts, collection Creative Commons (domaine public)
- Ascii Beer, Paul Martin Howard
- Licence IV, Rémi Jouan (sur Wikipedia)