Tracer des isochrones avec des données et des logiciels libres

Introduction

Ça fait bien longtemps que je n'ai pas discuté de SIG sur ce blog. Il faut dire que j'en fait un peu tous les jours, dans le cadre de mon activité professionnelle. Mais de temps en temps, c'est bien de se remettre dans un cadre plus libre.

Cet article a pour objectif de présenter une méthode pour tracer des isochrones: des courbes qui indiquent à quelle distance on peut aller dans une enveloppe de temps à partir d'un ou plusieurs points de départ différents.

Nous allons utiliser des outils libres mais également des données libres, avec toutes leurs contraintes. Notre objectif est de voir , en partant des gares d'un département, quelles sont les zones où l'on peut se rendre en voiture pendant un laps de temps donné. Nous allons retenir les plages de 5 minutes/10 minutes/18 minutes et 20 minutes.

Cet article n'a pas pour but d'être une référence de ce genre de calcul. Il présente juste une méthode parmi d'autres. Elle peut d'ailleurs se révéler très approximative et non adaptée à certains besoins. Voilà vous êtes prévenus...

Capture de données géographiques

Qu'est-ce-qu'il nous faut ?

Avant de procéder, il faut disposer de données géographiques. C'est la base. Voici une petite liste de ce dont nous avons besoin:

  • Le tracé des routes, c'est la base. C'est ce qui va constituer notre réseau de déplacement.
  • Les limites de comunes et de département pour pouvoir se situer plus facilement.
  • Les zones résidentielles pour compléter les indications de vitesse des routes.
  • Les gares et arrêts SNCF, ce seront nos points de départ ou d'arrivée. C'est ce qui va constituer les noeuds d'intérêt de notre réseau de déplacement.

Pour nos besoins, nous allons utiliser la base de données OpenStreetMap. Cette dernière est libre de droits et elle est assez complète même si, comme nous le verrons, elle pourrait être améliorée fortement.

Les données via l'API overpass

L'intérêt d'OpenStreetMap, c'est qu'on peut effectuer des requêtes via une API. Le language est assez complexe mais on peut vraiment récupérer ce qu'on veut.

Un moyen simple d'effectuer des requêtes est d'utiliser le requêteur overpass-turbo. Il permet de faire des requêtes à partir d'un navigateur web et, surtout, de visualiser les résultats avant de pouvoir les télécharger.

Voici un exemple commenté de requête pour récupérer des routes:

// On veut une sortie au format JSON
// Au bout de 155 secondes, on arrête la requête.
[out:json][timeout:155];
// On indique que la zone de recherche est identifié par le polygone
// dont le nom est "Le Loroux-Bottereau", une commune du département
// de Loire-Atlantique.
{{geocodeArea:"Le Loroux-Bottereau"}}->.searchArea;
(
  // On indique qu'on veut récupérer les routes
  way["highway"](area.searchArea);
);
// Les options pour la sortie.
out body;
>;
out skel qt;

Avec cette requête, on peut récupérer les routes d'une commune. Néanmoins, pour notre exemple, il nous faut télécharger les routes de toutes les communes d'un département. Le faire à la main est forcément fastidieux.

Certains penseront à modifier le nom de recherche en y placant celui du département. Néanmoins, ils atteindront les limites de l'API. En effet, les serveurs qui fournissent le service de l'API sont partagés et ne peuvent passer trop de temps à effectuer une requête.

Dépasser les limites de l'API

Pour récupérer l'ensemble de nos routes, nous avons deux solutions:

Et si on faisait quand même un petit script ?

Même si c'est la méthode la moins rapide, ça vaut toujours le coup de disposer d'une méthode alternative, par exemple pour le cas où vos données ne sont pas disponibles dans le téléchargement en masse.

Concrètement, l'avantage de l'API overpass, c'est que c'est une API HTTP. On peut donc l'utiliser avec un simple client HTTP en ligne de commande comme wget ou curl (ce dernier a ma préférence).

Dans notre cas, nous avons deux choses à régler: * Déterminer le code de la zone de recherche: sur le site overpass-turbo, on peut utiliser un nom comme zone de recherche mais, en vérité, une première requête est lancée sur nominatim pour transformer ce nom en identifiant de zone. * Lancer une boucle de requêtes qui sont suffisamment lentes pour ne pas effrayer les serveurs de l'API.

Voici un exemple de script shell commenté qui répond à ces problèmes:

#!/bin/bash

echo "Récupération des routes des communes..."
# Notre fichier d'entrée est un fichier csv qui contient deux
# colonnes: le code osm_id et le nom de la commune.
# Vous pouvez créer ce fichier en téléchargeant les communes du
# département via l'API overpass et en utilisant QGIS pour fabriquer le CSV.
INPUT=communes.csv
OLDIFS=$IFS
IFS=,
[ ! -f $INPUT ] && { echo "$INPUT file not found"; exit 99; }
# Le début de notre boucle
while read comid comname
do
    # On complémente à 8 chiffres l'identifiant OSM
    comid=$(printf "%08d" $comid)
    echo "Dowloading roads for $comname... ($comid)"
    # On précise notre requête OverPass
    request="[out:xml][timeout:155];area(36"${comid}')->.searchArea;(way["highway"](area.searchArea););(._;>;);out
   body;'
    # et on la joue
    curl 'https://overpass-api.de/api/interpreter' -H 'Content-Type: application/x-www-form-urlencoded; charset=UTF-8' -H 'Origin:https://overpass-turbo.eu' --data "$request" -o "roads_${comname}.osm"
    # Une méthode bourrine pour gérer les limite de l'API: on attend 10 secondes entre chaque requête.
    sleep 10
done < $INPUT
IFS=$OLDIFS

# Un script shell se termine toujours par une valeur de retour !
exit 0

Limites de département

Voici la requête overpass qui permet de récupérer la limite du départment:

[out:xml][timeout:155];
{{geocodeArea:"Loire-Atlantique"}}->.searchArea;
(
  rel["admin_level"="6"](area.searchArea);
);
(._;>;);out body;

Limites des communes

Voici la requête overpass qui permet de récupérer les limites de communes:

[out:xml][timeout:155];
{{geocodeArea:"Loire-Atlantique"}}->.searchArea;
(
  rel["admin_level"="8"](area.searchArea);
);
(._;>;);out body;

Pour l'extraction depuis OSM, utiliser grabCommunes qui utilise l'API Overpass. Pour l'import

Les gares

Voici la requête overpass qui permet de récupérer les gares et arrêts de train du départment:

[out:json][timeout:155];
{{geocodeArea:"Loire-Atlantique"}}->.searchArea;
( 
  node["railway"="station"](area.searchArea);
  node["railway"="stop"](area.searchArea);
);
(._;>;);out body;

Les zones résidentielles

Voici la requête overpass qui permet de récupérer les zones résidentielles:

[out:json][timeout:155];
{{geocodeArea:"Loire-Atlantique"}}->.searchArea;
(
  way["landuse"="residential"](area.searchArea);
);
(._;>;);out body;

Traitement des données

Chargement

Avant de pouvoir réaliser des traitements et des analyses sur les données que nous venons de récupérer, il faut pouvoir les stocker dans un endroit adapté. En effet, nous disposons de fichiers XML qui sont certes utilisables directement dans des logiciels comme QGIS, mais qui se révèlent peu performants (pour cause d'absence d'index spatial par exemple).

De plus, nous allons devoir réaliser des traitements spécifiques qui ne sont pas accessibles à tous les formats de stockage. Pour pouvoir aller plus vite, autant prendre ce qui est le plus performant, le plus complet: PostGIS.

Je vous laisse le soin de monter un serveur PostgreSQL avec l'extension PostGIS sur votre bécane. Pour ma part, je travaille avec un serveur qui écoute sur localhost, la base de données se nomme geobase, l'utilisateur se nomme geoadmin et il n'a pas besoin de mot de passe pour se connecter (c'est mal mais rapide).

Pour le chargement des XML, j'utilise ogr2ogr sur cette forme:

ogr2ogr -overwrite -f "PostgreSQL" "PG:host=localhost dbname=geobase user=geoadmin" -t_srs EPSG:2154 -lco "OVERWRITE=YES" -lco "SPATIAL_INDEX=YES" -lco "GEOMETRY_NAME=geom" -nlt MULTILINESTRING -nln communes -progress initCommunes.osm lines

Cette commande permet de créer une couche PostGIS nommée communes dans la base indiquée, dans la projection Lambert93 (2154), avec des index spatiaux, où le champ de géométrie se nomme geom.

Si vous avez plusieurs fichiers à charger, je vous conseille d'utiliser la technique suivante: * Renommer un des fichiers que vous avez à importer en initCommunes.osm * Utilisez le script suivant:

#!/bin/bash

# Import initial, permet de créer la structure
ogr2ogr -overwrite -f "PostgreSQL" "PG:host=localhost dbname=geobase user=geoadmin" -t_srs EPSG:2154 -lco "OVERWRITE=YES" -lco "SPATIAL_INDEX=YES" -lco "GEOMETRY_NAME=geom" -nlt MULTIPOLYGONS -nln communes -progress initCommunes.osm multipolygons

# Boucle d'ajout !
find ./ -name 'communes_*.osm' | while read com
do
  echo "$com"
  ogr2ogr -append -f "PostgreSQL" "PG:host=localhost dbname=geobase user=geoadmin" -t_srs EPSG:2154  -nlt MULTIPOLYGONS -nln communes -progress "$com" multipolygons
done

exit 0

Attention, pour les données des gares, je vous conseille de supprimer les données en double: certaines gares ont également des points d'arrêt.

Amélioration des données de routes: phase 1

Les données brutes sont chargées mais il reste néanmoins à les retravailler:

  • D'abord, il y a des chances que les données de routes soient en doublons dans certains cas.
  • Ensuite, il faut faire un peu de ménage dans les champs de cette couche.
  • Il faut croiser cette donnée avec les zones résidentielles.
  • Enfin, il faut s'assurer de disposer d'un réseau topologique correct.

Pour ces opérations de corrections, nous allons utiliser PostGIS et GRASS.

Dans un premier temps, il faut faire un peu de ménage, dans PostGIS:

-- Nettoyage des données de routes

---- Suppression des doublons géographiques
DELETE FROM routes WHERE ogc_fid IN (select ogc_fid from (
SELECT ogc_fid, ROW_NUMBER() OVER(PARTITION BY geom ORDER BY ogc_fid asc) AS Row,
geom FROM ONLY public.routes
) dups where dups.Row > 1
order by ogc_fid);

---- Un peu de ménage, on supprime les routes non utiles dans notre étude
DELETE FROM routes WHERE highway IN
  ('track', 'bus_stop', 'bus_guideway', 'construction', 'crossing', 'cycleway',
   'disused', 'footway', 'proposed', 'raceway', 'rest_area', 'service', 'access',
   'bridleway', 'path', 'pedestrian', 'platform','steps', 'road');

---- Modification du champ nom s'il est vide
UPDATE routes SET name = substring(other_tags from '"ref"=>"([^\"]+)".*$')
WHERE name IS NULL
  AND other_tags ~ '.*"ref"=>".*';

---- Un peu de ménage dans les champs
ALTER TABLE routes DROP COLUMN IF EXISTS waterway;;
ALTER TABLE routes DROP COLUMN IF EXISTS aerialway;
ALTER TABLE routes DROP COLUMN IF EXISTS z_order;
ALTER TABLE routes DROP COLUMN IF EXISTS barrier;
ALTER TABLE routes DROP COLUMN IF EXISTS man_made;
ALTER TABLE routes ADD COLUMN maxspeed NUMERIC(10,2);

---- Pré-affectation des vitesses en fonction du type de route
---- Récupération de la donnée OSM
UPDATE routes SET maxspeed = substring(other_tags from '"maxspeed"=>"([^\"]+)".*$')::NUMERIC(10,2)
WHERE other_tags ~ '.*"maxspeed"=>".*' 
  AND substring(other_tags from '"maxspeed"=>"([^\"]+)".*$') ~ '^\d+$';

---- Les cas spéciaux sont à 50 km/h
UPDATE routes SET maxspeed = 50.0
WHERE other_tags ~ '.*"maxspeed"=>".*' 
  AND maxspeed IS NULL;

UPDATE routes SET maxspeed = 130.0 WHERE highway IN ('motorway') AND maxspeed IS NULL;
UPDATE routes SET maxspeed = 90.0 WHERE highway IN ('motorway_link', 'trunk_link') AND maxspeed IS NULL;
UPDATE routes SET maxspeed = 50.0 WHERE highway IN ('residential') AND maxspeed IS NULL;

-- Croisement avec les zones résidentielles
---- Aggrégation des zones résidentielles
DROP TABLE IF EXISTS agg_resi;
CREATE TABLE agg_resi AS SELECT 1 as gid, ST_Union(p.geom) as geom from residentials p;
CREATE INDEX agg_resi_geomidx
  ON public.agg_resi
  USING gist
  (geom);

-- On créé une colonne pour indiquer qu'on veut supprimer des lignes
ALTER TABLE routes DROP COLUMN IF EXISTS todelete;
ALTER TABLE routes ADD COLUMN todelete BOOLEAN DEFAULT False;
-- On remplit cette colonne avec l'information 
UPDATE routes a SET todelete = True
  FROM residentials p
 WHERE ST_Intersects(a.geom, p.geom)
  AND a.highway IN ('primary','secondary','tertiary', 'unclassified');

-- On ajoute les routes découpées
--- Attention, cette requête prend beaucoup de temps...
INSERT INTO routes (osm_id, name, highway, other_tags, maxspeed, todelete, geom)
  SELECT a.osm_id, a.name, a.highway, a.other_tags, a.maxspeed, a.todelete,
         ST_Multi(a.clipped_geom)
  FROM (
  SELECT l.osm_id, l.name, l.highway, l.other_tags, 50::integer AS maxspeed, False As todelete,
         (ST_Dump(ST_Intersection(p.geom, l.geom))).geom As clipped_geom
    FROM routes l
      INNER JOIN agg_resi p ON ST_Intersects(l.geom, p.geom)
  WHERE l.highway IN ('primary','secondary','tertiary', 'unclassified')
  UNION
  SELECT l.osm_id, l.name, l.highway, l.other_tags, 80::integer AS maxspeed, False As todelete,
         (ST_Dump(ST_Difference(l.geom, p.geom))).geom As clipped_geom
    FROM routes l
      INNER JOIN agg_resi p ON ST_Intersects(l.geom, p.geom)
  WHERE l.highway IN ('primary','secondary','tertiary', 'unclassified')
  ) a
  WHERE ST_Dimension(a.clipped_geom) = 1;

-- On retire les routes à supprimer
DELETE FROM routes WHERE todelete = True;
-- On supprime la colonne todelete
ALTER TABLE routes DROP COLUMN todelete;
-- On vire la table d'aggrégation
DROP TABLE IF EXISTS agg_resi;

Amélioration des données de routes: phase 2

Ensuite, il nous faut créer un vrai réseau topologique. En effet, ce qui sort d'OSM est un ensemble de routes qui ne se coupent pas forcément au niveau des intersections. Globalement, ça peut poser des problèmes pour les traitements futurs de GRASS.

Pour y pallier, il va nous falloir faire un peu de ménage avec GRASS. Vous devez donc disposer d'une DB GRASS et avoir GRASS7 de lancé. Nous allons juste lancer un script de nettoyage qui a la forme suivante:

#!/bin/bash

# Nettoyage du réseau routier dans GRASS
## On effectue un lien vers les données PostGIS
echo "Import des données de route depuis PostGIS..."
g.remove -f type=vector name=routes
g.remove -f type=vector name=c_routes
v.in.ogr --overwrite -o input="PG:dbname=geobase user=geoadmin host=localhost" layer=routes output=routes type=line

# Nettoyage des routes (on recalcule la topologie et on vire les doublons)
v.clean --overwrite -c input=routes output=c_routes type=line tool=break,rmline,rmdupl
# On exporte en GPKG car GRASS a un problème pour écrire directement
# dans la base PostgreSQL
v.out.ogr --overwrite input=c_routes output="data.gpkg" format=GPKG layer=1 type=line output_layer=c_routes
# puis on utilise ogr2ogr pour faire le transfert
ogr2ogr -overwrite -f "PostgreSQL" "PG:host=localhost dbname=geobase user=geoadmin" -t_srs EPSG:2154 -lco "OVERWRITE=YES" -lco "SPATIAL_INDEX=YES" -lco "GEOMETRY_NAME=geom" -nlt MULTILINESTRING -nln croutes -progress data.gpkg c_routes

exit 0

En sortie, on dispose de la couche croutes dans PostGIS. Il nous reste à calculer les coûts de déplacement.

Amélioration des données de routes: phase 3

Maintenant qu'on dispose d'un réseau topologique correct, il reste une dernière étape de calcul des coûts de déplacement. Comme nous souhaitons réaliser des isochrones, le coût va être exprimé dans une unité de temps (secondes dans notre cas).

J'ai pris l'hypothèse fortement discutable de prendre un temps de trajet par tronçon égal au temps de parcours à la vitesse maximale du tronçon.

Néanmoins, pour pondérer un peu les résultats, j'ai délibérément abaissé les vitesses en suivant les règles suivantes:

  • Vitesse limitée à 90 km/h => 80 km/h
  • Vitesse limitée à 80 km/h => 70 km/h
  • Vitesse limitée à 50 km/h => 40 km/h
  • Vitesse limitée à 30 km/h => 25 km/h

Mettons tout ça en musique via PostGIS:

-- Calcul des coûts de déplacement

-- On va dire que toutes les routes qui n'ont pas de maxspeed sont à 50 km/h pour les non classées
UPDATE croutes SET maxspeed = 50.0 WHERE maxspeed IS NULL AND highway IN ('unclassified', 'living_street');
-- On va dire que toutes les routes qui n'ont pas de maxspeed sont à 80 km/h pour les non classées
UPDATE croutes SET maxspeed = 80.0 WHERE maxspeed IS NULL AND highway NOT IN ('unclassified', 'living_street');

-- On abaisse les vitesses suivant les règles sus-citées
UPDATE croutes SET maxspeed = 80.0 WHERE maxspeed = 90.0;
UPDATE croutes SET maxspeed = 70.0 WHERE maxspeed = 80.0;
UPDATE croutes SET maxspeed = 50.0 WHERE maxspeed = 50.0;
UPDATE croutes SET maxspeed = 25.0 WHERE maxspeed = 30.0;

-- Enfin, on calcule les coûts de déplacement.
ALTER TABLE croutes DROP COLUMN IF EXISTS cost;
ALTER TABLE croutes ADD COLUMN cost NUMERIC(10,2);
UPDATE croutes set cost = (ST_Length(geom)/(maxspeed/3.60)) where maxspeed > 0;

Ok, nous avons de quoi calculer des isochrones.

Calcul des isochrones

Ce calcul va se faire dans GRASS, non pas parce que c'est l'optimum, mais juste parce que c'est la seule méthode que je connaisse, en plus de PgRouting.

Pour le calcul des isochrones, nous allons utiliser nos données de routes qui vont constituer le réseau et nos données de gares qui vont constituer des centres de départ sur ce réseau.

GRASS dispose de fonctions dédiées au réseau (les fonctions v.net), que nous allons utiliser.

Le script suivant contient ce qu'il faut pour réaliser le calcul d'isochrones. Il doit être lancé dans l'environnement shell de GRASS:

#!/bin/bash

# Calcul d'isochrones dans GRASS

# On relie les données utiles dans la base GRASS sans faire d'import.
# C'est inutile dans notre cas car les fonctions de réseau vont dupliquer les données à leur sauce.
echo "Import des données depuis PostGIS..."
v.external -o --quiet --overwrite input="PG:host=localhost user=geoadmin dbname=geobase" layer=gares output=gares
v.external -o --quiet --overwrite input="PG:host=localhost user=geoadmin dbname=geobase" layer=croutes output=croutes

# Nettoyage des routes
# v.clean --overwrite -c input=routes output=c_routes type=line tool=break,rmline,rmdupl

# Construction du réseau
## Ici, on va construire un réseau au sens GRASS du terme. On part de notre couche de routes, on la convertie en réseau et on y adjoint les centres (les gares). Elles sont ajoutées au réseau par un trait de base.
echo "Construction du réseau..."
v.net --quiet -s --overwrite input=croutes points=gares output=thenetwork operation=connect arc_type=line threshold=50

# lier les bases de données des routes et des noeuds (uniquement si v.in.ogr):
#v.db.connect -o map=thenetwork@PERMANENT table=gares layer=2
# v.db.connect -o map=network@PERMANENT table=routes layer=1
# Calcul des isochrones
echo "Calcul des isochrones..."
## Ici, on prend toutes les gares et on calcule les isochrones sur des limites de coûts de 300, puis de 600 puis de 1080 puis de 1200.
## Cette opération casse le réseau selon les limites. Comme notre coût est un temps, 300 correspond donc à 5 minutes (300 secondes).
v.net.iso -u --overwrite input=thenetwork@PERMANENT output=isochrones@PERMANENT center_cats=1-1000 costs=300,600,1080,1200 arc_column=cost
# Nettoyage des valeurs à -1 dans les isochrones
echo "Suppression des valeurs inutiles..."
v.edit --quiet map=isochrones tool=delete layer=1 type=line where="center=-1 or isonr>=5"
# Exporter les données dans PostGIS (rapide) mais doit être défini dans db.connect.
echo "Export des données..."
v.out.ogr --overwrite  -c input=isochrones output="PG:dbname=geobase" format=PostgreSQL layer=1 type=line lco="OVERWRITE=YES,SCHEMA=public,GEOMETRY_NAME=geom,FID=fid" output_layer=isochrones
exit 0

Créer les polygones des zones

Vous devriez pouvoir afficher les polylignes des isochrones. Concrètement, chaque coût cumulé a été injecté dans chaque tronçon de route suivant les 4 classes énoncées plus haut (300,600,1080,1200).

Il reste à générer des polygones à partir de ces éléments. Pour ça, le plus simple consiste à utiliser PostGIS avec les requêtes qui suivent:

-- Calcul des zones d'isochrones
---- On commence par créer la tables des zones iso
DROP TABLE IF EXISTS isozones;
CREATE TABLE public.isozones
(
  fid serial,
  center integer,
  classe integer,
  geom geometry(MultiPolygon, 2154),
  CONSTRAINT isonzones_pk PRIMARY KEY (fid)
)
WITH (
  OIDS=FALSE
);
ALTER TABLE public.isozones
  OWNER TO geoadmin;

CREATE INDEX isozones_geom_idx
  ON public.isozones
  USING gist
  (geom);

-- Remplissage de la table des zones
INSERT INTO isozones (center, classe, geom) SELECT center, isonr, ST_Multi(ST_ConvexHull(ST_Collect(geom))) as geom FROM isochrones GROUP BY center, isonr;

-- Zones fusionnées
---- Ensuite, on va aggréger les zones par classe
DROP TABLE IF EXISTS merged_isozones;
CREATE TABLE public.merged_isozones
(
  fid serial,
  classe integer,
  geom geometry(MultiPolygon, 2154),
  CONSTRAINT merged_isozones_pk PRIMARY KEY (fid)
)
WITH (
  OIDS=FALSE
);
ALTER TABLE public.merged_isozones
  OWNER TO geoadmin;

CREATE INDEX merged_isozones_geom_idx
  ON public.merged_isozones
  USING gist
  (geom);

-- Remplissage de la table des zones
TRUNCATE TABLE merged_isozones;
INSERT INTO merged_isozones (classe, geom) SELECT classe, ST_Multi(ST_Union(geom)) as geom FROM isozones GROUP BY classe;
-- Découpage manuel des classes
---- Je sais, c'est crade mais c'est rapide.
UPDATE merged_isozones SET geom = ST_Multi(ST_Difference(b.geom, a.geom))
FROM (SELECT geom FROM merged_isozones WHERE classe = 1) a,
     (SELECT geom FROM merged_isozones WHERE classe = 2) b
WHERE classe = 2;
UPDATE merged_isozones SET geom = ST_Multi(ST_Difference(b.geom, a.geom))
FROM (SELECT ST_Union(geom) as geom FROM merged_isozones WHERE classe IN (1,2)) a,
     (SELECT geom FROM merged_isozones WHERE classe = 3) b
WHERE classe = 3;
UPDATE merged_isozones SET geom = ST_Multi(ST_Difference(b.geom, a.geom))
FROM (SELECT ST_Union(geom) as geom FROM merged_isozones WHERE classe IN (1,2,3)) a,
     (SELECT geom FROM merged_isozones WHERE classe = 4) b
WHERE classe = 4;

Affichage dans QGIS

Les données sont maintenant disponibles pour visualisation dans QGIS. En guise de fond de plan, vous pouvez utiliser les tuiles TMS d'OpenStreetMap:

https://a.tile.openstreetmap.org/{z}/{x}/{y}.png

Avec les éléments présentés précédemment, j'arrive à constituer la carte suivante:

Le résultat final: une couche d'isochrones !

Tout ça pour ça ? Oui mais maintenant vous savez faire. A vous de l'adapter à vos besoins.

Conclusions

Bon, c'était assez compliqué et ce, pour plusieurs raisons. La première c'est que les données d'OpenStreetMap ne sont pas encore assez fines, notamment au niveau des limites de vitesse. J'ai dû batailler pour trouver quelques techniques pour les déduires d'autres couches.

Par ailleurs, les routes OpenStreetMap ne forment pas du tout un réseau topologique (enfin du moins, en sortie de l'API overpass) ce qui pose de nombreux problèmes pour GRASS. Nous arrivons à contourner ces éléments mais cela impose d'ajouter quelques requêtes.

Enfin, ça fait longtemps que je n'ai pas vraiment fait de SIG libre: je suis donc un peu rouillé et il doit y avoir des techniques pour aller plus vite, avec d'autres opérateurs.

Le choix de PostGIS peut sembler bizarre de prime abord, essentiellement parce que finalement, tous les traitements se font sur la même machine. Au départ, j'avais commencé avec le format standard GPKG qui est vraiment bien géré par QGIS et GDAL. Mais finalement, vu les traitements imposés pour le nettoyage des données, je me suis retrouvé à court de fonctions géométriques dans Spatialite (GPKG est une surcouche de Spatialite). Je me suis rabattu vers PostgreSQL/PostGIS qui a effectivement tenu ses promesses.

Au final, on obtient des isochrones avec tous les détails pour rejouer les calculs avec d'autres classes de coût de déplacement. On pourrait aussi aller plus loin en recalculant les coûts en fonction de la présence d'éléments de signalisation qui imposent ou non un arrêt.

Mais d'ici là, et en restant approximatif, on obtient des zones pas si délirantes que ça en comparant avec ce que peuvent produire OSRM ou même Google Maps dans leur calcul de distance.

Pour terminer, on aurait pu s'affranchir de GRASS si nous avions utilisé PgRouting. Mais je souhaitais aussi montrer que le SIG GRASS avait encore des atouts sur la partie des réseaux.

Posted dim. 10 juin 2018 18:16:30 Tags:



After about 7 years of thruthful service, I need a new e-reader!

My Kindle3 is dead. Well, It's only the screen that has been fractured. Perhaps too much compression on my bag:

RIP Kindle3

It has been really good to read books on it. The eInk screen was really soft for my eyes and with time, I finally got rid of nearly all of my physical books (I own now fewer than 30 paper books vs 250 ebooks).

This Kindle has never been connected to a Wifi Network because I was (and I am still) too much paranoid to use an operating system I don't have installed myself. It never prevents me to read books on it: I simply downloaded them on my main computer and pushed them on the device via USB.

What annoyed me the most was the library software from Amazon. It was really painful to navigate through my growing ebooks collection.

I jailbreaked it as soon as I got it but I did not do so much things with all of this privileges because there was (and it still is) not so much softwares for it. I think that the eInk screen is too much complicated to use as a true screen for an operating system.

Clearly I should have tried to install something like FBReader on it. If I got more free time, I may try to install Debian on it... after all, the main board is still working and I have kept the battery.

Until this moment, well, RIP eReader!

Posted sam. 09 juin 2018 11:16:30



After Github acquisition from Microsoft it took me only few minutes to just delete my Github account!

I already wanted to do it one day or another so, Microsoft acquisition push me in some kind of mood to do it as soon as possible.

I mostly used Github platform for QGIS development. All the coding effort is centralized on this platform and it was the most practical way to push code into the project.

Thanks to resistance from lead project developers, QGIS never ported everything of its development platform on GitHub. For years there has been internal pressure to do it. But, at least until now, only code is centralized on GitHub. Issues are still on a redmine service, owned by QGIS project (or perhaps osgeo).

Some QGIS developpers tried to push the issues from redmine into GitHub but they soon face the limit rate of GitHub API and they never managed to push every bugs into GitHub. I think this step stopped them to use it for any other thing than code.

At first, I did not want to use another account just to particpate to code effort. Nowadays you've got so much accounts for anything. Hey, I've got a dedicated software (password-store) just to handle them all! So one another account, even a useful one, is still too much for 2018. Why don't we have a decentralized and universal authentication system in 2018? Probably because everybody else than me is using Facebook/Google and... GitHub for authentication instead of a real system!

As I have too few free time to contribute to QGIS, I though I could get rid of my account really quickly: I have finished my job for this project, until I find more free time to contribute.

I am really lucky to have always resisted to push all my git repositories on GitHub. My personal server owns them and I have lots of backups. They are stored behind a private cgit service and I can use it whenever I want. Perhaps one day I'll have to open them to the public. For the moment, they are well kept behind authentication!

By the way, cgit is a real peace of (free) software: fast, light and well designed. You can run it under nearly any computer as it is built in pure C. Compared to GitHub, it just lacks lots of not-git related features like issues/wiki/comments/etc. But for displaying a git repository on a web browser, it is the most efficient.

I have used GitHub for a few years and I can say that it is quite easy to use. But with time, I found it quite boring because, at a moment, you have to use their web interface to do simple things that could be made by git, for example for pull-requests. It was often painful to just open my web brower to push something on the main repository. It is not a so natural workflow when you work with git to stop operations and open another software just to share code.

It was also painful to have to use their web interface to deal with their "notifications": I already have them by mail, why annoying me on the web interface? And I don't mention when you have an heavy commit with lots of modifications, only viewable on a single page by default that will consume all your CPU cores on your 4 years old laptop.

Another thing that I regret with GitHub is the "competition" boring game for developpers: why spend time to make statistics from commits and individual developer into an action reporting calendar? I mean, it is not because you have few green days in your year that you are not working hard on some projects. It can mean you are just using GitHub for storing part of some code. Why displaying this activity other than making developpers using more and more the platform?

Furthermore, I think that GitHub, by storing too much opensource or even free softwares is really frightening: you have only one major provider for free software and it give him too much power. As Microsoft is acquiring them, it is clearly a threatening to free software (yes, even if I have seen what Visual Studio is, I will allways keep my Emacs text editor for ethical purpose).

I do hope that some ingenious developpers will build popular decentralized development platforms on which users and devs have the real power... and not just another VC backed startup which will be absorbed, one day or another, by a big evil giant corporation (look at sourceforge).

From now, I will rely on old and traditional ways to contribute to free software: emails/mailing lists/bug trackers/patches/crappy web interfaces/etc... and I will focus on free softwares that use their own development platform.

As a conclusion: farewell, GitHub!

Posted ven. 08 juin 2018 21:16:30 Tags:

Introduction

J'ai retrouvé une vieille eeprom que j'avais récupérée en desossant un viel écran CRT. C'est une LC21B de ST Microelectronics, plus précisément une ST24LC21B.

Je me suis dit que ça serait chouette de travailler un peu à une étude de son fonctionnement avec un arduino, ça fait bien longtemps que je n'ai pas utilisé ce dernier.

La datasheet de cette EEPROM montre qu'elle ne fait que 1Kbits soit 1024bits et non 1024 octets. La capacité de l'EEPROM est donc de 128 octets ce qui est très faible (mais mieux que rien).

A l'origine, cette EEPROM servait à stocker les paramètres VESA des moniteurs (sans doute les données d'EDID). Elle est donc principalement faite pour être lue via le câblage VGA par la carte graphique. Mais, à la base, c'est une EEPROM alors on peut mettre ce qu'on veut dedans.

Mais ce qui est sans doute plus important c'est qu'elle est capable de fonctionner via le BUS I2C. Ce sera donc un bon moyen de voir comment lire et écrire des bits via ce mode de communication avec l'Arduino.

I2C

I2C est un standard de communication sur deux fils créé par Philips. Il est utilisable par l'Arduino via la bibliothèque Wire que nous allons utiliser.

Pour résumer, I2C utilise deux ports analogiques spécifiques de votre Arduino. Ces deux ports correspondent aux port SDA (Serial Data) et SCL (Serial clock). Chaque "périphérique" I2C dispose d'une adresse (un peu comme une adresse MAC) et répond quand un maître (l'Arduino dans notre cas) y fait appel.

Après, on peut lui envoyer des commandes qui auront une signification propre au périphérique (une EEPROM n'a rien à voir avec un capteur de température par exemple). I2C s'occupe juste des communications, pas de la manière dont fonctionne le périphérique.

Branchements et spécifications

Sur l'Arduino

J'ai un vieil Arduino (un duemilanove) mais je constate que le dernier Arduino correspondant à la gamme (le Uno rev3) n'a pas trop évolué au niveau des grandes lignes des spécifications. On retrouve les mêmes composants, la même quantité de RAM, de Flash, de ports, etc.

Ce qui nous intéresse, cans notre cas, ce sont les ports de l'Arduino que nous allons utiliser pour la communication I2C:

  • Analog 4: SDA
  • Analog 5: SCL

Sur l'EEPROM

Nous avons les connexions suivantes:

  • VCC (+5v): 8
  • GND/VSS : 4
  • SDA: 5
  • SCL: 6
  • VCLK: 7

En lisant la doc de l'EEPROM, on se rend compte que VCLK est un port qui permet d'autoriser ou non l'écriture dans l'EEPROM. S'il est haut (5V), alors l'écriture est autorisée. Sinon, même en envoyant des ordres d'écriture, l'EEPROM ne vera pas son contenu modifié.

Par ailleurs, nous avons besoin de connaître l'adresse unique I2C de l'EEPROM. En consultant la documentation, on se rend compte qu'elle vaut 1010000x. Le x de la fin varie suivant le mode écriture/lecture de l'EEPROM. Ainsi, si vous souhaitez lire son contenu, il faudra s'adresser à 10100001 soit 0x51. Si vous souhaitez écrire dans l'EEPROM, il faudra s'adresser à 10100000 soit 0X50.

Schéma

Au final, voici l'aspect du schéma électronique (que j'ai réalisé avec Kicad):

Un schéma entre Arduino et ST24LC21B

En plus du fait de relier les bons ports entre l'Arduino et l'EEPROM, on trouve quelques composants en plus: * Les deux résistances en 4.7kOhms sur SDA et SCL sont des résistances de pull-up. Elles servent à maintenir l'état haut du bus lorsqu'il n'y a pas de communication, le tout avec un courant assez faible. * La résistance de 4.7kOhms sur VCLK sert à limiter le courant entrant sur le port numérique en sortie de l'Arduino. D'après les spécifications de l'EEPROM, le courant max (Icc) doit être de 2mA lorsque Vcc vaut 5V. Si vous faites un branchement en direct, certes, il y aura du 5V en sortie mais il n'y aura rien pour limiter le courant. Vous risquez donc d'envoyer un flux de courant d'environ 40mA (le max d'une sortie numérique d'un ATMega) ce qui grillera votre EEPROM. Si on prend la moitié de la valeur de Icc, soit 1mA, la valeur de résistance sera de R = U/I soit 5/0.001 soit 5kOhms. Mettre une troisième résistance de 4.7KOhms rentre dans les tolérances (on est à 1.06mA). Pour ma part, j'utilise le port numérique 13, ça porte chance !

En plus du schéma "théorique", voilà le schéma sur une breadboard, ça peut toujours servir pour le débutant:

Une vue de connexion entre Arduino et ST24LC21B

Code

Passons maintenant à la partie logicielle. Dans mon cas, j'ai réalisé une espèce de programme interactif qui permet d'envoyer des commandes à l'Arduino via le port série (qui passe par l'USB). Cela me permet de réaliser des opérations à la demande sur l'EEPROM.

Je me suis arrêté quand j'ai obtenu un résultat significatif: - Savoir lire le contenu complet de l'EEPROM. - Savoir écrire un octet à une adresse spécifique de l'EEPROM. - Exploiter la fonction d'écriture massive de l'EEPROM.

Voici à quoi ça ressemble:

/*
  Use an old ST24LC21B EEPROM with I2C to read and store values.
  I2C address for EEPROM:
  * 1010.0001 for reading: 0x51
  * 1010.0000 for writing: 0x50

  (c) 2018 by Médéric Ribreux
  ***************************************************************************
  *                                                                         *
  *   This program is free software; you can redistribute it and/or modify  *
  *   it under the terms of the GNU General Public License as published by  *
  *   the Free Software Foundation; either version 3 of the License, or     *
  *   (at your option) any later version.                                   *
  *                                                                         *
  ***************************************************************************
*/
// on inclut la bibliothèque Wire qui fait très bien son travail avec I2C.
#include <Wire.h>

/* Quelques constantes globales */
#define writeID 0x50 // L'adresse I2C d'écriture.
#define readID 0x51  // L'adresse I2C de lecture.
#define romSize 128  // La taille de l'EEPROM en bytes.
#define writePin 13  // Le port qui contrôle le mode écriture.

/* Variables globales */
byte addr = 0;
unsigned char eeprom[romSize]; // un tableau qui capture le contenu de l'EEPROM.
String command; // Une chaîne de caractères pour gérer nos commandes.

// Affecte ou non la protection en écriture via le port dédié
void setWriteProtection(bool state) {
  if (state == false) {
    digitalWrite(writePin, HIGH);
  }
  else {
   digitalWrite(writePin, LOW);
  }
}

// Sélectionne une adresse d'octet dans l'EEPROM (Random Access).
byte selectAddr(byte address) {
  byte state = 0;
  Wire.beginTransmission(writeID);
  Wire.write(address);
  state = Wire.endTransmission();
  return(state);
}

// Dump de l'EEPROM
void dump() {
  byte block = 0;
  byte status = 0;
  byte offset = 0;

  status = selectAddr(0x0);
  if (status!=0) {
    Serial.println("Problème d'adressage");
  }
  else {
    for(block=0;block<=4;block++) {
      Wire.requestFrom(readID, 32, true);
      while(Wire.available()) {
        eeprom[offset] = Wire.read();
        offset = offset + 1;
      }
    }
  }
}

// Test d'écriture
void writeInMemory(byte offset, byte value) {
  byte state = 0;
  // on lève la protection en écriture
  digitalWrite(writePin, HIGH);
  delay(500);
  // On se place à l'offset
  Wire.beginTransmission(writeID);
  Wire.write(offset);
  Wire.write(value);
  state = Wire.endTransmission(true);
  if (state != 0) {
    Serial.print("Erreur d'écriture: ");
    Serial.println(state, DEC);
  }
  // on remet la protection en écriture
  delay(500);
  digitalWrite(writePin, LOW);
}

// Écriture massive
void zeroMemory() {
  byte state = 0;
  byte page = 0;
  unsigned char theZero[8] = {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0};
  // on lève la protection en écriture
  digitalWrite(writePin, HIGH);
  delay(500);

  // On écrit séquentiellement
  for(page=0;page<=15;page++) {
    Wire.beginTransmission(writeID);
    Wire.write(page*8);
    Wire.write(theZero, 8);
    state = Wire.endTransmission(true);
    delay(100);
    if (state != 0) {
      Serial.print("Erreur d'écriture page: ");
      Serial.print(page);
      Serial.print(" :");
      Serial.println(state, DEC);
    }
  }
  // on remet la protection en écriture
  delay(500);
  digitalWrite(writePin, LOW);
}
// Configuration de l'Arduino
void setup() {
  pinMode(writePin, OUTPUT);
  setWriteProtection(true);
  Serial.begin(9600);
  Wire.begin(); // On lance le bus I2C
  Serial.println("\nI2C EEPROM Player");
  delay(5000);
}

// Fonction principale
void loop() {
  byte i = 0;
  //byte j = 0;

  // Un mode interactif
  if (Serial.available() > 0) {
    command = Serial.readStringUntil('\n');
    Serial.print("Your command:");
    Serial.println(command);
  }
  // On gère la signification du truc
  if (command.equals("dump")) {
    command = "";
    Serial.println("Dumping...");
    // On dumpe
    dump();
  }
  if (command.equals("print")) {
    Serial.println("Printing...");
    command = "";
    for(i=0;i<=127;i++) {
        Serial.print(eeprom[i], HEX);
        Serial.print("|");
    }
    Serial.println(" ");
  }
  if (command.equals("write")) {
    command = "";
    // on effectue une écriture de base
    Serial.println("Writing in EEPROM...");
    writeInMemory(0x9, 0xFE);
  }
  if (command.equals("flush")) {
    command = "";
    // on effectue une écriture de base
    Serial.println("Flushing data...");
    memset(eeprom,0,sizeof(eeprom));
  }
  if (command.equals("zero")) {
    command = "";
    // on effectue une écriture de base
    Serial.println("Zeroing memory...");
    zeroMemory();
  }
  delay(4000);
}

Compiler et mettre le code sur Arduino

En 2018, les bonnes recettes n'ont toujours pas changées: on a toujours besoin d'AVRdude et du paquet arduino-mk pour envoyer des choses vers l'Arduino.

Voici le Makefile que j'utilise:

# Makefile for lc21b
## Directories
ARDUINO_DIR   = /usr/share/arduino
ARDMK_DIR     = /usr/share/arduino
ARDUINO_LIBS  = Wire

## Arduino Board configuration
MCU          = atmega328p
F_CPU        = 16000000
ARDUINO_PORT = /dev/ttyUSB*

## Avrdude configuration
AVRDUDE_ARD_PROGRAMMER = arduino
AVRDUDE_ARD_BAUDRATE   = 57600

## Le nom de notre programme
TARGET        = lc21b

include /usr/share/arduino/Arduino.mk

Ensuite, un simple make suffit pour compiler le code. Pour l'upload, j'utilise make upload.

Utilisation

Ensuite, il faut voir ce que retourne l'Arduino par le port serial:

$ screen -L /dev/ttyUSB0

Vous pouvez ensuite taper vos commandes:

  • dump permet de capturer le contenu de l'EEPROM dans une variable.
  • print affiche la capture de l'EEPROM.
  • write écrit à l'adresse 0x9 la valeur FE (à vous de modifier cette valeur).
  • zero permet de mettre à zéro toute l'EEPROM.

Conclusions

Bon, j'ai bien aimé faire mumuse avec cette EEPROM. Ok, elle n'a pas beaucoup de stockage mais c'est parfait pour la lecture de données par l'Arduino qui n'a pas non plus beaucoup de mémoire. D'un point de vue didactique, c'est plutôt simple.

Bon, la bibliothèque Arduino fait vraiment bien son job: je n'ai jamais du lire les specs du protocole I2C ni faire d'opérations bas niveau pour exploiter le bus.

Bon, vous me direz que je suis bien avancé: je sais utiliser un circuit intégré qui n'est plus produit depuis au moins 10 ans. Mais sachez que le fonctionnement sera quasi-identique pour les derniers produits du moment. En effet, si je prends la M24C02, elle a pratiquement les mêmes spécifications et elles utilise les mêmes ports. Je peux substituer la ST24LCB1 de mon circuit par la M24C02 et tout marchera sans changer une virgule au code !

Ce qui est aussi dingue, c'est que cette EEPROM est assez ancienne. Je dirai qu'elle avait au moins 20 ans lors de la rédaction de cet article et les données dessus n'avaient pas bougé d'un poil de bit. Ce qui est encore plus dingue c'est que je l'ai déssoudée "à la main" pour la récupérer, avec tous les risques de surchauffe que ça comporte et qu'elle est parfaitement opérationnelle car j'arrive à tout lire et à tout écrire sans erreur.

En conclusion, je vous invite à désosser les circuits imprimés de vos rebus électroniques et à les conserver pour le futur. Ça peut toujours vous servir pour un circuit ou pour apprendre. Comme en plus vous n'aurez rien dépenser pour l'avoir, vous n'aurez pas trop de regrets lorsque, à la suite d'une mauvaise manipulation ou mauvais branchement, vous verrez un nuage de fumée en sortir !

PS: Ce composant est fait par ST Microelectronics, un vaillant fondeur de puces électroniques qui est français à l'origine. Cette multinationale embauche encore environ 10000 personnes en France. Souvent oubliée dans le monde de l'électronique qui présente souvent des acteurs américains, chinois ou japonais, ST est un acteur important de l'électronique qui emploie des vrais gens en France. Si vous avez de l'électronique à faire, je vous invite à utiliser les produits ST qui sont à la fois très bien faits, pas forcément chers à l'achat et qui profitent (un peu) à l'économie française !

Références

Posted sam. 26 mai 2018 17:29:25 Tags:

Introduction

Quand on travaille sur le logiciel libre, on finit, au bout d'un certain nombre d'années par se rendre compte que la masse de travail à achever est encore immense et qu'il manque sacrément de contributeurs pour tout faire.

C'est ce que je constate sur des projets comme QGIS: beaucoup d'utilisateurs ont des idées très intéressantes mais hélàs, même avec la meilleure volonté du monde, le flot des développeurs ne suffit pas à combler ces besoins. En conséquence, le projet voit s'amonceler un tas de nouvelles idées qui prennent du temps à être mises en place, fautes de moyens humains, les plages de développement s'allongent, il faut faire des choix, prioriser, etc.

Parfois cela peut même conduire à mettre en péril des pans entiers de sécurité comme ce fut le cas avec GnuPG il y a quelques années.

C'est que travailler sur du logiciel libre, ça prend du temps. Quand on fait ça sur son temps libre comme moi, le niveau de contribution est assez faible. Je me rends bien compte que les types qui sont payés pour faire ça sont bien plus productifs que mes petites heures glanées ici et là. D'ailleurs, on le voit à leur nombre de commits et aux messages de la mailing-list de développement.

Se pose finalement, la question du financement de tout ça ! Car, au delà de l'aspect éthique des choses, il faut bien que le développeur puisse vivre, pas forcément de son travail mais au moins subsister physiquement. En règle générale, les développeurs de logiciel libre sont loin d'être des golden boys avides de flouz. Leurs besoins sont donc très en deça des besoins du commun des mortels mais il leur faut un minimum quand même: de quoi satisfaire au moins les besoins indispensables à couvrir comme la bouffe, la flotte, un toît sur sa tête, un ordinateur pour coder, de quoi payer un peu d'électricité, un endroit pour pouvoir se focaliser, etc.

Si on veut des logiciels libres de qualité, il faut donc un moyen de rétribuer un minimum certains développeurs. On peut observer un peu tous les profils, du type payé pour le projet dans une SS2L ou un grand groupe comme RedHat, au type qui fait ça pour ses loisirs. Néanmoins, dans la tranche intérmédiaire, le besoin de €$ est visiblement indispensable, surtout quand les méthodes traditionnelles du financement de logiciel classique ne peuvent s'appliquer.

Après ce constat sévère, voyons maintenant comment je me suis mis à une plate-forme de financement de logiciel libre.

Comment je suis arrivé à tester Liberapay ?

Cela fait maintenant quelques années que j'essaye de rétribuer les projets libres que j'utilise au quotidien. Généralement, en début d'année, au moment des étrennes, je fais ma campagne de dons.

Mais, même en 2018, cette opération n'est pas si simple que ça. En effet, il y a un site de don par projet libre que j'utilise voire parfois, on ne peut pas faire de dons du tout. Il faut d'abord explorer les projets manuellement sur Internet, trouver la page de dons, étudier quels sont les moyens de paiement acceptés. Enfin, on peut passer à l'analyse des coûts en fonction de la devise utilisée, des frais bancaires, du mode de paiement (un virement SEPA dans l'Union Européenne ou par carte bancaire)...

L'ensemble requiert un peu de temps, surtout, si on veut faire les choses bien, c'est à dire en maximisant la quantité d'argent qui arrive dans la poche du ou des développeur(s) tout en minimisant les frais de gestion (car ce qu'on veut rémunérer, c'est le développeur, pas le type qui fait la transaction).

Pour autant, j'ai toujours eu un peu de méfiance vis à vis des acteurs du financement participatif qui font un peu la pluie et le beau temps. Ces startups du genre qui finissent toujours par mettre la clef sous la porte après s'être rendu compte que ça ne rapportait pas assez et pas assez vite et qui finissent par essayer de se faire du fric en revendant des données personnelles à "d'autres partenaires" ou en envoyant une floppée de spams pour te forcer à acheter leur ultime option qui tue.

Dans le courant du mois de novembre 2017, Patreon, qui est la plate-forme de financement continu d'un peu de tout la plus connue, a décidé de modifier unilatéralement ses conditions de rémunération. En résultat de ce changement, beaucoup de développeurs ont cherché d'autres moyens pour se financer. Comme en dehors de Patreon, tous les projets qui ont été lancés ont été exterminés à l'exception de Liberapay; ces developpeurs ont commence à faire un peu de pub pour Liberapay.

C'est le cas de Joey Hess, un ancien développeur Debian ultra-connu pour qui j'ai un profond respect (et je ne suis pas le seul d'ailleurs). J'ai lu son article de blog et ça m'a convaincu d'aller faire un tour sur Liberapay.

Les gens que je finance

J'ai décidé de porter mes dons à 100€ sur l'année. Ce n'est pas beaucoup mais c'est déjà un bon début. Voici les liens vers les personnes à qui je verse une modeste obole:

Qu'est-ce-qui est bien dans Liberapay ?

D'abord, le site web n'a aucune publicité et ça fait franchement du bien. Même mieux, le site n'utilise aucune ressource tierce: je n'ai aucun bloquage dans µBlock, ce qui est assez rare pour le souligner. C'est loin d'être le cas pour Patreon qui ne m'affiche pratiquement rien si je ne modifie pas ma configuration de µBlock.

  • Pas de spam après la création du compte.
  • C'est du logiciel libre.
  • Ça gère Libravatar, une alternative moins intrusive que Gravatar.
  • Ça semble léger en terme de technologie et du coup, c'est léger dans mon navigateur comparé à Patreon par exemple.
  • L'interface de traduction est WebLate, la solution libre de référence de traduction communautaire.
  • On se repère finalement assez bien.
  • Il existe des widgets pour indiquer sur son site combien on reçoit ou combien on donne.
  • Il y a une page de stats simple à comprendre, faite pour le long terme.

Quelques conseils pour donner

Pour ma part, j'ai toujours pensé qu'un virement SEPA était l'opération la moins chère pour effectuer un don d'argent au sein d'un pays de l'Union Européenne. Mais c'était sans compter sur les frais bancaires de ma banque qui me facture 3,3€ par virement ponctuel, en 2018, alors que je me tape toute la paperasse à écrire, attendre mon passage au guichet pour dépenser mon propre fric. 3,3€ sur un don de 50€, ça fait beaucoup ! On est à environ 7% de frais ce qui est énorme.

Donc, si vous avez une banque restée en 1918 comme la mienne, je vous invite à réaliser un achat de crédits plutôt par carte bancaire si vous êtes pressés, ce n'est pas si cher que ça.

Que manque-t-il à Liberapay ?

Parmi les seuls reproches que je peux faire à la plate-forme Liberapay, on trouve le manque de projets ou d'acteurs d'intérêt. En effet, point de Mozilla Foundation, de The Document Foundation, des développeurs emblématiques du Kernel Linux, idem pour Debian (même si ça commence à changer), etc.

Ce qui m'a fait adhérer (et donner), c'est principalement la présence de Joeyh Hess dont j'utilise un logiciel depuis près de 10 ans (ikiwiki, qui fait tourner ce site web d'ailleurs). S'il y avait d'autres projets phares, ça attirerait plus de monde sur le site. Comme ce dernier est plutôt pas trop mal fait, on pourrait alors utiliser ses fonctions d'exploration pour trouver autre chose que les projets très exposés.

Très clairement, le site manque de financeurs et les niveaux de rémunération sont quand même faibles même si la plate-forme brasse environ 10000€ par mois.

Ce qui serait vachement bien, ce serait de trouver les projets majeurs du logiciel libre sur Liberapay histoire que plus de gens puissent participer: des pans entiers de Debian avec des développeurs connus ou méritants (ou moins méritants mais ayant besoin d'un financement), des projets que j'utilise de Apache à BorgBackup en passant par Bind, Exim, Dovecot, Radicale, Roundcube, LibreOffice, archive.org, i3-wm, , Tor, i2pd, etc... et bien sûr QGIS !

Pour rester sur une note positive, on peut toutefois constater que les montants de financement ne font qu'augmenter, ce qui est une très bonne chose. C'est juste moins spectaculaire que sur d'autres plate-formes déjà bien implantées.

Une autre chose qui me manque, c'est de pouvoir m'adresser, via la plate-forme, aux personnes que je finance. Mon objectif est juste de leur donner une information, ce que j'aime dans leur projet, en quoi il me plaît et surtout les encourager à persévérer dans leur action. Néanmoins, je n'oublie pas aussi que les développeurs ont déjà de très nombreux moyens de récupérer cette information. C'est juste qu'on pourrait lier la rétribution avec des mots d'encouragement.

Maintenant, quand on fait un don, ce n'est pas pour demander quelquechose en retour, sinon ce n'est plus un don !

Conclusions

Sans être parfait, Liberapay se propose de financer le logiciel libre par le logiciel libre.

Le projet semble d'ailleurs assez résilient. Il n'a qu'un niveau de dépenses assez faible, qui doit être limité à quelques frais de gestion et d'hebergement. Si vous suivez l'actualité des sites de financement participatifs, vous vous rendez compte que la majorité, en dehors de Patreon a disparu, comme le défunt Gratipay.

Avec sa petite équipe limitée à 1 développeur qui ne gagne pas encore le SMIC avec la plate-forme, Liberapay fait quand même son bonhomme de chemin. Je pense que la sauce va prendre, il faut juste être patient et sans doute se concentrer un peu plus sur la communication ou sur la mise en communauté. Quelques "gros acteurs" pourraient apporter un nouveau flot de contributeurs.

Bien entendu, comme avec toutes ces plate-formes, ce qui fait le succès, c'est aussi la communication publique qu'on peut faire dessus. C'est chose faîte avec cet article.

Posted mar. 15 mai 2018 21:37:07 Tags:

Introduction

Ah, le courrier électronique, son utilisation est simple et quasi-universelle mais il existe tellement d'options et de fonctionnalités à ajouter à ce monument d'Internet qu'on oublie à quel point que faire fonctionner une plate-forme de courrier électronique requière de sérieuses compétences.

Aujourd'hui, nous allons mettre en place une technologie de filtrage au niveau du serveur pour filtrer les courriers en amont, en fonction des besoins de chaque utilisateur. Mission pas facile mais que nous allons néanmoins relever grâce à la technologie Sieve.

Récapitulatif de ce qu'il faut mettre en place

Exim4 propose la gestion de Sieve mais à un niveau assez bas: un fichier de filtre doit être déposé dans le répertoire de l'utilisateur pour qu'Exim le gère correctement. Mais, je pense que cette fonctionnalité n'est pas assez user-friendly.

On peut également implémenter Sieve du côté du serveur IMAP mais cela implique d'utiliser un service de délivrance de courrier et que ce service soit assuré par le serveur IMAP lui même. Dans le monde du courrier électronique, il existe deux grands types de service de délivrance de courrier "IMAP": LDA et LMTP. Nous retiendrons LMTP qui est plus "moderne" et surtout mieux implémenté dans Dovecot que LDA (qui repose sur un binaire externe).

Bien entendu, il faut dire au MTA qu'il doit utiliser ce service LMTP, il faudra donc modifier la configuration d'Exim4.

Une fois LMTP activé, on pourra mettre en place la gestion de Sieve dans Dovecot. Néanmoins, le problème sera identique à celui d'Exim: il reste à fabriquer les fichiers de filtres et à les déposer sur le serveur...

Heureusement, il existe un service dédiéà ça: ManageSieve. Il en existe une implémentation dans Dovecot que nous allons installer et configurer.

Enfin, si on souhaite que les filtres soient personnalisés, il reste à offrir une interface permettant de les déposer depuis le Webmail. C'est ce qui est permis par l'extensions ManageSieve de Roundcube et que nous allons également mettre en place.

On le voit, il y a du boulot en perspective... Commençons dès à présent et pas à pas !

Installation de LMTP pour Dovecot

Avant de commencer, il nous faut un serveur LMTP. Il existe une extension Dovecot qui fait très bien ce travail.

Installation

Sous Debian, c'est assez simple:

# apt install dovecot-lmtpd

Le paquet fait moins d'1Mo, pas de problème sur un PlugComputer.

Configuration

Pour configurer correctement ce mode de transport du courrier électronique, il ne faut pas oublier quelle est notre cible. En effet, nous voulons qu'Exim utilise le service LMTP pour transmettre les courriers électroniques qui seront ensuite gérés par Dovecot, lequel appliquera alors les filtres Sieve.

L'activation du protocole LMTP se fait dans le fichier maître de configuration, à savoir /etc/dovecot/conf.d/10-master.conf:

# Configuration du service LMTP
service lmtp {
  # On active le protocole LMTP sur une socket UNIX
  unix_listener lmtp {
    #mode = 0666
  }

  # On désactive le protocole LMTP par TCP
  #inet_listener lmtp {
    # Avoid making LMTP visible for the entire internet
    #address =
    #port = 
  #}
  # On va réserver 2 processus pour LMTP
  process_min_avail = 2

  # On veut que LMTP loggue les erreurs
  executable = lmtp -L
}

La configuration fine du protocole LMTP se fait dans le fichier /etc/dovecot/conf.d/20-ltmtp.conf:

##
## Configuration LMTP
##

# Pas de proxy LMTP
lmtp_proxy = no

# Pour les alias délimités, on va poser les courriels dans la 
# boîte finale et non dans la boîte aliasée.
lmtp_save_to_detail_mailbox = no

# Pas de vérification de quota
lmtp_rcpt_check_quota = no

# Toujours écrire dans la boîte aux lettres finale
# et non dans la boîte aliasée.
lmtp_hdr_delivery_address = final

protocol lmtp {
  # Les extensions gérées par lmtp
  mail_plugins = $mail_plugins
  # Le fichier de log spécifique
  info_log_path = /var/log/dovecot/dovecot-lmtp.log
  # Il faut enlever la partie du domaine pour nommer nos utilisateurs
  auth_username_format = %n
}

Intégration de LMTP dans Exim4

Maintenant que nous disposons d'un service LMTP, il reste à le faire utiliser par Exim. Par défaut, au moins, dans ma configuration simple d'Exim, j'utilise un mode de délivrance de courrier assez basique: Exim pose le message sous forme de fichier dans une arborescence Maildir. Il s'agit du transport maldir_home.

Pour mettre en place LMTP dans Exim, vous devrez configurer un router dédié ainsi qu'un transport vers le service. Nous allons placer ce transport dans le fichier /etc/exim4/conf.d/tranport/30_exim4-config_dovecot_lmtp:

dovecot_lmtp:
        driver = lmtp
        socket = /var/run/dovecot/lmtp
        #maximum number of deliveries per batch, default 1
        batch_max = 200
        # on supprime les suffixes/préfixes
        rcpt_include_affixes = false

Il reste ensuite à utiliser ce transport. Le moyen le plus simple consiste à utiliser le fichier de macros fourni par Debian: /etc/exim4/update-exim4.conf.conf et de modifier la variable dc_localdelivery qui permet d'indiquer le transport servant à la délivrance locale des courriels. Donc mon cas, j'ai juste modifié la valeur à :

dc_localdelivery='dovecot_lmtp'

Ensuite, vous pouvez redémarrer Exim (via systemctl bien-sûr) et faire un test d'adresse (via l'option -bt) pour lire le transport qui sera utilisé.

Mise en place de Sieve dans Dovecot

Installation

Ok, LMTP est en place et fonctionnel, il nous reste à nous occuper de la configuration de Sieve dans Dovecot. Il faut juste installer le paquet dovecot-sieve et son pendant administratif dovecot-managesieved:

# apt install dovecot-sieve dovecot-managesieved

Configuration

La configuration est assez simple. Il faut juste activer le module dans le transport adapté (ce sera LMTP pour nous) et configurer le fichier de l'extension.

Vous devrez d'abord activer le module sieve de LMTP. L'action se trouve dans la conf de LMTP, /etc/dovecot/conf.d/20-lmtp.conf:

protocol lmtp {                                                                                                                                             
  mail_plugins = $mail_plugins sieve                                                                                                                        
  ...
}

Ensuite, l'action se déroule dans /etc/dovecot/conf.d/90-sieve.conf. Je dirais que la configuration par défaut fait très bien le job dans la majorité des cas. La ligne la plus importante étant sans doute celle qui indique l'emplacement du répertoire de filtre et le fichier par défaut:

sieve = file:~/sieve;active=~/.dovecot.sieve

Cette ligne indique que le répertoire des filtres sieve sera ~/sieve et que le filtre par défaut à utiliser sera le lien symbolique ~/.dovecot.sieve.

A ce stade, la configuration est totalement compatible avec celle de l'interface ManageSieve de Roundcube donc, pour 90% des cas, ça ne sert à rien d'aller plus loin.

Pour plus d'informations, je vous invite à lire la page de référence.

Mise en place de ManageSieve dans Dovecot

Il reste maintenant à configurer ManageSieve dans Dovecot. Nous souhaitons activer le service uniquement sur localhost car l'accès à la configuration se fera via Roundcube qui est sur la même machine, donc pas besoin de présenter un port sur une IP publique.

Vous devez simplement renseigner le fichier de configuration /etc/dovecot/conf.d/20-managesieve.conf avec le contenu suivant:

##                                                                                 
## Configuration ManageSieve pour Dovecot                                          
##                                                                                 

# Nous activons ManageSieve                                                        
protocols = $protocols sieve

# Configuration de la connection au service                                        
service managesieve-login {
  inet_listener sieve {
    address = ::1, 127.0.0.1
    port = 4190
  }

  #inet_listener sieve_deprecated {                                                
  #  port = 2000                                                                   
  #}                                                                               

  # Number of connections to handle before starting a new
  process. Typically       
  # the only useful values are 0 (unlimited) or 1. 1 is more secure,
  but 0         
  # is faster. <doc/wiki/LoginProcess.txt>                                         
  #service_count = 1                                                               

  # Number of processes to always keep waiting for more connections.               
  #process_min_avail = 0                                                           

  # If you set service_count=0, you probably need to grow this.                    
  #vsz_limit = 64M                                                                 
}

#service managesieve {                                                             
  # Max. number of ManageSieve processes (connections)                             
  #process_limit = 1024                                                            
#}                                                                                 

# Service configuration                                                            

protocol sieve {
  # Maximum ManageSieve command line length in bytes. ManageSieve
  usually does     
  # not involve overly long command lines, so this setting will not
  normally       
  # need adjustment                                                                
  #managesieve_max_line_length = 65536                                             

  # Maximum number of ManageSieve connections allowed for a user from
  each IP      
  # address.                                                                       
  # NOTE: The username is compared case-sensitively.                               
  #mail_max_userip_connections = 10

  # Space separated list of plugins to load (none known to be useful
  so far).      
  # Do NOT try to load IMAP plugins here.                                          
  #mail_plugins =                                                                  

  # MANAGESIEVE logout format string:                                              
  #  %i - total number of bytes read from client                                   
  #  %o - total number of bytes sent to client                                     
  #managesieve_logout_format = bytes=%i/%o                                         

  # To fool ManageSieve clients that are focused on CMU's timesieved
  you can       
  # specify the IMPLEMENTATION capability that Dovecot reports to
  clients.         
  # For example: 'Cyrus timsieved v2.2.13'                                         
  #managesieve_implementation_string = Dovecot Pigeonhole                          

  # Explicitly specify the SIEVE and NOTIFY capability reported by the
  server      
  # before login. If left unassigned these will be reported
  dynamically            
  # according to what the Sieve interpreter supports by default (after
  login       
  # this may differ depending on the user).                                        
  #managesieve_sieve_capability =                                                  
  #managesieve_notify_capability =                                                 

  # The maximum number of compile errors that are returned to the
  client upon      
  # script upload or script verification.                                          
  #managesieve_max_compile_errors = 5                                              

  # Refer to 90-sieve.conf for script quota configuration and
  configuration of     
  # Sieve execution limits.                                                        
}

Mise en place de ManageSieve dans Roundcube

Maintenant que nous avons configuré l'infrastructure de bas niveau, il reste à configurer Roundcube. Ce dernier propose une extension bien nommée puisqu'elle s'appelle ManageSieve.

Installation

Vous devez vous assurer que vous disposez du paquet roundcube-plugins pour disposer de cette fonctionnalité:

# apt install roundcube-plugins

Mise en oeuvre

Vous devez activer l'extension en vous assurant qu'elle soit dans les extensions autorisées de Roundcube. Pour cela, allez modifier le fichier /etc/roundcube/config.inc.php:

// List of active plugins (in plugins/ directory)                                  
$config['plugins'] = array(
'archive',
'calendar',
'carddav',
'emoticons',
'managesieve',
'zipdownload',
'enigma'
);

Il reste ensuite à paramétrer finement l'extension. On peut le faire en ajoutant le fichier /etc/roundcube/plugins/managesieve/config.inc.php avec le contenu suivant:

<?php
// Le port managesieve utilisé. Ce sera 4190, le port réservé.                     
$config['managesieve_port'] = 4190;

// L'emplacement du serveur. Dans notre configuration, ce sera                     
// localhost car Roundcube est sur la même bécane.                                 
$config['managesieve_host'] = 'localhost';

// Méthode d'authentification utilisée.                                            
// Nous n'en employons aucune car nous sommes sur la même bécane.                  
$config['managesieve_auth_type'] = null;

// Option pour utiliser un compte alternatif pour
l\'authentification.             
// Ici, nous n'utilisons pas cette option.                                         
$config['managesieve_auth_cid'] = null;
$config['managesieve_auth_pw'] = null;

// On s'en fout d'utiliser TLS pour se connecter.                                  
$config['managesieve_usetls'] = false;
$config['managesieve_conn_options'] = null;

// default contents of filters script (eg. default spam filter)                    
$config['managesieve_default'] = '/etc/dovecot/sieve/global';

// Nom du script utilisé lorsque l'utilisateur n'a rien configuré.                 
$config['managesieve_script_name'] = 'managesieve';

// On est en 2018, UTF-8 est partout !                                             
$config['managesieve_mbox_encoding'] = 'UTF-8';

// Option pour Dovecot.                                                            
$config['managesieve_replace_delimiter'] = '';

// Ici, on peut désactiver des plugins Sieve.                                      
// Ce ne sera pas le cas sur notre configuration.                                  
$config['managesieve_disabled_extensions'] = array();

// Nous ne sommes pas en mode Debug.                                               
$config['managesieve_debug'] = false;

// Nous désactivons les options spécifiques de Kolab.                              
$config['managesieve_kolab_master'] = false;

// Extension des fichiers Sieve. Ce sera .sieve pour se conformer à                
// Dovecot.                                                                        
$config['managesieve_filename_extension'] = '.sieve';

// Une liste de noms de scripts Sieve non présentés à l\'utilisateur.
// Dans notre cas, nous n'en avons aucun.                                          
$config['managesieve_filename_exceptions'] = array();

// Une liste de domaine fermée pour contraindre les redirections.                  
// Vers d'autres domaines de courriel.                                             
$config['managesieve_domains'] = array();

// Options pour la gestion des absences.                                           
// Nous activons l'interface de gestion d'absences.                                
$config['managesieve_vacation'] = 1;

// Durée par défaut de l'absence en jours.                                         
$config['managesieve_vacation_interval'] = 7;

// Pré-remplissage de l'adresse utilisée pour la réponse.                          
$config['managesieve_vacation_addresses_init'] = true;

// Méthodes utilisées pour renvoyer le message d'absence.                          
$config['managesieve_notify_methods'] = array('mailto');
?>

Un exemple de filtre

Ce script permet de détecter ce qui vient d'une mailing-list et de le balancer dans une boîte dédiée.

# rule:[QGIS developper mailing list]                                                                                                                       
if anyof (header :contains "from" "qgis-developer@lists.osgeo.org", header :contains "return-path" "qgis-developer@lists.osgeo.org")
{                                                                                                                                
        fileinto "QGis-dev";
}

Mais, le plus simple est d'utiliser l'interface de Rouncube, c'est plus user-friendly !

Conclusions

Bon, c'était un poil complexe quand même ! Il y en a de partout et nous avons bien travaillé quand même. Faisons le bilan:

  • Nous avons modifié la configuration du MTA (Exim4) pour lui faire utiliser un transport dédié.
  • Nous avons mis en place un service LMTP via Dovecot.
  • Nous avons intégré et configuré la gestion de Sieve dans Dovecot.
  • Nous avons intégré et configuré un service ManageSieve via Dovecot.
  • Nous avons installé une extension de Rouncube permettant à l'utilisateur final de gérer ses propres scripts.

Pas simple effectivement pour une fonctionnalité qui peut sembler assez basique. Mais c'est ainsi: le courrier électronique applique à fond le principe UNIX: une fonctionnalité = un outil dédié. C'est comme ça et ça démontre qu'il sera toujours complexe d'administrer une plate-forme de courrier électronique. Le niveau de compétences à avoir est quasi identique pour une plate-forme mono-utilisateur que pour une plate-forme d'entreprise.

Voilà de quoi ajouter à votre CV qui ne pourra que satisfaire vos futurs recruteurs...

Posted dim. 14 janv. 2018 20:25:35 Tags:

Introduction

Dans la lutte contre le SPAM, j'ai déjà adopté certaines mesures comme le greylisting. C'est efficace même si cela n'est pas parfait. Néanmoins, il y a un élément dont je ne dispose toujours pas. En effet, je ne sais pas qui est le vendu de l'histoire...

Car régulièrement, au gré de ma vie numérique connectée, je dois laisser trainer mon adresse de courrier électronique. Bien entendu, même si les sites qui récupèrent cette information s'engagent tous à ne pas la refourguer à d'autres compagnons, mon niveau de confiance est proche de l'ensemble vide. Mais alors, que faire ?

Les alias délimités viennent à notre rescousse

Un moyen simple consiste à utiliser ce que j'appelle des alias délimités. C'est sans doute une mauvaise traduction de l'option 'recipient delimiter' du MTA Postfix. Cela consiste en l'utilisation d'un caractère de délimitation au sein d'une adresse de courrier électronique.

Concrètement, cela prend la forme suivante: si vous avez une adresse de courrier en toto@mondomaine.example, vous pouvez utilisez aussi une adresse du type toto_cequevousvoulez@mondomaine.example. Elle sera acceptée par votre MTA et le message sera routé vers toto@mondomaine.example.

L'astuce consiste à utiliser un délimiteur (ici, c'est '' mais ça peut être ce qu'on veut) en suffixe d'une adresse autorisée, c'est-à-dire qui existe réellement sur votre serveur. Ainsi, lorsque vous confiez votre adresse à un site marchand qui en a vraiment besoin, vous pouvez simplement utiliser totonomdumarchand@mondomaine.example comme adresse. Elle sera reconnue par votre MTA et vous recevrez du courrier électronique directement à votre adresse principale, sans aucune configuration.

L'intérêt de cette méthode consiste à fournir uniquement des adresses personnalisées pour chaque site sur lequel vous avez un compte. De cette manière, si vous récupérez du spam, il vous suffit d'afficher l'adresse d'origine (elle est présente dans les en-têtes et nombreux sont les MUA qui l'affichent (souvent pas par défaut).

Ainsi, vous saurez quel site a proprement revendu ou refourgué votre précieuse adresse. Google implémente cette astuce avec le délimiteur '+'.

Après cet intermède de haut niveau, passons à la mise en oeuvre...

Quelques rappels sur la configuration d'Exim4 sous Debian

Bon, ce qui est bien avec Debian et aussi avec Exim, c'est qu'une fois que la configuration est correctement implémentée, on n'a plus à y toucher pendant de nombreuses années.

Concrètement, le vrai fichier de configuration utilisé par Exim est situé dans /var/lib/exim4/config.autogenerated. Ce fichier est, comme son nom l'indique, généré par un programme dédié nommé update-exim4.conf (oui, je sais, un exécutable avec un .conf dedans, c'est peu courant). Ce dernier utilise la configuration éclatée située dans /etc/exim4/conf.d ainsi que le fichier de macros /etc/exim4/update-exim4.conf.conf (ça fait beaucoup de .conf non ?).

Pour modifier la configuration d'Exim, vous devez donc modifier des choses dans les fichiers situés dans /etc/exim4/conf.d puis lancer update-exim4.conf et relancer votre service exim4 (systemctl restart exim4).

Implémentation des alias délimités dans Exim4

Je ne vais pas vous ré-expliquer les principes d'Exim, il me faudrait un livre entier. Vous pouvez néanmoins vous réferrer à la documentation officielle qui est pour le coup, complète.

Comme tout ce qui a trait à la délivrance de courrier électronique dans Exim, nous allons simplement créer un router spécifique qui se charge de vérifier la présence du délimiteur en suffixe, de l'enlever avec tout le reste de l'adresse initiale et de balancer le message vers un autre routeur, chargé lui des adresses "officielles".

Je vous invite à créer un fichier nommé /etc/exim4/conf.d/router/310_recipient_delimiter (le nom est important pour l'ordre d'enchaînement des routers) avec le contenu suivant:

### router/300_recipient_delimiter
##################################

# Ce router gère la redirection vers les adresses dynamiques, définies
# avec un délimiteur. ex: toto__whatever est redirigé vers toto

recipient_delimiter:
  debug_print = "R: recipient_delimiter for $local_part@$domain"
  driver = redirect
  domains = +local_domains
  local_part_suffix =  __* : ..*
  data =  ${quote_local_part:$local_part}@$domain
  redirect_router = system_aliases

Voici les quelques explications indispensables à la compréhension de ce que nous faisons.

D'abord, nous créons un router spécifique. Il est nommé recipient_delimiter. Vous pouvez mettre ce que vous voulez comme nom mais, pour rester conforme à ce qui existe dans la littérature des MTA, j'utilise le terme recipient delimiter.

debug_print est une instruction qui imprime un message lorsqu'on est dans le mode debug d'Exim (cf plus bas). Il affiche une chaîne de caractères qui nous permet de prendre connaissance des variables local_part et domain. Ces variables contiennent respectivement la partie initiale de l'adresse en cours de traitement (toto) et le domaine traité. Le fait de mettre $ devant un nom de variable permet d'afficher son contenu (c'est $ qui permet le développement du contenu de la variable).

driver = redirect indique que ce router est de type redirect. C'est le router d'Exim qui permet la redirection de message vers d'autres routers. C'est pleinement ce que nous cherchons à faire: rediriger toto__whatever vers toto qui sera gérée par un autre router (system_aliases dans notre cas).

domains est la liste des domaines acceptés par ce router. Dans notre cas, il s'agit des domaines du système, stocké dans la variable local_domains. En fait cette variable est une liste nommée, on utilise le caractère + pour indiquer qu'on souhaite utiliser le contenu de la liste et non la chaîne de caractères en direct.

local_part_suffix est une condition pour que le router capture le message. Concrètement, si le contenu de cette condition est vérifié, alors le message est géré par notre router recipient_delimiter. Si ce n'est pas le cas, alors le message n'est pas traité par ce router (et il y a de fortes chances pour qu'à la fin, il soit rejeté). La chaîne de correspondance utilise la syntaxe d'Exim des listes. Concrètement, le suffixe cherché est du type __* ou ..* qui traite donc les adresses du type toto__whatever ou toto..whatever (* correspond à n'importe quel caractère). Attention, cette option est plus puissante qu'on ne peut le penser. En effet, le simple fait de déclarer un suffixe de partie locale d'adresse suffit à réduire la partie locale de l'adresse à la partie avant le suffixe.

data est une option de configuration des routers de type redirect. Elle indique, dans la syntaxe Exim, un moyen de trouver l'adresse réelle (toto@mondomaine.example) à partir de l'adresse initiale (toto__whatever@mondomaine.example). quote_local_part est un opérateur qui permet de mettre entre quotes la partie locale de l'adresse. Il faut l'utiliser chaque fois qu'on travaille sur la partie locale de l'adresse. Il permet de se conformer à la RFC 2822 qui gère la syntaxe du courrier électronique. On utilise ici local_part directement car local_part_suffix a déjà fait le travail de séparation pour nous.

Enfin, redirect_router est une autre option des routers de type redirect qui permet d'indiquer vers quel autre router ou balance le message qui correspond au suffixe et qui contiendra l'adresse réelle trouvée. Dans notre cas, il s'agit de system_aliases qui gère les alias systèmes et qui est le router que j'utilise pour mes comptes de messagerie configurés. Ce dernier gère la suite comme un grand.

Attention, j'utilise un transport assez simple (celui qui distribue le courrier dans un répertoire utilisateur en direct) mais si vous utilisez un transport plus élaboré qui utilise un service externe, il faudra sans doute configurer le service externe pour prendre en compte aussi l'adresse originelle qui est transmise dans les en-tête du message.

Tester notre configuration

Après avoir appliqué votre configuration, vous pouvez la tester en utilisant l'option -bt du binaire exim, de la manière suivante:

# exim4 -bt toto__nimportequoi
R: recipient_delimiter for toto__nimportequoi@mondomaine.example
R: system_aliases for toto__nimportequoi@mondomaine.example
R: system_aliases for moi@mondomaine.example
R: userforward for moio@mondomaine.example
R: procmail for moi@mondomaine.example
R: maildrop for moi@mondomaine.example
R: lowuid_aliases for moi@mondomaine.example (UID 1053)
R: local_user for moi@mondomaine.example
moi@medspx.fr
    <-- toto@mondomaine.example
    <-- toto__nimportequoi@mondomaine.example
  router = local_user, transport = maildir_home

Ici, on voit que toto__nimportequoi est transformé en toto puis en moi (la véritable adresse car toto est aussi un alias mais non dymanique, déclaré dans /etc/aliases)

En cas de problème, vous aurez probablement un message du type:

R: system_aliases for toto__nimportequoi@mondomaine.example
toto__nimportequoi@mondomaine.example is undeliverable: Unrouteable address

Afficher la source dans Roundcube

Dans Roundcube, l'adresse originelle n'est pas affichée par défaut, vous devrez activer la colonne À pour l'afficher dans la liste des courriels entrants.

Conclusions

Avec ce routeur, vous avez une infinité d'adresses de courrier électronique à votre disposition pour lutter contre le SPAM en sachant qui vous a vendu.

Maintenant, cet article ne parle pas de la contre-offensive possible qui peut prendre une forme légale (si vous avez envie de prendre du temps pour ça), une redirection vers du SPAM par défaut de cette adresse une fois qu'elle a été revendue ou encore plus radical, un bannissement de l'adresse au niveau du serveur.

Références

Posted sam. 13 janv. 2018 17:37:07 Tags:

Introduction

Pour cette fin d'année, je me suis fait un éternel plaisir à parcourir l'intégralité de la production de Stevie Wonder. C'est mon dernier article de 2017 sur une intégrale musicale... J'ai gardé du très bon pour la fin.

Comme d'habitude, j'ai parcouru l'intégralité des quelques 25 albums de l'artiste dans un ordre chronologique.

La huitième merveille de la musique

La carrière musicale de Stevie Wonder commence très tôt. En effet, lors de la publication de son premier album, il n'a que 12 ans ! Surnommé Wonder par ses producteurs en référence à ses talents extraordinaires au chant, aux instruments et à la composition pour un âge auquel nombreux sont ceux qui préferrent jouer aux billes (ou s'échanger des messages débiles sur le énième réseau social à la mode comme on dirait de nos jours).

Bon, à cet âge, Stevie est mineur et il ne peut pas faire ce qu'il veut: il est fortement encadré par la production de la Motown, en plein essor pendant ces années. Cela s'en ressent forcément sur ses albums.

Pour ma part, je n'ai pas eu le temps d'écouter les 5 premiers albums de Stevie Wonder car ils sont peu facilement disponibles et parce qu'il fallait bien limiter mon temps d'écoute à un mois. J'ai préférré me concentrer sur les débuts de fin d'adolescence de l'artiste, vers 1966 (il a alors 16 ans). Voilà pourquoi je commence cette rétrospective avec "Down To Earth", sorti la même année.

Down To Earth (1966)

C'est à partir de l'année 1966 qu'on peut dire que Stevie Wonder prend quasiment sa voix d'adulte, profonde, avec assez de coffre pour paraître crédible.

Que dire de "Down To Earth" ? D'abord qu'on sent qu'il s'agit d'une production de la Motown. Tous les codes de l'époque se retrouve, du thème des chansons jusque dans les choeurs qui accompagnent le chanteur. La musique très centrée sur les violons en fond sonore fait également parti du spectre de la compagnie de Berry Gordy. A cette époque, ce format fait effectivement fureur.

Mais cette fois, la voix de Stevie Wonder fait la réelle différence avec les autres interprètes du label R'nB de référence.

  • "A Place In the Sun" est une ballade très folk sur laquelle la voix de Stevie Wonder passe vraiment très bien. Une bonne piste d'introduction assurément.
  • "Bang Bang", plus Soul encore, montre que la Motown est bien là. On aurait pu faire interpréter la chanson par un groupe comme les Delfonics que ça n'aurait pas suscité de réaction.
  • "Thank you Love" est batie sur le même rythme que "What's Going On?" de Marvin Gaye. Les sonorités sont proches même si l'orchestration est très différente ce qui rend la chanson bien moins subversive, plus gentille. On y ressent quand même une certaine forme de questionnement, d'incertitude dans ses cassures d'harmoniques.
  • "Be Cool, Be Calm" sonne très Soul music à la sauce James Brown. Très dynamique, très Otis Redding comme dans "Respect". Très dans les codes de l'époque mais comme j'aime bien cette musique, j'adore ce morceau.
  • "Sylvia", encore une ballade mais on ne s'en lasse pas un seul instant.
  • "Angel Baby" avec son introduction percutante semble avoir été écrite pour et par Marvin Gaye. On y retrouve un Stevie Wonder qui imite son pair de l'époque: les cris haut-perchés de sa voix, les choeurs féminins font penser directement à "Too Busy to Think about My Baby". Encore l'ombre de Berry Gordy sur cette piste. Mais ça rend plutôt pas mal. J'aime ce dynamisme...
  • "Mr Tambourine Man". En général, je n'aime pas les reprises. Cette fois, il s'agit d'une reprise de reprise. En effet, la chanson de Bob Dylan a été reprise par les Birds. C'est cette version que reprend Stevie Wonder. Bon, je trouve que celle des Birds est plutôt meilleure.
  • "Sixteen Tons" aurait pu être écrite par les Platters, sans problème. Un peu molle dans la bouche de Wonder.
  • "Hey Love" termine l'album de manière plutôt concluante. Rien de bien folichon, plutôt de la tendresse bien faîte.

D'une manière générale, "Down To Earth" s'écoute assez facilement si on aime les références de la Motown de l'époque. La voix de Stevie Wonder suffit à sublimer cette production un peu formattée. A seulement 16 ans, c'est bien l'interprète qui fait toute la différence. C'est franchement un bon début pour ce dernier.

Je vous invite à écouter cet album sans doute peu connu des fans (car vieux et pas facile à trouver). Il n'y a aucun tube connu dessus mais je le classe bien meilleur que tout ce qu'a produit Stevie Wonder depuis ces 20 dernières années, c'est dire !

Up Tight (1966)

Deuxième album pour la Merveille toujours agée de 16 ans. La différence avec l'album précédent reste sans doute dans le dynamisme. Si les codes musicaux restent 100% conformes à ceux de la Motown, je trouve que le rythme des morceaux est bien plus dynamique, en prémices de ce que va produire Stevie dans quelques années.

  • "Love A Go Go". C'est la piste d'introduction de l'album et le moins qu'on puisse dire, c'est qu'elle envoie du bois. Il reste toujours cet aspect très policé (encore et toujours la Motown) mais ça commence à groover pas mal non ?
  • "Hold Me",
  • "Blowin' In the Wind". Comme toujours la règle est confirmée: cette reprise d'une chanson phare de Bob Dylan est nulle, même dans la bouche de Wonder !
  • "Nothing's Too Good For My Baby" nous replonge dans un style très Otis Redding.
  • "Teach Me Tonight", encore une fois j'ai l'impression d'entendre "Tramp" d'Otis Redding.
  • "Uptight, Everything Allright" est la piste majeure de l'album. Bien rythmée, elle nous envoie sur la piste de dance avec un mouvement bien engagé. C'est sans doute le morceau le plus dynamique de cet album finalement assez fougueux. C'est sur cette piste que Wonder commence à marquer des points.
  • Encore une piste dynamique avec "I want My Baby Back", toujours dans le même ton que "Respect".
  • "With a Child's Heart", une piste plus calme, plus en violons, parfaite pour les exclamations des Delfonics encore une fois.

Ok, l'album s'écoute pas trop mal pour les fans de la Motown dont je fais partie. A force, on finit par retrouver tous les autres chanteurs du label dedans mais ça fait partie du jeu.

Néanmoins, dans cet album, Stevie Wonder arrive quand même à placer ses éléments propres, à commencer par sa voix. Le morceau éponyme commence à marquer un peu les esprits. Encore un bon début...

I Was Made To Love Her (1967)

J'ai un peu plus de mal avec cet album qui est composé en grande partie de pistes reprises parmi le catalogue à succès de la Motown. Sans conteste, les originaux sont bien meilleurs.

Pourtant et incontestablement, sur les pistes propres à Stevie Wonder, on assiste à une qualité d'interprétation et de production bien supérieure aux précédents albums.

Ainsi, "I Was Made To Love Her" qui lance l'album annonce un futur Stevie Wonder bien trempé. D'abord l'introduction à l'harmonica reste une de ses signatures. Ensuite, le rythme et la mélodie entraînante de la chanson la rende incontournable dans le répertoire de l'artiste.

"Send Me Some Lovin'" avec son introduction grave et bien construite, continue à rendre cet album bien intéressant. Le dynamique "I'd Cry", construit sur les recettes classiques de la boîte de production rend finalement très bien dans la voix de Wonder, notamment grâce à ce rythme, ces choeurs et ces exclamations si particulières.

Pour le reste, il n'y a que des reprises que je trouve assez moyennes, comme à mon habitude.

Néanmoins, sur ce qui est du vrai Stevie Wonder sur cet album, on peut entendre des titres majeurs.

For Once in My Life (1968)

En dehors de la piste éponyme, je trouve cet album un peu en retrait par rapport aux autres. Peut-être qu'au bout de ces 3 albums, il finissent tous par se ressembler. Car il est vrai que la patte de la Motown a un effet un peu écoeurant à la fin.

Je note toutefois quelques pistes qui ont aiguisé mon appétit:

  • "You Met Your Watch", bien rythmée avec ses cuivres percutants.
  • "Sunny", bien que pour une reprise fasse plutôt bien son job.
  • "I'd Be A Fool Right Now", pour son côté Delfonics.
  • "Do I love Her" pour son côté ballade.

Peut-être un essouflement de cette carrière si prometteuse ? Peut-être tout simplement la fin de l'ère Motown pour Stevie Wonder ?

My Cherie Amour (1969)

En 1969 sort "My Chérie Amour", le bien nommé. La chanson éponyme qui commence l'album est un monument de tendresse et de déclaration d'amour. J'aime assez bien son côté précurseur de ce que pourra être "Isn't She Lovely" qui sortira dans 7 ans.

La deuxième piste n'est pas mal non plus. "Hello Young Lovers" annonce la couleur d'un rythme Soul endiablé digne de ce que pourrait faire un James Brown. Mais après cette piste l'album s'essoufle quand même sérieusement.

L'autre piste d'intérêt de l'album est "Yester-Me Yester-You, Yesterday" avec son refain incontournable.

Mais après, le tout reste plat. Rien d'extraordinaire ne percole de l'ensemble. Tout reste trop comme les autres albums; il y a encore trop de Motown dedans et on finit par se lasser sérieusement.

Bon, espérons que tout cela change pour la décénnie à venir...

Vers la libération et l'apothéose

Vers l'âge de 20 ans, Stevie Wonder commence à obtenir son indépendance musicale et financière de la Motown qui reste son producteur sous le label Tamla. Voyons ce que cette libération peut provoquer chez l'artiste.

Signed, Sealed and Delivered (1970)

Le premier album de la décennie 70 s'annonce plutôt un très bon cru. En effet, on y renifle encore quelques relents des années 60 mais l'ensemble fleure bon la soul music avec le style si particulier de Stevie Wonder.

Dès les premières notes, l'album est posé sur les rails de l'excellence. "Never Had A Dream Come True" amorce la pompe de manière très gospel. "We can Work It Out", très rythmé, mèle années 60 et soul music comme jamais.

La piste éponyme de l'album, une référence de l'oeuvre intégrale de l'artiste, sonne de manière assez conquérante. A l'inverse, on a l'impression de se retrouver dans un temple protestant d'un quartier noir avec "Heaven Help Us All". Plus douce, plus en grâce, elle me semble être un clip de nostalgie de gospel pour un Stevie Wonder qui a à peine la vingtaine.

Le plus sérieux "You can't Judge a Booke By it's Cover" nous renvoie à une séquence plus grave, plus philosophe que les autres morceaux de l'album.

Malgré une très bonne introduction de piano "Sugar" me laisse une trainée mélodique un peu niaise dans ses élans et ses aigus.

L'album se termine sur deux pistes qui sont proches dans les tons. Plus calmes, on y trouve une Stevie moins enthousiaste, plus calme. Pour autant, "Something to Say" s'annonce plus politique que jamais avec ses revendications sur la jeunesse et son supposé manque de sérieux.

Non, vraiment cet album est vraiment très bon et je l'écoute souvent.

Where I'm Coning From (1971)

Stevie Wonder fait des albums depuis ses débuts. Après une production dantesque, que va-t-il arriver ? Peut-on raisonnablement rester bon en étant aussi productif et aussi jeune ?

La réponse de l'artiste se fait sans appel: oui, c'est possible. "Where I'm Coming From" se veut encore plus sérieux que l'album précédent. Plus de sonorités graves, un rythme plus marqué, des titres plus sérieux et, surtout, une teinte instrumentale plus mûre font de cet album une véritable réussite.

Les deux premières pistes "Look Around" et "Do Yourself a Favor" renforce cette impression de force. Alors que "Think of Me As Your Soldier" et "Something Out of The Blue" sont plus en douceur.

Paradoxalement, les pistes "I wanna Talk To You" et "Take up a course in Happiness" forment un ensemble moins réussi, car trop niaises. Elles ressemblent aux musiques trop formattées de la Motown.

En revanche, l'album se termine par deux perles de tendresse: "Never Dreamed You'd Leave In Summer" et "Sunshine in Their Eyes" mélangent tristesse, nostalgie avec espoir infini. J'aime assez bien cette fin d'album.

Pour résumer, avec "Where I'm Coming From", on assiste à l'affirmation d'un jeune Stevie Wonder plus libre dans ses réalisations, qui reste fidèle à un certain style mais qui produit vraiment quelquechose de remarquable. Encore un très bon album !

Music of My Mind (1972)

Maintenant débarassé de l'influence de la Motown pour de bon (et de son contrat avec Berry Gordy), Stevie Wonder rentre plus dans un rôle de créateur compositeur sur cet album.

En effet, il sonne assez différemment des deux derniers albums. Je le trouve beaucoup plus mûr, plus concret, moins léger, plus audacieux dans les instruments.

Ça se remarque dès la première piste "Love Having You Around". Tout en sérieux avec ses tons plus graves; elle introduit plus de sons bizarres, nouveaux que dans les deux derniers albums.

On le retrouve aussi dans "Superwoman" avec une introduction si particulière. La mélodie et les paroles rélèvent une qualité de production qui donne une véritable d'impression de sérieux tout en étant dans la nouveauté. Sans doute une des meilleures pistes de l'album.

La piste qui suit "I Love Every Little Thing About You" reprend la même recette avec une mélodie et un ton de voix un peu différents. Mais c'est la même impression de qualité qui s'en dégage.

Plus légère "Sweet Little Girl" n'est pas en reste avec ses airs d'harmonicas, signature de Stevie Wonder.

Viennent ensuite deux pistes qui se ressemblent musicalement et qui sont bâties sur le même modèle et qui viennent consolider cet album déjà très bon: "Happier Than The Morning Sun" et "Girl Blue".

L'album se termine en apothéose par "Evil", une piste plus mélancolique mais avec une sonorité cantique, solennelle, servie par des choeurs bibliques et un orgue synthétique qui ne dénoterait pas plus que ça dans une église.

Au final, il n'y a aucune piste moins bonne que l'autre sur cet album. C'est pour ça que je l'adore aussi. Plus lent dans le rythme, plus calme, "Music Of My Mind" est assez représentatif de la décennie 70 pour Stevie Wonder: de l'excellence, à n'en pas douter au bout de ces trois albums...

Talking Book (1972)

La même année que Music of My Mind, sort le magnifique "Talking Book". Il est lancé par l'excellente "You are the sunshine of my heart", fruit d'une collaboration à plusieurs voix.

La deuxième piste "Maybe Your Baby", en dehors du tube qui la précède est plus complexe. De nouvelles sonorités un peu dérangeantes s'annoncent. Et pourtant, je lui trouve un sérieux plus fort que sur l'album précédent.

"You and I", plus calme et plus posée, illustre assez bien ce que peut être une ballade romantique. Avec son introduction tout en cordes synthétiques et avec la voix retravaillée de Stevie Wonder pour lui donner un accent un peu metallique, on se sent bien, dans la sérenité.

Dans le même genre calme mais avec un poil plus d'inquiétude, on retrouve "You've Got It Bad Girl". Plus grave, elle comporte pourtant quelques instruments spécifiques, comme ceux qu'on pourra retrouver sur l'album "Innervisions", publié l'année suivante. Moi j'aime bien cette inquiétude.

Enfin, on débouche sur une autre des piste qui forment le top 5 de Stevie Wonder: "Superstitions". Tout est extraordinaire dedans, de l'introduction en rythme avec son export de cordes qui simulent celles d'un piano, au propos de Stevie Wonder. Sans doute une de mes pistes préférées car je trouve qu'elle est très dansante, très groovy tout en offrant une richesse musicale qu'on trouve rarement de nos jours. J'adore cette marque de fond de rythme qui ne change jamais mais sur lequel on peut plaquer à peut près n'importe quoi pour le faire vibrer correctement. Sans compter les cuivres très présents dans cette piste. Le plus simple, c'est de de se remettre l'épisode de Soul Train de l'époque où on voit danser les gens avec Stevie Wonder présent dans la salle derrière son clavier. Ça devait être extraordinaire.

L'autre piste qui forme les 3 tubes de l'album est sans nul doute "Blame it on the Sun". Beaucoup plus calme, plus nostalgique que le reste de l'album, elle permet de trouver la paix, surtout à l'approche de la mélodie du refrain où les choeurs viennent nous soulever vers le bonheur. Pas mal pour quelqu'un qui ne peut pas voir la lumière du soleil...

L'album se conclue avec deux pistes intéressantes sans être extraordinaires mais on est tant marqué par le reste, que c'est de bonne guerre.

D'une manière générale, je trouve l'album encore plus audacieux que "Music of My Mind". Sans doute plus posé encore, je crois qu'on peut dire que depuis le premier album de cette décénnie, Stevie Wonder est sur une pente ascendante dans la qualité de sa production. Après 4 albums en moins de 3 ans, que va-t-il se passer pour ses prochaines productions ? Le pire ou le meilleur ?

Innervisions (1973)

Ah, cet album est une mine d'or; des hits à la pelle; du lourd, du vrai, le top du top de ce que Stevie Wonder peut faire. J'adore cet album, je l'ai vraiment écouté en boucle, notamment ses meilleures pistes. Je n'arrive pas à croire à ce niveau de qualité auprès duquel je suis passé à côté pendant toutes ces années.

Tout commence avec "Too High", un condensé de groove, de cuivres graves, rythmés par une basse simple mais percutante avec un effet d'entraînement de dingue. Ce morceau est une leçon de Soul music. Dans tous les cas, l'album est plutôt bien introduit.

Qui dit innervisions, dit aussi visions. Certes, Stevie Wonder est aveugle et voilà pourquoi il nous propose son interprétation d'un monde avec ce sens en moins, ce regard nécessairement intérieur. La deuxième piste de l'album, nommée "Visions" offre un espace de quiétude, probablement issu de l'intérieur de l'esprit du compositeur, sur un rythme beaucoup plus calme que "Too High". La mélodie nous transmet une certaine dose d'inquiétude aussi, par le biais de décalages harmoniques; ainsi qu'un zeste de mélancolie, apportée par cette guitare sèche bien triste. Une très bonne piste assurément.

Vient ensuite un tube: "Living in the City", un cri de guerre porté par un rythme de fou, pendant près de 7 minutes. Les paroles sont engagées, le groove certain, les percussions en choeur sur un canal endiablé. Un truc que tu écoutes pour te remonter, pour t'endurcir. Même si la voix aigue de Stevie Wonder vient apporter sa force à l'ensemble. Je connaissais déjà cette chanson ultra-connue de Stevie Wonder et je l'avais déjà appréciée dans le passé. Mais j'ai pris plaisir à la ré-écouter sur une version longue.

En lien avec la piste précédente, dans un registre plus doux, arrive "Golden Lady". C'est une de mes pistes préférées de l'artiste. J'adore l'introduction en piano, suivie rapidement par ce souffle électronique d'orgue qui vient aiguiser ma curiosité. La mélodie simple de prime abord se complexifie pour le meilleur sur un rythme posé, calme, assuré. Avant que la voix de l'interprète lance "Golden Lady, I'd like to go there". Les sons électroniques aigus qui ponctuent l'ensemble ajoute une dose juste-comme-il-faut de mélancolie, sublimée par des percussions légères. J'adore l'écouter quand je rentre du bureau...

La piste suivante "Higher Ground" dispose d'un rythme plus groovy, plus léger que "Golden Lady" mais ce groove bien présent s'apprécie à sa juste valeur.

Plus grave encore, "Jesus Children of America" reprend une bonne part de groove mais plus sérieux, plus calme, moins simpliste, plus sombre. Bon, ce n'est pas la piste que je préferre mais la perfection n'est pas de ce monde. Elle est néanmoins d'un très bon niveau.

Par la suite, le morceau qui vient après, dénommé "All in Love is Fair" est un monument de douceur et de mélancolie. J'en ai toujours les larmes aux yeux lorsque j'entends cette introduction en solo de piano sur cette mélodie qui mèle à la fois espoir et tristesse infinie. La voix de Wonder, plaquée sur ce piano inaltérable, se révèle dans une forme de tendresse totale. Alternée dans les graves et les aigus, comme La Merveille sait si bien le faire, on constate que cette voix est un instrument de plus pour l'artiste.

Enfin, on tombe sur l'extraordinaire "He's Misstra Know-It-All" (C'est monsieur je-sais-tout), une chanson adressée à Richard Nixon et à sa politique et à ses manières peu orthodoxes (qui a dit Watergate dans l'assemblée ?).

Ce qui est assez génial, c'est de constater que c'est un album qui est 100% fabriqué par Stevie Wonder: il a lui même assuré l'enregistrement de tous les instruments accoustiques et électroniques; la composition des paroles, des mélodies. Ce type est juste un génie, au sommet de son art. Ce n'est pas un détail: arriver à ce niveau de perfection, quasiment seul est au delà de la portée du commun des mortels.

Fulfillingness' First Finale (1974)

Bon après l'enorme succès d'Innervisions (enfin, succès pour mes petites oreilles à moi), on peut se dire que Stevie Wonder ne peut aller plus haut. C'est sans doute vrai pour l'album "Fulfillingness' First Finale" mais on reste franchement à un très haut niveau de qualité qui est un chouilla juste en dessous d'Innervisions. Mais c'est juste pour faire une petite gradation.

D'abord cet album commence très bien par cette petite piste très sympathique, intitulée "Smile Please". Très joyeuse, elle possède un refrain très enjoué qui fait du bien. Une piste à écouter le matin en allant travailler assurément.

"Heaven Is 10 Zillion Light Years Away" qui suit juste après est également remarquable, surtout dans sa richesse instrumentale. Ces sonorités si spécifiques commencent à irriguer tout le travail de l'artiste et, à la fin, elles finissent toujours par faire du bien à nos oreilles. Pour moi, cette piste symbolise un sentiment de sécurité profond, un certain niveau d'harmonie et de force intérieur qui conduit à me rassurer. Encore une piste pour faire le plein d'énergie avant d'aller travailler.

"Too Shy To Say", avec son introduction plus ridicule nous remet sur les rails de la tendresse et de la ballade amoureuse. Plus mélancolique avec ses sonorités hawaiennes, plus calme, elle vient distiller le rythme lent des vagues sur la plage de ma vie. J'aime bien m'y reposer...

Dans une rupture totale, "Boogie On Reggae Woman" se veut plus groovy que jamais. Voilà qui réveille pas mal, surtout lorsque l'harmonica magique fait son apparition. On passe encore un bon moment.

"Creepin'" se veut alors une piste plus inquiétante, plus lourde, plus coulante, plus calme. Son introduction anémique laisse place à une mélodie simple et très Soul. Apaisant, presque reggae si on avait changé le rythme musical.

Alors que tout bascule pour la piste qui suit, plus jazzy avec ses cuivres et plus rythmée surtout. "You haven't done nothing" comporte d'ailleurs une super introduction avec un son de synthétiseur si typique de l'album.

On aborde ensuite la référence Soul de l'album. "It Ain't No Use" est clairement dans un registre un peu différent des autres pistes de l'album. Plus calme que ce qui suit, elle finit par exploser lors du refrain avec ces choeurs qui clament "bye bye, bye bye bye" sur la voix déchirante de Stevie Wonder. Une leçon de Soul, c'est certain.

Dans le registre de la tristesse et du regret, l'apothéose revient certainement à "They Wont'go When I Go", si mélancolique, si religieuse avec ses quelques instruments et son piano qui pleure alors que Stevie Wonder semble murmurer une oraison funèbre. Toujours cette forme de beauté dans le malheur qu'on retrouve chez le peuple noir et pour laquelle j'ai un respect absolu.

"Bird of Beauty" reste un peu dans le même registre Soul que "It Ain't no Use" car elle adopte des codes similaires: des choeurs féminins, un rythme fluide, une mélodie sympathique. J'aime beaucoup ce côté assuré dans la voix de Stevie Wonder qui se conjugue extrèmement bien avec ces voix féminines.

Pour terminer en beauté, "Please Don't Go" vient prouver une fois de plus que Stevie Wonder est un maître de l'émotion et de la chanson qui donne de l'espoir. La mélodie simple qui donne l'impression de l'avoir déjà entendu ailleurs est une déclaration de regrets comme on n'en fait peu. Néanmoins, tout laisse penser à une forme de rédemption et d'espoir face à la situation: la mélodie n'est pas vraiment triste, les choeurs portent une forme de joie et l'harmonica magique efface tout trace d'inquiétude. Le final nous invite à nous envoler vers le paradis. Les ailes me poussent dans le dos quand j'entends cette musique.

Dans tous les cas "Fulfillingness' First Finale" est un album excellent. Sa richesse musicale le prouve. On y trouve de la Soul, du Groove, de la mélancolie comme de la joie intense et un espoir infini. Il n'y a, encore une fois, rien à jeter dessus. Toutes les pistes ont leur intérêt. La seule différence, c'est que les morceaux qui sont dessus sont un poil moins connus que les références commerciales de Stevie Wonder. Je vous encourage fortement à garnir votre bibliothèque musicale avec cet album, vous ne pouvez pas être déçus...

Songs in the Key of Life (1976)

Deux ans après l'album précédent, Stevie Wonder remet le couvert mais cette fois avec un double album. Mathématiquement, on reste à un rythme soutenu d'un album par an !

Que vaut donc cette production ? Tentons une petite rétrospective... Le premier disque commence par le très raisonnable "Love's In Need Of Love Today". Je le trouve très moderne pour son époque. Il ressemble assez aux meilleures productions de Stevie Wonder pendant les années 80 (et elles sont d'ailleurs rares).

Comme autre nouveauté, on trouve "Village Ghetto Land", très calme où la voix quasi a capella de Stevie Wonder sonne relativement clairement et avec un fort écho pour la chanson.

"Contusion" change tout avec un rythme assez marqué. Cette piste entièrement musicale reste un emblème des années 70 et leurs sonorités spécifiques. J'y vois quand même un zeste de Carlos Santana dans la guitare électrique mise en avant.

Apparaît ensuite "Sir Duke", un hommage très jazzy (mais avec un bon mix Soul quand même). C'est également une piste ultra-connue de Stevie Wonder. J'aime bien l'écouter de temps en temps pour son dynamisme et la force de son refrain.

Elle se poursuit aussi avec une autre piste hyper-dynamique: "I Wish" qui sonnera assez bien aux quadragénaires de 2017 qui ont tous entendu la reprise de Will Smith dans les années 2000. Courir avec cette musique dans les oreilles ne peut qu'améliorer vos performances. Cet air entraînant est vraiment très motivant mais restera imprimé dans votre cerveau assez longtemps...

Vient ensuite une piste très intéressante "Knocks Me Off My Feet", sonne un peu comme le premier morceau de l'album avec des différences musicales notables. Beaucoup moins rythmée que la piste qui la précède, elle n'en conserve pas moins encore une espèce de dénominateur commun pour l'album: une certaine forme d'assurance et un style fluide bien épaulé par une mélodie dont les codes restent très présents sur l'album.

"Pastime Paradise" est également bien connue avec son rythme lent et ses percussions marquantes, le tout dans une musique inquiétante et qui semble dure au premier abord. Ce n'est pas pour rien que dans les années 90, elle sera reprise sous le titre "Gangsta Paradise" par Seal.

Vient enfin une petite merveille nommée "Summer Soft". Elle pourrait se comparer à "I Wish" dans ses codes. Néanmoins, son introduction est plus légère, plus douce malgré un rythme plus soutenu au fur et à mesure qu'on progresse dans le temps. Ce refrain calqué sur un "and she's gone!" prononcé par l'interprètre est tout simplement génial. La conclusion musicale du morceau vaut aussi son pesant de cacahuètes par sa richesse éclatante ponctuée par un grand nombre de sons différents mais bien harmonisés par ce rythme devenu finalement intense. Une autre piste qu'on emporte en allant courir.

Abordons-donc le deuxième album. Il est introduit par l'archi-ultra-connue "Isn't She Lovely", ode à toute naissance de fille. C'est un morceau très long sur cet album (près de 7 minutes) où on peut ressentir pleinement l'émotion transparaitre de la voix de l'auteur/père/compositeur. On ne peut pas ressortir indemne de ce morceau. Le coup de grâce viendra nécéssairement de la séquence finale à l'harmonic, si mélodique (et si difficile à interpréter sur cet instrument limité).

"Joy Inside My Tears" nous offre également un moment de calme et de contemplation. Alors que "Black Man", bien plus rythmé nous rappelle que Stevie sait gérer ces ensembles de cuivres so Soul music.

"If it's Magic" nous replonge dans le calme et la volupté surtout avec son parcours musical à la harpe.

On retrouve un autre tube de l'album: "As". Sous ce titre court, se cache un autre monument de la production de Stevie Wonder. Un rythme extraordinaire, une fluidité musicale proche de la perfection et surtout une mélodie magique, dynamique bien mise en valeur par des choeurs féminins si modernes. Une piste excellente pour partir en vacances tant elle fait ressortir la joie et la légèreté du moment.

Viennent ensuite quelques morceaux d'intérêt:

  • "Another Star", très disco dans ses instruments.
  • "Saturn", avec ses synthétiseurs très années 80 avant l'heure.
  • Le triste "Easy Goin' Evening (My Mama's Call)" qui fait pleurer l'harmonica.

On le voit bien, sur ce double album, on a encore accès à quelquechose qui s'approche de la perfection. Pour moi, c'est le dernier album majeur de Stevie Wonder. Tout ce qui viendra après sera forcément moins bien. Mais on peut déjà remercier l'auteur de nous avoir tant donné dans cette décénnie.

Journey Through The Secret Life of Plants (1979)

Cet album est plutôt instrumental, il se veut la BO d'un documentaire sur la vie des plantes. Bon, pour un documentaire c'est sûrement très bon d'avoir Stevie Wonder dans les crédits mais au final, ce double album me met souvent mal à l'aise car trop "indien boudhiste" comme sonorité. J'ai du mal à pouvoir en écouter plus d'une piste par jour.

Au final, je vous conseille de faire l'impasse; c'est n'est pas comme si Stevie Wonder n'avait rien fait d'autre...

Passage vers le commercial et la légèreté

Au début des années 80 et après quelques années sans sortie d'album, Stevie Wonder change encore de registre et épouse quasi-complètement les codes musicaux de l'époque. Par ailleurs, il quitte le registre expérimental pour se tourner vers des productions plus commerciales.

Hotter Than July (1980)

Et ce virage se ressent dès le premier album de la décénnie 80. "Hotter Than July" fleure bon les vacances au soleil et la légèreté qui va avec. Néanmoins sans être bon à jeter à la poubelle, l'album est franchement en deça de ce que Stevie Wonder nous avait proposé dans la décénnie passée.

Quelques pistes sortent du lot et permettent à l'album de s'en sortir quand même:

  • "All I Do" sonne très eighties mais reste très abordable et s'écoute facilement avec intérêt.
  • "Master Blaster" aurait pu sortir sur "Songs of the Key of Life" vu son architecture et sa teneur. Elle aurait fait un bon complément à "Sir Duke". Ça reste une des pistes majeures de Stevie Wonder des années 80. Je l'aime beaucoup.
  • "Lately", sirupeuse à souhait, d'une grande mélancolie est certainement une production hyper-commerciale. Mais je ne sais pourquoi je l'ai toujours adorée. Sans doute ce calme intense, cette pauvreté musicale assumée et toujours cette voix sublime; au service de la beauté dans le triste.
  • Et enfin, la piste qu'on balance à tous les anniversaires "Happy Birthday". Pas forcément commerciale au premier abord, elle forme l'essentiel d'un évènement festif: du rythme, de la joie, de la légèreté et un refrain que tout le monde peut répéter à l'envie. Un grand succès assurément.

Pour le reste, il reste quand même des choses qui sortent de l'ordinaire mais les codes musicaux sont vraiment transformés par ce qu'on pouvait trouver en mainstream à l'époque. Ce n'est pas ma tasse de thé malheureusement (malgré le fait que ce soit pleinement la musique de mon enfance).

Allez ! On peut lui mettre une note de 6/10 quand même...

The Woman in Red (1984)

Attention, sortez les synthés, les coiffures éclatées, les épaulettes, voici les années 80 dans toute leur "splendeur". Sorti en 1984, "The Woman in Red" est la bande originale d'un film éponyme. Stevie Wonder en assure la BO avec Dionne Warwick.

Bon, c'est très eighties dans les codes. Dans l'ensemble, l'album forme une sorte de tâche dans la carrière de Stevie Wonder à cause de la rupture avec un album comme Songs in the Key of Life. On voit clairement que c'est du commercial.

Pourtant, quelques perles émergent (pas facile de faire du pas terrible quand on s'appelle Stevie Wonder). On retrouve ainsi l'ultra-connu "I Just Called To Say I Love You". Un des morceaux phares de l'artiste.

Sur un plan plus musical, deux autres pistes ont relevé mon attention. Il s'agit de "Love Light in Flight" qui, certes sonne très années 80 mais qui forme un ensemble un peu moins léger, plus profond. Ce qui n'est pas le cas avec l'autre piste. Intitulée "Don't Drive Drunk", elle semble avoir été composée avec le synthétiseur sonore de la Nintendo NES tant les sonorités semblent sortir de la console sur The Legend Of Zelda ou Super Mario. Les petites voix débiles accélérées ont quand même un air très entêtant...

In Square Circle (1985)

On reste dans les années 80 mais cette fois, on sort de la bande originale de film. In Square Circle est un album encore une fois représentatif de son époque. Mais je commence à avoir du mal avec justement.

Tout sonne très codifié. On est vraiment loin des années 70 et clairement dans le léger et le commercial. Les sonorités ne sont pas vraiment intéressantes.

Seuls deux titres archi-connus sont présents sur cet album:

  • Part-Time Lover qui est très bon dans son rythme.
  • Overjoyed qui prouve qu'on peut être dans les années 80 et faire quelquechose de qualité.

En dehors de ces deux références, fuyez !

Characters (1987)

Et la suite de la décénnie 80 s'annonce encore plus creuse pour Stevie Wonder qui poursuit sur sa lancée commerciale. Pour aller vite, seul le bien nommé "Free", qui a eu le malheur d'illustrer la bande son de nombre de publicités pour une banque en France, est digne de Stevie Wonder.

Pour tout le reste, j'ai du mal. Ça a vraiment mal vieilli...

Jungle Fever (1991)

Ah, les années 90, un monde en pleine perdition. Que va faire Stevie Wonder dans cette décénnie maudite pour la production musicale (le rap, la techno craignos, les boys-bands, les comédies musicales niaises, les chanteurs déjà ringards à 19 ans car ils chantent déjà de la merde, formatée par leurs ainés) ?

Heureusement, il ne fera que deux albums. Parmi lesquels la bande originale du film "Jungle Fever" de Spike Lee. J'ai eu l'occasion de voir le film avant de faire cette intégrale. L'idée que j'avais eu à l'époque, c'était que la bande son était plutôt pas trop mal foutue (alors que le film était franchement moyen; faut dire, le personnage principal est Welsey Snipe).

Je confirme: sous un premier aperçu trop techno, l'album s'écoute plutôt bien. Les sonorités ne sont ni trop années 80, ni trop années 90. La mélodie est au rendez-vous, à part sur quelques pistes. Et on si on écoute l'album en se disant que ce n'est pas un album pour nous faire réflechir trop, on passe finalement un bon moment.

La piste la plus emblèmatique, qui résume bien l'album à elle seule est sans doute "Jungle Fever". On y retrouve un truc bien frappé, un peu décalé avec un mélange de sons des années 90 avec des choeurs des années 70 et la voix d'un Stevie Wonder des années 70. Le mélange prend pas trop mal pour mes oreilles.

Conversation Peace (1995)

Après une bonne reprise avec Jungle Fever, l'autre album de la décennie 90 de Stevie Wonder allait-il faire aussi bien ou mieux ?

Selon mon point de vue, "Conversation Peace" n'est pas si mal que ça. Il comporte d'ailleurs quelques pistes d'un grand intérêt:

  • "Taboo to love", calme et posée semble quasiment anachronique dans cet album qui se veut assez dur, comme le voulait les codes de l'époque.
  • "I am New", encore très années 80, il sauve les meubles car très différent des autres pistes de l'album.
  • Enfin, le très bon "For Your Love", assez rempli de miel, s'écoute finalement très bien. Malgré les synthétiseurs à outrance, c'est la mélodie qui sauve tout. Elle sonne aussi très années 80, à la manière d'un "Overjoyed", sorti dix ans plus tôt. La meilleure piste de l'album, à n'en pas douter...

Néanmoins, le reste de la production est trop nineties, trop rap, trop rythmée comme les productions commerciales de l'époque. Des pistes comme "Rain Your Love Down", "Edge Of Eternity" ou encore "Take The Time Out" essayent d'ailleurs d'imiter les codes du rap. Mais Stevie Wonder ne sait pas faire ce genre de musique, clairement. Il a juste emprunté ce qui marchait à l'époque chez les jeunes et y a plaqué son style. Mais la sauce ne peut pas prendre: l'acide se mélange mal avec le lait. A la fin, on a même du caillé en gros morceaux. Ça ne peut pas être fluide, c'est trop hybride. Voilà ce que je reproche à cet album.

A Time To Love (2005)

Ok, 1995 marque pour moi souvent une barrière fatidique pour les artistes. La décénnie 2000 est souvent encore synonyme d'une production très moyenne. Pourtant, Stevie Wonder qui n'a pas sorti d'album depuis plus de 10 ans alors qu'il en était à plus d'un par an dans la décénnie 70 sort un nouvel album.

J'en parlerai assez rapidement car cet album ne m'a pas vraiment marqué. L'ensemble est assez plat. Certaines pistes ne sont pas si mauvaises mais il n'y a rien qui perce vraiment.

Le problème réside justement dans les codes musicaux: trop de rythme cadencé de manière très mécanique, trop de percussions techno et trop de miel et de sirop dans la mélodie. Rien qui sorte vraiment de ce qui se faisait à cette époque(et qui continue à se faire maintenant d'ailleurs). J'ai du mal à apprécier. Particulièrement sur les pistes qui s'approchent des rythmes du rap, nouvelle musique (plus de la percussion avec de la voix humaine d'ailleurs) noire.

Par ailleurs, j'ai clairement l'impression que certaines pistes essaient de reprendre le meilleur de Stevie Wonder dans les années 80. Mais l'ensemble est franchement trop mou. Si on avait appliqué le code musical des années 70, je suis certain qu'on aurait obtenu quelquechose de moins "Mariah Carey" ou Whithney Houston qui dessert forcément Stevie Wonder et son style si aventureux des années Soul.

Pour mieux comprendre, il faut quand même prendre le temps d'écouter l'album pour s'apercevoir que des pistes comme "Shelter In The Rain" ou "Can't Imagine Love Without You" auraient eu leur place sur "Songs in the Key of Life", sans problème car les mélodies sortent un peu du lot. Il manque un zeste de provocation dans cette production.

Mais à travers la décénnie 80 et 90, on sait que les années 70 sont celles du passé. Il n'y a pas de regret à avoir, c'est juste le temps qui passe. Restent quelques afficionados comme moi qui savent s'affranchir des barrières du temps pour se concentrer sur ce qui leur fait plaisir avant tout !

Ce que je retiendrai de Stevie Wonder

Avant de commencer cette intégrale musicale, je savais que j'aimais plutôt bien ce que faisais Stevie Wonder. Maintenant, je sais que je suis fan de sa période des années 70, celle où il se révèle comme un des maîtres de la Soul music. C'est vraiment cette période où il donne le meilleur de lui même, avec un style qui lui va assez bien.

Bien entendu, il y a du moins bon. Comme d'habitude, les années 80 et 90, trop commerciales à mon goût ne sont jamais une réussite pour les artistes qui ont démarré dans les années 60 ou 70. Ça a été le cas pour les Beach Boys ou encore Bruce Springsteen par exemple, dans ce que j'ai écouté cette année.

Mais au final, j'ai découvert un nombre incroyable de pistes qui m'étaient complètement inconnues, en dehors de la portée d'un best-of (même en double album) car trop nombreuses. Je n'en reviens toujours pas de ce niveau de qualité. La décénnie 70 était vraiment, pour Stevie Wonder, une explosion d'excellence. C'est ce que je garderai en mémoire pour le reste de ma courte vie.

Faisons le bilan de cette année 2017 en musique

Voilà, mon pari est tenu: j'ai écouté l'intégrale de 10 artistes sur ces 12 mois. Beaucoup me rétorquerons que c'était surtout des artistes morts, du passé, très connus et que je ne pouvais pas être déçu. Que je n'explore pas assez les nouveautés, que je n'ose pas sortir assez des sentiers battus ou de ma zone de confort.

Néanmoins, je tiens à dire que je fais bien ce que je veux non ? Je gère mes oreilles comme bon me semble. Écouter un artiste qui a terminé sa carrière est plus simple pour moi: au moins je ne suis pas obligé de suivre son actualité, ce qui me fait gagner un temps précieux. Par ailleurs, quand j'ai construit cette liste d'artistes, il s'agissait d'abord d'artistes que je connaissais mais que j'avais envie d'approfondir. Car, faire l'intégrale d'un artiste permet d'être sûr de ne rien oublier de ce que les critiques musicaux auraient pu oublier. Par ailleurs, en 2017, ré-écouter des pistes des années 60 n'est pas forcément anachronique car la musique a quelquechose d'intemporel.

Définitivement, je reste ancré dans les années 70 et parfois 60. Je ne sais pas pourquoi, ce n'est pas du tout ma décénnie. J'y retrouve très souvent les airs que je préferre. Je n'ai vraiment aucune explication car je n'ai finalement jamais entendu cette musique pendant mon enfance, trop marqué par le top 50 des années 80 et 90... Je crois tout simplement que c'est ce que j'aime vraiment. Pourquoi le mettre de côté ?

Quant à la musique d'aujourd'hui, je l'ai abandonnée dans les années 90; sans doute définitivement, par dégoût et écoeurement de ce qui était produit à l'époque. Je n'y peux rien, je n'ai jamais accroché et, avec le temps, je finis par croire que ça ne prendra jamais. Il reste quelques exceptions comme lorsque j'ai écouté "Sigur Ros" qui est sans doute le groupe que j'ai le plus apprécié cette année. J'ai continué à écouter leur musique tout au long de l'année; toujours avec la même admiration.

Vais-je renouveler l'expérience l'an prochain ? J'aimerais bien car il me reste tant à découvrir. La Soul music ne m'a pas encore livré tous ses secrets et pourrais y consacrer encore une année de plus à la découvrir avec des auteurs comme James Brown, Al Green, The Delfonics, Diana Ross ou encore Curtis Mayfield. Le rendez-vous est pris !

Posted mar. 26 déc. 2017 12:14:25 Tags:

Introduction

Comme au mois de novembre, je termine mon périple littéraire pour cette année. Pour le mois de décembre, j'ai pris le temps de lire "Un animal doué de raison" de Robert Merle. Comment suis-je arrivé à ce livre, publié en 1967 ? Pas par hasard, non. En fait, il se trouvait dans la bibliothèque de mes grands-parents paternels (la fameuse bibliothèque peuplée de toute une rangée de livres de Charles De Gaulle). Quand j'étais enfant, la couverture m'attirait beaucoup parce qu'il y avait un dauphin dessus. Quand on est enfant, on est forcément attiré par les dauphins.

Muni de ce souvenir, j'avais de grands espoirs dans le contenu de ce livre...

L'histoire courte

Un résumé consiste à dire qu'il s'agit d'une oeuvre mélant à la fois une pincée de science-fiction et un zeste de politique internationale dans un grand verre de lait. Pourquoi du lait ? Parce que le lait, ça délaye bien, pardi !

L'histoire se situe dans le début des années 1970 aux États-Unis d'Amérique. Un professeur américain étudie les dauphins et parvient à en faire parler un. De mots mono-syllabiques, il parvient à lui enseigner l'anglais, non sans mal. Même si une présentation publique des avancées des travaux du professeur a lieu devant toute la presse, l'activité du professeur est fortement espionnée par plusieurs agences américaines de renseignement intérieur.

Un jour, une de ces agences subtilise le couple de dauphins parlants pour les transformer en arme de destruction sous-marine (c'est écrit à la fin). Pendant ce temps, le professeur retravaille en freelance sur d'autres dauphins... M

Un jour, un navire de l'US Navy explose au large des côtes chinoises. Immédiatement la machine de guerre s'emballe et un ultimatum est posé par les USA envers la Chine avec des menaces d'utilisation d'arme atomique. Entre temps, le professeur négocie le retour de ses deux anciens dauphins dans son nouveau laboratoire indépendant. Quelques jours plus tard, sa planque est attaquée par des tueurs payés par un ennemi extérieur. Après une attaque majeure, on retrouve les corps des deux permiers dauphins parlants.

Mais en fait, ils s'étaient planqués. Le professeur les retrouve rapidement et ils se mettent à parler de ce qui leur est arrivé lorsqu'ils ont été subtilisés. Ils racontent leur entraînement militaire qui les conduisit à poser des bombes sous des bâteaux factices. Un jour, on leur a donné l'ordre d'aller de poser une bombe assez loin. On les a transportés dans un sous-marin, non sans mal, avant de les lâcher en mer avec leur mission. Près du bateau, les mines qu'ils transportaient sur des harnais se sont activées et leur harnais qui se décrochait tout seul d'habitude semblait indémontable. A force de mordillement, ils finirent par se libérer du harnais et quelques minutes plus tard, la bombe explosait, coulant le navire. Les dauphines comprirent qu'ils avaient été utilisés pour une mission suicide censée déclencher la 3ème guerre mondiale.

Le professeur a pris soin d'enregistrer les conversations des dauphins. L'histoire se termine avec les dauphins poussant le radeau du professeur et de son assistante, en vue de révéler les enregistrements au président des USA, pour sauver le monde...

Mes impressions sur le livre

Bon, le livre se lit très facilement mais j'ai été assez déçu. En effet, si l'histoire était sans doute un poil novatrice en 1967, ce n'est plus trop le cas 50 ans plus tard. Le concept a déjà vécu et c'est même une réalité encore en 2017. En effet, il existe un programme militaire utilisant des dauphins. Comble de l'histoire, ce programme prend fin cette année 2017 car les animaux seront remplacés par des drones !

D'un point de vue littéraire, je dois dire que je me suis un peu ennuyé. En effet, le style est assez coupé: l'auteur alterne les phases où il raconte l'histoire et où il se passe quelquechose avec d'autres moments où on a droit à des discussions assez ennuyeuses entre les personnages ou dans des dialogues intérieurs assez pénibles à lire. J'avoue, dans les derniers moments, j'ai carrément zappé ces passages sans intérêt aucun pour l'histoire.

Ainsi, lorsqu'on vire toute cette agitation écrite, on obtient une histoire finalement très courte. Elle est certes d'un bon niveau d'intérêt mais ces moments assez longs à lire ont tendance à noyer le poisson (pardon le mammifère marin).

Par ailleurs, la fin abrupte qui devait sans doute faire un effet à l'époque a plutôt mal vécu. Ça fait style mais on a déjà vu un maximum de fin qui n'en sont pas vraiment et on sait maintenant en 2017 que ne pas finir une histoire est un sacrilège (enfin, c'est mon point de vue assumé).

Conclusions sur "Un animal doué de raison"

Pour mon dernier livre de l'année, j'ai finalement été assez déçu. Ce qui est assez paradoxal, c'est que c'est le premier livre qui m'est venu à l'esprit quand j'ai inscrit cet objectif de lire un livre par mois en 2017... Bon, au moins de tout, j'ai enfin lu ce livre qui m'attendait depuis près de 30 ans sur cette bibliothèque aujourd'hui disparue, avec leurs propriétaires...

Conclusions sur l'expérience de lire au moins un livre par mois

Voilà, c'est mon dernier article de revue littéraire de cette année. Il est temps de faire une petite rétrospective...

Alors, quel est mon avis sur cette expérience ? Il est plutôt positif. A l'origine, je trouvais que je ne lisais pas assez. Depuis quelques années, j'étais passé d'un stade d'une dizaine de livres par an à moins de un (celui qu'on commence et qu'on ne finit pas par manque de temps ou d'intérêt). Pourtant, j'ai toujours lu des tas de livres depuis que je sais lire et cet exercice finissait par me manquer.

Le fait de se contraindre à un livre par mois permet de s'assurer un minimum de lecture régulière. En parler dans un article de blog chaque mois me met également la pression pour ne pas lacher le projet. C'est un mécanisme qui se révèle assez efficace car je n'ai pas flanché une seule fois. Je suis d'ailleurs allé plus loin en ajoutant plus d'un livre par mois, surtout au début. C'est la preuve que ma soif littéraire était finalement assez importante.

En guise de matériel, j'ai quasiment utilisé tout le temps ma liseuse électronique qui commence maintenant à dater un peu. Elle se révèle néanmoins très efficace même si, lorsque j'étais en randonnée sur le GR70, j'ai utilisé des livres papiers, plus lourds mais plus robustes. Même s'il s'agit d'un modèle propriétaire (de chez Amazon qui plus est, le mal capitaliste sauvage absolu), je crois que je ne pourrais pas lire autant de livres si je ne disposais pas de ce périphérique. En effet, tout tient dans un petit sac à dos et pèse moins de 250g, le tout pour une bibliothèque entière.

Pourtant, tout n'est pas forcément rose dans cette histoire. A commencer par le temps qu'il faut pour lire. J'ai essayé dans le train et chez moi avant de me coucher. Ce dernier exercice se révèle assez difficile car la lecture a chez moi un rôle apaisant qui finit par m'endormir rapidement. Pas facile de s'accrocher à un livre dans ces conditions. De plus, raconter tous les mois un résumé de ce que j'ai lu est très consommateur de temps. Il faut que j'y consacre entre deux et trois heures par article, ce qui est long. Pour terminer sur ce point, il faut aussi avouer que d'avoir de la pression sur un sujet donne un sentiment d'obligation, de forcing sur mon temps libre qui est une ressource extrêment rare.

Mais finalement, quelle est la qualité de ce que j'ai lu ? Il faut bien avouer que c'était assez hétérogène en matière de contenu: de la littérature moderne américaine, de la science-fiction, du documentaire vulgarisateur, des écrits d'autistes, du manuel d'organisation, etc. Pour autant, je ne regrette pas grand chose. Mes choix initiaux n'étaient pas si mauvais que ça.

Quel est le meilleur livre de cette année ? D'un point de vue littéraire, celui que j'ai le plus apprécié est sans doute l'attrape-coeur de Jérôme Salinger. Je ne saurais dire pourquoi. La Billebaude d'Henri Vincenot a été une vraie surprise d'intérêt pour moi. Il m'en reste une très bonne impression... Enfin, les écrits de Josef Schovanec m'ont particulièrement parlé, une vraie révélation...

Vais-je reconduire cette expérience l'année prochaine ? Je ne saurais dire... Aurais-je autant de temps à y consacrer, rien n'est moins sûr ! Pourtant, je suis tiraillé entre mon désir de lire des choses nouvelles (ma bibliothèque numérique présente encore de nombreux ouvrages que je n'ai pas encore ouverts) et le fait de lire sous la contrainte. Pourtant, je sais que sans cette dernière je n'aurai pas été aussi assidu. Je vais essayer de lire encore 12 livres par an au moins mais en me contentant de faire une revue globale et courte en fin d'année prochaine... C'est le meilleur compromis qui s'offre à moi pour l'instant. A bientôt !

Posted ven. 01 déc. 2017 22:23:39 Tags:

Introduction

Dans mes résolutions de 2017, il y a marqué "Écouter l'intégralité d'un artiste musical par mois"... Pour le mois de novembre ce sera le duo des Carpenters.

Oui, je sais, c'est sans doute une référence trop polie, trop sobre par rapport aux goûts des années 2010 mais, ça fait bien longtemps que je souhaite pouvoir les écouter dans leur intégralité.

Ticket to Ride (1969)

Tout commence par l'année 1969, vous savez celle où les Muscle-Cars américains sont au top de leurs performances, l'époque d'Easy-Rider, du rock contestaire, des hippies, tout ça !

Mais 1969, c'est également l'année où sort le premier album studio des Carpenters, duo formé par Richard Carpenter, le frère ainé, à la composition et aux claviers et Karen Carpenter, la soeur cadette, à la voix si troublante. Loin du rock, loin de la soul, c'est un album bien gentillet qui sort en cette année de rupture pour l'amérique triomphante.

Car dès ce premier album, le style doux et un tantinet neutre des Carpenters s'affirme. Pas de cris, pas de guitare criarde, pas de sons trop forts ou de bruits mécaniques. Juste une douceur parfois trop polie. Néanmoins, la sauce marche car cet album représente un bon début.

A vrai dire, la première piste ressemble à un cantique religieux ("Invocation"). C'est très déstabilisant pour un départ. Si vous n'avez aucune connaissance de ce que les Carpenters ont produit, vous pouvez très bien avoir la tentation de balancer l'album à la poubelle. Pourtant, cette première piste a le mérite de poser ce qui fait la force du duo: la voix de Karen, si douce, si tendre et si posée, si claire.

La deuxième piste s'inspire un peu de ce que peuvent produire les Beattles à l'époque (ils sont au sommet de leur carrière). Elle emprunte un peu de ses codes à certaines pistes des Beach Boys aussi. Car en effet, les Beach Boys sont également bien connus à l'époque. Souvent les introductions de voix ressemblent beaucoup aux phrasés des Beach Boys avec leur décalage harmonieux. Les Carpenters arrivent également à le faire à eux deux et ils en abusent souvent dans de nombreuses pistes de cet album. C'était le signe d'une époque.

Mais c'est bien "Somday" qui marque le plus cet album. On y trouve une certaine forme de sérénité, de calme, de rythme doux, sous forme d'une ballade légère qui agrémente les vocalises de Karen Carpenter. Elle se révèle d'ailleurs bien mature pour son âge (elle n'a que 19 ans), au moins dans son expression vocale. J'aime beaucoup cette interprétation tantôt grave, tantôt plus haut perchée.

Pour autant, tout n'est pas si bien organisé sur cet album. Le morceau "Ticket to Ride" est d'ailleurs une pâle copie de ce que les Beattles ont fait. Bon, vous savez ce que je pense des reprises. C'est d'ailleurs bizarre d'avoir nommé l'album avec ce titre...

Une piste comme "Don't be afraid" sonne comme les Beach Boys mais fait un peu un aplat pas terrible non plus.

Non, à mon sens, l'autre piste d'intérêt de l'album se nomme "Eve". Elle se fait encore plus douce et plus solennelle (et donc mélancolique) que les autres. Vous savez que j'aime ce genre de mélodie même si cette piste me semble porteuse d'espoir et pleins de points positifs.

Pour résumer rapidement, ce premier album, un peu trop grave et chaste à mon goût forme quand même un ensemble organisé et qui s'écoute assez bien finalement. Il y a même quelques pistes vraiment au dessus du lot même si la forme religieuse est trop présente. Un bon début vraisemblablement...

Close to You (1970)

Ah, si vous ne devez retenir qu'une seule chanson des Carpenters, c'est bien "Close to You". C'est sans doute leur morceau le plus emblèmatique.

Pourtant l'album commence aussi avec un hit: "We've only just begun". Douce, calme comme une mer d'huile; tout y respire le bonheur, la paix. Cette chanson reprend également la forme courante de ce que les Carpenters vont produire pendant près d'une décénnie. Je vous la recommande.

Autre chanson d'intérêt, la piste 3 "Maybe it's you" qui repose aussi sur une recette éprouvée: une introduction simple qui démarre tendrement, des paroles bienveillantes, un crescendo qui se termine par un duo vocal d'harmoniques, le tout servi par une mélodie simple qui se termine par un final très instrumenté, fleuron d'instruments à cordes en concert triste.

Bon parfois, certaines pistes s'essayent à autre chose et on retrouve des ensembles assez moyens qui reprennent les codent de la musique country par exemple comme dans "Reason to believe". La reprise de "Help" des Beattles est également une merde, disons-le clairement !

Par la suite, on retrouve "Close to You", un monument à elle seule dont je vous conseille l'écoute. La voix de Karen fait vraiment la différence sur cette piste, le refrain en harmoniques, l'introduction simple au piano jouent également pour beaucoup.

La piste qui suit, "Baby it's you" commence plutôt mal mais son refrain est mélodiquement une excellence. Rien que pour ça, ça vaut le coup d'écouter l'album. D'ailleurs la piste "Crescent Moon" en reprend les mêmes codes et du coup, on peut bien l'écouter aussi.

Au final, grâce à sa paire de tubes, ce deuxième album des Carpenters est une vraie réussite. Leur style s'est enfin relaché de l'aspect religieux et même si on reste dans quelquechose d'hyper-consensuel, les mélodies valent leur lot d'écoute.

Carpenters (1971)

Un an après "Close to You" sort un album qui sera encore plus une réussite pour les Carpenters. En effet, l'album éponyme du groupe est également un bon arrangement, un album à garder dans un coin pour plus tard...

La première piste, "Rainy Days and Mondays", toujours très douce, présente un refrain assez mélodieux. Je finis par croire que c'est ça la force des Carpenters: si la musique reste gentillette, le refrain est toujours entraînant et on a plaisir à le chanter. Il marque ainsi les esprits ce qui permet d'apprécier le contenu de nombreuses pistes.

Si la deuxième piste "Saturday" est décidément trop niaise et mielleuse, les 4 prochains morceaux sont franchement des tubes. En effet, "Let Me be the One", "Hideway" et surtout "For All We Know" et "Superstar" sortent du lot. Ils fonctionnent tous sur la recette du super refrain... et ça marche assez bien. La voix de Karen Carpenter nous transporte véritablement dans un monde rassurant. En écoutant ces pistes au bureau, je me sentais vraiment apaisé et calme. Tout respirait l'amour, la volupté, la bienveillance. C'est sans doute ça la force des Carpenters...

Pour résumer, cet album est encore meilleur que le précédent qui était déjà très bon. Que va-t-il se passer sur les autres ?

A Song for You (1972)

Toujours à un rythme effréné, les Carpenters sortent un album après un an de travaux. Comme sur les autres albums, on prend ce qui marche et on réutilise les bonnes vieilles recettes.

Du coup, l'album est lui aussi plutôt une réussite, d'ailleurs bien introduit par "A Song For You". Toujours un refrain percutant, une mélodie douce, une voix grave mais tendre, agrémentée cette fois d'une touche nostalgique de saxophone.

Comme il s'agit d'un bon album, autant aller à l'essentiel: les meilleures pistes:

  • "Hurting Each Others": elle démarre très doucement mais le refrain prend une cause percutante, dynamique.
  • "It's Going To Take Some Time" se lance assez maladroitement avec quelques note de piano pas terrible mais, on retrouve toujours ce refrain typique.
  • "Goodby To Love", sans doute la meilleure piste de l'album est proche de la perfection d'un "Close to You" (sans l'atteindre). L'introduction est directement très bonne et bien entendu le refrain, simple, nous emporte encore plus loin. Vient enfin l'apothéose, à la guitare électrique; suprenante mais harmonieuse.
  • "Bless The Beasts and Children", toujours pour son refrain criant mais si délicat.

Encore un bon album, un de plus... Mais à la fin, ils finissent par tous plus ou moins se ressembler. Ça peut devenir lassant en faisant une écoute intégrale. Pour autant, pris séparément, ces albums sont très bons...

Now and Then (1973)

Encore une année de plus et un nouvel album. C'est sans doute le plus connu de tous car il abrite deux des trois chansons les plus connues du duo: "Sing" et "Yesterday Once More".

"Sing" qui ouvre l'album est également un monument des Carpenters abusant de la même recette: une introduction simple, un zeste de piano, une mélodie entraînante, la voix de Karen, si claire et un refrain qui tue. Parfois, on s'approche du miracle avec ces ingrédients simples. Tout ça pour la gloire de la chanson...

Plus triste mais plus glamour et jazzy, "This Masquerade" s'écoute plutôt bien après "Sing". Ce rythme un peu différent fait du bien à l'album, une espèce de respiration.

"Heather" est un morceau complètement musical (pas de paroles) plutôt bien arrangé et qui met en avant Richard Carpenter.

En attendant, "Jambalaya" est une pure merde, une masquarade sans intérêt. Franchement, si vous vous attardez dessus, vous finirez par jeter l'album par la fenêtre, ce qui serait dommage.

On arrive enfin à la grande piste: "Yesterday Once More" ! Je suis sûr que vous avez entendu ces Chalalalas ! Claude François en a fait une reprise assez mémorable (qui ne vaut pas l'originale bien sûr mais qui mérite une certaine forme de respect honorable). Avec un brin de nostalgie, les Carpenters signent une grande musique si percutante. Moi, j'aime beaucoup...

En revanche fuyez "Fun, Fun, Fun", une reprise des Beach Boys franchement nulle. En 1973, ça fait presque 10 ans qu'elle est sortie. Même punition pour "Da Doo Ron Ron" qui fait pitié.

Les pistes qui viennent en revanche, marquent le début d'un truc pas terrible: elles sont courtes, beaucoup plus rythmées et les arrangements sont franchement niais au possible. C'est une partie que j'évite comme la peste: ça pourrait me transformer en bisounours !

A la fois le meilleur comme le pire, voilà ce qui pourrait caractériser "Now and Then"... Le début de la chute ?

Horizon (1975)

"Horizon" est sans doute l'album le plus doux produit par les Carpenters. Si vous avez besoin de tendresse et d'affection, je vous le conseille. il prend même parfois des accents jazz très bien faits.

La piste d'introduction "Aurora" fait écho à la piste finale "Eventide". Elles empaquètent l'album pendant 1:33 chacune et annoncent la teneur de l'album: la quiétude.

La deuxième piste, intitulée "Only Yesterday" dispose d'une bonne introduction même si j'apprécie moins son refrain trop country à mon goût. Mais ça reste une bonne chanson.

Je suis désolé mais j'ai déjà entendu "Desperados" chez d'autres groupes (oui, j'ai écoute le groupe The Eagles, je l'avoue) et cette chanson me va mal... "Please Mr Postman" est, on doit bien l'avouer, un monument de niaiseries qui ont vécues... et qui sont devenues rances.

En revanche, j'ai pleinement apprécié "I Can Dream Can't I?". Elle est tellement jazz qu'on aurait pu faire chanter Frank Sinatra dessus sans que ça choque le moins du monde. J'adore ce style et c'est bien dommage que les Carpenters ne se soient pas davantage penchés sur ce registre. Cette voix si claire était sans doute un moyen d'interpréter de bonnes chansons, classiques et classieuses.

"Solitaire" est franchement une excellente piste bien servie par une introduction à la douceur infinie. Le refrain, franc et entier, vous emporte vers les cieux d'un seul battement de cil.

Pour "Happy", le seul truc qui me chiffonne, c'est justement le refrain qui est trop puissant et qui fait tâche dans l'album qui nous a habitué à plus de sérénité.

Toutes les autres pistes sont plutôt d'intérêt et au final, je trouve cet album d'une assez bonne qualité. Il est plus en douceur d'une manière générale et ça va bien au duo.

A Kind of Hush (1976)

Disons-le tout net, l'album commence de manière assez moyenne: la chanson éponyme "A Kind Of Hush" est un mix entre le générique de Benny Hill et un ersatz de synthétiseurs, mélangé avec un zeste de musique country. L'ensemble n'est pas si mal que ça mais j'avoue que je déteste le refrain qui est trop entraînant, trop simpliste.

Heureusement, la deuxième piste, "You", rattrape tout. Elle est une pure production des Carpenters, dans les canons que j'ai décrit plus haut. Toujours le même refrain qui tue, propulsé en amont par une poussée lyrique de Karen Carpenter. Non, vraiment cette piste est sans doute la meilleure de l'album.

L'autre piste d'intérêt de cet album se nomme "I Need To Be in Love", réalisation ultra-classique, dans la lignée des albums précédents. "One more time" et "I have you", un peu en retrait, restent de bons exemples de douceur, avec un soupçon de trop de miel, encore une fois. "I can't smile without you" s'en sort un peu mieux, voire même plutôt bien, si on prend le temps de la savourer.

Mais, pour le reste, c'est plutôt la déception. En effet, les Carpenters essayent tant bien que mal de changer de registre et ça ne se passe pas très bien. Trop de rythme, trop de niaiseries, trop de miel, des rythmes qui ne leur vont pas bien.

Pour résumer, je ne sais pas si c'est l'impression de déjà vu (entendu plutôt), mais cet album commence à me lasser sérieusement. Globalement, je le trouve en dessous des autres. Serait-ce le début de la fin ?

Passage (1977)

Encore une année, un album pour le duo. Quand on sait qu'ils font également des concerts en parallèle, c'est un peu épuisant non ?

A la fin, ça finit par laisser des traces. En effet, "Passage" est un album avec moins de pistes que sur les albums précédents, il n'y en a que 8.

Cet album esquisse un très léger changement dans la politique de production des Carpenters. La recette traditionnelle reçoit en effet un peu d'épices, notamment au niveau des rythmes et des instruments. De ce fait, au final l'album est moins bon, malheureusement.

Les 3 premières pistes font un peu illusions surtout la bien nommée "I just Fall in Love Again". En effet, cette dernière aurait pu intégrer l'album "Now and Then" car elle comporte tout ce qui fait le style Carpenters: de la douceur, une introduction douce et un refrain explosif. C'est la meilleure piste de l'album, à n'en pas douter.

Mais le reste s'avère moins savoureux. La reprise de "Don't Cry For Me Argentina" en est une illustration assez criante. Commencée comme un atelier lyrique, elle fait pâle figure lorsque Karen pose sa voix. Le mélange ne prend tout simplement pas. Pour les autres pistes, le rythme est trop rapide, la voix trop aigue, la mélodie trop entêtante, trop simpliste.

Pour résumer, "Passage" est un album moins bon que les précédents. On sent une certaine baisse de la qualité dans le duo depuis quelques années. Ils arrivent toujours à sortir des tubes mais il manque sans doute une forme de génie créatif perdu quelquepart.

Christmas Portrait (1978)

Bon, vous savez ce que je pense des albums de noël: c'est généralement de l'excrément, un truc tellement mielleux et niais que ça colle aux doigts et ça finit par coller aux oreilles et à les boucher.

Tradition oblige, ce n'est pas mieux pour les Carpenters. Oubliez-donc cet album, ne l'achetez pas sauf pour faire chier vos invités du 25 décembre !

Made in America (1981)

C'est le dernier album studio de la fratrie Carpenters. En effet, Karen Carpenter meure à l'âge de 33 ans, des suites d'une anorexie chronique. Elle était descendue à un poids trop faible pour survivre.

Que peut-donc donner un groupe, qui a démarré dans les années 70 en faisant de la musique des années 50 dans les années 80 et leur sound system bien particulier ?

Hé bien, le moins qu'on puisse se dire c'est que les Carpenters restent fidèles à leur crédo. Après plus de 10 ans de carrière et de très bonnes ventes d'albums, le groupe a trouvé son public. Donc pourquoi changer ?

Ainsi "Made in America" commence par la piste gentille de "Those Good Old Dreams". Calme, dans la lignée pure du style du duo. Sans aucune accroche des années 80 ou d'un autre courant musical.

Pourtant, même dans une bulle, impossible de ne pas s'inspirer de l'ambiance existante. C'est finalement une pointe de synthétiseur qu'on retrouve sur "(Want You) Back In My Life Again" qui nous met la puce à l'oreille. Les choeurs et les voix d'accompagnement s'inspire aussi de ce qui se fait à l'époque. On retrouve aussi ce style sur "Touch Me" avec un solo de saxophone so eighties. Mais c'est tout ce qu'on trouvera comme concession musicale.

Le reste, c'est du pur Carpenters... Mais que donne-t-il, ce dernier album du duo ? Dans l'ensemble, je le qualifierais d'intéressant. Il ne contient pas vraiment de tube ou de hit mais quelques pistes d'intérêt. D'une manière générale, il n'y a d'ailleurs pas grand chose à jeter. Toutes les pistes ont leur intérêt, en dehors de la niaise "BEachwood 4-5789".

J'ai même apprécié "Because We Are in Love (The Weddin Song)" pour sa pureté. Je peux encore citer "Strenght of a woman" qui me fait penser à Whitney Houston dans son expression ou encore "I Believe You", plus solennelle.

Je m'attendais à pire. En général, les derniers albums qui précedent la mort d'un membre du groupe sont plutôt mauvais car la mort est souvent causée par une maladie ou la prise de drogues. Mais là, ce n'est pas le cas.

Ce que je retiendrai des Carpenters

Quand j'étais plus jeune, je pensais que les Carpenters était un groupe des années 50-60. J'étais loin d'imaginer qu'on pouvait adopter un style aussi consensuel pendant les années 70, années soul, années rebelles, années funk.

J'ai finalement pas mal d'admiration pour leur production, dans son ensemble. Dès le premier album, le ton est donné. On sait qu'il sera simple, poli, calme et gentillet. Mais, une fois ce premier constat passé et en tendant un peu l'oreille, on trouve des choses intéressantes. Je me suis surpris plusieurs fois à siffler les airs de quelques morceaux entêtants comme "Sing" ou "For All We Know".

Néanmoins, il me reste un certain malaise à exprimer. En effet, il m'est arrivé de me sentir mal après avoir écouté les dix albums à la suite. Sans doute trop de douceur, de molesse, de miel finissent par engourdir mon encéphale. Pour autant, ce n'était pas un problème de nostalgie ou de mélancolie comme j'ai pu en rencontrer chez d'autres interprètes... C'est sans doute ce que je retiendrai des Carpenters: on peut écouter un album de temps en temps mais avec parcimonie.

Au final, un bon double best-of des familles devrait suffir le plus souvent à faire le tour du duo ces artistes. Mais ça valait bien le coup de vérifier en écoutant toute leur production.

Encore un mois d'écoute pour cette année 2017. Je me suis prévu l'écoute de Stevie Wonder et de ses presques 25 albums studio: ça va faire mal parce que ça va être long... mais ça va me faire du bien à écouter, je le sais d'avance !

Posted mar. 28 nov. 2017 21:09:25 Tags: