[Projet] Une bouteille à la mer, le retour \o/

Une bouteille à la mer, le retour \o/ [Projet] - Divers - Programmation

Marsh Posté le 07-08-2009 à 10:51:19    

Salut les gens [:dawa]

 

Étant donné que c'est dingue ce qu'on peut faire avec l'internet mondial, mais que pour fédérer une communauté web 2.0 du futur, il faut de belles baloches, mais surtout une visibilité sans failles, je remet ici au propre les grandes lignes du projet - ambitieux certes - mais on est des dingues ou pas ? - "Une bouteille à la mer".

 

L'idée est de monter un réseau de "plages", qui abritent des bouteilles (messages) qu'elles peuvent renvoyer (avec une fréquence, une destination, en bref l'algo de leur choix) à d'autres plages du réseau. On ne sait virtuellement pas où se trouve le message qu'on a posté un jour en rentrant de chez Josie, un quatrain virulent sur les nanas qui sont juste des méchantes, et c'est un peu là qu'est toute la poésie du principe de bouteilles perdues "à la mer"...

 

Le topic d'origine : http://forum.hardware.fr/hfr/Progr [...] 0748_1.htm

 

C'est un concept qui est parti de cette idée de MagicBuzz :o :

 
Citation :

Sinon, tiens, je pense à un projet  complètement inutile, mais amusant dans son concept...
 
Voyez une bouteille jetée à la mer.
Elle contient un message, et ère comme ça des semaines, des mois, des années, pour au final échouer sur une page déserte, ayant une chance sur un million d'être trouvée par quelqu'un.
 
Imaginez maintenant qu'Internet est une grande mer... Y'a plus qu'à inventer le concepte de bouteille jetée dedans  
 
Il s'agirait de faire un petit module, installable sur n'importe quel site, qui :
 
- Connaisse un certain nombre d'autres sites participant au projet.
- Permette d'envoyer une bouteille
- Permette de recevoir et de renvoyer plusieurs heures après des boutielles de passage
 
Et une interface permettant de lire les bouteilles actuellement en transit sur le site.
 
Un bouteille aurait par exemple une durée de vie d'un an.
 
Et ce qui serait excitant, c'est qu'on pourrait jeter des bouteilles, sans signature, comportant un message anodin, ou très personnel, avec pour seule certitude qu'il va faire quelques milliers de fois le tour de la terre, sans peut-être n'être jamais lu.
Pour les pêcheurs de bouteilles, le côté excitant serait de lire des messages un jour sur un site, et savoir que ces messages transitent peut-être depuis plusieurs mois, ont été écrits par un illustre inconnu, et que dans quelques heures, ces messages seront repartis, sans qu'on ait peut-être jamais l'occasion de les revoir.
 
L'idée vient d'un ami des beaux arts (y'a que dans l'esprit d'un illuminé que peut germer ce genre d'idée ) et l'idée m'avait ma fois assez convaincu que ça pouvait être sympa

 

Et là on sentait déjà que c'était dingue, voir complètement waou quoi. On (impersonnel, j'étais pas né en 2003) a discuté de la pluie, de tailles de boobs, des implés du truc ont été testées, c'était communautairement attractif, mais malheureusement pas assez buzzword-compliant. Les dirigeants ont abandonné l'idée et le projet a sombré dans l'oubli. C'est moche.

 

Et puis genre pas loin de quelques temps après, l'idée a été relancée à grand coups de nouveau protocole, publicité sur France 4 et toujours un peu de boobs, si bien qu'une spec foutrement entreprisey a vu le jour. C'est à l'heure actuelle ce dont vous avez besoin pour mettre en place (comprendre coder avec vos petits doigts) votre propre plage, et ainsi faire partie de cette bande de joyeux drilles.

 

La spec donques :

 
masklinn a écrit :

Idées sur une RESTfulisation du protocole (j'vous avais dit que ça allait buzzwordiser) (en fait c'est un protocole qui n'a aucun rapport, vu qu'on peut repartir de 0)

 

1. Ressources

 
  • L'entrée dans le service (la racine de la plage), c'est la seule URL qui devrait être nécessaire pour pouvoir communiquer avec une plage
  • La collection à laquelle envoyer des bouteilles (depuis une autre plage ou depuis un client externe), fournie par la racine de la plage, aucune raison de la hardcoder.


Le reste peut être formalisé, mais ça ne devrait pas avoir d'impact sur les communications entre les plages

 

2. Content-Types

 

a - La racine de la plage

 

Point d'entrée pour une plage qui veut envoyer une bouteille à une autre plage, je me dis que le HTML est très bien pour ça, mais je ne sais pas si tous les langages ont une librairie de scraping qui fonctionne aussi bien qu'un BeautifulSoup (python) ou un hpricot (ruby), mais en partant là dessus:

 

Requête:

 

Méthodes requises (2xy):
GET

 

Headers:
N/A

 

Méthodes interdites (405):
Dépend de l'implé

 

Réponse:
Content-Type:
text/html

 

Headers:
N/A

 

Body:
un (ou plusieurs?) élément(s) link avec attributs:

  • @rel="throw-bottle" (Edit : modif de la spec') (ou "bottle send", normalement @rel est une liste de tokens et ici cette liste doit contenir à la fois "send" et "bottle", s'tout)
  • @href l'URL à laquelle envoyer une bouteille. Peut être n'importe quel type d'URL (relative, absolue, sur un autre domaine, ...), mais le scheme doit etre http (on va éviter l'envoi par mail pour le moment)


b - Collection de bouteilles

 

Nécessaire en requête uniquement, la réponse peut être une redirection ou un simple ACK (2xy), avec ou sans body.

 

Requête:

 

Méthodes requises (2xy):
POST (cf note 1)

 

Headers:
x-current-from [optionnel], permet de donner une URL à la plage recevant la requête. Cette URL peut être l'URL de la plage d'envoi, ou l'URL d'une plage dans la collection de la plage d'envoi.
Il est recommandé pour les plages envoyant une bouteille de fournir x-current-from
Il est suggéré que les plages envoient l'URL d'une autre plage (et non la leur) ~10% du temps afin de propager les URLs à travers le système (équivalent au système des "waves" auquel certains avaient réfléchi)
Il est possible de forwarder une bouteille (e.g. ma plage reçoit une bouteille et la renvoie immédiatement) et dans ce cas il est recommandé de laisser le x-current-from d'origine sur la bouteille
Les clients n'étant pas des plages (on peut imaginer quelqu'un qui envoie des bouteilles à une plage depuis un simple formulaire web, ou un client cli/desktop) ne doivent pas fournir de x-current-from

 

Corps de la requête
application/x-www-form-urlencoded classique avec un param message et le message dedans.
 
Le message doit être en UTF-8.

 

Méthodes interdites (405):
Dépend de l'implé

 

Réponse:
Dépend de l'implémentation (cf intro)

 

note 1: on aurait aussi pu penser à PUT, mais PUT implique idempotence, donc

  • n envois d'une bouteille donnée ne créent qu'une seule bouteille (multiple identical requests should have the same effect as a single request)
  • je ne sais pas si ça laisse à la plage la possibilités d'en profiter pour envoyer une bouteille


note 2. il est parfaitement possible que la collection à laquelle envoyer les bouteille soit également la racine de la plage (link[@href=""], ou une URL explicite)

 

Vous en pensez beaucoup de mal?

  

Et comme un bonheur n'arrive seul que s'il n'est pas accompagné, il y a même déjà des implés existantes, plein même :

 

- Django in a Bottle, une implé par Masklinn en Python/Django (sources de la plage et sources du module d'envoi)
- Lost Beach, une implé par LeRiton en Ruby/Rails (sources et plus spécifiquement lib cliente).

 

Et c'est tout [:dawa] Mais les vôtres arrivent !

 


Message édité par LeRiton le 12-08-2009 à 10:35:11
Reply

Marsh Posté le 07-08-2009 à 10:51:19   

Reply

Marsh Posté le 07-08-2009 à 12:40:06    

[:gaga drapal]


Message édité par masklinn le 07-08-2009 à 12:41:12

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 07-08-2009 à 15:33:21    

[:cerveau drapal]


---------------
TRIPS RIGHT BUNCH F SHUTTLE TOM AND JERRY RIGHT YELLOW
Reply

Marsh Posté le 07-08-2009 à 16:08:50    

Real life, the best mmo ever !

Reply

Marsh Posté le 07-08-2009 à 16:14:33    

Tiens sur la partie b-requete-corps, dégager le premier paragraphe, dans le 2e tout enlever jusqu'au MIME, et dans le 3e enlever "dans les deux cas"

 

=> Ne laisser que

Citation :

application/x-www-form-urlencoded classique avec un param message et le message dedans.
 
Le message doit être en UTF-8.

Message cité 1 fois
Message édité par masklinn le 07-08-2009 à 16:15:10

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 07-08-2009 à 16:18:53    

[:ptibeur]


---------------

Reply

Marsh Posté le 07-08-2009 à 18:11:16    

Taz a écrit :

Real life, the best mmo ever !

 

Tu peux faire ça au taff hein :o

 
masklinn a écrit :

Tiens sur la partie b-requete-corps, dégager le premier paragraphe, dans le 2e tout enlever jusqu'au MIME, et dans le 3e enlever "dans les deux cas"

 

=> Ne laisser que

Citation :

application/x-www-form-urlencoded classique avec un param message et le message dedans.
 
Le message doit être en UTF-8.


 

Done  [:romf]

 


Message édité par LeRiton le 07-08-2009 à 18:18:47
Reply

Marsh Posté le 07-08-2009 à 19:39:42    

http://forum-images.hardware.fr/themes_static/images/silk/favorisb.gif


---------------
Nos estans firs di nosse pitite patreye...
Reply

Marsh Posté le 11-08-2009 à 00:41:20    

Reply

Marsh Posté le 12-08-2009 à 10:34:28    

Je met mes sources à dispo pour les aventuriers.
 
La différence par rapport à (ce que j'ai compris) Masklinn, c'est que la partie cliente est simplement une lib du projet (indépendante de rails, donc potentiellement réutilisable pour un Botabeach). L'algo est détenu par la plage, qui appelle au besoin le bouzin d'envoi.
 
Le projet utilise le plugin 'run-later', pour éviter les timeouts lors de l'envoi d'une bouteille (potentiellement long, et déclenché par une action sur le site).
 
Sources et plus spécifiquement lib cliente.
 

Spoiler :

hgwebdir.cgi suxx [:dawa]

Reply

Marsh Posté le 12-08-2009 à 10:34:28   

Reply

Marsh Posté le 12-08-2009 à 11:33:48    

LeRiton a écrit :

hgwebdir.cgi suxx [:dawa]


[:pingouino]
 
C'est super facile à mettre en place hgwebdir [:pingouino]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 12-08-2009 à 11:35:23    

Et faudrait que tu changes le readme (ou que tu le dégages), paske le readme rails il intéresse personne :D


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 12-08-2009 à 11:41:20    

masklinn a écrit :


[:pingouino]
 
C'est super facile à mettre en place hgwebdir [:pingouino]


 
J'ai pas dis le contraire. C'est juste super moche.
 

masklinn a écrit :

Et faudrait que tu changes le readme (ou que tu le dégages), paske le readme rails il intéresse personne :D


 
Oué. Il faudrait.
 

Reply

Marsh Posté le 12-08-2009 à 11:43:04    

LeRiton a écrit :

J'ai pas dis le contraire. C'est juste super moche.


Bof.

LeRiton a écrit :

Oué. Il faudrait.


Enlever tes fichiers de log du vcs ça peut être sympa aussi :D


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 12-08-2009 à 12:08:35    

Certes  [:thalis]

Reply

Marsh Posté le 12-08-2009 à 12:12:47    

LeRiton a écrit :

La différence par rapport à (ce que j'ai compris) Masklinn, c'est que la partie cliente est simplement une lib du projet (indépendante de rails, donc potentiellement réutilisable pour un Botabeach). L'algo est détenu par la plage, qui appelle au besoin le bouzin d'envoi.


Chez moi c'est un composant séparé (c'est une "management command" Django en fait, donc elle s'appelle en CLI, je la fais tourner dans un cron journalier indépendant de la plage) qui dépend du reste de la plage (pour l'accès aux modèles uniquement).

 

edit: mais maintenant que j'y pense, il serait trivial de séparer current en une lib indépendante de django et le reste de la commande qui fait la sélection d'un message et d'une plage [:figti]


Message édité par masklinn le 12-08-2009 à 12:56:54

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 20-09-2014 à 00:55:26    

[:cupra]
je ne savais pas que quelqu'un avait repris ce projet.
je ne l'ai toujours pas oublié, même si je ne code plus du tout depuis le temps. par contre si qqun est motivé à monter une affaire, je peux reprendre mes spec perso, y réfléchir, et faire la bonne à tout faire  :whistle:  
*jette son message à la mer*
 :hello:


---------------
.: Clône de Drasche .:. Ebichuleys .:. Avec l'Aloe Vera je fais de beaux cacas [:dawa] .: www.oserselancer.com :.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed