Blog

proxyta.net

Informatique,
Tags: web

NB: All of this is already done and available on proxyta.net. You can just clone it and use it. This post is only the step by step explanation.

Who needs a reverse proxy, anyway ?

If you have ever managed a server with more than one web service on it, you are already familiar with some reverse proxy, as the good old apache, the efficient nginx, and/or the brand new traefik.

My point is that if you want to test stuffs as if they were in production (and I hope you do), while not really testing them in your actual production environment (and I hope you don't), you would benefit from using a reverse proxy on your dev setup too.

Obviously, you will not add any complexity to your dev setup, unless there is something really simple, really easy, and really solid. Now guess what… Yup, that's the topic of this post :)

Bonus: if you do this, you can seemlessly switch a setup from test to prod and vice versa, without even letting your services know it !

Bootstrap your environment

To implement this is really easy, thanks to docker & traefik. All you need is to declare a network on which you will put your reverse proxy container and all the services that you want to expose. Let's call it "proxytanet":

docker network create proxytanet

Then, use a simple, ready-to-go, traefik.toml configuration file:

defaultEntryPoints = ["http"]

[entryPoints]
  [entryPoints.http]
    address = ":80"

[docker]
  endpoint = "unix:///var/run/docker.sock"
  domain = "docker.localhost"
  watch = true
  exposedbydefault = false

[api]

And, to finish, a docker-compose.yml for it:

version: '3'

services:
  traefik:
    image: traefik:alpine
    restart: unless-stopped
    ports:
      - 80:80
      - 8080:8080
    networks:
      - proxytanet
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - ./traefik.toml:/etc/traefik/traefik.toml

networks:
  proxytanet:
    external: true

If you don't already have something binded on the ports 80 & 8080 of your host, a docker-compose up -d will finish this setup. You can now access to traefik's dashboard, on http://localhost:8080.

NB: This setup is available in proxyta.net/dev

Setup your services

As traefik is listening to docker.sock, you can plug any service only by declaring a few labels and putting the container on your proxytanet network. Long story short, in the docker-compose.yml of your app:

version: '3'

services:
  your_app:
    []
    labels:
      traefik.enable: "true"
      traefik.frontend.rule: "Host: your_app.${DOMAIN_NAME:-local}, www.your_app.${DOMAIN_NAME:-local}"
    networks:
      - proxytanet

networks:
  proxytanet:
    external: true

In most cases, your service also need to access to other private containers, like a database or a redis, or a memcached. Then, you also have to put it in the (usually implicit) default network of its docker-compose.yml file:

version: '3'

services:
  db:
    []
  your_app:
    []
    labels:
      traefik.enable: "true"
      traefik.frontend.rule: "Host: your_app.${DOMAIN_NAME:-local}, www.your_app.${DOMAIN_NAME:-local}"
      traefik.docker.network: "proxytanet"
    networks:
      - proxytanet
      - default

networks:
  proxytanet:
    external: true

Just don't forget to tell traefik on which of the networks it has to listen, with the third label in this example.

One more thing

You're almost done: the last thing you need is to configure a DNS that will redirect your_app.local to your ip. In a dev / test environment, it's just a matter of one line in /etc/hosts

127.0.0.1 your_app.local www.your_app.local

As you may have noticed, the configuration is your_app.${DOMAIN_NAME:-local}. In other words, if you have a DOMAIN_NAME variable (defined in your environment or in a .env file) set to exemple.org, traefik will make your service available on your_app.example.org.

Production setup

In production, you can keep the architecture and the proxytanet network, all you need to change is the traefik.toml configuration to generate SSL certificates with Let's Encrypt:

defaultEntryPoints = ["http", "https"]

[entryPoints]
  [entryPoints.http]
    address = ":80"
    [entryPoints.http.redirect]
      entryPoint = "https"
  [entryPoints.https]
    address = ":443"
    [entryPoints.https.tls]
    [entryPoints.https.redirect]
      regex = "^https://www.(.*)"
      replacement = "https://$1"

[docker]
  endpoint = "unix:///var/run/docker.sock"
  domain = "docker.localhost"
  watch = true
  exposedbydefault = false

[acme]
  storage = "acme.json"
  entryPoint = "https"
  OnHostRule = true
  [acme.httpChallenge]
    entryPoint = "http"

And the associated docker-compose.yml:

version: '3'

services:
  traefik:
    image: traefik:alpine
    restart: unless-stopped
    ports:
      - 80:80
      - 443:443
    networks:
      - proxytanet
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - ./traefik.toml:/etc/traefik/traefik.toml
      - ./acme.json:/acme.json
    command: --acme.email=${ACME_EMAIL}

networks:
  proxytanet:
    external: true

(don't forget to setup the ACME_EMAIL variable in your environment or a .env file, te receive informations from Let's Encrypt.)

NB: This setup is available in proxyta.net/prod-le ; and if you prefer to use your own certificates rather than Let's Encrypt's, you can check proxyta.net/prod-ssl

Examples

This method has been developped in the context of oxyta.net, a CHATONS (for Collectif des Hébergeurs Alternatifs, Transparents, Ouverts, Neutres et Solidaires, which can be nicely translated into KITTENS, for Keen Internet Talented Teams Engaged in Network Service) from our friends of framasoft.

Hence the name.

In this CHATONS, we want to host several services for several organizations (french "associations loi 1901"), so we provide some exemples for different well known services:

And I can also provide exemples for a django project (incoming…)

That's all folks

Thanks for reading, and now, if you have any remarks, suggestions, or questions, feel free to participate in proxyta.net !


Projections de films

Ciné,
Tags: Ghibli, japon, Miyazaki

Aujourd’hui, on a enfin réinstallé l’écran du vidéoprojecteur.

On prévoit donc de l’utiliser au moins pour ces séances:

  • 16/08: Nausicaä de la vallée du vent (風の谷のナウシカ, Kaze no tani no Naushika), 1984.
  • 23/08: Le Château dans le ciel (天空の城ラピュタ, Tenkū no shiro Rapyuta), 1986.
  • 30/08: Mon voisin Totoro (となりのトトロ, Tonari no Totoro), 1988.
  • 06/09: Le Tombeau des lucioles (火垂るの墓, Hotaru no haka), 1988.
  • 13/09: Kiki la petite sorcière (魔女の宅急便, Majo no takkyūbin), 1989.
  • 20/09: Souvenirs goutte à goutte (おもひでぽろぽろ, Omohide poro poro), 1991.
  • 27/09: Porco Rosso (紅の豚, Kurenai no buta), 1992.
  • 04/10: Pompoko (平成狸合戦ぽんぽこ, Heisei tanuki gassen Ponpoko), 1994.
  • 11/10: Si tu tends l'oreille (耳をすませば, Mimi wo sumaseba), 1995.
  • 18/10: Princesse Mononoké (もののけ姫, Mononoke hime), 1997.
  • 25/10: Mes voisins les Yamada (ホーホケキョ となりの山田くん, Hōhokekyo tonari no Yamada-kun), 1999.
  • 01/11: Le Voyage de Chihiro (千と千尋の神隠し, Sen to Chihiro no kamikakushi), 2001.
  • 08/11: Le Royaume des chats (猫の恩返し, Neko no ongaeshi), 2002.
  • 15/11: Le Château ambulant (ハウルの動く城, Hauru no ugoku shiro), 2004.
  • 22/11: Arrietty, le petit monde des chapardeurs (借りぐらしのアリエッティ, Karigurashi no Arietti), 2010.
  • 29/11: La Colline aux coquelicots (コクリコ坂から, Kokuriko zaka kara), 2011.
  • 06/12: Le vent se lève (風立ちぬ, Kaze tachinu), 2013.
  • 13/12: Le Conte de la princesse Kaguya (かぐや姫の物語, Kaguya-Hime no Monogatari), 2013.
  • 20/12: Le Château ambulant (ハウルの動く城, Hauru no ugoku shiro), 2004.
  • 20/12: Tokyo Godfathers (東京ゴッドファーザーズ, Tōkyō Goddofāzāzu), 2003.
  • 03/01: Le Château ambulant (ハウルの動く城, Hauru no ugoku shiro), 2004.
  • 10/01: Ponyo sur la falaise (崖の上のポニョ, Gake no ue no Ponyo), 2008.
  • 17/01: Le Conte de la princesse Kaguya (かぐや姫の物語, Kaguya-Hime no Monogatari), 2013.
  • 24/01: Souvenirs de Marnie (思い出のマーニー, Omoide no Mānī), 2014.

Les amis sont les bienvenus, tant qu’ils préviennent :)



De la Culture, physique et numérique, et de son financement

Édito,
Tags: crowdfunding, licenses

Le partage de la Culture

Hier, c’était vendredi. Un jour idéal pour tomber sur un excellent webcomic.

Première réflexion: la réalisation d’une telle œuvre demande bien trop de travail pour ne pas envisager de trouver une rémunération en contrepartie, si l’on n’est pas déjà largement à l’abri du besoin. Et je ne considère même pas l’argent dépensé dans la création, notamment en matériel et formation. Simplement la rémunération.

Pourtant, la nature numérique de ce travail permet de simplement le partager pour un coût négligeable, /via/ un simple blog, accessible gratuitement par tout le monde. Et c’est le choix qui est retenu par l’auteur, David Revoy (en), qui a opté pour une licence CC BY 4.0.

Ce noble choix de partage gratuit élimine d’entrée le principe du «Paywall», qui est par exemple utilisé par MediaPart pour l’intégralité de son contenu, ou par Le Monde pour une partie seulement. Cette méthode de rémunération est calquée sur ce qui se fait depuis toujours dans le monde physique: montrer au visiteur que le contenu existe, mais qu’il doit payer pour y accéder. Ça ne prend donc pas du tout en compte l’intérêt de l’informatique et d’internet pour la libre copie de contenu existant, et le partage et la diffusion des connaissances et de la culture.

NB: Je ne jette pas du tout la pierre sur ce modèle, qui est simple et honnête. Seulement, si je dois payer pour accéder à du contenu, je ne peux en faire profiter autrui sans passer pour un voleur (contrairement au monde réel, où tant que je ne fabrique pas de copies, je peux prêter mes livres). Et ça, c’est frustrant.

Un autre choix de cet artiste est de ne pas afficher de publicité sur son site web. Cette méthode de rémunération est pourtant le modèle économique choisi par bien d’autres acteurs du web et d’applications mobiles. On a vu à plusieurs reprise à quel point un jeu débile et qui n’apporte rien de nouveau, ou encore des compilations de vidéos, peuvent pourtant rendre une personne excessivement riche en un rien de temps. C’est donc que ça peut marcher. Mais on a aussi vu des entreprises qui comptaient là-dessus pour payer leurs employés, et qui se retrouvaient donc à la mercie de l’hummeur des annonceurs publicitaires. C’est donc qui ça peut ne pas marcher, ou du moins pas sereinement.

NB: Je jette complètement la pierre sur ce modèle, qui cache les coûts à l’utilisateur final, et qui le considère comme de la marchandise. On ne se rend pas compte de ce que vaut le contenu auquel on accède, ni de ce qu’on vaut à notre tour en «temps de cerveau disponible», mais à mon avis, il y a peu de chances que les choses s’équilibrent. Et je ne parle même pas des dérives de ce modèle, juste de son principe¹.

Le modèle retenu dans le cas de notre webcomic est le mécénat. On dit aux visiteurs qu’ils peuvent accéder gratuitement (et sans subir de pub ou d’autres frais cachés) au contenu déjà existant, et même le réutiliser s’ils se conforment à la licence. Par contre, s’ils veulent bien aider à la création de contenu similaire, ils peuvent donner un peu.

NB: J’ai beau faire l’apologie de ce modèle, il est particulièrement difficile à mettre en place efficacement. Sur internet, il faut faciliter et clarifier à l’extrème le méchanisme de transfert d’argent pour ne pas perdre les personnes motivées. Et bien sûr, il faut trouver de quoi motiver les gens à donner, en général avec des «contreparties». Certains se passent de cette seconde étape, mais je n’ai pas l’impression qu’ils récoltent beaucoup.

Bref, comme beaucoup de «Patrons», dans le langage de (la plateforme choisie pour notre webcomics d’exemple)[https://www.patreon.com/davidrevoy], j’ai décidé de donner 5€ par mois. Dans ce cas, les principaux choix sont 1€, 3€ et 5€, chacun offrant divers niveaux de contreparties.

5€ pour une telle planche, ça me parait énorme. Quand j’achète une BD dans une librairie, je la paye 15€. Et ces 15€ couvrent forcément l’édition, impression, la reliure, le transport, les libraires, les bâtiments de tous ces intermédiaires avec leur charges, etc. Et bien sûr, j’ai beaucoup plus de pages à lire, ce qui a donc demandé d’autant plus de temps de création initiale.

Mais 5€ pour payer le salaire d’une personne et tous les frais qui gravitent autour de cette création, ça ne peut pas suffir tant qu’on n’est pas suffisament à donner.

Prenons maintenant deux autres exemples de financement de la culture: Netflix pour l’intégralité de son catalogue, et Spotify pour une version dépourvue de pub. Ici, on propose simplement de la location, mais à un prix vraiment négligeable: on parle d’une dizaine d’euros pour un accès illimité à un catalogue extrêmement vaste.

Là où la comparaison est intéressante, c’est que dans un cas je donne 5€ directement à un artiste, et que dans l’autre je donne 10€ à une entreprise qui se débrouille pour les redistribuer à des dizaines de millier de personnes, qui ont toutes besoin d’équipements hors de prix.

Et ça marche. Si on est mille à donner 1€, 3€ ou 5€ par mois à un artiste isolé et peu connu, il s’en sort. Et si on est dix millions à donner 10€ par mois à une entreprise, elle peut financer des nuées de projets et d’artistes, dont des séries TV ou des albums de premier plans.

Cependant, dans le second cas, il ne s’agit pas de dons, mais de paiements obligatoires. Dommage, ceux qui n’ont pas les moyens de payer 10€ par mois n’y ont pas accès. Même si les projets sont financés, ils restent payants. C’est qu’on n’est plus dans le financement, mais dans la Finance.

Ce moment gênant où le sujet initial du billet a disparu

En fait, j’écrivais tout ça pour vous parler de la «Cup Foundation». Mais ça semble avoir complètement disparu des internets.

Alors je vais essayer d’expliquer l’idée.

Comme le lecteur attentif l’aura compris à la fin de la partie précédente, toute la clef du problème réside dans le passage à l’échelle.

Comment payer suffisament les petits et ne pas payer trop les gros ?

Comment rémunérer les artistes et rendre leurs travaux accessibles à tous ?

Cette Cup Foundation avait adopté le symbole ⊔ pour symboliser une coupe qu’on passerait dans les rangs pour récolter l’argent nécessaire. Son idée était de simplement définir le prix d’un travail qui pourrait ensuite être partagé par tous.

Disons 1000€.

On définissait ensuite un montant maximum de don (oui, maximum…).

Disons 100€.

Ceux d’entre vous qui maîtrisent les divisions comprendront qu’au bout de 10 gugusses qui sont vraiment motivés et prêts à investir 100€, le travail est financé, peut être réalisé, puis commencer à être partagé.

Si une autre personne ensuite et veut donner aussi, et bien il suffit qu’elle donne (1000 / 11)€, soit 90.90€.

La magie est que l’argent ne va pas à l’artiste, mais aux 10 premiers, qui se le répartissent équitablement. Ainsi, le projet sera financé à 100%, mais chaque mécène n’aura déboursé 90.90€².

On peut ensuite développer cette idée en ajoutant des variables:

  • On peut estimer une fourchette pour réaliser un projet: du minimum vital, à un maximum vraiment confortable.
  • On peut proposer aux gens de définir un minimum de don en deça duquel ils ne sont plus remboursés.

Je pense que ce modèle est légèrement plus «juste» que celui retenu par les plateformes de crowdfunding classiques, pour les projets qui servent à créer un bien duplicable pour un coût négligeable.

Et bien sûr, au bout d’un moment, si suffisament de gens apprécient le projet, il devient gratuit pour tout le monde.


¹: Allez, si. Les publicités, c’est simplement moche quand c’est utilisé à très petite doses. Mais bien sûr, ça peut tout de suite envahir l’écran, clignoter, bouger dans tous les sens, faire du bruit, remplacer le contenu que vous êtes en train de lire sur la misère dans le monde par des vidéos pour de grosses voitures, etc.

Personnellement, j’ai grandi avec, et j’ai développé une certaine aptitude à les ignorer. Mais normallement, quand ça va trop loin, les gens installent des logiciels qui bloquent ces pubs.

Du coup, moins de revenu. Du coup, encore plus de pubs. Oh, wait, ça finit par ne plus marcher. On fait quoi dans ces cas là ?

Bah on réfléchi à une autre méthode.

Non, je déconne. On insulte les gens, leur rapelle qu’ils ne sont que des moutons qu’on matraque avec les produits qu’on veut leur vendre, que le contenu n’est qu’un prétexte, et qu’ils ont intérêt à désactiver rapidement leurs logiciels bloqueurs.

On leur dit que ça ne leur coûte rien de garder les pubs, et que donc l’accès au contenu est gratuit. Ce qui veut donc dire qu’on considère que le temps des gens est gratuit. C’est insultant.

Ah, et si la pub, ça ne marchait pas pour faire augmenter les ventes, ça se saurait, et on n’en ferait pas autant. Du coup, c’est que les gens finissent quand même par payer le fait d’avoir vu la pub, en payant le produit, qu’ils le veuillent ou non. C’est sournoi.

On leur dit que cette pub fait vivre des gens. Ça, c’est le meilleur argument du monde, au moins d’après les moines copistes et les marchands d’arme, de drogue, et de fille. Faut bien bosser quoi.

²: Pour ceux qui ne comprennent pas l’opération, je développe:

  • 10 personnes payent 100€ pour le projet
  • 1 personne paye 90.90€ aux 10 premières personnes
  • Chacune de ces 10 personnes récupère donc 90.90/10 = 9.09€
  • Elles auront donc investi 100 - 9.09 = 90.90€, elles aussi.

(Oui, il y a des problèmes d’arrondi de l’ordre d’un centime par personne. On s’en fout.)

Une autre manière de voir les choses:

  • Si on est 10 à participer au projet, on paye chacun 1000 / 10 = 100€
  • Si on es 11 à participer au projet, on paye chacun 1000 / 11 = 90.90€
  • etc.

TransHumUs

Robotique,
Tags: arts

Look ! The trees… They're moving !

Suite au projet OffRoad du Musée des Abattoirs à Toulouse, Céleste Boursier-Mougenot nous a demandé de l’aider sur son projet pour la Biennale de Venise.

L’œuvre transHumUs, exposée au Pavilon Français du 9 mai au 22 novembre 2015, a consisté à donner à des arbres la capacité de se déplacer. Leur mouvement (trèèèès lent) découlait de leur flux de sève.

Voici simplement quelques liens autour de ce projet.

Article

Photos

Vidéos

Revue de presse

Présentations