Archives de catégorie : Informatique

SQLite – SQLSTATE[HY000]: General error: 11 database disk image is malformed

Par deux fois déjà, un de mes fichiers de base de données SQLite a été corrompu. Les explications pour corriger ce problème foisonnent sur la toile, mais très souvent en anglais et pas forcément efficaces.

J’ai trouvé une solution qui a marché immédiatement dans mon cas, dénichée sur le site informatique anglophone Stack Overflow :

https://stackoverflow.com/questions/5274202/sqlite3-database-or-disk-is-full-the-database-disk-image-is-malformed

Je remets ici cette méthode, qui fonctionne sous GNU/Linux :

# Se déplacer dans le répertoire contenant le fichier SQLite corrompu
cd $DATABASE_LOCATION

# Utilisation de la commande sqlite3 pour réparer le fichier
echo '.dump' | sqlite3 $DB_NAME | sqlite3 repaired_$DB_NAME

# Renommer le fichier réparé
mv $DB_NAME corrupt_$DB_NAME
mv repaired_$DB_NAME $DB_NAME

Déplacer un site WordPress

Dans le monde merveilleux des blogs, il arrive de vouloir migrer son site Internet. Que ce soit pour changer de nom de domaine, ou que ce soit pour basculer une version de test en « production », il faut se rappeler qu’il n’y a pas seulement des fichiers, mais aussi une base de données. Laquelle devra sans doute être mise à jour.

C’est le cas de WordPress. Un certain nombre de tables constituant ce CMS contiennent des URL. Il s’agit des liens des articles, des liens dans les articles, ou bien encore les liens des images… Voici les requêtes à exécuter pour pouvoir mettre à jour l’ensemble de ces données en base :

UPDATE `wp_comments` SET
 comment_author_url = REPLACE(comment_author_url, 'http://mon_ancienne_url.fr', 'http://ma_nouvelle_url.com'),
 comment_content = REPLACE(comment_content, 'http://mon_ancienne_url.fr', 'http://ma_nouvelle_url.com')
WHERE comment_author_url LIKE '%http://mon_ancienne_url.fr%'
 OR comment_content LIKE '%http://mon_ancienne_url.fr%';

UPDATE `wp_options` SET
 option_value = REPLACE(option_value, 'http://mon_ancienne_url.fr', 'http://ma_nouvelle_url.com')
WHERE option_value LIKE '%http://mon_ancienne_url.fr%';

UPDATE `wp_postmeta` SET
 meta_value = REPLACE(meta_value, 'http://mon_ancienne_url.fr', 'http://ma_nouvelle_url.com')
WHERE meta_value LIKE '%http://mon_ancienne_url.fr%';

UPDATE `wp_posts` SET
 post_content = REPLACE(post_content, 'http://mon_ancienne_url.fr', 'http://ma_nouvelle_url.com'),
 guid = REPLACE(guid, 'http://mon_ancienne_url.fr', 'http://ma_nouvelle_url.com')
WHERE post_content LIKE '%http://mon_ancienne_url.fr%'
 OR guid LIKE '%http://mon_ancienne_url.fr%';

UPDATE `wp_usermeta` SET
 meta_value = REPLACE(meta_value, 'http://mon_ancienne_url.fr', 'http://ma_nouvelle_url.com')
WHERE meta_value LIKE '%http://mon_ancienne_url.fr%';

UPDATE `wp_users` SET
 user_url = REPLACE(user_url, 'http://mon_ancienne_url.fr', 'http://ma_nouvelle_url.com')
WHERE user_url LIKE '%http://mon_ancienne_url.fr%';

Si vous utilisez le plugin WordFence, pensez également à modifier les URL dans cette table :

UPDATE `wp_wfHits` SET
 URL = REPLACE(URL, 'http://mon_ancienne_url.fr', 'http://ma_nouvelle_url.com')
WHERE URL LIKE '%http://mon_ancienne_url.fr%';

Sites tiers, traçage et écologie

Attention, ça va être long et chiant ! Vous devriez peut-être fuir d’ici.

Quand je surfe, qu’est-ce que je vois ?

Aujourd’hui quand nous surfons sur le Web, la très grande majorité des sites Internet nous délivrent du contenu venant d’ailleurs sur la toile. C’est d’abord vrai avec la publicité, qui est omniprésente sur le Web sous couvert qu’elle est parfois la seule source de revenus pour les sociétés fournissant des services gratuits. C’est aussi vrai pour les news à clics, ces pseudo-articles ou ces vidéos aux titres sensationnalistes et aux illustrations souvent racoleuses, que l’on peut voir sur plusieurs sites de pseudo-médias différents et qui sont pourtant le fruit d’autres sociétés, la plupart du temps à des milliers de kilomètres de la France.

… Et qu’est-ce que je ne vois pas ?

Tout ce contenu qui nous est délivré n’a pas été mis devant nos yeux par hasard. Ce que nous regardons, ce sur quoi nous nous attardons, et la manière que nous surfons, tout est soigneusement engrangé par diverses régies qui analysent tous nos faits et gestes et qui sont capables d’établir des profils de consommateurs, mais aussi de citoyens. D’autres vous parleront carrément « d’empreinte numérique ».

Que sont les sites tiers ?

Il y a des sites tiers de différents types, en cela que leur intérêt et leurs objectifs varient. Globalement il y en a cinq sortes :

Les plateformes techniques utilisées pour le « design » du site. frameworks JavaScript, CSS, polices d’écritures, icônes… sont autant d’outils externes exploités par les sites modernes, pour plein de raisons mais pas toujours très bonnes. Il serait difficile de vouloir se passer de ces services pour les internautes, car désactiver leur accès peut rendre un site totalement inutilisable.

Les CDN ou « content delivery network ». Cliquez sur le lien pour comprendre ce que c’est, car je ne maîtrise pas le sujet. 😛

Les fournisseurs de contenu additionnel, à base d’articles et de vidéos produits pour booster l’audience : des titres accrocheurs comme « Les 10 machins qui ceci », « Le top 5 des bidules quelque chose », « Comment faire tel truc [débile]  sans effort », « Ce qu’a fait cet homme va vous faire halluciner », « Un bébé phoque a sauvé la Terre », ou encore n’importe quelle illustration de chaton ou de femme sexy sont autant de moyens de capter les gens et de les garder le plus longtemps possible sur le site Internet : c’est du temps de cerveau en plus pour consommer les publicités affichées.

Donut…
Donut…

Les régies publicitaires, dont le but est d’optimiser le ciblage d’un produit en le proposant au bon internaute, ou encore d’inonder la toile par des campagnes auxquelles vous ne pourrez pas échapper : quel que soit le site, vous retrouverez la même pub bien en évidence, encadrant le contenu, et qui vous conduira inévitablement sur une nouvelle page si vous avez le malheur de cliquer n’importe où par inadvertance.

Les analyseurs d’internautes. Ceux-là permettent d’étudier le comportement des internautes, et de compléter des profils de consommation. Présents sur différents grands sites, ils savent où vous surfiez quelques heures/jours avant et ce que vous consultiez. Ils aiment à deviner ce dont vous devriez avoir besoin. C’est « grâce » à eux qu’en ayant recherché des couches pour bébé sur tel site marchand, vous visualisez des pubs pour du lait de croissance ailleurs sur la toile.

Bien sûr, un acteur peut avoir plusieurs casquettes à la fois. Par exemple une régie publicitaire peut faire des analyses marketing, et une plateforme technique peut suivre les internautes de site Web en site Web. C’est d’ailleurs ce qui se passe, et l’un des meilleurs exemples en la matière reste encore Alphabet (Google & Co) puisqu’ils sont omniprésents.

Quelle incidence ont les sites tiers sur la vie privée ?

Le problème principal est qu’un petit nombre d’acteurs finissent par tout savoir de nous : ce que nous regardons et à quels moments nous le regardons, ce que nous aimons, ce que nous consommons, qui nous connaissons et nos opinions. Les réseaux sociaux sont d’ailleurs une véritable mine d’or pour ces régies, mais également pour n’importe quel gouvernement susceptible de vouloir surveiller ses citoyens. Ou les citoyens des autres gouvernements, hé puis après on s’échange les informations, comme ça tout le monde y trouve son compte.

Big brother dans 1984 de Michael Radford, d'après le roman de George Orwell
Big brother dans 1984 de Michael Radford, d’après le roman de George Orwell

En 2016 Tristant Nitot a publié son livre « surveillance:// » aux éditions C & F, qui traite justement de ce sujet bien mieux que je ne pourrai jamais le faire.

Quel impact écologique représentent les sites tiers ?

Comment se fait-il que les sites Internet ne se chargent pas plus rapidement qu’il y a 20 ans, alors que depuis il y a eu l’ADSL puis la fibre qui ont permis d’augmenter les vitesses de transfert ? L’une des raisons (mais pas la seule !) est que la quantité de contenu a elle aussi augmenté : les images sont plus grandes et parfois moins compressées, les vidéos foisonnent, nous accédons à un contenu toujours plus riche… Et les sites Internet ajoutent à tout ce contenu utile leurs lots de cochonneries : musiques d’accueil, vidéos promotionnelles, encarts publicitaires, animations Flash ou HTML5, contenus tiers… et bien sûr tout ce qui ne se voit pas mais qui se télécharge sur nos ordinateurs, que ce soit les scripts ou les cookies.

Ces dernières années, le poids des pages s’est par conséquent considérablement alourdi, ce qui a un impact direct sur les performances de son ordinateur (ou de sa tablette, ne soyons pas sectaire voyons !) et donc sur la consommation de celui-ci. Mais ce qui est vrai pour l’utilisateur final l’est aussi pour toute la chaîne de diffusion. Un serveur qui délivre du contenu, que ce soit des images, des vidéos ou du texte, consomme lui aussi de l’énergie, et même beaucoup. Il en consomme d’ailleurs avant même d’envoyer le contenu à l’internaute, puisque des programmes vont fonctionner en amont de la fourniture des données afin de délivrer le contenu souhaité. Bref, ça bouffe un peu. Et les climatisations indispensables aux datacenters aussi !

Le centre de données du CERN avec des serveurs du World Wide Web et des serveurs mail - Hugovanmeijeren, CC BY-SA 3.0
Le centre de données du CERN avec des serveurs du World Wide Web et des serveurs mail – Hugovanmeijeren, CC BY-SA 3.0

Voici quelques chiffres histoire de rigoler :

Certes, depuis quelques années les industriels construisent des datacenters soit-disant « 100% verts » et faisant appel aux énergies renouvelables, mais ils restent des gouffres énergivores.

Gargantua, roman de François Rabelais - © Bibliothèque Nationale de France
Gargantua, roman de François Rabelais – © Bibliothèque Nationale de France

À cela s’ajoute le problème de la distance parcourue par l’information. Pour qu’une image stockée sur un serveur aux États-Unis parvienne jusqu’à ma box Internet, elle va cheminer à travers un certain nombre d’équipements électroniques qui consomment eux aussi de l’énergie.

Il faut se rendre à l’évidence que de l’énergie est consommée à tous les niveaux, que ce soit le serveur (et sa clim), les multiples équipements qui relaient ce contenu, et en fin de chaîne le périphérique qui affiche ce contenu (multiplié par autant d’internautes, et ils sont légion dans le monde !). Alors si à cela s’ajoute du contenu non sollicité et que ces données viennent des quatre coins du monde, l’impact est d’autant plus important.

Petite analyse de l’ampleur du phénomène

Depuis longtemps il est possible d’observer et de bloquer les sites tiers. Sur Firefox plusieurs outils existent, dont l’extension Lightbeam qui permet de visualiser les liens entre un site consulté et les sites tiers auxquels il a fait appel, mais aussi les liaisons potentielles entre sites consultés, reliés justement par ces sites tiers. Comment situer géographiquement tous ces sites auxquels nous nous connectons ? J’avais envie de savoir où se trouvent toutes ces machines, à combien de milliers de kilomètres de nous et dans quels pays.

J’ai donc réfléchi à un petit shell qui me permettrait de géolocaliser les noms de domaines et de les afficher sur une carte. Ce qui suit décrit la méthode que j’ai employée pour acquérir une base de sites tiers, et une première analyse de ceux-ci en terme de chiffres. Dans un second temps, j’aborderai l’exploitation des données collectées pour parvenir à l’affichage des serveurs sur une carte.

Utilisation d’un profil vierge dans Firefox

Cela fait des années que mon Firefox est bardé d’extensions en tous genres. Parmi mes précieux alliés anti-pub et anti-traçage, on peut citer NoScript, Ghostery et Privacy Badger. Non, je n’utilise pas AdBlock : c’est plus un ransomware pour régies publicitaires qu’un bloqueur de pub.

Pour collecter efficacement les informations sur les sites tiers, j’étais obligé de désactiver mes extensions, de surfer sur un certain nombre de sites, puis de les réactiver. J’ai opté pour la création d’un nouveau profil Firefox, qui a l’avantage d’être vierge de toute donnée de surf et qui n’a aucune extension par défaut.

Pour créer un nouveau profil Firefox, il suffit de lancer en ligne de commande :

firefox --ProfileManager
Firefox - gestionnaire de profils
Firefox – gestionnaire de profils

Constitution de données sur les sites tiers avec Lightbeam

Maintenant que j’ai un Firefox vierge, je commence par installer Lightbeam. Puis je l’ouvre pour qu’il puisse collecter les données de surf au cours des prochaines minutes. Soulignons tout de suite que je ne me mettrai pas en navigation privée : Firefox bloquerait systématiquement un certain nombre de sites traceurs, or je veux être tracé ! 😉

Pour mon analyse, j’ai choisi d’aller sur 15 sites Internet : les sites les plus consultés en France, des sites marchands, des médias en ligne… Ceci afin d’avoir un panel de sites complémentaires. Voici ces 15 sites :

  1. Facebook
  2. Youtube
  3. Wikipedia
  4. Amazon
  5. Le Bon Coin
  6. Yahoo
  7. Live
  8. Bing
  9. Fnac
  10. Cdiscount
  11. Le Parisien
  12. Le Monde
  13. 20 Minutes
  14. Rue du Commerce
  15. Doctissimo

Sur les sites marchands j’ai effectué une recherche de produit à chaque fois. Sur les autres sites j’ai fait défiler la page principale et cliqué sur un lien ou deux. Il n’y a plus qu’à aller sur l’onglet de Lightbeam, et enregistrer les données au format JSON en cliquant sur « Save data » dans la colonne à gauche.

Premières constatations

Lightbeam - 15 sites visités, 385 sites tiers
Lightbeam – 15 sites visités, 385 sites tiers

Après avoir consulté 15 sites Internet, Lightbeam m’annonce que je me suis également connecté à 385 sites tiers, soit 400 sites en tout. Joli score !

Sur l’illustration ci-dessus, qui est justement une copie d’écran de ma session de surf, on visualise bien les sites visités. Plus un site fait appel à des sites tiers (représentés par des triangles), plus son icône est grosse. Notre champion du jour est le site du Parisien.

Pour pouvoir jeter un premier coup d’œil aux données JSON collectées, je lance la petite commande ci-dessous. Elle va me permettre de connaître le nombre de connexions établies lors de mon surf, tous serveurs confondus.

sed 's/\[/\n\[/g' lightbeamData.json | wc -l

Le résultat est pas mal : près de 8000 connexions ! Chacune d’elles représente un fichier téléchargé, une image, une page HTML, un script JavaScript, une feuille de style, une police, une vidéo… Beaucoup servent à construire les pages que nous consultons, mais combien de ces fichiers sont issus des sites tiers ? Une analyse approfondie des données JSON permettrait de le savoir. Là je vais faire l’impasse. Mais je me servirai quand même de ces données pour situer géographiquement chacun de ces serveurs.

Et les cookies au fait ? Et bien près de 290 sites en ont laissé sur mon ordinateur, parfois plusieurs. On peut visualiser ceux des sites tiers dans Lightbeam, ce sont les liaisons apparaissant en violet. Certains de ces cookies sont utilisés pour nous suivre sur la toile.

Géolocalisation des serveurs atteints

J’avais envie de consteller une carte du monde avec tous ces petits serveurs, pour me faire une idée de ce que cela peut représenter. Pour parvenir à cela, j’ai écrit un petit script Shell. Celui-ci repose principalement sur deux outils en ligne de commande :

  • Le programme dig, qui permet (entre autre) de connaître l’adresse IP d’un nom de domaine. Dans les faits, je ne suis pas parvenu à connaître l’adresse IP de tous les noms de domaines collectés, mais ce n’est pas très grave.
  • Le programme geolooc, qui est fourni avec la suite logicielle Weboob, et qui permet de géolocaliser une adresse IP en se basant sur différents services en ligne. Avant d’utiliser le script ci-dessous (enfin s’il y a quelqu’un d’assez fou sur Terre pour se servir de ça, hein), je vous recommande chaudement de lancer geolooc une ou deux fois, car son paramétrage et la disponibilité capricieuse des services en ligne rendent son utilisation quelque peu subtile… Mais ça reste très marrant !

#!/bin/bash

p="$1"
s=`basename $0`
dossiertravail=".${s%.sh}"

backend=ipinfodb
#backend=ipapi

# Suppression du précédent jeu de fichiers
rm -Rf $dossiertravail 2>> /dev/null

# Création du dossier de travail
mkdir $dossiertravail

# Extraction des noms de domaines depuis le fichier JSON issu de LightBeam
domaines="$dossiertravail/$p.domaines"
sed 's/[/n[/g' $p | sed -e 's/^["([^"]*)","([^"]*)",.*/1,2/' | sort -u > $domaines

echo "Site visité,Site tiers,Adresse IP,Longitude,Latitude,Pays,Région,Ville,Code postal,Host,TLD,ID,FAI,OpenStreetMap" > $p.csv

# Boucle sur chaque nom de domaine
while read doms
do
	test "$doms" = '' || test "$doms" = '[' && continue
	
	domaine=`echo "$doms" | cut -d ',' -f2`
	digd="$dossiertravail/$domaine.dig"
	digdom="$dossiertravail/$domaine.ip"
	
	# Récupération de l'adresse IP du nom de domaine
	if test ! -f $digdom
	then
		dig $domaine > $digd
		p1=`grep -n 'ANSWER SECTION' $digd | cut -d ':' -f1`
		p2=`wc -l $digd | cut -d ' ' -f1`
		p3=$((p2-p1))
		tail -$p3 $digd | 
			grep -v CNAME | head -1 | 
			sed "s/.*([1-9][0-9]{0,2}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}).*/1/" > $digdom
	fi
	
	ip=`head -1 $digdom`
	lt=''
	lg=''
	country=''
	region=''
	zipcode=''
	city=''
	host=''
	tld=''
	id=''
	osmlink=''
	isp=''

	if test "$ip" != ''
	then
		geoip="$dossiertravail/$ip.geo"
		
		# Géolocalisation de l'adresse IP
		if test ! -f $geoip
		then
			geolooc -b $backend $ip >> $geoip
		fi
		
		# Constitution d'un placemark KML
		kml="$dossiertravail/$ip.kml"
		lt="`grep 'lt:' $geoip | cut -d ':' -f2 | sed -e 's/^ *//'`"
		lg="`grep 'lg:' $geoip | cut -d ':' -f2 | sed -e 's/^ *//'`"
		country="`grep 'country:' $geoip | cut -d ':' -f2 | sed -e 's/^ *//'`"
		id="`grep 'id:' $geoip | cut -d ':' -f2 | sed -e 's/^ *//'`"
		city="`grep 'city:' $geoip | cut -d ':' -f2 | sed -e 's/^ *//'`"
		region="`grep 'region:' $geoip | cut -d ':' -f2 | sed -e 's/^ *//'`"
		zipcode="`grep 'zipcode:' $geoip | cut -d ':' -f2 | sed -e 's/^ *//'`"
		osmlink="`grep 'osmlink:' $geoip | cut -d ':' -f2- | sed -e 's/^ *//'`"
		isp="`grep 'isp:' $geoip | cut -d ':' -f2 | sed -e 's/^ *//'`"
		host="`grep 'host:' $geoip | cut -d ':' -f2 | sed -e 's/^ *//'`"
		tld="`grep 'tld:' $geoip | cut -d ':' -f2 | sed -e 's/^ *//'`"
		id="`grep 'id:' $geoip | cut -d ':' -f2 | sed -e 's/^ *//'`"
		
		if test "$lt" != ""
		then
			cat <<EOF > $kml
      <Placemark>
        <name>$domaine</name>
        <description>
           &lt;b&gt;$doms&lt;/b&gt;&lt;br/&gt;
           `cat $geoip | sed 's/&/&amp;/g' | sed -e 's/$/&lt;br/&gt;/'`
        </description>
        <styleUrl>#waypoint</styleUrl>
        <Point>
          <coordinates>$lg,$lt</coordinates>
        </Point>
      </Placemark>
EOF
		fi
	fi
	
	# Peuplement d'un fichier CSV
	echo "$doms,$ip,$lg,$lt,$country,$region,$city,$zipcode,$host,$tld,$id,$isp,"$osmlink"" >> $p.csv
done < $domaines

# Concaténation des placemarks en un fichier KML complet
cat <<EOF > $p.kml
<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2" xmlns:gx="http://www.google.com/kml/ext/2.2">
  <Document>
    <name>`basename $0`</name>
    <LookAt>
      <longitude>0.000000</longitude>
      <latitude>40.149835</latitude>
      <range>14296439.720522</range>
    </LookAt>
    <!-- Normal waypoint style -->
    <Style id="waypoint_n">
      <IconStyle>
        <Icon>
          <href>icone.png</href>
        </Icon>
      </IconStyle>
    </Style>
    <!-- Highlighted waypoint style -->
    <Style id="waypoint_h">
      <IconStyle>
        <scale>1.2</scale>
        <Icon>
          <href>icone.png</href>
        </Icon>
      </IconStyle>
    </Style>
    <StyleMap id="waypoint">
      <Pair>
        <key>normal</key>
        <styleUrl>#waypoint_n</styleUrl>
      </Pair>
      <Pair>
        <key>highlight</key>
        <styleUrl>#waypoint_h</styleUrl>
      </Pair>
    </StyleMap>
    <Folder>
      <name>Localisation des serveurs</name>
`cat $dossiertravail/*.kml`
    </Folder>
  </Document>
</kml>
EOF

ls -lh $p.*

L’utilisation du script est des plus simples. Du moins normalement… À la condition que vous soyez linuxien·ne ceinture noire, que vous ne vous soyez pas rasé depuis plus de 15 ans (la barbe pour les messieurs, les jambes pour les dames) et que l’assembleur sur Comodore n’ait aucun secret pour vous… Placez-vous dans le répertoire où se trouve le fichier JSON issu de Lightbeam, et lancez :

trace_sites.sh lightbeamData.json

À la fin du traitement, il devrait afficher quelque chose comme ça dans votre terminal :

-rw-r--r-- 1 user group 108257 mars  21 21:42 lightbeamData.json.csv
-rw-r--r-- 1 user group 162408 mars  21 21:42 lightbeamData.json.kml

Le fichier CSV pourra facilement être exploité dans n’importe quel tableur (pourvu qu’il soit Libre), tandis que le fichier KML pourra être ouvert par exemple dans Marble, Google Earth ou tout autre « globe virtuel » capable d’ouvrir de tels fichiers.

Nous sommes des e-globetrotteurs

En ouvrant le fichier KML dans Marble, voici ce que l’on peut voir :

Ce diaporama nécessite JavaScript.

Le constat est sans appel : en se rendant sur quelques sites Internet, on fait rapidement plusieurs fois le tour de la planète !

À noter un petit artefact à l’affichage sur Marble : un point géographique, déterminé par sa longitude et sa latitude donc, ne permet d’afficher que jusqu’à quatre étiquettes. Pour beaucoup des points rouges sur la carte, on ne peut afficher que quatre noms de domaines alors qu’en réalité il peut y en avoir beaucoup plus ! Qu’ils soient nombreux à se situer en un même endroit est facile à comprendre, c’est qu’il s’agit d’un datacenter. On peut prendre l’exemple des serveurs Google qui sont présents dans la zone militaire de Fort Huachuca [en], où bien d’autres serveurs s’y trouvent. D’après mon fichier CSV, je me suis connecté à 32 sites différents hébergés là-bas, dont Google.com, Google.fr, Amazon.fr, DoubleClick, Youtube ou Tumblr. On comprend donc qu’avec le peu de points présents sur la carte, on est encore loin du compte !

Pour une navigation dynamique, voici la même carte hébergée par le site UMAP.

Voir en plein écran

Limiter le traçage et l’impact écologique

Alors que faire pour limiter, à son échelle (parce que l’échelle des fournisseurs de contenu n’est pas la même, il ne faut pas se leurrer), l’impact de notre surf sur la consommation énergétique ? Hé bien peut-être tout simplement en utilisant les mêmes outils qui sécurisent nos navigateurs. Et il ne faut pas s’en priver ! Voici les plus connus pour Firefox :

Le résultat pour l’internaute sera immédiat :

  • moins de traçage par les sites tiers
  • moins de données téléchargées
  • chargement plus rapide des pages

Le résultat pour les serveurs est qu’ils seront moins sollicités parce qu’ils fourniront moins de contenu, et par conséquent consommeront 1 ou 2 mWh de moins chaque jour grâce à vous. Certes c’est une goutte dans l’océan ! Mais une goutte, plus une goutte, plus une goutte, plus une goutte…

Cette solution a néanmoins une limite : pour l’instant elle ne marche que sur l’ordinateur. En effet, les navigateurs sur tablettes et mobiles n’intègrent pas encore de tels outils. Par ailleurs, beaucoup de sites en ligne proposent aussi leur propre « app » pour les différents OS mobiles, et là ces extensions ne pourront jamais rien faire…

Edit du 28/03/2017 : En fait si, il existe bien une extension sur Firefox mobile pour filtrer la publicité, donc au moins une partie du contenu indésirable. Pour en savoir plus, lisez « Un bloqueur de pub – La face cachée de Firefox pour Android ». Cet article nous apprend aussi quelle part des pages Web ce contenu indésirable représente : plus de la moitié !

Si vous avez envie de jouer…

Voici quelques fichiers à télécharger au cas où quelqu’un aurait envie de s’amuser :

Et maintenant, bon surf !! :mrgreen:

Remplacer des caractères spéciaux avec sed

Sid - © Blue Sky Studios
Sid – © Blue Sky Studios

Mais non pas Sid ! « sed » le petit programme sympa qui permet de faire des traitements sur du texte !

Un problème courant est d’avoir des caractères indésirables dans un fichier texte, qu’il s’agisse de données, d’un code source ou d’une page Web. Il arrive même qu’on ait affaire à des caractères ne s’affichant pas correctement, ou bien qui empêchent carrément le fonctionnement d’un logiciel.

Connaître le code hexadécimal des caractères avec « od »

Aujourd’hui tout le monde devrait utiliser l’encodage UTF-8. Dans les faits, c’est très loin d’être le cas : il faut souvent faire avec l’existant (Windows-1258, ISO-8859-*…), et l’UTF-8 ne couvrant pas tous les caractères possibles et imaginables, on peut aussi tomber sur des trucs exotiques issus de l’UTF-16 ou l’UTF-32.

Pour convertir un caractère spécial, une solution générique consiste à d’abord connaître son code hexadécimal (on devrait peut-être même dire « ses codes hexadécimaux » étant donné que ces caractères spéciaux sont encodés sur plusieurs octets). C’est un peu roots, mais ça aura le mérite de fonctionner dans n’importe quel shell de n’importe quel environnement.

Prenons par exemple le caractère €, et voyons à quoi il ressemble avec l’aide de la commande « od » :

printf '€' | od -vAn -tx1
 e2 82 ac

C’est donc cette suite de codes hexadécimaux que nous allons fournir à sed, moyennant une écriture légèrement différente puisque chaque code sera écrit de la forme \x??.

Cas des caractères qu’on n’arrive pas à taper au clavier ou à afficher

Certains caractères peuvent être particulièrement problématiques quand on souhaite connaître leurs codes hexadécimaux, tout simplement parce qu’on ne parvient pas à les taper au clavier, voire à les copier-coller. Dans ce cas, le mieux est d’isoler ces caractères dans un tout petit fichier texte et d’analyser les caractères avec od :

cat analyse.txt | od -vAn -tx1
 31 32 33 2e 34 35 20 e2 82 ac 20 54 54 43

Conversion des codes hexadécimaux avec sed

Maintenant que nous connaissons les caractères que nous souhaitons supprimer/modifier/remplacer (rayer les mentions inutiles), nous pouvons commencer par tester la commande sed avec les codes hexadécimaux :

echo '€' | sed 's/\xe2\x82\xac/\&euro;/'
&euro;

Dans l’exemple ci-dessus, les apostrophes (« simples quotes ») permettent de ne pas échapper les codes hexadécimaux ; mais cette autre écriture est tout à fait équivalente :

echo '€' | sed s/\\xe2\\x82\\xac/'\&euro;'/
&euro;

Il faut toutefois souligner que dans le cas présent, où l’on va remplacer le symbole € par son entité HTML, il est indispensable que l’entité soit d’une part entre apostrophes, d’autre part que le caractère & soit échappé avec un antislash. Ceci vient du fait que sed interprète par défaut & comme une recopie sur la sortie du motif trouvé… Et à ceci s’ajoute le shell qui interprète lui aussi ce caractère !

Remplacer plusieurs caractères spéciaux

Avec l’argument « -r » passé à sed, il est également possible de remplacer plusieurs motifs par quelque chose, en séparant ces motifs par « | » (la joie des expressions régulières ! :mrgreen:). Par exemple, si l’on souhaite changer tous les E accentués d’un texte (ÉÈÊË) en E, il suffit de faire :

sed -r s/\\xc3\\x89\|\\xc3\\x88\|\\xc3\\x8b\|\\xc3\\x8a/E/g origine.txt > resultat.txt

Voilà tout !