Le hackathon et le projet Oleti

Le hackathon et le projet Oleti

Le week-end des 25 et 26 novembre 2017 s’est déroulé le 1er hackathon de Nouvelle-Calédonie, organisé à la bibliothèque universitaire de Nouville par l’Observatoire Numérique. J’ai participé avec grand plaisir à cet événement, avec un projet qui me tenait vraiment à cœur. Nous avons constitué l’équipe Oleti, composée de Ludovic de Mon Coach Webmarketing, Victor développeur à la Province des îles, et de moi-même, pour y consacrer les 30 heures de l’événement avec l’objectif de réaliser un projet fonctionnel dès la fin du week-end.

La présentation du projet Oleti lors de la soirée de lancement du Hackathon

La présentation du projet Oleti lors de la soirée de lancement du Hackathon

La genèse du projet

J’avais entendu parler il y a déjà longtemps des systèmes d’échange locaux, généralement portés par des associations dans diverses villes en France métropolitaine ou ailleurs dans le monde. Le concept m’avait beaucoup plu, mais je n’étais pas très emballée par le fonctionnement : l’adhésion à une association, la gestion d’un compte sur papier, les petites annonces affichées dans un local ou sur dans un catalogue papier… je n’ai de toutes façons jamais eu l’occasion de vivre assez proche d’une de ces initiatives pour l’expérimenter moi-même.

Fonctionnement d'un système d'échange local

Fonctionnement d’un système d’échange local

A Nouméa cependant, il existe de nombreuses associations qui évoluent autour de cette même idée de partage, de solidarité et de mieux-vivre. Je m’investis notamment dans le Repair Café qui propose ponctuellement à tous de venir réparer ses objets en panne ou abîmés avec l’aide de réparateurs bénévoles. Je rencontre régulièrement des personnes qui souhaitent vivement aider les autres mais ne savent pas forcément comment s’y prendre, d’autres qui pensent n’avoir que peu de choses à apporter aux autres et qui se découvrent des talents de réparateur ou un intérêt à apprendre avec les autres.

Repair Café Nouvelle-Calédonie

J’ai pu expérimenter les bienfaits d’aider les autres, notamment lors des moments difficiles de la vie ou le sort semble s’acharner sur nous. Aider les autres, c’est aussi s’aider soi-même, se sentir utile apporte un sentiment de fierté et une reconnaissance qu’on n’a pas toujours l’occasion d’obtenir dans nos vies. Le monde professionnel n’est pas toujours la solution, et il n’est pas non plus accessible à tous. L’argent est souvent un frein pour obtenir un service. Et pourtant les calédoniens trouvent déjà des solutions à ces contraintes : le troc fait partie de la culture locale, que ce soit de fruits et légumes, de poisson pêché ou de services, nous y avons tous recours lorsque l’occasion se présente.

Lorsque j’ai commencé à réfléchir à un projet pour ce Hackathon, ce sont toutes ces expériences qui m’ont animée : pourquoi ne pas construire une plateforme pour faciliter ces échanges ? Donner l’occasion à chacun d’apporter son aide aux autres, de se sentir utile, et d’améliorer sa qualité de vie sans dépenser d’argent ? Tout ça est déjà possible, les solutions existent déjà, il suffit d’un espace commun pour faciliter les échanges ! Grâce à l’aide et aux discussions avec Ludovic de Mon Coach Webmarketing, le projet Oleti était né dans nos têtes, quelques jours à peine avant le début de la soirée de lancement du Hackathon.

L’idée de la monnaie virtuelle est arrivée dans un second temps, comme une solution pour répondre à cette question : que faire si j’aimerais obtenir de l’aide de quelqu’un qui n’a pas besoin de mon aide ? Cette ouverture sur la monnaie a permis de pousser le concept encore plus loin, mais a également soulevé de nombreuses questions ! Que ce soit sur le fonctionnement, sur le plan économique de la gestion d’une monnaie, sur la valorisation des services, sur la possibilité d’intégrer les échanges de biens… certaines de ces questions ne sont d’ailleurs toujours pas résolues aujourd’hui :p

 

Les choix techniques

Une fois le projet défini, ce sont les choix techniques pour parvenir à notre objectif qui ont été prépondérants. L’objectif technique était de réaliser un site fonctionnel, j’ai donc choisi de me servir de ce qui existait déjà plutôt que de partir de zéro, dans l’idée de gagner du temps et de bénéficier de l’expérience d’autres développeurs utilisant des fonctionnalités similaires.

Bien sûr, il était hors de question d’utiliser autre chose que des outils libres pour un tel projet ! WordPress est aujourd’hui leader dans les logiciels de gestion de contenu, et propose de nombreuses fonctionnalités via des plugins. Nos besoins pour ce projet étaient similaires à un site de petites annonces, ou à un site e-commerce, bien que l’un et l’autre nécessitaient des adaptations pour correspondre aux besoins. Après avoir testé plusieurs solutions, mon choix s’est donc porté sur WordPress avec divers plugins notamment e-commerce et marketplace, de gestion de points pour la monnaie, et de gestion des utilisateurs.

Wordpress

 

Le plus gros du travail serait de sélectionner les meilleurs, de les tester, de les configurer, et de développer les adaptations et parties manquantes. C’est un travail qui demande généralement de tout casser pour tout refaire plusieurs fois, et il était donc impossible que nous puissions travailler à plusieurs sur la même installation de WordPress.

Je ne savais pas comment allait être l’accès internet fourni lors du hackathon. Notre solution reposant entièrement sur un serveur web, il me paraissait risqué de compter sur un serveur distant, même en Nouvelle-Calédonie : si l’accès internet n’était pas assez stable et rapide, nous aurions été fortement ralenti à cause de problèmes techniques. J’ai donc préféré opter pour un serveur web local, sur un petit raspberry facile à transporter. J’ai pu y installer facilement une distribution Raspbian, un serveur web Apache, une base de donnée MariaDB, et php7 pour faire tourner WordPress. J’ai également créé plusieurs environnement de travail (8 en tout), pour que chaque membre de l’équipe ait sa propre version de WordPress qu’il pourrait casser sans perturber les autres, et des versions d’intégration sur laquelle les différents développements étaient regroupés pour construire une version finale propre.

Afin de faciliter la gestion de ces environnements, j’ai créé 2 petits scripts :

  • le premier pour effectuer des sauvegardes des environnements sur un disque dur externe connecté en USB au Raspberry. Ce script pouvait être lancé à la main avant une grosse modification par exemple, et également lancé automatiquement chaque heure pour tous les environnements, afin de s’assurer de perdre le moins de travail possible en cas d’erreur de manipulation ou de problème technique.
$ cat wpbackup.sh 
#!/bin/bash

if [ "$1" == "" ]; then
 liste="www www1 www2 www3 www4 am bruce ludo victor"
else
 liste=$1
fi

for i in $liste; do
 # backup
 da=`date "+%F@%H:%M:%S"`
 mkdir -p /srv/backup/$da-$i
 rsync -a /var/www/$i.troc-oleti.nc /srv/backup/$da-$i
 mysqldump $i > /srv/backup/$da-$i/$i.sql
done;
  • le second pour copier un environnement sur un autre (par exemple remettre un environnement de base, ou repartir de la version finale actuelle pour poursuivre le développement). En plus de copier les fichiers et de répliquer la base MariaDB, le script se charge d’effectuer automatiquement les adaptations de chemins dans les fichiers, d’URL, de configuration des accès à la base de donnée, et d’effectuer un backup grâce au premier script, le tout en quelques secondes.
$ cat wpcopy.sh 
#!/bin/bash

if [ "$1" == "" ]; then
 echo "source?? (arg 1)"
 exit
fi

if [ "$2" == "" ]; then
 echo "destination?? (arg 2)"
 exit
fi


# backup
da=`date "+%F@%H:%M:%S"`
mkdir -p /srv/backup/$da-$2
mv /var/www/$2.troc-oleti.nc /srv/backup/$da-$2/.
mysqldump $2 > /srv/backup/$da-$2/$2.sql

# sql
mysql -e "DROP DATABASE $2"
mysql -e "CREATE DATABASE $2"
mysqldump $1 |mysql $2
mysql $2 -e "UPDATE wp_options SET option_value='http://$2.troc-oleti.nc' WHERE option_name='siteurl';"
mysql $2 -e "UPDATE wp_options SET option_value='http://$2.troc-oleti.nc' WHERE option_name='home';"

# copie
mkdir /var/www/$2.troc-oleti.nc/
rsync -a /var/www/$1.troc-oleti.nc/* /var/www/$2.troc-oleti.nc/.
sed -i "s/define('DB_NAME', '$1');/define('DB_NAME', '$2');/g" /var/www/$2.troc-oleti.nc/wp-config.php
chown www-data:www-data -R /var/www/$2.troc-oleti.nc

Toujours dans l’idée de nous garantir un minimum de soucis techniques et une autonomie maximale, il m’a semblé judicieux de créer notre propre réseau local. J’ai donc mis en place :

  • un routeur, pouvant se connecter au réseau du hackathon en wifi ou en ethernet et fournissant un réseau privé avec DHCP à nos ordinateurs et au Raspberry, en ethernet et en Wifi privé sur un réseau caché
  • un switch pour avoir assez de prises réseau
  • un serveur DNS sur le Raspberry pour accéder aux divers environnements de travail de façon totalement locale. Le serveur DNS était configuré pour servir les requêtes récursives demandées par le réseau local et également de façon autoritaire pour la zone « troc-oleti.nc » correspondant à nos environnements de travail. Ce serveur DNS était celui distribué par le serveur DHCP pour qu’il soit utilisé par défaut sans aucune configuration sur les ordinateurs de travail.

Ce choix nous procurait également plusieurs avantages :

  • en cas de difficulté à capter le wifi du hackathon, nous avions notre propre accès wifi, et même un accès câblé plu stable.
  • même en cas de coupure de l’accès internet nous pouvions toujours travailler en local. Il était même possible de partager une connexion 3G ou 4G via un smartphone pour servir d’accès principal au réseau local
  • Tous nos outils de travail étaient protégés du réseau public derrière le routeur : aucune de nos données n’a pu être accédée par d’autres utilisateurs en dehors de notre équipe. Sur un réseau public peuplé d’informaticiens, il vaut mieux être prudent :p

C’est donc avec tout ce petit matériel que nous nous sommes rendus à la bibliothèque universitaire, et que nous avons pu mener à bien notre projet tout le week-end !

Le matériel utilisé lors du hackathon

Le matériel utilisé lors du hackathon

L’organisation du projet

L’objectif étant d’avoir une plateforme fonctionnelle au minimum, j’ai commencé par liste les fonctionnalités attendues du projet et à les répartir dans différentes versions du projet. J’ai utilisé Trello pour gérer cette organisation et communiquer l’état d’avancement avec toute l’équipe durant le week-end.

L'organisation du projet avec Trello

L’organisation du projet avec Trello

Les fonctionnalités minimales indispensables au projet (la gestion des utilisateurs, la possibilité de créer des annonces de service, la gestion du solde d’Oletis et des échanges de monnaie contre des services) constituaient la v1, que j’espérais pouvoir réaliser pendant le hackathon.

La v2 ajoutait quelques fonctionnalités bien pratiques, et rendait l’utilisation du site plus intuitif et agréable, comme l’ajout de catégories ou la localisation des annonces et surtout la création de badges de reconnaissance basés sur l’implication des utilisateurs dans l’entraide. J’espérais pouvoir la commencer sérieusement durant le hackathon.

La v3 prévoyait des évolutions très intéressantes comme l’évaluation mutuelle des utilisateurs après un échange, la géolocalisation des utilisateurs pour proposer des annonces proches, et un système de dons d’Oletis entre utilisateurs.

La v4 allait beaucoup plus loin, avec la création d’un tiers de confiance lors d’un litige sur une transaction, une réflexion sur les façons d’échanger des Oletis hors ligne, et la transition de l’Oleti vers la crypto-monnaie pour sécuriser les échanges.

Je n’espérais pas vraiment arriver à la v3 et encore moins à la v4 lors du hackathon, mais les fonctionnalités listées font toujours partie de la feuille de route du projet à long terme.

Sysamandine en plein travail durant la nuit...

En plein travail durant la nuit…

Le résultat

Le dimanche midi, nous avions une v1 fonctionnelle, avec quelques fonctionnalités de la v2. Certes pas aussi finie que ce que j’aurais espéré, mais tout de même utilisable ! Je l’ai mise en ligne avant la présentation du projet devant le jury, pour permettre à tous de la tester.

Le projet n’a malheureusement pas retenu l’attention du jury et n’a pas été primé, probablement car le projet était un peu en dehors des critères du hackathon : nous n’avons pas utilisé les jeux de données fournies spécialement lors de l’événement. Le public et les différentes personnes rencontrées ont cependant été séduites par l’idée et souhaitent vivement voir troc-oleti continuer son chemin !

C’est d’ailleurs notre souhait également, et depuis la fin du hackathon, une première mise à jour a permis de rendre l’interface plus simple et conviviale, conformément à ce que j’aurais souhaité pouvoir faire initialement lors du week-end !

La page d'accueil du site Troc-Oleti

La page d’accueil du site Troc-Oleti

Le projet suit sa route, et désormais libéré des contraintes de temps et de moyens du hackathon, plusieurs questions se posent quant aux solutions techniques choisies :

  • la solution WordPress est-elle la meilleure sur le long terme ? Est-ce qu’un développement complet ne permettrait pas plus de souplesse et de simplicité de développement ?
  • comment inclure d’autres développeurs ? C’est un projet qui se prête bien à un développement collaboratif, plusieurs personnes se sont déjà montrées intéressées pour apporter leur aide !

Des questions toujours en suspend qui trouveront probablement une réponse avec le temps !

 

Plus d’infos