Nourrir ses gentils ptits chats

J'ai envie de vous parler de chat. Pas de discussion, hein. De chats. Les espèces de parasites qui dorment et réclament à manger.

J'en discute parfois avec des amis eux aussi infectés et il s'avère que depuis quelques mois j'ai pris conscience à quel point on nourrissait mal nos ptits bestiaux. Beaucoup de chats d'appartements sont en surpoids. Il faut dire que certains chats gourmands réclameront constamment de la nourriture et ne s'arrêteront que lorsque la gamelle est bien vide.

Mais pire que ça, souvent le régime alimentaire est désastreux. La très grande majorité de la bouffe pour animaux trouvée en supermarché ou magasins spécialisés n'est en fait pas vraiment approprié aux besoins réels des chats. Et ça inclut également la bouffe “premium” qui est juste plus chère que la classique sans forcément être meilleure. Les croquettes et pâtées sont souvent remplies de céréales, ce que les chats ne devraient pas manger.

Et la bouffe vendue par les vétos c'est souvent le même topo. Ils sont sponsorisés par Purina ou Hills ou autre truc du genre qui sont premium avec souvent telle ou telle vertue mais qui sont quand même blindée de céréales avec un fort taux de glucose et compagnie. Bref ne cédez pas.

Cette bouffe est souvent cause de divers problèmes dont l'obésité premièrement mais surtout du diabète. Bref, regardez un peu la composition de ce que vous leur donnez (ne vous arrêtez pas à l'étiquettes "truc au thon", "truc au poulet", mais regardez les proportions). Vous pouvez vous renseigner sur le web pour trouver plus d'infos à ce sujet, vous trouverez des documentaires des sites qui publient des comparatifs détaillées de la composition des croquettes.

Les forces en présences

Personnellement cela fait maintenant deux ans qu'on a radicalement changé l'alimentation de nos bestiaux. Ma ménagerie actuelle se compose d'un gros mâle de 9.6Kg, une petite femelle de 4.5Kg et d'une seconde femelle de 6.3Kg.

Le but du jeu a été de faire perdre 2Kg au gros, et 1Kg à la seconde femelle. Auparavant, on ne les nourrissait uniquement de croquettes qui étaient dispo à volonté. À peine la gamelle était un peu trop vide, le mâle nous le faisait savoir.

Un nouveau régime

Malheureusement avec l'âge et le surpoids, le gros a commencé à boiter et suite à un voyage chez la véto, le verdict est tombé : arthrose + obésité. Du coup, on s'est pas mal renseigné et c'est parti pour un changement drastique d'alimentation.

Exit les croquettes de merde. On va changer ça par quelque chose de plus sain.

Je ne vous cache pas qu'on a tâtonné quelque temps avant d'arriver de trouver la bonne formule avec les bonnes quantités. On a commencé par utiliser des croquettes de régime achetées en animalerie.

Effectivement ça marchait bien, le chat perdait du poids et ne réclamait pas, mais il n'avait vraiment pas la forme, son poil devenait terne… bref il dépérissait au bout de deux mois…

Bref après quelques errements la formule est désormais toute simple. On passe à un mélange de pâtée le soir à heure fixe et un peu de croquettes durant la journée. Niveau pâtée on donne des ptites boîte de marque Cosma. Ça revient à environ 1€ la boîte journalière pour les trois chats.

Il y a plusieurs parfums et ça a l'air presque appétissant (sur un toast ça passerait probablement). Une petite boîte répartie équitablement (la répartition est équitable, par contre le gros s'arrange toujours pour finir à droite à gauche) entre les trois. Et surtout à heure fixe : une fois l'habitude prise, ils sauront vous le rappeler au bon moment, plus besoin de rappel.

Et pour les croquettes on a pris du Orijen 6fish pendant un temps mais nous sommes passé à du Purizon Adult Sterilized Chicken & Fish. On est autour de 45€ le paquet de 6.5Kg qui tient un mois et demi pour les trois, en mettant quatre à cinq fois dans la journée de toutes petites ration dans la gamelle quand ils réclament.

Niveau prix

Attention voilà la douloureuse : On est à environ 68€/mois en incluant également la litière.

Bon d'ailleurs, soit-dit en passant, niveau litière on a arrêté la litière pourrie qui pu constamment. On est passé à une litière végétale qui absorbe incroyablement bien les odeurs et qui s'agglomère bien et qui est biodégradable (on ose pas les foutre dans le compost pour autant). C'est la Cat's best öko plus à près de 26€ les 40L. Ça tient deux mois sans soucis pour les trois chats. C'est le jour et la nuit avec la litière Catsan qui empeste la pisse au bout de deux jours.

Bref c'est un budget assez conséquent mais au moins ils mangent pas de la merde et se portent bien mieux.

Verdict

Sur le graph on voit la période de Mai à Aout 2017 avec les croquettes de régime qui l'ont mis dans un sale état.

Ensuite on est passé à des croquette "premium" jusqu'à Mai 2018 où la prise de poids a été constante.

De juillet 2018 à Avril 2019, c'était le régime avec les nouvelles croquettes sans pâtée. Il y a cependant quelques défaut sur le graph : le pic de Décembre est dû à un premier soucis de balance. Le pic d'Avril est dû au changement de balance (en vrai il n'a pas pris de poids, c'est juste que la nouvelle est mieux tarée).

Et enfin à partir d'Avril 2019 le mix pâtée + croquettes.

On va pas se le cacher ça coûte plus cher qu'avant mais en contrepartie, les chats ont un régime vraiment meilleur qu'avant. On ne risque plus trop de leur infliger un diabète ou tout un tas de maladie perrave.

Par trop de risque rénaux du fait de l'alternance pâtée et croquettes.

Et en trois mois, le gros est passé de 9.6Kg à 8.3Kg sans avoir l'air de dépérir. Ils réclament bien moins à manger et sont en bonne santé.

Bref pourvu que ça dure ! Je vous referai un point dans quelques mois quand il aura stabilisé son poids.

Quelques chaînes youtube

Je n'ai pas maté la téloche (hors séjour chez la madré) depuis des lustres désormais mais par contre plus ça va plus je matte de contenu issu de Youtube. De tous les services Google c'est un des rares dont je ne peux me passer.

Faut dire que c'est extrêmement bien foutu et la communauté est là et pas ailleurs. Mais c'est pas pour autant que j'ai un compte Youtube (pas folle la guêpe). On va dire que je consulte Youtube presque incognito : je vais rarement sur le site et quand j'y vais c'est dans une fenêtre en porn-mode. Les chaînes je les suis via RSS. Et généralement une fois qu'une chaîne est dans mes RSS je ne regarde les nouvelles vidéos qu'en passant par mpv+youtube-dl.

Je dis pas que je suis invisible pour Google mais bien moins trackable. J'imagine qu'ils se contentent de tracker 99% de ses utilisateurs et le reste tant pis.

Bref Je vais vous faire une ptite liste de chaîne que je consulte.

Voilà les liens RSS vers quelques chaînes.

Primitives

J'ai déjà fait un article dédié donc pas grand-chose de plus à raconter. On sent que la mode s'estompe et qu'ils tournent pas mal en rond désormais.

  • Primitive Life : Plus de six mois qu'il a rien posté. Est-il toujours vivant ?
  • Primitive Survival Tool : Cabane, piscine, cabane, piscine…
  • Primitive Technology : LA vraie. Non je veux pas dénigrer les autres mais il est resté fidèle à lui-même, ne semble pas tricher et ne fait pas des cabanes avec piscine en boucle. Il poste peu mais du contenu original. S'il ne faut en suivre qu'une c'est celle-là.

Ciné

J'adore le cinéma Bref, comme toutes les passions, ça se nourrit

  • Calmos : Ça parle cinéma comique ici. Peu de vidéo mais très intéressant.
  • Fabien Campaner : Chaîne qui aborde des thèmes dans le cinéma. C'est super intéressant, super bien fait et c'est drôle. Malheureusement plus beaucoup de vidéos :-/ À binger !
  • Gorkab : Chaîne spécialisé dans l'image de synthèse dans le cinéma. Au premier abord ça semble assez basique avec un contenu très factuel mais avec le temps il arrive à obtenir des interviews de techniciens mythiques des VFX.
  • Karim Debbache : Probablement mon vidéaste ciné favoris. Son humour est génial, ses acolytes au moins à 78% aussi drôles. Malheureusement ils ne postent plus rien car ils se sont acoquinés avec Dailymotion mais qui sait, ils reviendront probablement, ça sert à ça un RSS. Bref, ici vous aurez Crossed, une fois tout vu allez voir Chroma sur Dailymotion.
  • Le fossoyeur de films : Un des plus connus. Il fait des reviews mais aussi de l'analyse un peu plus poussé. Le fossoyeur est fini mais pas sa chaîne. Il est un des fondateurs du Frames Festival à Avignon qui réuni de très nombreux vidéastes.
  • Le ciné-club de M. Bobine : De la critique de films (pas de la review de sorties cinés). Très intéressant et puis ils adorent Mad Max Fury Road…
  • Les critiques du MaSQuE : De la critique et de la review de films. Aussi du jeu vidéo. Attention ça parle très vite faut être concentré mais c'est sympa et ça sort du lot.
  • Nexus VI : Une chaîne pas uniquement orienté ciné mais Science-Fiction. La réal est fofolle et l'humour bien dosé. Pas mal de crossover avec le fossoyeur (une bromance ?)
  • Romain Houles : Une chaîne sur le maquillage ciné. Ça change c'est cool.
  • Scinéma : De la science et du ciné mélangé. Peu de vidéo :-/

Jeux vidéos

Pas vraiment de reviews de jeux qui sortent (je ne joue plus aux nouveautés depuis des lustres) mais plus de l'analyse, de la réflexion et de la technique.

  • Ahoy [En] : Des vidéos très propres globalement sur l'histoire de grands jeux. Pas mal orientés sur les armes également. Poste peu mais de très bonne qualité.
  • Games Next Door : Des réflexions sur différents sujets sur le jeu vidéo. Ça sort de la masse et prend du recul. Sympa comme tout.
  • Pause Process : Ça parle technique dans le jeu vidéo. Bon c'est un peu mort mais c'est dommage. Ils ont quand même abordé tout plein de thèmes.
  • Pomf et Thud : C'est mort mais c'est dommage. Ils commentaient du StarCraft 2 avec humour. Bon maintenant c'est OgamingSC2. C'est plus pro toussa toussa.
  • Summoning Salt [EN] : Une chaîne sur le speedrun. Elle se spécialise dans l'historique des records d'un jeu et explique quels sont les approches. J'en regarderai pas tous les jours mais le rythme de publication est suffisamment long pour pas que ça prenne le chou.
  • Joueur Du Grenier : probablement l'un des plus anciens vidéastes de la plateforme. C'est toujours aussi agréable à regarder et la réal monte en puissance depuis ces quelques dernières années.
  • Noclip [EN] : des documentaires sur les jeux vidéos mais plus orienté sur leur création. Avec des interviews, des visites de studios.

DIY

Une catégorie que j'apprécie beaucoup. C'est pas du bricolage de merde ici mais plus des artisans qui se font des trucs. J'adore les vidéos qui parlent pas où les gens construisent des trucs avec tous les bruits des machines. Ça ponce, ça lime, ça soude, ça scie

  • BanjoShow : Il me semble que c'est un frenchy et il fait du joli Steampunk à base de cuivre, laiton. C'est mimi tout plein.
  • Le labo d'Heliox : Ici ça fait un peu d'électronique et surtout de l'impression 3D (avec quelques reviews). C'est un niveau assez débutant c'est cool.
  • Make it Extreme : De la bonne grosse soudure, de la grosse découpe, des roulements, des pistons. Ça va se bricoler du bon gros outil en ferraille.
  • The Modern Home Project [EN] : Un américain qui se construit une maison en container dans la pampa Californienne. Peu de vidéo (c'est le début), mais un projet sympa.
  • Wintergatan [EN] : Un musicien qui se créer un instrument de musique à base de bille, rouage, ingéniosité. C'est sa deuxième machine. Chaque mercredi il montre ses progrès. Et en plus même s'il n'est pas français il habite en France le monsieur.
  • My Mechanics : De la restauration de vieux objets. Le résultat est bluffant mais surtout c'est relaxant à regarder (mieux que du vrai ASMR). J'ai envie d'un atelier !!!

Vulgarisation

De la vulgarisation scientifique principalement. C'est toujours bien d'apprendre des nouveaux trucs.

  • Dans Ton Corps : Ça parle santé avec beaucoup d'humour avec une fréquence très régulière.
  • Kurzgesagt [EN] : De la vulgarisation sur pas mal de thêmes différents mais orienté science tout de même. C'est magnifiquement fait à base d'animation vectorielles. C'est sous-titré dans plein de langue.
  • Chat sceptique : Une première chaîne nommée La statistique expliquée à mon chat qui s'est transformée (dissenssion). C'est des maths surtout mais ça vulgarise bien.
  • Spline : Il va tenter de vous débiaiser la face. J'aime bien la réalisation faussement simple et le ton.
  • E-Penser : Un des vulgarisateurs scientifiques les plus connus de Youtube. Le rythme de publication a pas mal ralentis ces derniers temps mais ça devrait reprendre de plus belle.

Autre

Pas facile de les classer :

  • Alt 236 : Rien que le nom c'est intrigant, hein ! Une chaîne spécialisée dans l'art mais orientée sur le fantastique, l'intrigant, le dérangeant. C'est super bien fait et très … ambiance.
  • Luke Towan [EN] : Un spécialiste de la maquette ultra réaliste. Ça parle peu et c'est assez captivant à voir. Le résultat est bluffant.
  • MYST : Des sujets mystérieux qui sont racontés avec deux approches : scientifique et mystique.
  • Metalliquoi : Ça parle de musique un peu ! Enfin surtout Metal. J'ai pas trop les mêmes goûts dans le métal mais sa bonne humeur fait que ça passe bien.
  • Stop a Douchebag [RU/EN] : C'est chiant les gens garer comme des merdes ! Ces russes s'attaquent à ce fléau et autant vous le dire ils ont du taff. Ils posent des énormes stickers sur les bagnoles qui roulent sur les tlotoires. Le ton monte très souvent et la police intervient parfois. Étrangement ça me relaxe.
  • Une Chanson L'Addition : Chaque semaine ça parle d'un morceau célèbre : sa genèse, son contexte, son sujet. C'est principalement rock quand même.
  • 李子柒 [CN] : Une chinoise qui vit dans sa ferme et fait tout un tas de trucs (surtout de la bouffe). Vraiment sympa à regarder même si on ne comprend rien. Elle est débrouillarde qu'elle en peut plus et de mon point de vue occidental c'est très dépaysant. Elle bouffe des "trucs" de son potager, se construit des meubles, se couds des vêtements depuis de la soie de ses propres vers. Bref, je sais pas à quel point c'est représentatif du monde rural chinois mais c'est bluffant.

Bon j'ai pas tout mis, il y en aura d'autres. Mais là il y a déjà de quoi faire avec quasiment que du francophone.

Je vous ferai une autre fournée dans quelques mois.

Petit vrac pour améliorer l'accessibilité de votre site

Hey encore un post sur les modifs sur le site. Ce coup-ci c'est un peu plus orienté accessibilité et potentiellement plus intéressant pour vous si vous avez également un site.

Allez voilà en vrac quelques modifs intéressantes.

Indiquer la bonne langue

C'est tout con, on y pense pas trop, mais il faut indiquer la langue de votre document. Ça généralement c'est fait à peu près partout mais une piqûre de rappel ne fait pas de mal.

Donc dans votre balise html globale, indiquez la langue de votre page.

<html lang="fr">

Mais au-delà de ça, pensez à l'indiquer également si vous avez des éléments dans une autre langue sur votre page. Dans mon cas, j'indiquais que la page était disponible en anglais mais je n'avais pas mis l'attribut lang sur l'élément. Ça peut paraître con, mais un lecteur d'écran sait changer d'accent et de prononciation en fonction de cet attribut ce qui améliore grandement le rendu.

Donc maintenant j'ai :

<p lang="en"><a href="…"> Available in Frenglish : …</a></p>

Les Alt c'est bien mais pas trop

Bon j'imagine que vous êtes déjà bien au courant mais si vous avez des images dans votre page web, il faut mettre l'attribut alt avec une ptite description de l'image. Bon par contre, si c'est une image uniquement décorative qui n'apporte pas de contenu vous pouvez zapper.

Bon celui-là est basique comme conseil mais je me suis fait avoir. Dans la sidebar j'ai les ptites icônes sur lesquelles j'avais mis des alt. Mais au final je les ai supprimé car c'était redondant avec l'attribut title qui se trouvent sur les liens.

Et ouai, quand vous avez une image dans un lien et que vous avez bien fait votre lien, abstenez vous de garnir l'image d'un alt redondant.

Avoir du HTML valide

Ouai ouai c'est bateau mais ça arrive de plus en plus fréquemment de voir des sites testés pour Chrome et… c'est tout. Même si ça représente la vaste majorité des utilisateurs, il faut penser à tous les autres.

Un lecteur d'écran sera probablement bien plus sensible à du HTML crasseu. Franchement c'est pas dur d'avoir un truc valide donc faite le sans concession.

Tester avec un navigateur texte

J'enfonce encore des portes ouvertes mais celui-là permet de vite "voir" quel est le rendu qui sera interprété par un lecteur d'écran. Certains sites ne montrent pas leur contenu dans un ordre pertinent et utilisent du CSS pour rendre le truc plus cohérent et c'est une mauvaise pratique. Bref, si votre site est facilement navigable dans un navigateur tel que w3m, elinks, lynx ça devrait le faire.

Utiliser les balises sémantiques d'HTML5

Bon HTML5 n'est plus tout neuf désormais. Pas mal de nouvelles balises sont apparues avec lui.

Elles n'ont pas de rôle technique à proprement parlé et s'utilisent comme un div mais leur intérêt est dans le sens qu'elles convoient. Vous pouvezdevez utiliser header, nav, aside, main, footer, article, section et form. Grâce à ça vous donnerez plus de sens à votre page. Ça bénéficie à la fois aux humains mais également aux logiciels qui comprendront mieux votre page et sauront mieux la décortiquer (il paraît que ça influence le référencement Google).

Toutes ces nouvelles balises sont associées par défaut à des roles aria (des attributs html que l'on peut apposer manuellement afin de rendre sa page plus accessible).

Skip to content

En plus d'utiliser les nouvelles balises sémantiques vous pouvez aider les utilisateurs de lecteurs d'écran en leur épargnant les parties redondantes de votre site en ajoutant un lien permettant de se rendre directement au vrai contenu de la page.

Un lecteur d'écran lit toute la page (très rapidement) dans l'ordre. Les pages ont très majoritairement leur menu bannière et compagnie au début. Les gens doivent donc se les coltiner à chaque changement de page ce qui doit être des plus agaçants.

Du coup, vous pouvez ajouter lien pour passer tout l'enrobage et vous rendre directement au contenu. Et vous pouvez bien entendu rendre ce lien invisible via du CSS ou en utilisant la classe sr-only qui ne s'affiche que pour les sr, les screen readers.

Les couleurs pour le contraste mais aussi la taille

Le choix des couleurs n'est pas complètement anodin. Bien que l'esthétique soit la première considération il faut tout de même garder un truc lisible. Il faut donc toujours un fort contraste.

Mais sachez que si le contraste de votre texte par rapport à son fond est un peu faible, vous pouvez également contrebalancer ça en augmentant la taille du texte. Plus le texte est imposant plus son contraste peu être faible.

Les styles sur les liens

Un truc un poil à la mode et pourtant emmerdant c'est de planquer les liens. On a été très longtemps habitué aux liens écrit en bleu avec un souligné continu.

Bon c'est vrai que c'est moche. Mais on peut styliser le truc de façon à ce que ça ressorte quand même. Bref mettez toujours un signe distinctif comme du souligné, des tirets, des points, un truc quoi.

Et surtout ne vous amusez pas à virer le outline. Ça permet de savoir quelle partie a actuellement le focus. Et c'est surtout utile pour les personnes utilisant la navigation au clavier.

On peut même s'amuser en foutant une très légère animation un grossissement et tout mais ne le virez pas.


Voilà, ça sera pas parfait mais ça sera surement plus agréable pour vos lecteurs.

Je tiens à remercier |Lupin| pour ses précieux conseils.

Se débarasser des firmwares en rabe dans Alpine

Allez un micro-article des plus rapides.

Vous connaissez Alpine Linux ? C'est l'une des meilleures distros du moment. L'une de ses forces et sa légèreté.

Ça s'installe très vite, ça prend très peu de place, son administration est vraiment légère. Par contre, si vous prenez l'install de base pour faire une VM (enfin c'est pas spécifique au VM à proprement parlé, hein), vous allez remarqué qu'il y a quand même pas mal de trucs installés.

Et quand je dis trucs, je veux parler des linux-firmware-X qui servent à faire fonctionner du matériel. Il y a fort à parier que vous n'avez pas besoin de tout ce qui est pré-installé. Dans ce cas-là, il suffit de faire un ptit coup de apk add linux-firmware-Y.

Bon, il faut savoir de quels modules vous avez besoin et là… bha faut connaître votre machine. En faisant ça, cela supprimera tous les modules sauf ceux que vous avec explicitement choisis. Mais si vous n'en avez besoin d'aucun, il vous suffit d'installer le paquet virtuel avec apk add linux-firmware-none et voilà.

Voili voilou. À chaque fois je cherche le nom de ce paquet magique, maintenant je le retrouverai plus facilement.

Modif du premier semestre 2019 sur le blog

En ce moment je m'amuse en modifiant un peu le site. Rien de bien transcendant, hein. Mais ça m'amuse quand même.

Raffinage de l'esthétique

Rayures

Déjà j'en avais un poil marre de l'aspect un peu trop lisse. J'ai donc ajouté des rayures, de la texture sur quelques fonds. Ça reste quand même assez léger mais au moins c'est moins insipide.

D'ailleurs les rayures de fond d'articles donnent une impression de 3D grâce à un très subtil dégradé.

Lumières et bordures

J'ai un poil ajusté les bordures des articles en passant aux couleurs de type hsl pour la cohérence. Hein !? Mais ça n'a aucun sens !

Jusqu'à présent j'utilisais des couleurs choppées au pif. À la fois pour la couleur supérieure et sa version moins saturée (bordure du haut vs les trois autres bordures).

Les couleurs peuvent être représentées de plusieurs façons différentes en css. Soit avec un nom comme orangered, soit avec une représentation héxadécimale comme #bad, soit avec la représentation rgb (red green blue) comme rgb(117,32,100) mais aussi en hsl qui représente hue saturation luminance comme hsl(54,58%,58%). Avec hsl, il est donc possible de choisir une teinte (hue) et ensuite de choisir son intensité et sa luminosité. C'est donc beaucoup plus logique de choisir sa couleur principale et de la décliner en gardant la même teinte. Et on peut donc avoir la même différence relative pour différentes couleurs très facilement sans avoir rien à calculer par cette représentation.

Bref je l'ai utilisé pour les quatre couleurs de type de postes.

Les posts
Les fast-posts
Les shares
Les ideas

Franchement je trouve ça joli toutes ces ptites couleurs !

Blogrolls

J'ai déjà abordé plusieurs fois le sujet mais j'y retourne. Je pense qu'une forme de lutte contre les GAFAM est la production de contenu hors de leur emprise.

Bon j'ai déjà écrit des bouts de tutos pour un peu toutes les étapes. Mais maintenant vais aussi faire un peu de pub pour vos blogs avec un blogroll.

Sur la homepage, je vais afficher un certain nombre (pour l'instant je sais pas encore exactement combien, je vais voir à l'usage) d'extrait d'articles vers des blogs francophones pour en faire la pub. Voilà voilà :-)

Pour le générer, j'utilise Openring qui est écrit en Go et permet tout simplement de générer un ptit fichier html qu'il n'y a qu'à inclure. Ça s'emboîte pas trop mal dans Hugo. Ce logiciel est vraiment très récent, mais il fait déjà le boulot.

Maintenance de la DB de Pleroma

Le Fédiverse c'est vraiment génial. Son écosystème bouillonnant avec de nouveaux logiciels et fonctionnalités qui arrivent de partout. Perso, j'ai jeté mon dévolu sur Pleroma qui est léger et fonctionnel.

Enfin léger… sa base de données augmente inexorablement. Entendons-nous, c'est pas un bug ni rien. C'est le fonctionnement normal, plus le temps passe, plus la quantité de données augmente, c'est tout à fait logique.

J'ai installé mon instance fin Octobre 2018. Mon instance s'est donc fédérée petit à petit au point de connaître désormais plus de 2000 autres instances.

  DB Postgres     /home/pleroma  
29/10/2018 26 Mo 144.5 Mo
04/11/2018 88 Mo 144.9 Mo
20/11/2018 320Mo 161.5 Mo
02/02/2019 1212 Mo 256.4 Mo
18/03/2019 1809 Mo 280.4 Mo
31/05/2019 5021 Mo 345.7 Mo

Bref, ça monte assez vite et il faut donc faire un peu de ménage.

Pleroma commence à proposer quelques commandes internes pour cela.

Étape par étape

  • Situation initiale : 5021 Mo
  • MIX_ENV=prod mix pleroma.database remove_embedded_objects5997 Mo NANI !?
  • psql -d pleroma_prod -c 'VACUUM FULL ANALYZE'3836 Mo ! pfiouuu c'est mieux, beaucoup mieux.
  • MIX_ENV=prod mix pleroma.database prune_objects3573Mo, ça aide aussi pas mal.
  • psql -d pleroma_prod -c 'VACUUM FULL ANALYZE'3372 Mo ! pfiouuu c'est mieux, beaucoup mieux.

Et voilà.

Lorsque vous faites le VACUUM FULL ANALYZE votre instance sera inutilisable (vous ne perdrez pas de toots pour autant, soyez juste un peu patient).

Encore plus ?

Et oui c'est possible ma bonne dame ! Vous êtes vraiment limité en espace disque et vous voulez vraiment gagner beaucoup plus de place ? Et bien l'ami Tetsumaki a la solution. Si vous suivez son article vous pourrez gagner de précieux octets.

Pour vous donner un ordre d'idée, en suivant sa technique je suis de 3372 Mo à tout juste 242Mo. Ouaip ! 242Mo !

Bon la manipulation est un peu plus touchy donc faites bien votre backup avant et sachez le restaurer au cas où. Cette manipulation est plus destructrice : vous perdrez des anciens toots et compagnie mais au final… est-ce vraiment gênant ?

/etc/pve vide sur Proxmox

J'ai filé un ptit coup de main aujourd'hui sur une ptite install Proxmox un peu à l'agonie.

Après un reboot, le dossier /etc/pve était vide. C'est le dossier qui contient un peu toute la conf de l'hyperviseur, c'est donc pas super pratique.

Je suis pas vraiment expert Proxmox, j'utilise presque pas ce truc et ma première réaction été un ptit "O___O une partoche séparée pour /etc ?!" Bon pourquoi pas.

Bon, le fstab n'est pas d'une grande aide vu que ce n'est pas mentionné. J'imagine que c'est vraiment de la tambouille interne à leur truc. Va falloir se renseigner un poil sur leur système.

À première vue, un ptit coup de pvecm status m'indique pve configuration filesystem not mounted. Thanks Cpt Obvious !

Allez, tentons de redémarrer le service de cluster service pve-cluster restart. Systemd comme d'hab te dit que ça marche pas sans te sortir le message d'erreur… merci j'adore. Allons voir journalctl -xe.

Hmmm bizarre tiens j'ai une ligne intrigante. /etc/pve/local/pve-ssl.key: failed to load local private key (key_file or key) at /usr/share/perl5/PVE/APIServer/AnyEvent.pm line 1626. À première vue comme ça je vois pas trop le rapport mais bon, allons voir ce fichier et surtout cette ligne…

Bon je vous épargne mon habilité naturelle à lire le Perl… le problème vient pas réellement de là. Enfin je pense pas.

Refaisons un ptit tour sur le moteur de recherche (DDG, pas Google, hein !). … …

Ha tiens, apparemment il y aurait ptet une autre erreur planquée. journalctl -e Je fouille pour vérifier.

HA.mp4

balou pmxcfs[12300]: [main] crit: Unable to get local IP address

Il pouvait pas le dire plus tôt ?!

Un ptit tour dans le /etc/hosts pour commenter les lignes commençant par 127.0.0.1. Redémarrage via service pve-cluster restart. Et là plus d'erreur.

/etc/pve a récupéré ses fichiers \o/

Bon, en fait visiblement, Proxmox sachant fonctionner en cluster, cette partition est potentiellement partagée/distribuée/synchronisée avec les autres nœuds. Cela explique pourquoi cette partition est un peu particulière.

Bref, vingt minutes de perdu à cause de messages d'erreur pas raccords ou planqués. Heureusement, ça marche plutôt bien habituellement.

Bref, voilà si ça peut vous aider tant mieux et surtout faites un backup des fichiers de conf en plus de vos containers !.

Monitorer ses certificats TLS

Pour une fois je vais essayer de pas parler de SSL (les habitudes toussa toussa) mais de certificat TLS (parceque x509 ça parle pas à grand monde).

Bref, Une grande partie de la sécurité des services sur Internet repose sur TLS, que ce soit du web, du mail, de l'irc, du … Du coup pour sécuriser ça, on emploie des certificats que l'on fait signer par une Autorité de Certification ou CA en anglais. Donc si je résume : tout est sécurisé par TLS et tout repose sur les CA.

Imaginez la pression qui s'exerce sur les CA. Ce sont des cibles aussi bien pour les attaques des viles pirates mais également des nobles corsaires (commandités par un gouvernement).

Pour se protéger d'une vilaine CA, un propriétaire d'un nom de domaine peut mettre en place CAA ce qui empêchera (théoriquement) toutes les CA (sauf celle spécifiée) de signer un certificat pour ce domaine. Les CA doivent respecter ce système depuis quelque temps maintenant. Les gros navigateurs se chargent de ne plus faire confiance envers les CA ne respectant pas ça.

Mais on peut aussi pousser le bouchon un poil plus loin avec le Certificate Transparency. Il s'agit d'un journal public, où toutes les CA consignent les certificats qu'elles signent afin d'avoir une trace. Il est donc très intéressant de consulter ces logs publics afin de vérifier que personne n'a émis de certif dans votre dos.

Tout ce qui est manuel tombe à la trappe. Heureusement Crt.Sh propose *roulement de tambour* … un flux RSS ! C'est basique, mais ça fonctionne.

Ça vous permet à la fois de voir si votre renouvellement s'est bien passé, mais aussi que personne d'autre n'en a fait un.

Perso, je le couple avec une notif IRC déclenchée par le script de renouvellement Let's Encrypt.

Voilà c'est tout bête mais malheureusement c'est rarement monitoré, même pour des services plutôt sensibles comme des banques, des fournisseurs de système d'exploitation et autre… Tiens d'ailleurs, vous voulez un ptit Wall of Shame ?

Ma collection de claviers

Ça fait un bail que je voulais vous présenter ma collection de claviers. Je n'en suis pas peu fier !

J'ai fait une ptite séance photo cet aprem pour vous les présenter. Ils sont tous en état de fonctionnement et certains servent régulièrement en tant que clavier principal (et pas juste le temps d'une ptite démo).

Bon avant de vous jeter sur les photos, je vous préviens, ils sont pas tous parfaitement shiny and chrome ! L'éclairage est naturel aussi ça peut jouer un peu. Et j'ai des chats et donc des poils un peu partout :-)

Si vous cliquez sur les images vous les aurez en meilleures qualités et en entier.

Allez j'ai envie de commencer !

Microsoft Natural Keyboard

Voilà le premier clavier que j'ai acheté il y a maintenant un bon moment. Je l'ai beaucoup aimé mais quand je le re-teste un peu maintenant… je supporte plus son touché.

Quand on a goûté au mécanique, c'est assez difficile de revenir sur ces merdes.

Un clavier scindé en deux de chez Microsoft il y a vingt ans

Mon premier clavier acheté volontairement

C'est un clavier en PS2 qui a connu des nouvelles versions.

Le glamshot de rigueur où l'on voit bien la scission centrale.

Ça me fait encore un ptit effet ce design.

Allez, il peut retourner au fond du placard.

Razer Black Widow

Le clavier gamer mécanique assez basique. À vrai dire c'est le clavier de ma femme, je ne l'ai quasiment pas utilisé.

Un clavier noir avec un design anguleux

razer oblige c'est noir et anguleux. Pas de loupiote sur çui-là.

Il a des cherry MX bleu et donc est sacrément bruyant et se branche en USB. On a tweaké quelques trucs (remplacé par des MX blacks, quelques o-rings, le keycaps échap changé) mais rien de bien méchant.

Le glam-shot.

Le plastic est légèrement irisé sur cette photo… La font est moche à souhait mais gamer gamer…

Il ne sert plus celui-là non plus. Lui je le rebranche sur le ptit ordi du placard en cas de maintenance.

Siemens ??

Un clavier sauvé de la poubelle. C'est un Cherry avec des switch noirs.

Il est basique et moche

Rien de bien folichon. Je ne l'ai quasiment pas utilisé.

Il est assez basique en PS2 avec un joli câble cependant.

Le glamshot de base

Ouaip. C'est basique. Pour ça que je l'aime pas spécialement.

Bleudo

C'est pas son vrai nom mais ça lui va plutôt bien !

Il a des touches bleues avec des symboles de téléphonies.

Un peu plus exotiques, hein ?!

C'est un clavier PS2 en cherry black qui servait pour de la téléphonie. Raccordé à un PABX il était lié à un téléphone et un ordi et permettait de gérer les appels, transférer des appels et tout…

le glamshot usuel

Je le trouve vraiment sexy celui-là.

Alcatel 4059

C'est son vrai nom et c'est il est encore plus poussé que le Bleudo niveau téléphonie.

Il possède beaucoup plus de touches dont beaucoup avec des voyants

Franchement elles sont pas mimi toutes ces touches avec fenêtre ?

Celui-là ça commence à être un poid lourd. Il est assez massif avec un paquet de touches et ses led. Ce sont des touches MX noirs.

Il a un connecteur à la con (un boitier est nécessaire pour le brancher à un ordi) mais il existe une version USB. Lui aussi, comme le précédent, est couplé à un téléphone et un ordi pour gérer les appels.

Encore un glamshot

Il a un peu pris la poussière mais admirez quand même ces touches de fonctions.

Bref je l'ai jamais fait fonctionné sur un ordi à la maison.

Alcatel ??

Ouai un autre Alcatel mais en PS2 et switchs noirs

On retourne sur du plus classique.

Un clavier basique.

Il ressemble beaucoup au Siemens, hein ?

Comme le Siemens, en vrai c'est du made in Cherry rebrandé. À peu près le même modèle que le Siemens.

le glamshot encore et toujours

Oups le coup d'éponge était pas encore parfaitement sec…

Il m'a très peu servi.

Sesam ??

Bon c'est pas son nom, hein ! Lui c'est un chouchou à la maison qui sert en ce moment même.

Allez je vous spoile pas :

Un clavier normal mais avec un lecteur de carte à puce et un petit écran LCD.

Ho mais qu'est-ce donc que cette excroissance ?

C'est un clavier de médecin/pharmacien toussa. Il a un lecteur de carte vitale. C'est en PS2 et aussi en RS232 !

Ce sont des cherry black.

Je ne l'ai jamais branché sur le port série mais lorsqu'on le branche sur l'écran on le voit booter !

L'écran indique qu'il démarre

Et il y a un petit bip quand on le branche !

L'écran indique ensuite la version de son firmware

Sa version de firmware.

Son ptit glamshot

La simplicité.

Allez je le rebranche.

IBM Model M

Que serait une collection de claviers sans un fameux Model M ?

C'est un énorme clavier avec quelques différences notables comme, par exemple, les touches F1 à F24, pleins de touches de fonction à gauche et les flêches sont dans un ordre qui déroute

The beast. Le plus lourd de la collec !

Voilà la légende. C'est un système de touche différents des Cherry MX, ici c'est un gros ressort qui se plie pour actionner le contact. Bref ça fait un sacré bruit et il faut appuyer assez fort.

Une fois le plastic supérieur retiré on voit la grosse plaque métallique (et la crasse).

Voyez cette feraille ? Ça explique le poids. À quatres roues près, ça ferait un bon skate.

Le connecteur d'origine est un DIN assez massif que j'ai remplacé par un Teensy pour avoir de l'USB. Bon malheureusement ça marche pas parfaitement car certaines touches ne sont pas reconnues. Bref c'est difficilement utilisable.

J'ai glissé un petit Teensy à l'intérieur qui tente de convertir le DIN en USB.

Le hack basique pour avoir de l'USB (j'ai été radin sur la longueur du câble).

J'imagine qu'avec un autre firmware (Soarer) sur le Teensy il y aurait moyen de s'en sortir.

Bref, une pièce que tout geek du clavier se doit d'avoir !

Encore un glamshot

Sous les touches se trouvent une 'autre touche'.

Mon favori !

Mon fait maison fait avec des Cherry MX Brown et qui se branche en USB.

Un cadre en bois, une plaque d'alu, des touches bariolées, quelques fils qui dépassent.

Admirez le souci de la finition !

J'ai un méli-mélo de keycaps avec 4 profils différents. Une touche qui sert à rien.

L'ultime glam shot.

Il mériterait ptet un ptit coup de décrassage :-°

Voilà c'est celui qui a permit d'écrire la majorité des articles ici.

Typematrix 2030

Je ne l'ai plus. Donc pas de photo.

Il m'a servi quelques années lors de mon apprentissage du bépo. Je l'ai donné depuis.


Voilà tout pour le moment.

Best-of début 2019

Salut tout le monde !

J'étais en train de me dire que ça fait un petit moment que j'ai pas étoffé un peu le Best-Of de mon site. Mais j'ai toujours du mal à décider quoi mettre dedans.

J'essaye d'y mettre des posts qui sont toujours intéressantes à lire même quelques années après leur rédaction. Donc pas de trucs liés à l'actualité, pas de trucs qui vont devenir obsolètes.

Et puis finalement je me suis dit que vous demander votre avis pouvait probablement m'aider. Du coup est-ce que vous avez un avis sur la question ?

  • Est-ce que vous êtes déjà allé voir le Best-of ?
  • Est-ce que ce qui y est déjà est pertinent ?
  • Quels articles de 2019 y auraient leur place ?

Voilà voilà.

Reconquérir le web

Si vous me lisez, j'imagine que vous êtes déjà pas mal sensibilisé aux histoires de vie privée et d'indépendances numérique et des soucis que posent les GAFAM mais je vais quand même en remettre une couche. Je ne vise pas tous les GAFAM mais principalement Google et Facebook qui sont à mon avis ceux qui font le plus de tort au web.

On lit régulièrement des diatribes à l'encontre des GAFAM. Constamment les grands média mainstreams annoncent le dernier scandale en date de l'un d'eux. Et pourtant rien ne change.

Il faut dire que les grands média ont justement une part de responsabilité : ce sont les premiers à truffer leurs sites de trackers Facebook (et autres), à pousser les gens à liker, à faire du gringue à Google pour être le mieux placé (en allant jusqu'à héberger une partie de leur contenu chez eux, via AMP)… Bref, ils en retirent un profit certain et n'ont donc pas grand intéret à pousser les gens hors de ces plateformes.

Une autre plaie du web qui est réapparu à la face de pas mal de monde ces derniers jours c'est à quel point il est gangrené par la publicité. Et c'est rien de le dire, la moindre page web pèse trois à quatre fois plus lourd si l'on désactive son anti-pub. Le nombre de requêtes explose pour revendre vos habitudes de surfs Non seulement vous êtes vendu en pâture aux marketeux mais en plus, les performances s'écroulent à cause de ce merdier.

Un troisième point qui m'irrite c'est plus un sentiment assez généralisé que l'on ressent en lisant des commentaires, des posts par-ci par-là comme quoi “ le web est mort ”. Vraiment ? Je n'en ai pas l'impression.

Dans les années 90 le web était bouillonnant, criblé de sites aux designs plus que douteux, abordant des sujets ultra variés. Des sites de passionnés un peu débrouillards mais pas non plus experts informatiques. Ça parlait de tout un tas de passions sans se prendre la tête avec des histoires de SEO, de retour sur investissement d'un site ouaib, de monétisation toussa toussa. Et bien cet esprit n'a pas disparu ! Il a juste été noyé dans la masse.

Tous ces ptits sites pas toujours notables mais avec leur charme certain existent encore mais sont devenus ultra minoritaires planqués au fin fond des index de Google and co. Il est devenu bien plus dur de dénicher ces perles mais pour beaucoup ils existent encore et surtout rien n'empêche d'en créer de nouveaux.

Bref, malgré ces trois points, je reste persuadé qu'il est assez aisé de les contrebalancer voir renverser. Si vous voulez apporter votre petit pierre à l'édifice dans la lutte contre la mainmise du web et ses dérives, créez un site ouaib !

Il n'a jamais été aussi facile d'avoir un site web !

  • C'est moins cher qu'avant.
  • Il existe bien plus de logiciels pour vous aider à en faire.
  • Il y a bien plus de docs qu'auparavant.
  • Héberger un site est également plus simple.

Google et Facebook préferent vous voir captifs de leurs services mais rien ne vous y retient. Il est vrai qu'à première vue, c'est super attirant de se baigner dans un écosystème tout gentiment mis à votre disposition sans même vous demander d'argent. On vous propose des services mirifiques, avec des performances incroyables et sans limitations. Mais tout ça c'est pour mieux vous engraisser, vous découper et vous revendre aux plus gourmands.

Tout le monde a quelque chose à raconter ! Ça peut vous sembler con, être inintéressant, déjà vu mille fois mais racontez-le quand même. Écrire sera un peu difficile au début puis vous trouverez vos marques et ça viendra plus naturellement et la qualité s'améliorera. Et si vraiment l'écriture c'est pas votre truc, postez des photos, vos dessins, vos idées, vos poêmes, votre journal (pas trop) intime sur votre site ! Mais ne succombez pas au syndrôme de l'imposteur et lancez-vous !

Au lieu de balancer les photos du dernier rejeton sur Facebook, faites-vous une petite galerie photo que vous enverrez à toute la famille. Ne fichez pas le gamin à peine sortie du blister.

Besoin d'un coup de pouce technique ?

Bon, vous n'y connaissez rien du tout du tout, vous n'avez pas de logiciel dédié mais vous voulez vous lancer ? Allez je vais vous aider !

On va faire un site web minimal mais qui marchera très bien et pourra être étendu autant que bon vous semble. Vous n'aurez besoin d'aucun logiciel particulier, vous avez déjà tout ce qu'il faut sur votre ordinateur.

On va créer un dossier que l'on va appeler www (bon en vrai on peut l'appeler autrement mais ça a du cachet). Dedans on va créer un premier fichier texte que l'on nommera style.css qui va s'occuper de gérer la partie esthétique du site. Et enfin un deuxième fichier texte que l'on nommera index.html. Voilà jusque-là rien de bien compliqué.

Le HTML minimal

Le langage HTML est vraiment très simple et peut être appris par tout le monde en quelques minutes.

Il fonctionne à base de balises que l'on ouvre et ferme avec dedans du texte. Il existe beaucoup de balises différentes il suffit d'en connaître moins d'une dizaine pour parvenir à un résultat pas dégueu.

Voyons un exemple de page web fonctionnelle qui peut largement suffire pour tenir un site web simple. Donc ouvrez le fichier index.html avec le bloc-note (pas avec Word, Writer ou autre, ça ne marcherait pas).

Voilà ce que vous allez mettre dans votre fichier index.html
<!DOCTYPE html>
<html>
	<head>
		<title>le titre de votre page</title>
		<link rel="stylesheet" href="style.css">
	</head>

	<body>
		<h1>votre page</h1>
		<p>coucou c'est votre page.</p>
		<p>Ceci est une ligne super longue de texte qui devrait déborder de tous les côtés mais c'est moche du coup on
fait en sorte qu'elle soit moins longue pour que ce soit plus simple à lire.
		Idéalement, faut que ça fasse dans les 80 caractères maximume de large.</p>
		<p>Vous pouvez faire des <a href="/seconde_page.html">liens</a> et même mettre des <img src="photos.jpg" alt="la photo mon chat"></p>
	</body>
</html>

Le CSS minimal

Le langage CSS, lui, sert donc à styliser votre page web. Il permet de définir l'espacement entre les éléments, la couleur, la taille, le soulignement… bref tout ce qui change l'aspect esthétique du document. Le HTML c'est le fond, le CSS la forme.

La syntaxe est vraiment très simple : d'abord vous indiquez le sélecteur (le type de balise sur lequel vous voulez agir) puis vous indiquez quelles propriétés lui affecter. Il ne reste donc qu'à apprendre quelles sont les propriétés existantes. En pratique avec une dizaine de propriétés on peut déjà parvenir à des résultats vraiment travaillés.

Tout comme pour votre page web, ouvrez le fichier style.css dans le bloc-note (ou équivalent, mais pas un traitement de texte).

Remplissons donc notre style.css
body{
  margin:auto;
  padding:1em;
  background-color:#222;
  color:#ddd;
  max-width:35em;
}
a{
  color:cyan;
}
Rien que ça suffit à avoir un résultat, certe minimaliste, mais au moins utilisable sans se casser la tête. Fun fact : si ça vous plaît vous êtes un minimaliste ;-)

Résultat ?

Il vous faut ouvrir votre fichier index.html dans votre navigateur, soit en glissant le fichier dans la barre d'adresse, soit en faisant fichier/ouvrir

Bon c'est chouette tout ça, vous avez maintenant le début de votre site mais si vous voulez le partager avec le monde entier, il faut maintenant l'héberger. J'ai déjà dédié un ptit article à ce sujet qui vous donnera des pistes. Il arrive parfois que les revendeurs de noms de domaine fournissent un peu d'hébergement gratuitement (une mise en bouche) qui peut être un premier pas.

Qutebrowser : config.py et Jblock

Hahaha vous avez vu ? Firefox a cassé son système d'add-ons à cause d'un certificat expiré. Prenons une petite minute pour se moquer mais pas plus parceque bon c'est un peu le dernier rempart dans la guerre des moteurs de rendu web. On est à deux doigts de la monoculture ce qui est loin d'être une bonne nouvelle.

Autant j'aimerai qu'ils regagnent quelques parts de marché autant je n'arrive plus à utiliser Firefox depuis qu'ils ont changé l'API de leurs add-ons cassant Vimperator. Mais bon, je ne peux plus me passer de l'User Experience qu'apporte Qutebrowser. Cela dit, ce qui me manque le plus est tout de même l'add-on uMatrix.

Qutebrowser propose bien un système de blocage de pub nativement, mais il s'avère être assez rudimentaire. Il bloque à peu près toutes les pubs. Toute ? Non ! Les satanées pub Youtube persistent !

Aussi bien les ptites pubs moches en bas de la vidéo s'affichent parfois, parfois non. Mais surtout sur certaines vidéos il y a parfois l'infâme pub vidéo et ça je supporte plus. Je ne me tape pas de pubs à la tv (parceque je la regarde pas), à la radio (parceque j'écoute Fip), sur le web, ou autre, c'est pas pour m'en taper sur youtube.

Bref, j'ai cherché et j'ai trouvé JBlock qui s'échine à faire un bloqueur de pub plus poussé que le système natif. Il sait utiliser les listes bien connues qu'utilisent uBlock Origins, AdBlock et compagnie. Du coup on atteint à peu près le même niveau d'efficacité. Et effectivement, je n'ai plus de pub sur Youtube \o/

Config.py

Historiquement Qutebrowser utilisait qutebrowser.conf puis autoconfig.yml pour chopper sa config (avec également keys.conf). Il est cependant possible d'utiliser un fichier de conf en Python pour faire à peu près la même chose avec quelques possibilités supplémentaires. Je me suis donc amusé en ce joli dimanche pour convertir ma config dans ce format.

Dès que vous aurez créé le fichier, vos anciens fichiers de conf ne seront plus utilisés.

Voilà donc ce que j'ai mis dans ~/config/qutebrowser/config.py
from qutebrowser.config.configfiles import ConfigAPI
from qutebrowser.config.config import ConfigContainer

import sys, os

config = config
c = c

# Bindings
config.bind('o', 'set-cmd-text -s :open', mode='normal')
config.bind('O', 'set-cmd-text -s :open {url:pretty}', mode='normal')
config.bind('w', 'set-cmd-text -s :open -t', mode='normal')
config.bind('W', 'set-cmd-text -s :open -t {url:pretty}', mode='normal')
config.bind('Fy', 'hint links yank-primary', mode='normal')
config.bind('Fy', 'hint links yank-primary', mode='normal')
config.bind('yy', 'yank -s', mode='normal')
config.bind('m', 'spawn --detach mpv {url}', mode='normal')
config.bind('Fm', 'hint links spawn --detach mpv {hint-url}', mode='normal')
config.unbind('F')

#Config perso
c.editor.command = ["kakoune -e vim {}"]
c.zoom.default = 150
c.messages.timeout = 10000
c.downloads.remove_finished = 30000
c.content.headers.do_not_track = True
c.completion.height = "33%"
c.tabs.show = "multiple"
c.tabs.tabs_are_windows = True
c.content.javascript.enabled = False
c.hints.mode = "number"
c.url.searchengines = {'DEFAULT':'https://duckduckgo.com/?q={}','y':'https://youtube.com/results?search_query={}','w':'https://fr.wikipedia.org/w/index.php?search={}'}

#Fonts
c.fonts.statusbar = "17pt monospace"
c.fonts.downloads = "17pt monospace"
c.fonts.hints = "18pt monospace"
c.fonts.keyhint = "17pt monospace"
c.fonts.messages.error = "17pt monospace"
c.fonts.messages.info = "17pt monospace"
c.fonts.messages.warning = "17pt monospace"
c.fonts.completion.entry = "17pt monospace"
c.fonts.completion.category = "17pt monospace"
c.fonts.prompts = "17pt monospace"


try:
	from qutebrowser.api import message
	sys.path.append(os.path.join(sys.path[0], 'jblock'))
	config.source("jblock/jblock/integrations/qutebrowser.py")
except ImportError:
	pass

Rien de bien exotique si ce n'est le try à la fin.

JBlock

JBlock est codé par Jay Kamat. Cet add-on en Python doit être installé via un ptit coup de git clone https://gitlab.com/jgkamat/jblock directement depuis le dossier ~/.config/qutebrowser/ .

Une fois cloné, il vous faut ajouter le bout de config.py de la fin. Ensuite il vous faut couper le blocage natif via un :set content.host_blocking.enabled false.

Ensuite il faut charger les listes que vous voulez utiliser. Pour ça un coup de :set content.host_blocking.lists '["https://easylist.to/easylist/easylist.txt", "https://easylist.to/easylist/easyprivacy.txt"]' .

Bon bha, plus qu'à faire prendre en compte tout ça avec un petit config-source et on y est presque.

Un ptit coup de :jblock-update devrait vous créer le fichier ~/.local/share/qutebrowser/jblock-rules . On lance enfin :jblock-reload et c'est en route.

Yapuka tester!

Bon vous remarquerez que c'est plus primitif que les classiques. Pas d'interface, pas de stats, pas d'auto-update… Primitif mais fonctionnel.

Héberger un site statique

Dans l'épisode précédent, on a créé un blog mais maintenant il reste des étapes avant d'avoir vos premiers visiteurs.

Le nom de domaine

Élément capital de votre blog !

Se prendre un nom de domaine

Avoir un nom de domaine à soi est à mon sens essentiel pour maîtriser un minimum son identité numérique. Ça ne coûte pas bien cher. On peut s'en tirer dans les environs de 10€ par an. Bref s'en priver serait dommage surtout que c'est techniquement très simple désormais.

La plupart des registrars (loueurs de nom de domaine) vous proposeront d'héberger eux même le serveur DNS sans avoir à dépenser quoi que ce soit. Vous perdez un peu en autonomie mais au moins vous pouvez pas faire de connerie et aurez quelque chose de fonctionnel et sans maintenance en 5minutes.

Il existe de très nombreux registrars. En France, puis au au-delà, vous trouverez (sans ordre particulier) OVH, Gandi, Online, Namecheap … Bref il y a de quoi faire.

Mais méfiez-vous, le choix du registrar peut s'avérer fatal.

Squatter un nom de domaine

À défaut d'investir dans votre propre nom de domaine, vous pouvez squatter un sous-domaine.

Il existe pas mal de gentils fournisseurs de sous-domaine gratuits qui seront plus ou moins flexibles. Vous trouverez par exemple netlib.re, eu.org.

Mais également de nombreux hébergeurs pourront vous héberger et fournir un sous-domaine comme par exemple github.io.

Bref il y a pas mal de choix allant du gratuit bienveillant au gratuit moins bien veillant et aussi du payant.

Héberger le site

Héberger un site statique est l'hébergement le plus simple qui soit.

Pas besoin de mettre en place d'intepréteur php encore moins de base de données. Un simple serveur web sans configuration particulière fera l'affaire.

Pas besoin d'une machine surpuissante pour pouvoir tenir la charge. Pas de mises à jour intempestives, votre site n'est qu'une pile de fichiers textes sans risque d'injection/exploitation distante/CSRF… bref c'est peinard et ultra performant.

Auto-héberger

Ça c'est le mieux pour votre indépendance. Vous foutez votre site à la maison, sur un serveur, un vieux laptop abandonné, un raspberry, un nas. Vous installez un serveur web, vous placez vos fichiers dans le bon dossier, vous faites pointer le nom de domaine vers votre IP, un peu de NAT sur votre routeur (redirection du port 80 et 443 vers votre serveur) et c'est parti.

Si votre blog ne contient que du texte vous pourrez l'héberger même sur une connexion ADSL moisie sans soucis. Par contre dès que vous mettrez des images/sons/vidéos ça peut devenir génant surtout si vous commencez à avoir pas mal de visiteurs. Mais ne nous voilons pas la face, pour un blog perso, ça n'arrive que rarement, vos visiteurs seront prêts à patienter quelques secondes s'ils ont fait l'effort de trouver votre blog.

Dans le pire des cas il est aisé de migrer vers un hébergement plus musclé par la suite. C'est donc une solution sympathique au moins pour débuter (ça fait près de 12 ans que je débute et que j'ai pas besoin de plus).

Héberger son site sur une plateforme prête à l'emploi

Vous allez dépendre du bon vouloir de votre hébergeur mais au moins vous aurez très probablement de meilleures performances réseaux que sur une connexion ADSL. Qui plus est, vous n'aurez plus de configuration à faire sur le serveur web et aurez quelqu'un vers qui vous tourner en cas de panne.

Encore une fois on trouve des hébergeurs gentils bien veillant comme les chatons ou bien des hébergeurs commerciaux plus ou moins cher. Héberger un site statique ne devrait pas vous coûter plus de 5€/mois.

Chaque hébergeur a un fonctionnement un peu différent pour l'envoi des fichiers, mais ils proposeront pour la plupart une doc simple d'accès pour vous guider. Ça pourra être de l'envoi en ftp ou bien une interface web.

Louer un serveur

Cette solution peut paraître overkill mais ça peut être une bonne occasion de s'y mettre :-)

Encore une fois, plein de choix possibles. Du petit mutualisé, à la machine virtuelle à 2€/mois jusqu'au serveur dédié à plusieurs centaines d'euro mensuelles…

Si le but est juste d'héberger votre blog, encore une fois, le plus petit des VPS (machine virtuelle) devrait faire l'affaire.

Installation d'un serveur web (Caddy, Nginx, Apache …), posage des fichiers au bon endroit configuration du serveur web (indiquer le nom du site et l'emplacement des fichiers au minimum) et voilà Si c'est votre première fois, en deux/trois heures c'est jouable. Il y a de très nombreux tuto sur le web pour faire ça. Pour un utilisateur plus technique ça ne vous prendra qu'une petite demi-heure.

La maintenance est très légère. Une fois configuré une première fois vous n'aurez probablement rien de plus à faire.

Le point le plus complexe peut s'avérer être le chiffrement pour HTTPS mais si vous vous orientez vers le serveur Caddy vous n'aurez rien à faire.

Verdict

On peut héberger un site statique en quelques minutes et gratuitement en passant par de multiples prestataires ou bien on peut investir un peu pour rester indépendant et/ou avoir un hébergement plus performant. Ça reste globalement simple et à la portée de n'importe quelle personne prête à investir un peu de temps dedans.

Si jamais vous vous lancez dans l'aventure n'hésitez pas à me communiquer l'adresse de votre joli blog (même s'il est pas si joli, c'est pas grave). Je me ferai une joie d'être votre premier visiteur :-)


Un an qu'il traîne dans les brouillons cet article… Allez hop !

Sandstorm : plateforme web-cloud libre auto-hébergeable

Sandstorm est un logiciel super. Et en plus d'être super il est très sécurisé. En plus de cela c'est facile à installer. Malheureusement c'est pas connu et du coup ça meurt à petit feu du manque de communauté.

Sandstorm est une plateforme de cloud pour héberger tout un tas de services différents un peu à la manière de Yunohost, Cozy, Cloudron et d'autres. Mais son fonctionnement est très différent. Tout son dev a été orienté par une approche assez radicale de la sécurité que l'on ne retrouve pas vraiment ailleurs.

Une architecture alien

Le cahier des charges lors de la création de Sandstorm se base sur l'isolation mais poussé à son paroxysme. Et du coup on isole pas les services entre eux mais de carrément isoler les grains. Les grains sont les objets : par exemple un pad, un partage de fichier, un kanban…

Je m'explique : Si par exemple vous avez besoin d'un pad (c'est ce que j'appelle un objet) pour noter des trucs, Sandstorm va vous démarrer un etherpad. Bon jusque là, ça va. Si par la suite vous avez besoin d'un autre pad (un autre objet), Sandstorm va vous démarrer un autre etherpad.

Et c'est là l'un des intérets majeur de la chose. Au lieu d'avoir tous vos pads sur le même service, chaque pad sera une instance indépendante des autres. Alors certe, quand vous en ouvrirez un, ça sera un peu plus long (on parle de dix secondes tout au plus).

Capture d'écran d'un etherpad dans l'interface de Sandstorm

Voilà sur quoi on tombe lorsqu'on l'utilise

Si jamais votre pad se fait trouer, les autres pads ne le seront pas. Le vice est poussé jusque dans les détails en faisant en sorte que chacun de vos grains ait une adresse unique impossible à deviner (mais moche). Du coup, si vous partagez un fichier dans Jirafeau, les gens ne pourront pas tenter de deviner l'adresse d'autres fichiers…

Cela a donc énormément d'avantages en termes de sécurité mais du coup également quelques inconvénients : ça bouffe un peu plus de place sur le disque, ça bouffe un peu plus de ram (et encore), les applications doivent être adaptées (c'est le gros point noir). Le système est tout de même suffisamment malin pour éteindre les services inutilisés au bout d'un certain temps.

Toujours concernant la sécurité, ils ont fait le choix de ne pas utiliser de mot de passe pour l'authentification des utilisateurs. C'est un détail tout con mais c'est excellent je trouve. Tout fonctionne par token : vous entrez votre adresse mail et vous recevrez un lien et/ou une suite de caractères à rentrer et voilà. Rien à retenir, pas de compromission du mot de passe. Bon par contre l'accès au mail devient crucial.

Bon et du coup on peut y faire quoi dans ce Sandstorm ?

Il y a un bon ptit nombre d'applis. C'est moins fourni que les autres car la communauté est plus restreinte, mais on trouve quand même de quoi s'occuper.

Dans mes favoris on retrouve Etherpad, Wekan, Gogs, Tiny Tiny RSS et Telescope mais il y en a pas mal d'autres.

Vous pouvez aller voir leur App Market (c'est gratuit, hein).

Une fois une application installée, vous pouvez créez de multiples grains de ces applis. Vous pouvez stocker un ensemble d'grains dans une collection pour pouvoir tous les retrouver facilement ou bien les partager d'un coup d'un seul.

Chacun de vos grain peut-être archivé par les utilisateurs (ça génère un fichier zip que l'on peut restaurer sur une autre instance par exemple) à tout moment. Vos utilisateurs peuvent partager les grains en lecture seule ou bien avec des droits supplémentaires, c'est tout bien geré et à tout moment vous pour voir qui peut accéder à ce grain et vous pouvez en un clic révoquer un accès.

Et où qu'on trouve ça ?

L'instance principale est Oasis et est devenue payante (elle était gratuite jusqu'à il y a six mois mais il faut désormais parvenir à payer l'infrastructure).

Mais surtout vous pouvez héberger une instance assez simplement. Ils fournissent un script d'installation qui marche sur à peu près tous les Linux (même Alpine). Par contre regardez ce que fait le script avant de l'installer, hein ! (on fait pas le sagouin qui curl |bash sinon je vais me fâcher !)

Et c'est solide ?

Hmm je l'utilise depuis quelques années maintenant pour les ptits trucs dont j'ai un besoin ponctuel. Quand j'ai pas envie de me faire chier à installer quelque chose, si c'est présent dans le market je l'installe, ça prend moins de trente seconde et j'ai pas à me faire chier à me demander si c'est sécure ou pas, quel mot de passe utiliser. Je n'ai jamais eu de soucis (sauf l'appli telescope qui en fait vire les trucs trop ancien toute seule… mais c'est propre à cette appli et non Sandstorm).

Le seul point inquiétant c'est que la startup qui montait le truc s'est pété la gueule : ils n'ont pas réussi à établir un business-model suffisant. Désormais certains ex-membres de l'équipe (dont le créateur de Protobuf) continuent de bosser dessus sur leur temps libre et du coup ça vie bien moins vite qu'auparavant sans pour autant être mort.

Bref, Sandstorm c'est une bonne plateforme de cloud qui peut très bien faire l'affaire pour une asso ou une ptite entreprise, une classe, un établissement scolaire (ça bouffe du LDAP et SAML).

L'installation est simple, la maintenance quasi nulle, et chacun peut backupper ses grains et cerise sur le gateau c'est tout sécure. Bon je ne vous cache pas que je ne me fais pas trop d'illusion quant à la santé du projet suite à l'arrêt de la startup mais on sait jamais. Un regain d'intéret et hop ça peut repartir… Ha et je ne l'ai pas précisé mais, tout ça c'est du libre, hein.

Tous les protocoles réseaux ne sont pas synchrones

Message de service

Tous les protocoles réseaux ne sont pas instantanés !

Lorsque vous envoyez un mail, vous n'avez aucune assurance que le destinataire le reçoive immédiatement.

Lorsque vous envoyez un toot sur le Fédiverse, vous n'avez aucune assurance que tout le Fédiverse le reçoive immédiatement.

Pourquoi ?

Je ne cite que deux exemples mais c'est vrai pour d'autres protocoles aussi. Beaucoup de protocoles n'imposent pas de contraintes quant au temps de traitement et d'acheminement.

Si le serveur d'envoi est un peu surchargé ou celui de réception ou les éventuels intermédiaires le sont, il y a de forte chance que les données soient mises dans une file d'attente pour être traitées ultérieurement.

Si l'un des serveurs (émetteur, intermédiaire ou destinataire) est HS, il y a des chances que ce soit également mis de côté pendant quelques jours et retenté régulièrement.

D'autres protocoles comme par exemple IRC, eux font tout leur possible pour transmettre immédiatement les données mais il reste toujours les aléas du réseau.

Les mails et le Fédiverse

Les mails peuvent être mis de côté pendant une semaine avant de vous revenir en erreur. C'est également un des moyens de filtrer le spam : renvoyer une erreur à la première connexion pour forcer le serveur d'émission à se reconnecter plus tard pour renvoyer le mail : on appelle cette technique le greylisting et c'est très efficace.

Pour les toots du Fédiverse ça peut expliquer le fait que certaines personnes répondent des heures/jours/semaines plus tard à certains de vos vieux toots : la fédération n'est pas automatique et parfois la communication inter-instances est un peu chaotique. Il est d'ailleurs courant de n'avoir qu'une vue partielle ou simplement désynchronisée d'un fil de discussion.

C'était un message à caractère informatif

C'était vraiment très intéressant.

La téléphonie c'est pas si compliqué !

En voilà un sujet étrange ! Ouai j'en ai jamais parlé auparavant, mais je m'aperçois que c'est finalement assez peu compris même par les informaticiens. Donc voilà quelques micro-bases de téléphonie pour ceux habitués aux dinateurs.

Vocabulaire

  • Téléphone : Le terminal utilisateur constitué d'un micro, un haut-parleur de quoi numéroter.
  • PABX : L'appareil sur lequel est raccordé tout un tas de téléphone.
  • Ligne : Ce qui "alimente" un téléphone pour établir une communication.
  • Numéro : L'identifiant d'un téléphone ou d'une ligne.

Bon là c'est assez basique, mais il faut bien voir que sur une installation téléphonique on peut décoreller le nombre de téléphone, du nombre de ligne et du nombre de numéro de téléphone. C'est-à-dire que l'on peut avoir par exemple 10 téléphones, avec seulement 4 lignes et uniquement 2 numéros de téléphones. C'est ensuite le PABX qui va s'amuser à gérer tout cela.

Bref on peut assimiler le nombre de ligne au débit d'une connexion Internet, les téléphones aux ordinateurs, le PABX à un mix de box et de serveur et enfin les Numéros aux IP publiques.

PABX

Le PABX c'est un appareil qui a le rôle de modem, routeur, switch, serveur. Il peut en effet s'accomoder de types de lignes différentes, router les appels aux bons endroits en fonctions de règles. On y branche plus ou moins de téléphones (de technologies différentes) dessus et en plus il permet d'ajouter des services supplémentaires (du répondeur enregistreur, de la répartition d'appels, du serveur vocal interactif…).

Bref c'est un peu comme les box des FAI désormais. C'est d'autant plus vrai que désormais les PABX sont de plus en plus proches du monde IP et donc sont parfois uniquement du logiciel sur une box.

D'ailleurs soit dit en passant, on voit souvent l'appelation IPBX qui ne veut pas dire grand-chose selon moi. Les PABX existent depuis des décennies et se sont toujours adaptés aux évolutions technologiques des lignes et des téléphones. Ils sont passés du bon vieux RTC à du trunk SIP en passant par du Numéris avec des téléphones RTC, des DECT et des softphones. Donc pourquoi changer le nom à part pour faire plaisir aux informaticiens ?

Les lignes

  • Commençons tout d'abord par la ligne analogique ou RTC. La ligne comme à la maison : deux fils de cuivre pour faire une boucle. La qualité sonore est basique, mais elle a l'avantage d'être alimentée par l'opérateur ce qui pour certains téléphones peut suffire pour fonctionner encore lors de coupure de courant. Elle va "bientôt" disparaître en n'étant tout d'abord plus proposé à la vente.

  • Il y a ensuite eu le Numéris ou ISDN existe en deux variantes en France : le T0 et le T2 (et rarement aussi en demi-T2). Là, c'est une sacré évolution : c'est du numérique de bout-en-bout avec donc une meilleure qualité sonore. Le T0 permet d'avoir deux communications simultanées alors que le T2 monte à 30. Il nécessite cependant un petit boitier d'interface : la TNR. Ce boitier est la propriété de l'opérateur et peut être alimenté électriquement chez le client en cas de ligne un peu capricieuse. En plus de sa bien meilleure qualité sonore, la vitesse d'établissement d'un appel est vraiment beaucoup plus rapide. Ces lignes ne sont vendues quasi-exclusivement qu'aux entreprises et sont sur le déclin du fait de leur prix élevé mais à une époque elles servaient pour avoir un accès à Internet à 128Ko/s voir près de 2Méga pour un T2.

  • La mode est en ce moment aux trunks SIP qui sont donc utilisé par-dessus le réseau Internet. Ce protocole est donc bien plus proche du monde informatique que les précédents (il y a tout de même eu le h323 qui a eu son moment de gloire avant). H323 émanait de l'ITU un organisme du monde des téléphonistes alors que SIP lui émane de l'IETF qui règne sur le monde de l'Internet. C'est le moment où la téléphonie a commencé a pas mal perdre pied face à l'informatique. Il s'agit d'une signalisation proche du HTTP. C'est ce qui se vend le plus actuellement. Il arrive même parfois que l'on interface des PABX à des lignes SIP via des convertisseurs qui présentent des T0/T2 d'un côté et du SIP de l'autre.

Les numéros

Déjà le plan d'adressage mondial est très hétérogène : chaque pays utilise un nombre de chiffre différent, le téléphone en lui-même ne peut donc pas savoir combien de numéro il doit envoyer mais c'est aussi galère même en restant en France.

  • On a des numéros à deux chiffres (les urgences)
  • à trois chiffres (les numéros de services)
  • les numéros à quatre chiffres (souvent surtaxés)
  • Enfin tout le reste est à dix chiffres.

C'est à peu près le même topo dans pleins d'autres pays. Donc si on rajoute les préfixes internationaux, le système ne saura jamais combien de chiffres il va y avoir et ça peut être assez problèmatique.

Et comme pour l'IPv4, on s'est vite rendu compte qu'un numéro unique par terminal c'était pas forcément utile donc on a développé un système similaire aux IP publiques et IP privées. Les opérateurs attribuent donc 1 NDI à chaque client et après, optionellemment vendent des SDA aux clients ayant besoin de plus de numéro. Le PABX agit donc comme un routeur qui fait du NAT avec d'un côté le réseau opérateur qui vous attribue X numéros (1 NDI et X-1 SDA) et de l'autre les terminaux sur lesquelles il va falloir attribuer les SDA.

D'ailleurs fun fact : les lignes Numéris peuvent être groupées (par exemple avoir 3 T0) pour pouvoir établir plus de communications simultanées. Et bien dans ce cas, le premier T0 sera le "porteur du NDI" et les deux autres T0 auront un numéro alphanumérique donc avec des "ABCD" qui ne sont donc pas numérotables. Ce numéro sert en interne pour l'opérateur.

Le PABX gèrera donc son plan de numérotation (plan d'adressage) local où il attribuera un numéro unique à 2/3/4/5/6/8 chiffres à chacun des téléphones qui lui sont raccordés dessus et fera la concordance avec une SDA et ce numéro interne. Il arrive couramment donc qu'un téléphone n'ait pas de SDA (numéro publique) et donc il ne pourra être joint que par un transfert depuis un autre téléphone tout comme un serveur n'ayant pas d'IP publique pourra être joint via du NAT de la part du routeur.

Les terminaux

On retrouve classiquement les téléphones mais ce n'est pas aussi simple que cela. On a les simples téléphones analogiques qui ont deux modes principaux de numérotation : la signalisation par impulsions ou bien les DTMF qui ont succedées. Ces téléphones fonctionnent sur deux fils de cuivre tout simplement avec une tension de fonctionnement variant entre 12 Volts et 60 Volts selon les modèles.

Il y a ensuite les téléphones numériques et là chaque constructeur de PABX fait à sa sauce : vous ne pourrez jamais faire marcher un PABX de marque X avec un téléphone numérique de marque Y. Ces téléphones embarquent des fonctionnalités supplémentaires (les fameuses touches de supervision notamment). Ils fonctionnent généralement sur une paire de cuivre mais parfois sur deux paires… rien de standardisé (ça peut être dans un autre ordre que l'accoutumée).

Il y aussi les téléphones DECT qui est la norme de téléphonie sans-fil la plus répandue, c'est un simili-wifi pour la téléphonie. C'est étrangement compatible entre constructeurs. On pose une antenne et on y appaire des téléphones avec plus ou moins de niveau de services. Il y a les DECT "nature" génériques et les DECT des constructeurs qui ajoutent encore plus de fonctions mais au prix d'une compatibilité incertaine et d'un prix lui certain.

On retrouve ensuite les fax, mais aussi des TPE et des machines à affranchir mais dans un futur proche ça ne se vera plus sur des lignes RTC mais directement sur de l'IP…

Il y a aussi des ascenseurs qui ne sont que de gros téléphones (un peu capricieux) et les alarmes qui se modernisent eux aussi pour passer en SIP ou bien en GSM.

Les téléphones IP et autres softphones sont un peu différents car rattachés à l'informatique mais rien de fondamentalement différent non plus.

Vous avez les bases

Maintenant vous devriez mieux vous y retrouver avec ces bases.

Les mondes de la téléphonie et de l'informatique se rapprochent voir désormais se chevauchent et il est toujours marrant de voir ces philosophies bien distinctes se confronter. Les gros PABX sont en fait des amas de multiples ordinateurs imbriqués les uns dans les autres et fonctionnent en harmonie avec des uptimes colossaux (on croise régulièrement des machines avec quinze ans d'uptime). La téléphonie est un domaine ultra propriétaire où toute fonctionnalité se déverrouille par l'achat de matériel mais en plus de licence. L'arrivée rapide de logiciels libres dans ce domaine est une bouffée d'air frais mais la téléphonie proprio reste encore ultra majoritaire.

Les variables d'environnement chez Gentoo

Pourquoi j'ai eu besoin d'y toucher ?

TL;DR passez au chapitre suivant

Je suis passé sur Sway depuis six mois environ et franchement tout se passe bien. La migration depuis i3 a été vraiment douce et tout fonctionnait vraiment bien. Mais si j'utilise du passé c'est parcequ'il y a eu un hic.

Qutebrowser (mon navigateur) tourne à base de Qt5 et un bug a fait surface récemment. Lorsqu'au moins une fenêtre de l'application n'est pas visible, alors ça rame énormément au point de ne plus être utilisable.

Ce bug ne touche que les applications Qt tournant sur Wayland et ce que ce soit nativement ou via XWayland. Sauf que bon avant d'arriver à définir aussi bien ce bug ça a été compliqué : il m'a fallu deux semaines pour y arriver.

Premièrement, il a fallu comprendre pourquoi des fois je le ressentais pas du tout et pourquoi des fois ça se trainait à mort. Naturellement pour tester j'ai vidé le cache, utilisé un profil vierge et là… ça fonctionne nickel. Pareil pour Falkon que je n'utilise pas du tout, là ça fonctionne nickel. Du coup le premier réflexe c'est de me dire, que c'est mon profil avec tous mes réglages qui font chier.

Allez tant pis, on sauvegarde puis dégage le profil. Ça fonctionne nickel, mais du coup naturellement qu'est-ce qu'on fait dans ces cas-là ? Bha on se retape la config habituelle : modification de la taille des fonts, dégageage de l'UI, suppression des onglets, quelques raccourcis claviers customisés. Bon bha là ça déconne. Arg ! (Ça va parler Gentoo et variables d'environnement bientôt.)

Bon je refous l'UI, je vire tout ce qui est modif des zooms et taille des fonts. Pareil. Je reteste Falkon, non ça marche du coup là j'ouvre une nouvelle fenêtre Falkon dans un autre workspace pour avoir le bugtracker Qt d'un côté et là étrangement ça commence à merder pour lui aussi.

Merde c'est un souci de Qt !

Bon bha emerge qtwebengine, c'est parti pour trois quarts d'heure. Pendant ce temps, je fais des tests et là je commence à penser que c'est le fait d'avoir deux fenêtres différentes. Je magouille et en fait bha non. J'ai beau ouvrir deux pages web côte-à-côte bha ça rame pas.

Je me dis que c'est ptet une saloperie du côté de XWayland donc je tente en le faisant tourner nativement mais non rien à faire, ça change pas le comportement. La compilation se termine, ça n'a rien changé du tout.

Je vais faire un tour sur IRC pour discuter de mes déboires avec le chan de #qutebrowser où je fais quelques magouilles supplémentaires sans grand succès, je vais voir du côté de chez #qt-labs où c'est … calme. Pas grand-chose à en tirer. J'en discute brièvement avec l'un des devs de Sway et là ! Ho Miracle ! Ça fait tilt, ça serait probablement un bug dans QtWayland qui serait déjà répertorié sur une histoire de "callback de surface"…

Après cinq minutes de fouilles effectivement c'est tout à fait ça et c'est un bug connu avec un patch en test. (Bon j'ai rarement fait une intro aussi hors-sujet et aussi longue mais vous allez voir ça va venir.) Bref le bug est connu et presque fixé ça devrait pas tarder à arriver. Mais j'ai vraiment envie de le tester.

Actuellement j'étais revenu à i3 mais j'avoue désormais préferrer Sway. Du coup, je me suis compilé le ptit qtwayland avec le patch qui va bien. Je me le suis make install et yapukatester.

Je lance Qutebrowser et ça déconne tout pareil :-( All hope destroyed. Bon en fait si : il s'est lancé via XWayland ce couillon, je rajoute quelques variables à la main pour le lancer nativement et là pouf ! C'est tout fluide comme au bon vieux temps.

Comment rajouter des variables d'environnement proprement dans Gentoo ?

Il y a un joli dossier /etc/env.d/ contenant plein de fichiers textes pour les variables d'environnement spécifiques à différents logiciels.

Du coup dans mon cas j'ai créé un ptit 42qutebrowser et dedans j'y ai mis :

QT_QPA_PLATFORM="wayland"
QT_WEBENGINE_DISABLE_WAYLAND_WORKAROUND="1"
QT_WAYLAND_DISABLE_WINDOWDECORATION="1"

Remarquez les guillemets ! Sans ça, ça fonctionne pas… Me suis fait avoir.

Et là un reboot Ouai j'avais la flemme. D'habitude je ne fais jamais ça mais là, vraiment, la fatigue, toussa toussa. Mais ça m'a laissé le temps d'aller voir un peu les semis sur le balcon.

Voilà.

Bon bha heureusement que j'ai brodé sinon ça allait se voir que c'était un article que pour me rappeler où j'avais planqué ces variables à la con…

Le Zéro Inbox pour vous soulager

J'ai eu quelques boîtes mails durant ma vie comme probablement tout le monde. Les plus importantes c'était celle de Hotmail avec ses 2Mo de stockage qui paraissaient pas immense mais au final largement suffisant pour l'époque. Avoir un webmail c'était génial : pouvoir accéder à ses mails de n'importe où sans rien installer !

Puis Google a débarqué avec son Gmail et sa boîte de 1Go mais en perpétuel accroissement ! Et puis cette interface toute moderne : la frontière entre webmail et client lourd commençait à se brouiller tellement l'interface était bien faite.

Mais j'ai vite commencé à avoir peur de Google et ses potes et j'ai entamé une dégooglisation à partir de 2007. Et du coup j'ai entrepris d'héberger mon propre serveur de mail.

Un poil galère au début mais pas tant que ça non plus. De nouvelles responsabilités (ouai si je fais pas de sauvegarde des mails bha… hé… personne d'autre ne le fera à ma place et je risque de tout perdre. Et puis faut pas configurer le serveur comme un sagouin pour pas se prendre trop de spams et surtout ne pas devenir émetteur de spam et se faire blacklister.

Mais en contrepartie une liberté accrue : plus de restriction sur la capacité de stockage des mails, possibilité d'avoir des pièces jointes de la taille que je veux (enfin si les serveurs en face sont d'accord eux aussi), autant de boîtes que je veux.

L'ivresse de la maîtrise de ses données toussa toussa, c'était la classe.

Après la dégooglisation la simplification

Un motif assez récurrent que j'ai constaté chez les personnes éprises d'auto-hébergement est la folie de vouloir monter tout un tas de trucs. Après tout c'est logique, l'offre de logiciels libres pour faire tout un tas de trucs est pléthorique, c'est assez fun à faire (pour certains), les ressources matérielles sont démentielles (même sans dépenser des milles et des cents) et puis c'est grisant d'avoir ses propres services rien qu'à soit.

Du coup on s'installe un serveur mail, puis un DNS, puis un ptit serveur web, on continue avec un lecteur de flux RSS, un serveur de synchronisation de fichiers, de contacts, de notes, un wiki, une ptite plateforme de vidéo, un truc pour synchro son portable, un autre truc pour enregistrer ses traces GPS, une galerie photo, un serveur de streaming de musique…

On se bloat.

Tout ce qu'on installe est un potentiel d'emmerdes. Je ne dis pas que ça va tomber en panne, mais il y aura forcément de la maintenance : il faudra mettre à jour sinon c'est de l'inconscience. C'est pas toujours compliqué ni très consommateur en temps mais il faudra quand même le faire.

Avec le temps, on gagne en expérience et c'est de plus en plus simple à faire et bien moins chronophage. Mais on se rend compte que "Ha bha en fait tel service m'en sert peu voire pas du tout." Ou bien que tel logiciel est tombé en désuétude et qu'il faudrait migrer vers un autre mais est-ce que ça vaut vraiment le coup ?

Bref la seconde phase de cette belle aventure c'est de réduire ses services à ceux qu'on utilise vraiment. Les moins accrocs décrocheront probablement pour aller voir des fournisseurs de services respectueux (avec le collectif des CHATONS ça n'a jamais été aussi simple de le faire avec une certaine confiance).

Personnelement j'ai viré pas mal de services pour ne garder que ce qui m'est vraiment utile mais je n'ai rien extériorisé. Donc me voilà désormais avec moins de trucs qui dorment, moins de maintenance à faire et plus de sérénité (moins peur de mettre à jour le système en croisant les doigts que des services ne pètent pas).

Et en dix ans, bha j'en ai accumulé du mail.

On recule et on purge

Jamais je me suis retrouvé à fouiller les mails d'il y a huit ans… Les rares fois où je cherchais un mail c'était généralement pour retrouver des identifiants à une certaine époque mais maintenant que j'utilise un gestionnaire de mots de passe bha ça ne m'arrive plus.

Les mails de newsletters que je n'ai pas lu il y a 7 ans… bha je les lirai pas aujourd'hui ni demain…

Les mails annonçant une panne d'un service réseau de Mars 2013 ça me fait une belle jambe.

J'ai bien quelques mails de la famille mais … bha … je suis pas très versé famille et c'est généralement de la futilité absolu ou bien des trucs qui étaient plus administratifs qu'autre chose, bref rien qui ne mérite d'être conservé.

J'ai pris la décision de purger.

Bon, j'y suis allé mollo quand même, j'avais quand même peur de supprimer le mail qu'il allait me manquer deux jours après (alors que bon, ça ne m'est jamais arrivé, mais la rationalité n'est pas de mise).

  • J'ai créé un dossier dans la boîte mail pour classer les trucs de familles.
  • J'en ai créé un autre pour les inscriptions/logins.
  • J'en ai ensuite créé un par année (sauf la courante).

J'ai entrepris de classer tous les milliers de mails dans ces dossiers. Là pas de miracle, j'ai tout fait à base de grep et de mv (avec une boîte au format maildir c'est super simple).

J'ai fait un backup.

Ensuite, j'ai viré les dossiers annuels, j'ai scruté celui des logins et j'ai complété le password-store puis je l'ai viré. Le dossier de famille j'ai relu un peu tout et j'ai viré tout ce qui n'était pas … comment dire … heu … "émouvant", puis purgé.

Voilà il ne m'est resté que les mails de l'année.

J'ai reluqué un peu tout et en dehors de cinq/six mails encore d'actualité j'ai tout viré.

Mon inbox se résume alors à une dizaine de mails. À côté de ça, j'ai une dizaine de dossiers en sursis et voilà. Quelques mois plus tard, je virrais quasiment tous les dossiers et la purge ultime passera pour n'avoir plus que 6 mails.

Et voilà le chemin vers le Zéro Inbox.

Et comment ça se gère ?

Bha c'est simple, je me sers trèèèèès peu des mails. Je les consulte quand j'en attends un et parfois, de temps à autres. Dans le meilleur des cas c'est une fois dans la journée et des fois c'est au bout d'une semaine.

Ensuite tout ce que je reçois, je le lis immédiatement et là soit j'ai rien à en faire : je le jette; soit je fais ce qu'il faut faire tout de suite. Je réponds tout de suite, parfois même juste pour indiquer que j'ai reçu le mail et que j'ai pas de réponse dans l'immédiat mais que je répondrai plus longuement après réflexion ou récupération des infos nécessaires. Et si c'est un truc à conserver des tickets pour un évènement ou autre, je fous ça dans un dossier spécifique que je pense à vider de temps à autres avec tout ce qui est passé.

Alors je sais qu'il existe des variantes de la zéro inbox mais cette technique me convient plutôt bien.

Je reste très peu de temps dans mes mails et voilà.

D'ailleurs j'utilisais principalement un webmail (Rainloop) mais je suis passé à néomutt (que je sais à peine utiliser) et je m'en contente. Je me suis désinscrit de toutes les newsletters, j'ai blindé mon antispam et je n'envoie quasiment pas de mails de moi-même mais juste en réponse du coup je reçois plus grand-chose et ça me fait du bien à ma phobie administrative.


Voilà, je veux pas vous pousser à en faire autant, je sais que pour beaucoup de monde c'est pas vraiment faisable surtout pour le boulot mais ayant la chance de pouvoir le faire, je suis super content. J'ai fait pareil avec la boîte du boulot où j'ai même pas de dossier et qu'une quinzaine de mails en inbox.

Et d'ailleurs en passant, s'il y a une newsletter à suivre c'est le courrier du hacker qui vous permettra d'avoir un bestof hebdromadaire (elle est nulle mais j'atteins pas le quota de blagounettes sinon) de Journal du Hacker et ça me tient vraiment hacker (bon elle est nulle aussi).

Grosse attaque du weekend contre le DNS : et DNSSEC ?

Bon bha ça y est le weekend est passé et tout le monde a publié son ptit truc concernant la grosse attaque des Internets !

Je vais tenter d'expliquer un peu ce qui s'est passé mais disclaimer je suis pas un crack en DNS et si jamais je dis une bourde, n'hésitez surtout pas à me le signaler !

Mais en gros il s'est passé quoi ?

Bha pas grand-chose au niveau global. C'est pas une attaque contre l'Internet qui a eu lieu mais contre quelques cibles bien précises (des trucs étatiques du Moyen-Orient principalement).

Approximativement, des gens ont réussi à dévier du trafic (dont des mails et des mots de passes) réseau grâce à une attaque au niveau DNS mais pas seulement et c'est bien là où toute la subtilité se trouve. L'ICANN a publié un ptit communiqué de Presse assez … anodin mais qui a été repris un peu partout et amplifié/déformé. À tel point qu'on pourrait croire à un truc démesuré mais bon, laissons aux média faire leur travail de dramatisation outrancière.

Du coup, en fouillant un peu sur les Interouaib on trouve un article de Krebs On Security qui relate un peu plus l'histoire. Donc je vais me baser sur ce qui y est raconté.

Les méchants ont modifié les enregistrements DNS de certains domaines du Moyen-Orient. La plupart pointant vers des serveurs mails. Une fois fait, ils se crée des certifs x509 (le petit cadena vert sur les sites sécurisés) légitimes et n'ont plus qu'à attendre que les gens tentent de se connecter pour récupérer les identifiants et les mots de passe associés. Une fois ça en poche, il leur suffit de se connecter aux vrais serveurs mails et c'est tout.

Hahaha les boulets, ils avaient qu'à utiliser DNSSEC !

Ouaip c'est vrai.

Mais pour certains ils utilisaient DNSSEC et ça a quand même fonctionné ! DNSSEC c'est pas magique. C'est toute une chaîne de confiance. Petit exemple :

bender.lord.re

  • Pour que ce soit valide d'un point de vue DNSSEC, il faut que la racine soit signée donc . est signée par le root server (rapelez-vous, on ne l'écrit jamais, mais il y a un point implicite à l'extrémité droite des noms de domaines).
  • Ensuite .re doit être signé par le registry
  • Puis vient .lord qui est signé par le serveur DNS ayant autorité mais avec une nuance.
  • Et enfin bender. qui lui est signé par le serveur DNS ayant autorité (mais si j'avais délégué ça à un autre serveur DNS, ça aurait à cet autre serveur de signer).

Vous voulez savoir ce qu'est la nuance ? Bon, je vous le dis quand même : il y a un lien entre votre domaine et la zone du dessus (.re dans l'exemple) pour que la chaîne soit complète. C'est l'enregistrement DS qui permet de déléguer la signature de votre zone auprès du registrar, qui lui transmettra ça au registry.

Bref DNSSEC si c'est mis en place et validé aurait dû protéger.

Je remets un peu de suspens encore ? Non je pense que vous en avez eu assez.

Et bhé le registrar s'est fait trouer. Les attaquants ont pu s'infiltrer chez le registrar et modifier le DS et péter le DNSSEC du coup. Et comme le DNSSEC est une chaîne, si elle pète à un endroit, tout ce qui est en aval est compromis. Bref, là, ça a été pété chez le registrar donc les serveurs DNS ayant autorité sont … niqués, faut le dire.

Les attaquants ont donc utilisé leur propre DS et ont pu se refaire du DNSSEC ou carrément le supprimer sans trop d'emmerdes.

Moralité ?

On a beau faire tout comme il faut dans les règles de l'Art, bha si ça pète en amont tu es marron.

Bref, déployer DNSSEC est toujours aussi important et à ne pas sousestimer. Par contre, vous ne serez pas pour autant immunisé contre ce genre d'attaque !

Je rajoute une couche mais le choix du registrar est capital et malheureusement il est très difficile de savoir quel registrar a une bonne sécurité à priori.

TLS RePorTing sur votre serveur mail

Hey, je suis tombé sur une RFC assez récente l'autre soir. La 8460 de septembre 2018 qui permet de rajouter encore un ptit truc à votre stack mail.

TLS Reporting

Lorsque votre serveur de mail échange avec d'autres serveurs de mail, il y a de forte chance qu'il tente de sécuriser ses communications. Si c'est pas le cas, vous feriez mieux d'arrêter de lire cet article et de moderniser votre serveur de mail !

Bref, contrairement au web, les serveurs mails sont bien moins à la pointe de la crypto moderne. Restreindre votre serveur mail à du TLS1.2 va vous isoler de beaucoup de monde malheureusement. On est obligé de se taper de la vieille crypto pour pouvoir être compatible avec le reste du monde.

Mais bon, ça évolue quand même dans le bon sens petit à petit. Et d'ailleurs cette RFC tente de pousser un peu plus en ajoutant du reporting.

Vous avez probablement mis en place DMARC (c'est à mettre en place en priorité) qui consiste à rajouter un enregistrement DNS de type TXT où vous indiquez aux autres serveurs mails comment traiter les mails en votre provenance. Et bien là on rajoute un autre enregistement DNS de type TXT où vous indiquez une adresse mail pour recevoir des rapports d'erreurs concernant TLS.

Quand un serveur mail aura un souci de connexion TLS avec votre serveur mail, il vous enverra un mail (qui ignorra les erreurs TLS, sera signé via DKIM une fois par jour maximum) détaillant pourquoi ça a déconné.

  • Pourquoi est-ce que la négociation TLS a échouée ?
  • Est-ce que le certif est reconnu ?
  • Est-ce que le certif est expiré ?

Bref, vous saurez un peu mieux pourquoi votre conf TLS déconne.

Bon c'est vraiment très récent et donc quasiment pas déployé mais c'est ultra simple à mettre en place et ça bouffe rien.

Mise en place

Allez on se fout sur le serveur DNS et on ajoute un champ TXT de la forme _smtp._tls.votre.domaine. TXT "v=TLSRPTv1; rua=mailto:votre@mail.truc" . Si le rapport par mail vous saoule, vous pouvez opter par du web en POST avec _smtp._tls.votre.domaine. TXT "v=TLSRPTv1; rua=https://votre.page/web"

Bon perso, par mail ça me va bien.

Pour le faire c'est avec :

knsupdate

server 127.0.0.1
zone lord.re.
update add _smtp._tls.lord.re. TXT "v=TLSRPTv1; rua=mailto:gradabuk@lord.re"
send
quit

Et voilà, vous êtes à la pointe vous aussi !

Il me tarde de recevoir un de ces mails pour voir :-D

Protocole de renouvellement de mot de passe

C'est quand même con qu'en 2019, il n'y ait toujours pas de protocole pour pouvoir faire un changement de mot de passe. Je m'explique.

Il est indispensable d'utiliser des mots de passes différents pour chaque service.

Mais pour ça, ça veut dire qu'il faut un gestionnaire de mot de passe. Perso j'utilise Password-store depuis plus de six ans maintenant et c'est génial. Plus besoin de se souvenir de rien, on peut même s'en servire pour mémoriser d'autres trucs que des pass (des url, des numéros de trucs…) et tout est chiffré/versionné.

Le seul truc manquant aux gestionnaires de mot de passe est : Un moyen de changer les pass.

En ce bas monde il manque un protocole standardisé et déployé pour changer de pass facilement (et pourquoi pas ajouter d'autres trucs en plus genre suppression du compte et autres trucs). Le souci c'est que chaque site ouaib, chaque service a sa façon de faire avec des en plus des restrictions différentes pour les mots de passe.

On pourrait donc imaginer un nouveau protocole assez simple :

  • Le port 7709 en TCP. (je sais pas, ce chiffre m'inspire).
  • Un enregistrement DNS SRV genre _pass._tcp.lord.re. TTL IN SRV 0 5 7709 pass.lord.re.
  • Ça serait forcément en TLS bien entendu.
  • Lorsque le client se connecte, il s'auth (pas spécialement défini comment).
  • Ensuite le serveur répond les actions possibles.
  • Le client envoie une requête de changement de passe.
  • Le serveur acquiesce en répondant les conditions nécessaires (caractères minimum, tels types de caractères et tout, dans un format prédéfini).
  • Le client envoie son nouveau passe.
  • Le serveur confirme que c'est pris en compte.
  • Le client se ré-auth.
  • Si c'est OK, le serveur valide et coupe proprement la connexion et c'est tout bon.

On peut potentiellement ajouter de l'auth à plusieurs facteurs dans le lot même si ça enlèverait pas mal d'intéret (il faut autant que possible que ce soit automatisable).

Imaginez la joie de pouvoir changer de mot de passe sur tous les sites de façon sécurisée et super simple ! Au moindre petit soupçon, bam renouvellement et d'ailleurs pourquoi pas renouveler chaque mois ?

Ça serait tellement pratique, c'est le seul truc qui manque aux gestionnaires de pass.

En passant

Arrêtez avec les restrictions sur les mots de passe. Si vous en avez c'est que vous gérez mal votre système.

J'espère que vous ne stockez pas les mots de passe directement mais un hash, donc stocker 1,2,5,1000 caractères ça vous revient au même. Pareil pour les caractères spéciaux, hein.

Pass-rotate

Il existe un projet sur Github qui est un mélange de ce que je viens de raconter et de Weboob (mais si vous savez ! Le logiciel pour utiliser des services web en console ! ). Bref un logiciel pour changer de pass tout seul sur différents sites sauf que pas de bol c'est pas très populaire donc ça supporte peu de sites et malheureusement c'est pas super actif comme projet. Bref c'est Pass-rotate si ça vous dit de jeter un œil.

Retour suites aux cours 2018

Bon c'est un ptit article de vrac.

Chaque année je dispense quelques cours de Licence Pro ASUR (Administration et Sécurisation des Réseaux) où j'interviens juste ponctuellement deux fois dans l'année. Je ne connais pas spécialement le programme (en dehors de ce que je donne) mais c'est très orienté Linux et logiciels libres.

Mon cours est … très court. Par contre la très grande majorité est en fait un TP qui aborde pas mal de points différents dans le domaine en question.

Je pense qu'assommer les pauvres étudiants n'est clairement pas la bonne façon de faire et qu'il faut les balancer à la flotte au plus tôt pour qu'ils apprennent à nager. Et du coup, je lâche très vite les élèves avec tout un tas de questions qui sont un peu orientées mais pas trop, d'abord assez limitées dans leur scope puis de plus en plus ouvertes.

comic présentant 4 façons de prendre soin de ses petits. Gentoo préconise de balancer ses petits pour qu'ils apprennent à voler

Merci TheSquareComics pour la graine de ce meme que j'affectionne particulièrement

Et force est de constater, qu'ils n'ont pas l'habitude de rédiger autre chose que des réponses bêtes et méchantes.

Ils peuvent pondre des screenshots, même quelques schémas, copier/coller les commandes. Mais argumenter leur réponse, justifier leur raisonnement ou juste expliquer très succinctement leur raisonnement bha là ils savent pas faire.

J'ai beau mettre un préambule assez massif où j'indique qu'une réponse techniquement fausse mais avec le bon raisonnement sera comptée comme juste, que les screenshots du résultat de leur commande je m'en bats les steaks s'il n'y a pas d'explication avec mais … non. Et même si je rabâche toute la journée (quand je tourne dans la salle pour leur filer un coup de main/les orienter/donner des indices/expliquer des notions) que je n'ai pas besoin qu'ils me prouvent qu'ils ont réussi à faire ce que je demandais mais qu'ils me prouvent qu'ils ont compris ce qu'ils ont fait… bha non, ils restent scolaires.

Bon du coup pour éviter de faire un blogpost rien que pour râler, je vais dans la suite donner quelques pistes pour améliorer les comptes-rendus et aussi quelques tips divers et variés (on sait jamais, s'ils tombent sur ce blog ça pourrait les aider).

Ce qui peut être amélioré

  • Lire les questions complètement et si ce n'est pas clair demander des compléments d'informations. Ça peut paraître con mais quand on vous demande de nommer le fichier que vous allez rendre d'une certaine façon, pour pas passer pour un tâcheron avant même que votre compte-rendu ne soit lu c'est de respecter ça. Et quand on vous dit et écrit de multiples fois que les captures d'écran n'ont aucune valeur, pas la peine de perdre du temps à en faire. Le prof vous met pas au défi quand il vous le dit. Quand votre TP c'est 90% de commandes shell, au mieux vous n'avez qu'à faire du copié/collé de votre terminal.

  • Quand on vous dit de vous méfier des tutos sur le web et de privilégier le man, c'est qu'il y a une raison. Ça fait dix ans que je prodigue les mêmes cours/TP et dix ans que je tombe sur des réponses choppées sur les mêmes tutos sur le net avec les mêmes conneries obsolètes depuis des lustres. Les intervenants extérieurs ne sont pas là pour vous faire chier, au contraire, on arrive avec un état d'esprit clairement positif à votre égard. Souvent on a fait les mêmes études/diplômes et tout ce qu'on souhaite, c'est partager notre savoir/passion en faisant en sorte que vous ayez l'impression d'avoir progressé. On n'est pas là pour le pognon mais clairement dans une démarche positive, et pour vous directement, et plus globalement pour la profession (meilleur sont les étudiants, meilleurs seront les gens dans leur taff plus tard).

  • Ça ne vous plaît pas ? Cassez-vous ! Si vous faites un Bac+3 pour contenter papa et maman mais que vous êtes en souffrance, vous serez en souffrance toute votre vie. Arrêtez les frais au plus vite et réorientez-vous au plus vite. Je ne dis pas ça pour être méchant mais réellement pour votre bien être. Si le domaine ne vous plaît pas alors que vous débutez et que vous êtes tout frais, vous vous embarquez pour 42/45/60 (seul le futur nous le dira) de malaise et ce n'est clairement pas ce que je vous souhaite. Vous êtes encore jeune et même si c'est pas le chemin naturel, il est encore facile de changer d'orientation maintenant ; le plus tôt sera le mieux.

  • Si on vous dit que tel truc est déprécié/obsolète, demandez pourquoi ? par quoi on remplace ? Demandez pas "Pourquoi on m'a enseigné ça ?", ça fait pas avancer le débat et si alors que vous êtes encore étudiant vous refusez de remettre en question le peu de savoir que vous avez, qu'est-ce que ce sera dans cinq ans/dix ans ? L'informatique est un milieu qui évolue constamment et pour pas être largué vous allez vous aussi devoir évoluer avec. Donc quand on vous annonce "ifconfig est déprécié depuis 18 ans" ne répondez pas un "ouai mais j'ai appris comme ça, ip je comprends rien". Vous n'avez pas encore des habitudes fortement ancrées, c'est maintenant qu'il faut réapprendre et pas après dix ans de mauvaises habitudes solidement imprégnées dans votre cerveau. N'abordez pas votre apprentissage par de la méfiance (encore une fois, si je vous le dis c'est pas pour vous faire chier, c'est pour que vous soyez plus à l'aise, plus performant, plus à jour). Si vous êtes en apprentissage avec des vieux briscards adminsys, ne pompez pas leurs défauts mais soyez prêt à leur apporter un nouveau savoir à eux aussi.

Quelques astuces pour les débutants sous Nunux

Le man est la documentation à peu près officielle. Certaines pages sont effectivement assez rébarbatives mais globalement c'est quand même assez bien foutu (surtout dans le cas de ssh). Mais il faut apprendre à s'en servir.

Rechercher

Ça utilise des raccourcis assez communs sous Linux. Par exemple, pour chercher vous pouvez utiliser / puis vous tapez le mot que vous cherchez. Ensuite avec n vous irez à la prochaine occurence du mot recherché. C'est tout con mais rien que le fait de connaître ça rend le truc utilisable.

Comment c'est rangé

Tous les man ont un ordre assez similaire : d'abord le nom de la commande, ensuite le synopsis qui donne un résumé bref, ensuite la description qui va indiquer toutes les options possibles avec leur intéret, ensuite des précisions en fonction du programme (dans le cas de ssh ça explique le fonctionnement de l'authentification, les caractères d'échappements, le tunneling, la gestion des clés d'hôte, bref des trucs spécifiques qui apportent pas mal de complément d'information), ensuite le voir aussi qui cite d'autres pages man en rapport pour compléter et enfin les auteurs.

Il y a parfois une section exemple qui regroupe les utilisations communes des logiciels ce qui peut vous faire gagner pas mal de temps, pensez-y, le man c'est pas un tuto mais c'est bien mieux une fois outrepassé la laideur du bousin.

Syntaxe de man

Le synopsis c'est pas mal mais si vous comprenez pas sa syntaxe c'est balot ça aide pas trop.

Prenons l'exemple du man ssh

ssh [-46AaCfGgKkMNnqsTtVvXxYy] [-B bind_interface] [-b bind_address] [-c cipher_spec] [-D [bind_address:]port] [-E log_file] [-e escape_char] [-F configfile] [-I pkcs11] [-i identity_file] [-J destination] [-L address] [-l login_name] [-m mac_spec] [-O ctl_cmd] [-o option] [-p port] [-Q query_option] [-R address] [-S ctl_path] [-W host:port] [-w local_tun[:remote_tun]] destination [command]

Bon déjà, tout ce qui est entouré de crochet est facultatif.

Donc dans notre exemple le minimum obligatoire est ssh destination. Et quand on regarde un peu plus bas dans le man ils indiquennt à propos de destination : may be specified as either [user@]hostname or a URI of the form ssh://[user@]hostname[:port]. avec la même syntaxe des crochets.

Revenons à l'exemple, au début il y a le gros pâté [-46AaCfGgKkMNnqsTtVvXxYy] qui indique toutes les options qui n'ont pas besoin d'argument et que vous pouvez donc tout coller à la suite, mais c'est pas obligatoire, vous pouvez faire -4 -A -f ou bien -4Af.

Les messages d'erreur sont précieux

C'est con de devoir le dire, mais les messages d'erreurs sont pas faits pour être ignorés. Les logiciels bien faits ont des messages d'erreurs qui veulent dire quelque chose et assez explicites.

Et quand c'est pas le cas, il faut parfois rajouter un -v pour activer le mode verbeux qui détaille un peu plus ce que fait le programme ce qui peut être précieux.

Et vous aurez souvent les mêmes messages qui vont vous permettre de vite savoir d'où vient le souci.

  • Name or service not known : Visiblement il n'y a pas de DNS qui répond à cette requête. Donc est-ce que le nom est bon ? Est-ce que votre résolveur DNS fonctionne?
  • Connection refused : C'est généralement au niveau TCP cette erreur. Donc est-ce que le port auquel vous tentez de vous connecter est ouvert ? est-ce que c'est la bonne machine ? est-ce que vous avez du réseau ?
  • No route to host : Votre machine n'a pas de route pour joindre la destination. Est-ce que la machine est sur votre LAN ? Est-ce que vous avez une passerelle ? Est-ce que les routeurs entre votre client et votre serveur sont bien up et configurés ?

Avec un niveau Bac +3 ce genre d'erreur devrait tilter en moins d'une seconde et vous devriez avoir votre ptite checklist à dérouler.


Bon même si j'ai l'air assez énervé et aggressif en vrai pas tant que ça. Cette année j'ai été très agréablement surpris, contrairement aux deux/trois années précédentes le niveau était bien meilleur mais surtout le sérieux global était très largement en amélioration. J'avais une appréhension suite à l'année précédente qui était assez catastrophique, mais ils m'ont redonné l'envie de continuer.

C'était agréable pour moi et j'ai eu l'impression que ça l'était aussi pour eux.

Debunkage de Debunkage des mythes de Wayland

DrewDevault s'est lancé dans un blog post pour débunker les mythes autours de Wayland. Bon pour info ce gars est un des devs de Wlroots et Sway. Le premier est une lib permettant de développer des compositeurs Wayland et le second est un compositeur Wayland assez populaire (mais sans plus), bref c'est un mec qui connait pas mal le sujet sans pour autant être l'expert ultime (qui n'existe pas).

Bon et du coup ça parle de différents trucs : la sécurité, les screenshots, l'embarqué, transparence réseau, le CSD (les décos de fenêtres), nVidia. C'est globalement assez factuel avec pas mal de liens pour sourcer et tout.

Bref, l'article est pas mal.

Et là pouf un journal qui apparait sur LinuxFr et là attention ça vire un peu au n'importe quoi (surtout en considérant les commentaires).

Bon déjà ça vient pleurnicher sur le sort de Mir. Mir c'est le truc fait tout seul dans son coin par Canonical, vous savez ? Les gens d'Ubuntu qui passent leur temps à réinventer de leur côté des trucs qui ne percent jamais ailleurs.

Bref, cracher sur Wayland qui est un protocole avec des specs et compagnie alors que Mir c'est juste un soft utilisé par personne d'autre que Canonical… no comment.

Ensuite il y a un ptit paragraphe qui voudrait nous faire verser une ptite larme concernant nVidia qui ne veut pas faire comme tout le monde en faisant des drivers graphiques libres. Il faudrait en plus les encenser car c'est grâce à eux qu'on a de la 3D/accélèration décente sous Linux et FreeBSD… Ce qu'il faut pas lire. Bref pas mal de commentaires soulignent que si, on peut jouer décemment avec les drivers libres AMD (je peux en attester également).

Ce qui n'est pas évoqué

Un point qui n'est survolé que dans les commentaires c'est le paradoxe actuel de Xorg. Xorg c'est donc un serveur X11. X11 le protocole qui fait tourner les applications graphiques sous les unix et il date de … gogowikipedia … 1987. Et autant vous dire que le protocole accuse son âge.

Une grande partie du protocole est clairement obsolète et n'est quasiment plus utilisé (une histoire de primitives), à l'inverse il y a eu du bricolage dans tous les sens pour y ajouter des concepts inconnus à l'époque : l'accélération graphique.

Parce que ouai en 1987 il n'y avait pas de carte 3D, pas d'OpenGL. Et du coup les devs ont rusé en hackant le truc dans tous les sens pour permettre d'avoir de l'accélération graphique sur un serveur graphique (le cœur du métier quoi).

Du coup quand de nombreuses personnes pleurent la perte de transparence réseau en passant à Wayland je ris. Il existe trouzemille façon d'avoir de l'affichage distant entre les VNC, le SPICE, le RPD… mais non ces gens pleurent la disparition du protocole vieillissant ne sachant pas gérer l'accélération graphique et ayant des perfs réseaux miteuses.

Le second point qui n'est pas abordé et qui est pourtant capital c'est qu'une grande partie des devs (promoteurs) de Wayland SONT les devs de Xorg. Ce sont les mêmes gens qui lâche l'affaire de Xorg car c'est trop vieux, encombré, bricolé et qui avec l'expérience savent qu'il n'est plus possible de continuer inlassablement à faire vivre ce papy et qu'il est bien plus intéressant de repartir sur des bases plus modernes.

Petit à petit Xorg va être abandonné de ses devs (c'était déjà sacrément calme depuis quelques années) au profit de Wayland.

Wayland n'est pas un logiciel

Ouai c'est un point qui est souvent zappé, mais Wayland c'est pas un logiciel que vous lancez et hop. C'est un protocole qu'il faut implémenter pour créer un logiciel.

Il n'y a plus de serveur d'affichage + gestionnaire de fenêtre mais c'est remplacé par le compositeur qui a ces deux tâches désormais. Donc ouai dans les commentaires quelqu'un resort le coup de “Quand mon WM plante sous Xorg tout continue de marcher, les fenêtres sont moches quelques secondes puis tout revient alors que sous Wayland tu perds tout”. Ouai c'est vrai, mais quand c'est ton Xorg qui plante parce que (par exemple) le driver graphique se vautre, tu perds tout aussi. Bref pas d'avantage pour l'un comme pour l'autre.

Ouai si à l'époque coder un WM (Window Manager, un gestionnaire de fenêtre), c'était ultra simple et quelques centaines de lignes de code pouvait suffire ce n'est définitivemnt plus le cas. Mais c'est pas pour autant que ça ne sera jamais le cas. L'écosystème est encore tout jeune, mais il y a fort à parier qu'il existera des libs (à la wlroots) qui prémâcheront intégralement le boulot.

Wayland c'est pas un seul protocole monolithique mais un amas de protocoles avec le noyau et pleins de petits rajouts à droite à gauche pour gérer le presse-papier/les claviers virtuels/le vérouillage du curseur/… Donc ouai pour l'instant pas grand monde gère absolument tous les cas de figure et non il n'existe pas encore tous les "sous-protocoles" imaginables. Ça mûrit petit-à-petit, ça grandit au fil du temps de disponibilité des devs. Ce n'est pas rushé et les sous-protocoles sont discutés de longs mois avant d'être implémentés. Il faut bien voir qu'une fois défini et utilisé massivement, il est très difficile de modifier un protocole et tout l'écosystème l'ayant implémenté à posteriori. La compatibilité avec X via XWayland permet de ne pas avoir besoin de tout faire à la va-vite : faire tourner un soft via XWayland est transparent et permet pourtant de profiter de la sécurité améliorée de Wayland.


Bref Wayland arrive petit à petit en proposant plein de nouveautés pour les devs qui ne seront pas forcément visibles pour l'utilisateur lambda. Refuser cette évolution sous prétexte que la transparence réseau n'est pas possible alors que ce cas d'utilisation est marginal et bancal est assez dommage. Le fait que nVidia ne collabore pas… bha c'est du classique nVidia vis-à-vis du libre.

Pas la peine d'user de FUD à son encontre, Wayland est déjà là ou presque et tourne aussi bien sur de tous ptits trucs embarqué que des bons gros ordi avec du bon gros Gnome des familles.

10 ans de bépo

J'ai réalisé il y a peu que j'utilisais la disposition bépo depuis plus de dix ans maintenant. Et je voulais faire un bref rapide retour sur le sujet.

Faisons ça sous forme de fausse FAQ

Ça va vraiment plus vite ?

Noui. Oui parcequ'en ayant migré sur la disposition bépo j'ai appris plus sérieusement à écrire sans déplacer les doigts de la homerow (la ligne du milieu du clavier) et avec les dix doigts. Au final c'est ça qui m'a permis d'écrire un peu plus vite que la disposition elle-même.

En vitesse de croisière je suis aux alentours des 70mots par minutes mais en faisant de l'irc sans trop réfléchir à l'écriture je suis plus près des 80mots/minutes.

Ma migration vers le bépo n'était clairement pas motivé par un souci de vitesse.

Tu ne sais plus écrire en azerty ?

Et bien si. Et tout aussi bien qu'avant.

Et d'ailleurs au boulot je suis en azerty et à la maison en bépo. Je passe continuellement de l'un à l'autre sans réfléchir.

Un truc plus étonnant : Je ne sais écrire en bépo que sur mon clavier, pas sur un autre. Sur un clavier azerty, j'ai énormément de mal à écrire en bépo.

C'est uniquement de la mémoire musculaire et comme mon clavier est physiquement différent des claviers traditionnels… Et d'ailleurs je ne sais pas écrire azerty sur mon clavier.

Pas la galère les raccourcis dans les applications ?

OUI ! Mais globalement non.

J'utilise un environnement assez particulier à base de sway et d'applications dans le terminal et de Qutebrowser.

J'ai changé les raccourcis de Qutebrowser pour en avoir des similaires à Vimperator (un des prédecesseurs de Qute) mais avec des raccourcis pas forcément adapté au bépo (ni à l'azerty ni au qwerty). Pareil pour Sway, ce sont des raccourcis que j'ai récupéré de i3 que j'avais eux même adapté de wmii et qui ne se basent pas sur la disposition clavier mais plus sur la sémantique (meta+f pour fullscreen, meta+s pour stack, meta+t pour tab). Et pour les applis consoles (on me demande très souvent pour vi(m), mais je suis passé à kakoune) généralement je ne les modifie pas car ils sont encore une fois basés sur la sémantique.

Le seul truc chiant c'est pour les jeux vidéos. J'adore les FPS et contrairement aux affreux flêchistes je suis habitué au bon vieux wsad ou zsqd qui devient éuai en bépo. Et je vous le dis tout de suite, les jeux qui savent se démerder avec le é sont très rares.

Du coup j'ai pris l'habitude de me décaler d'une touche vers la droite pour utiliser piue qui donne edsf en azerty. Rien de bien méchant mais c'est chiant.

Moins mal aux poignets ?

Ouaip. Mais c'est pas parfait non plus. Tout dépend de la géométrie du clavier.

Le fait de moins bouger les mains c'est mieux mais c'est pas uniquement dû au bépo. Encore une fois dans mon cas j'ai changé de clavier par la même occasion.

J'adore les claviers toussa toussa, un jour je vous en parlerai probablement, mais avant le bépo j'étais sur un "clavier ergonomique", un Microsoft Natural Keyboard. J'aimais pas mal surtout le fait qu'il soit séparé en deux.

Après en passant au bépo j'ai pris un Typematrix 2030 qui était sympa comme tout (surtout avec sa ptite skin). Mais depuis je suis passé sur un clavier fait maison qui reprend pas mal le design du Typematrix avec quelques petits ajustements. Mais surtout j'utilise désormais un repose-poignet (un torchon replié plusieurs fois pour arriver à la bonne hauteur). C'est moche mais super confortable, ça fait pas transpirer, ça frotte pas sur la peau, ça se décale facilement et c'est modulable à l'épaisseur que je veux.

Par contre j'envisage de plus en plus de me faire un nouveau clavier avec le même design mais en le scindant en deux parties : je me casse encore trop le poignet sur le clavier en ayant mes deux mains côte-à-côte.

Bépo c'est chiant pour l'anglais

Heuu non. Cette remarque revient souvent à cause du fait que le w soit super loin. Et c'est vrai qu'il est loin.

Personnellement j'ai pas un vrai bépo pur, il est un poil modifié. Du coup le w et le ç ne sont plus à leur place d'origine (l'extrème droite du clavier). J'ai mis le w sous le m et le ç sous le y.

Mais en dehors de ça, c'est pas moins adapté à l'anglais que ne l'est l'azerty. Pour rappel : l'azerty est pensé pour ralentir la frappe des lettres consécutives ce qui n'est plus un comportement souhaitable depuis l'abandon des machines à écrire…

Bépo c'est chiant pour coder

Je code pas. Mais d'un autre côté c'est pas complètement faux mais j'ai la conviction que ce n'est pas vrai.

Les langages informatiques sont pour la plupart inventé par des utilisateurs de qwerty et donc leur syntaxe est adaptée à ces claviers. Mais de là à dire que c'est chiant en bépo c'est pas non plus vrai.

Il y a une logique pas mal dans le placement des symboles en bépo : les chevrons, parenthèses, guillemets, accolades sont tous regroupés et placés de sorte à ce que le caractère ouvrant se trouve juste à droit du caractère fermant. C'est tout con mais c'est super logique et pratique. Les symboles mathématiques sont à la suite (+-/*).

Bref dans mon cas, ça ne me gêne pas car je ne code pas. J'ai entendu dire, de la part de non utilisateur, que "c'est nul" mais je doute que ce soit vraiment nul.

Combien de temps d'apprentissage ?

J'ai fait le grand saut à la barbare : du jour au lendemain j'ai changé de clavier et de disposition sans retour arrière. J'ai pas fait d'exercice avant ni après la migration.

La première semaine c'est dur de faire des phrases tellement ça demande de concentration pour chercher les touches.

Au bout d'un mois j'ai atteint une vitesse d'écriture tolérable avec un paquet de frappe hasardeuse puis suppression puis frappe hasardeuse. Mais au final ça devient utilisable.

Au bout de trois mois c'est bon j'ai retrouvé ma vitesse initiale et j'ai pu écrire sans réfléchir aux touches sauf pour les symboles. Au-delà c'est plus une histoire de confort.

Au bout d'un an plus besoin du tout de réfléchir pour les symboles non plus mais j'écris un peu porcasse en bougeant de la homerow mais j'y travaille légèrement en me forçant à moins bouger.

Tu trouves où un clavier bépo ?

Hmm alors là je sais pas trop. Je sais que Typematrix en proposait (via les skins) à une époque, mais je sais pas s'ils continuent.

Mais franchement, quitte à passer au bépo, autant se mettre à la frappe à l'aveugle. Mon clavier n'a pas de marquage et je m'en porte pas plus mal.

Tu recommandes ?

Si le sujet vous intéresse, je recommande clairement. Si vous êtes tombé par hasard sur cette page web et que vous ne lisez que cette phrase… nope.

Apprendre le bépo est difficile. Il faut perdre des (mauvais) réflexes bien ancrés dans la mémoire musculaire (inconsciente) et ça c'est très compliqué. Vouloir le faire parcequ'il y a un peu de hype autour de bépo sans plus de volonté vous fera perdre du temps pour que dalle.

C'est par contre un investissement rentable. Vous taperez au clavier toute votre vie (je crois pas aux assistants vocaux et ce genre de connerie) plusieurs heures par jour… Ça sera vite rentabilisé.


Voilà si vous avez d'autres questions, n'hésitez pas à les poster en commentaire j'éditerai l'article en conséquence.

L'histoire des User Agent des browsers

Quand vous consultez une page web, votre navigateur web envoie son nom au serveur. Cela permet entre autre de faire des statistiques à propos des visiteurs d'un site ouaib (tiens X% de mes lecteurs utilisent Chrome 67, Y% utilisent Firefox 58,… ce genre de truc). À la base ça permettait surtout aux serveurs web d'envoyer des pages webs adaptées au navigateur du visiteur.

Aux balbutiements du web, les navigateurs avaient des capacités pas mal différentes les uns des autres et du coup les pages web devaient être adaptées. Bon c'est toujours un peu le cas mais dans une bien moins moindre mesure.

Bref, je m'égare. Le user-agent des navigateurs ne donne pas simplement le nom du navigateur et sa version, il envoie des infos assez… étrange au premier regard. Un petit exemple ?

Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) QtWebEngine/5.12.0 Chrome/69.0.3497.128 Safari/537.36

Ouaip. Tout ça pour dire Qutebrowser.

Décorticons !

  1. Mozilla/5.0 (X11; Linux x86_64)
  2. AppleWebKit/537.36 (KHTML, like Gecko)
  3. QtWebEngine/5.12.0
  4. Chrome/69.0.3497.128
  5. Safari/537.36

On retrouve presque tous les moteurs de rendu web existant (sauf ceux de chez Microsoft).

  • Donc du Mozilla (pour Netscape (qui est devenu Firefox))
  • Un peu de Webkit (qui est issu de KHTML de Konqueror qui a des fonctionnalités proche de Gecko (le moteur de Firefox))
  • QtWebEngine est le vrai moteur de rendu que j'utilise. C'est un dérivé du moteur de Chromium fait par les gens de chez Qt.
  • Chrome qui utilise le moteur de rendu Blink qui est dérivé de Webkit qui est dérivé de KHTML.
  • Safari : alors là pas vraiment, mais bon Safari est l'instigateur de Webkit

Sacré bordel, hein ?

Et c'est pas un cas unique! Voilà une ptite brochette trouvée dans mes logs :

  • Mozilla/5.0 (iPhone; U; CPU iPhone OS 3_0 like Mac OS X; en-us) AppleWebKit/528.18 (KHTML, like Gecko) Version/4.0 Mobile/7A341 Safari/528.16
  • Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36
  • Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36(KHTML, like Gecko) Chrome/50.0.2661.75 Safari/537.36
  • Mozilla/5.0 (X11; Linux x86_64; rv:63.0) Gecko/20100101 Firefox/63.0

Comment est-on arrivé à un tel merdier dans le nommage des navigateurs ?

Cette page de chez WebAIM [cache] vous détaillera un peu tout ça mais tention ! C'est en anglais.

Pour les plus flemmards vla un ptit résumé. En gros tout a commencé au tout début du web, l'un des premiers navigateurs graphiques (Mosaic) ne supportait pas les frames et Netscape (Mosaic Killer → Mozilla) les supportait du coup jusque là tout va bien. Les serveurs web envoient donc des pages avec des frames aux navigateurs s'annonçant en tant que Mozilla.

À ce moment Microsoft a sorti son Internet Explorer , qui lui aussi suportait les frames. Du coup pour recevoir les pages avec frames, Internet Explorer s'est identifié en tant que Mozilla tout en ajoutant ensuite des subtilités. Et c'est à partir de là que tout a commencé.

De fil en aiguille on en arrive aux immondices actuelles où chaque nouveau navigateur s'est retrouvé obligé de se faire passer pour un autre pour recevoir les pages webs les mieux foutues. Bref cet article est court mais passionnant, je vous le recommande chaudement.

Pourrait-on aujourd'hui arrêter ces conneries et faire en sorte que les navigateurs se présentent plus directement ?

Je sais pas trop. J'imagine que oui et non.

Ça marcherait pour les pages simples, mais un peu moins pour les sites fait par des sagouins qui utilisent du code dépendant de chaque navigateur. Les moteurs de rendu modernes sont bien plus respectueux des normes qu'auparavant.

Malheureusement, la monoculture des moteurs de rendu poussent à des abus de la part des devs de navigateurs mais aussi de pages webs. La disparition récente du moteur de Edge ne va pas aider (et en plus ils se permettent de remettre en doute la pertinence la persévérance de Mozilla envers son moteur).

Deux grands types de VPN

Ça a commencé autour d'une discussion sur le Fédiverse et comme visiblement ça a plu, je me suis dit qu'en parler ici un peu plus longuement pourrait le faire.

Dans la vie il y a 2 types de VPN :

  • Le VPN strictement commercial. Lui c'est le VPN, il vous sert de passerelle à vous mais aussi à tous pleins d'autres clients qui vont se partager cette connexion.
  • Le VPN made in la FFDN. Lui c'est le gentil VPN, il vous sert de passerelle mais vous garantit un net neutre à vous et rien qu'à vous. Il n'est pas partagé.

De ça il découle donc une très grande différence mais avant de voir déjà faisons un ptit peu de vulgarisation sur ce qu'est un VPN. Tout le monde en parle mais pas grand monde sort une bonne définition de la chose donc c'est partit pour un ptit cours de réseau !

VPN : Koikoukess

Déjà c'est quoi une IP ?

Donc sur l'Internet mondial, chaque machine qui se dit connectée au réseau l'est par le biais d'au moins une adresse IP dite publique. Historiquement il n'y avait que les adresses de type IPv4 mais maintenant on rencontre de plus en plus fréquemment des adresses de type IPv6 (la distinction n'a pas trop d'intérêt, retenez juste que IPv6 permet beaucoup beaucoup plus d'adresse que IPv4 qui est limité lui à 4 milliards).

Une adresse IP publique est donc unique sur Internet et n'est donc présente qu'à un endroit. C'est un moyen pour identifier une machine.

La passerelle Internet

Bon donc tout bon Fournisseur d'Accès Internet qui se respecte fournit une adresse IP publique par client. Cette adresse est affectée à la box du client.

Mais généralement les clients ont plus d'un appareil à relier à Internet. Chacun des ordinateurs, téléphones, téléviseurs, IOTrucs se connectent à Internet via la box La box, en vrai, c'est un routeur (mais le nom est bien moins sexy) qu'on appelle souvent passerelle.

Chaque appareil a donc une adresse IP privée locale sur votre réseau (souvent en 192.168.1.x) avec lequel il discute avec la box pour aller sur Internet.

Comment la box répartit les données ?

Pour savoir quel est le destinataire local, il faut savoir que l'utilisation d'Internet est dans la très grande majorité des cas des réponses à des sollicitations de votre part.

Donc quand votre machine sollicite une machine sur Internet :

  • la box va garder en mémoire que c'est tel appareil qui contacte tel serveur.
  • le serveur répond à votre adresse IP publique
  • la box reconnait que c'est une réponse à une sollicitation qu'elle a transmise auparavant
  • Elle se remémore que c'est votre appareil qui a sollicité et donc que c'est pour vous la réponse.

Ce mécanisme ne fonctionne donc que pour les connexions sortantes.

Pour une connexion entrante, la passerelle n'a aucune idée de l'appareil destinataire. C'est dans ces cas que vous devez "ouvrir un port"/"natter"/"rediriger le trafic" (notez les guillemets). Vous devez donc indiquer "Les connexions en provenance d'Internet à destination du port X sont à envoyer à l'ordinateur Y". Ce mécanisme est mis en place car vos appareils se partagent une seule adresse IP publique. Chacun aurait son IP publique, il n'y aurait pas besoin de faire ça (IPv6).

En bref la box fait la traduction entre vos adresses IP privées (interne à votre réseau) et votre adresse IP publique (utilisée sur Internet).

Et donc un VPN c'est ?

Bha justement j'ai tourné autour du pot et j'ai pas sorti le mot magique exprès. Votre réseau interne avec vos adresses IP privées (locales, internes) on appelle ça un réseau privé (ou LAN).

Et un VPN c'est un Virtual Private Network. C'est donc un réseau privé virtuel, virtuel dans le sens il existe mais à un endroit où il ne devrait pas vraiment. Au lieu d'avoir votre réseau privé à un seul endroit, vous en aurez des bouts un peu plus loin sur Internet et non pas tout chez vous de votre côté de la box.

Donc votre réseau privé virtuel sera composé de votre réseau privé habituel (tout ce qui est raccordé de votre côté de la box) + ce qui est raccordé au VPN.

Et c'est pile ici que la distinction entre les différents types de VPN se fait.

VPN de type commercial pour l'anonymat

Ce type de VPN est le plus populaire car il répond à des objectifs assez recherchés :

  • Cacher son IP publique
  • Utiliser une IP publique d'un autre pays
  • Outrepasser une censure Internet
  • Chiffrer votre connexion
  • Anonymiser votre trafic Internet
  • Pas de logs

Déchiffrons un peu ce qu'ils font.

Ils vous fournissent une IP publique différente de la vôtre. Ils en proposent généralement plusieurs. Si vous vous rappelez le chapitre précédent, il s'agit en fait d'une passerelle qui vous est mis à disposition. Au lieu d'utiliser votre passerelle locale, vous allez utiliser la passerelle du fournisseur de VPN.

Donc vu de l'extérieur ça ne sera plus l'IP publique de la box qui sera vue mais celle de votre fournisseur de VPN.

Il faut savoir qu'il existe des bases de données faisant la correspondance entre une adresse IP publique et une adresse géographique. C'est grâce (à cause de cela) que certains services vous disent que vous ne pouvez pas accéder à tel contenu dans votre région du monde. Les fournisseurs de VPN ont donc vite compris qu'il y avait un business possible en revendant des accès à des passerelles utilisant des IP à différents points du globe pour outrepasser ce genre de restrictions.

Le chiffrement de la connexion ne sera pas assuré de bout en bout ! Les données seront chiffrées entre votre client VPN et le serveur VPN, au-delà ça ne sera pas chiffré ! En gros vous allez chiffrer les données que vera votre fournisseur d'accès Internet. Les données seront en clair après le serveur VPN !

Bon et concernant l'anonymisation du trafic, il n'en est rien. Si vous consultez votre compte facebook, VPN ou non, vous ne serez pas anonyme. Si vous avez tous vos cookies habituels dans votre navigateur, VPN ou non, vous ne serez pas anonyme. Le VPN en lui-même n'anonymise rien. Seul votre comportement et des réglages dans votre navigateur peuvent vous anonymiser ! (et si c'est ce que vous recherchez, penchez-vous plutôt sur TOR)

Et concernant les logs, bha on ne peut que tenter de leur faire confiance. Sachez que dans certains pays (dans l'Europe notamment), les logs sont obligatoires. Faut pas espérer qu'une entreprise se rende hors la loi pour vendre du VPN à 8€/mois…

VPN à la FFDN

Bon, déjà pour ceux qui ne connaissent pas la FFDN jetez un coup d'œil à leur site ouaib. C'est le regroupement des Fentils Fournisseurs Daccès au Net qui sont pour la plupart des FAI associatifs.

Certains proposent des offres de VPN qui sont radicalement différents :

  • Fournissent une IP publique fixe
  • Garantissent un accès Internet neutre
  • Chiffrement de votre connexion

Ici 1 IP publique = 1 abonné. Du coup tout le trafic en provenance de cette adresse IP est uniquement votre trafic Internet à vous. Pas de partage avec d'autres inconnus. Niveau traçabilité c'est à l'opposé complet de l'anonymat

La FFDN s'appuie sur une charte poussant chacun de ses membres à appliquer la neutralité du net. Elle est créée en grande partie autour de ce principe. Les grands FAI commerciaux ont déjà prouvés à maintes reprises que la neutralité du net n'était pas un de leurs objectifs et l'ont bafoué plusieurs fois (et continuent encore actuellement). Bref la FFDN, elle se bat pour la promotion de la neutralité du net qui est un critère crucial à la Liberté d'expression.

Concernant le chiffrement, bha là par contre c'est kif-kif avec les fournisseurs de VPN commerciaux. Le chiffrement de la connexion est fait entre le client et le serveur VPN, pas au-delà ! L'utilisation d'un VPN ne doit pas vous induire un sentiment de sécurité absolu !

Les VPN d'entreprise

Bon je les aborde vite fait juste pour être complet mais voilà…

Une grosse entreprise possède généralement un Intranet avec des ressources internes, des machines de stockage de fichiers, des imprimantes, des serveurs internes… Bref toutes ces ressources elles sont dans son réseau privé. Mais physiquement c'est très probablement réparti entre plusieurs succursales, sièges sociaux, datacenters. Bref le but du jeu est de regrouper tout ça dans un seul et même réseau.

Et en bonus, elle peut permettre à ses employés distants de raccorder leur propre machine à ce réseau.

Et bha… c'est avec un VPN qu'on fait ça… voilà voilà. Sauf que là au lieu de juste vous permettre d'utiliser une passerelle distante, on vous donne accès à tout un réseau privé et de ses ressources.

Et du coup où je veux en venir ?

Ouai pourquoi j'ai voulu écrire cet article déjà ?

Ha oui ! J'me rappelle !

Quand quelqu'un demande de l'aide dans le choix d'un VPN, proposer directement un VPN de la FFDN ou un VPN commercial est contreproductif. Ces deux types de VPN ont des buts diamétralement opposés.

Les gens cherchant à cacher ce qu'ils font de leur connexion n'ont que peu d'intérêt à prendre un VPN nominatif de la FFDN alors qu'un VPN commercial est tout indiqué (encore que …).

À l'inverse, quelqu'un cherchant à auto-héberger des services ne pourra pas le faire avec un VPN commercial et devra se tourner vers ce que propose la FFDN.


Voilà, bon c'est un peu plus long que prévu. J'ai simplifié le tout et il y a donc des approximations.

Bien sûr il existe des fournisseurs commerciaux de VPN qui garantissent la neutralité du net, bien sûr certains permettent d'avoir une IP fixe nominative mais c'est l'exception.

Fabrice Bellard un super dev français

Connaissez-vous Fabrice Bellard ?

Il s'agit d'un brillant informaticien français ayant un sacré palmarès. Il maîtrise particulièrement le langage C et gagne régulièrement des concours par ses prouesses.

Il aime visiblement bien s'attaquer à des problèmes assez bas niveau.

Entre autre il s'est fait un compilateur pour un sous-ensemble du C particulièrement petit avec TCC qui se permet même de compiler et faire tourner à la volée (tel un script) du code en C.

Il est à l'initiative du format d'image BPG qui est certes peu populaire mais est pourtant une sacrément bonne alternative au JPG. C'est basé sur le boulot fait sur le codec HEVC ce qui fait qu'il sera probablement jamais populaire.

Bon pour l'instant c'est assez obscur ce que je vous ai présenté mais si vous êtes adminsys vous avez probablement déjà utilisé Qemu. Et bha, ouaip, c'est aussi Fabrice qui l'a commencé avant que ça ne devienne un des piliers de la virtualisation maintenant ! Ça en jette, hein ?

Il a obtenu pendant quelques années le record du calcul du plus grand nombre de décimales de Pi où le précédent record avait été établi sur un super-ordinateur composé d'environ 2500 CPU alors que lui l'a fait sur sa ptite machine perso.

Pour son boulot il a monté un logiciel de BTS 4G (pas le diplôme, mais en gros de quoi faire marcher du réseau 4G côté opérateur). Cela permet potentiellement de se monter un réseau LTE avec un simple ordinateur et une carte PCI-Express pour gérer la partie radio. Ensuite tout le logiciel permet de passer des appels VoLTE, des SMS et de la data.

Pour s'amuser un petit peu, il a codé un émulateur de PC mais… en javascript. Parce que c'est quand même plus marrant ! Bref avec JsLinux vous pouvez booter un linux dans votre navigateur. Et c'est pas du VNC ou autre, ça tourne réellement dans votre navigateur. (et ça fait pas que du Linux, mais aussi un peu de Windows 2000)

Bon et celui qui me plaît le plus : FFMPEG. Ouai rien que ça. C'est le créateur de FFMPEG. Et aussi le lead dev pendant quelques années. Il s'agit du logiciel pour la (dé)compression vidéo le plus utilisé. Un vrai couteau suisse : s'il peut pas le faire aucun autre logiciel ne pourra faire ce que vous voulez.

Bref j'ai suffisamment fait mon fanboy, allez voir son site avec tous ses projets.

Top et Htop

Lors d'un récent post je vous ai montré un ptit screenshot d'htop et certains étaient intéressés donc voilà un mini article à ce propos.

Le vénérable top est bien il est Posix, dispo dans busybox toussa toussa mais htop est quand même bien mieux.

Mais avant de partir direct dans htop, je vais m'attarder sur top parce qu'il est quand même pas trop mal.

Utiliser top quand c'est inéluctable.

Ouai il y a des fois où vraiment on peut pas avoir htop. C'est triste mais ça arrive.

Et bha sachez qu'on peut s'en servir sans se vomir dessus.

On va transformer ça :

top en config par défaut est pas des plus attrayant ni des plus pratique.

Pas la joie.

En ça :

top tout personnalisé de partout avec pleins de couleurs

Ça a de la gueule, hein ?

Se démerdouiller

Premier truc à connaître : ? . Ouai, trouver de l'aide est le premier truc ;-)

Un truc indispensable pour rendre le truc plus lisible 0. Ça n'affichera que les valeurs non nulles.

Pour chercher une info c'est L (comme locate).

Pour envoyer un signal à un processus ça sera avec k.

Level UP

Bon c'est bien gentil mais c'est, pour l'instant, pas non plus la joie.

On va virer/ajouter les infos qui nous intéressent : Pour ça faut appuyer sur f et là choisissez avec Espace les champs que vous voulez et s pour le champ qui servira à ordonner les lignes.

Ha là déjà on a énormément progressé !

On peut encore améliorer le truc en pimpant les couleurs : Z et là tout un nouveau monde s'ouvre à vous ! Ce menu de configuration vous permet de choisir la couleur des différents éléments.

Hey mais vous savez quoi ? On peut aller encore plus loin !

Avec A vous aurez le multi-window !

O__O

Et oui. En fait top est vraiment pas si pourri que ça une fois un peu confé (:-þ).

Pour passer d'une fenêtre à une autre c'est avec g puis vous choisissez le numéro que vous voulez (de 1 à 4). Et vous pouvez re-faire ce que vous avez fait pour la première fenêtre mais pour les trois autres.

Une fois tout aux ptits oignons, pensez à faire un W pour sauvegarder la configuration.

Htop

Bon après ce petit chapitre où on voit que top est pas si pourri qu'il en a l'air on va voir pourquoi htop est mieux.

Tweakons sa face

Bon déjà on va changer un peu son allure par défaut. Avec F2 on accède aux réglages.

Perso dans les Meters en Left column je mets :

  • CPU (1&2/4) [Bar]
  • Memory [Bar]
  • CPU [Graph]

et en Right column

  • CPU (3&4/4) [Bar]
  • Task counter [Text]
  • CPU [LED]

Ensuite dans les Display options j'active :

  • Tree view
  • Shadow other users' processes
  • Hide kernel threads
  • Hide userland process threads
  • Display threads in a different color
  • Show custom thread names
  • Show program path
  • Highlight program "basename"
  • Highlight large numbers in memory counters
  • Leave a margin around header

Et ensuite dans Colors choisissez ce qui vous flatte le plus la rétine.

Le dernier onglet concerne les Columns là c'est à votre convenance, la mienne ?

  • PID
  • User
  • State
  • Percent CPU
  • Percent MEM
  • Time
  • Command

Et pour finir un ptit F10.

La configuration se sauvegarde dans le fichier ~/.config/htop/htoprc .

Voilà jusque-là pas tellement d'avantage face à top, mais du coup pourquoi qu'il est mieux lui ?

Les atouts

Contrairement à top on peut lui faire des trucs en plus sur les processus mais souvent il va falloir rajouter d'autres logiciels.

Un premier truc c'est strace qui permet d'observer ce que fait un processus qui tourne (les syscalls qu'il lance permet de savoir s'il dort où s'il attend les io ou autre). Pour ça une fois que vous êtes sur le processus incriminé, appuyez sur s. À noter que vous ne pouvez stracer que les processus lancés par votre utilisateur à moins d'être root.

Les descripteurs de fichiers utilisés par un processus peuvent être vu avec l.Ça vous lancera donc un lsof sur le processus. Tout comme pour strace, pour des raisons de droits, vous ne pouvez le faire que sur vos processus à moins d'être root.

Un ptit L vous affichera tous les appels aux libs que fait un processus. Pour ça il faut que vous ayez ltrace d'installé.

Et le ptit dernier c'est e qui permet de voir toutes les variables d'environnement d'un processus.

Voilà pour moi le gros avantage d'htop c'est d'avoir une config rapidement accessible, une interface beaucoup plus intuitive et de s'intégrer bien avec les outils d'audit.

htop une fois personnalisé

Le brave Htop

Les confs :

Pour les flemmards je vous mets ici les fichiers de configs de ces deux logiciels :

~/.config/htop/htoprc

# Beware! This file is rewritten by htop when settings are changed in the interface.
# The parser is also very primitive, and not human-friendly.
fields=0 48 2 46 47 49 1
sort_key=47
sort_direction=1
hide_threads=0
hide_kernel_threads=1
hide_userland_threads=1
shadow_other_users=1
show_thread_names=1
show_program_path=1
highlight_base_name=1
highlight_megabytes=1
highlight_threads=1
tree_view=1
header_margin=1
detailed_cpu_time=0
cpu_count_from_zero=0
update_process_names=0
account_guest_in_cpu_meter=0
color_scheme=5
delay=15
left_meters=LeftCPUs2 Memory CPU
left_meter_modes=1 1 3
right_meters=RightCPUs2 Tasks CPU
right_meter_modes=1 2 4

~/.config/procps/toprc

top's Config File (Linux processes with windows)
Id:i, Mode_altscr=1, Mode_irixps=1, Delay_time=1.0, Curwin=0
Def     fieldscur=<A5><A8>34;=@ķ<BA><B9><C5>&')*+,-./012568<>?ABCFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghij
        winflags=195892, sortindx=0, maxtasks=0, graph_cpus=0, graph_mems=1
        summclr=6, msgsclr=1, headclr=3, taskclr=2
Job     fieldscur=<A5><A6><B9><B7><BA>(<B3><B4>Ļ<BD>@<<A7><C5>)*+,-./012568>?ABCFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghij
        winflags=195892, sortindx=0, maxtasks=0, graph_cpus=0, graph_mems=0
        summclr=6, msgsclr=6, headclr=7, taskclr=6
Mem     fieldscur=<A5><BA>;<<BD><BE><BF>@AMBNCD34<B7><C5>&'()*+,-./0125689FGHIJKLOPQRSTUVWXYZ[\]^_`abcdefghij
        winflags=1244470, sortindx=21, maxtasks=0, graph_cpus=0, graph_mems=1
        summclr=5, msgsclr=5, headclr=4, taskclr=5
Usr     fieldscur=<A5><A6><A7><A8><AA><B0><B9><B7><BA><C4><C5>)+,-./1234568;<=>?@ABCFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghij
        winflags=195892, sortindx=3, maxtasks=0, graph_cpus=0, graph_mems=0
        summclr=3, msgsclr=3, headclr=2, taskclr=4
Fixed_widest=0, Summ_mscale=1, Task_mscale=3, Zero_suppress=1

Messagease : un clavier android efficace

Une question qui revient souvent sur les réseaux sociaux : Quel clavier utiliser sur smartphone ?

Et cette question anodine n'a finalement pas de réponse universelle. Et si vous commencez à me connaître, vous vous doutez que j'ai un avis assez tranché sur la question. La grande majorité des claviers sont merdiques.

Un vrai clavier ISO d'ordinateur a 105 touches. C'est déjà beaucoup (trop) et on peut s'en sortir à peu près la moitié. Et en plus c'est mal foutu. Le design des claviers a été une simple transposition à la va-vite de ce qu'il se faisait sur machine à écrire. Ça a tellement été baclé sans être repensé qu'on a conservé des contraintes techniques qui n'ont plus lieu d'être.

Le placement des touches est fait de sorte à ce que les branches des marteaux ne s'entrecroisent pas. Et comment ils ont fait ça ? En rendant anti-ergonomique le clavier pour ralentir la frappe et éviter les touches consécutives proches. Si le sujet vous intéresse, renseignez-vous sur les claviers ortho-linéaire et sur le bépo.

Le plus drôle dans tout ça, c'est qu'avec l'arrivée des appareils tactiles, on a fait quoi ? On a conservé ce design.

RIDICULE

Bref, la majorité des claviers tactiles sont basés sur le principe de ralentir la frappe des machines à écrire juste pour éviter aux pauvres petits utilisateurs de réapprendre à faire autrement. Et si on arrêtait les conneries ?

Bon j'exagère un peu quand même, il y a eu des nouveautés sur les claviers tactiles comme le fait de simplement glisser sur les lettres sans les taper… Rien de bien transcendant.

L'auto-complétion est également une nouveauté. Personnellement j'ai horreur de ça. J'écris très souvent comme un sagouin en mélangeant de l'anglais, du français, des jeux de mots foireux… bref, calquer ce que j'écris sur des mots du dico ça foire très vite. Et puis mon orthographe c'est un peu ma signature.

Je ne parlerai même pas de l'autocomplétion qui se base sur du cloud et du machine learning… intimité numérique toussa toussa.

Il existe quand même quelques claviers qui sortent de ces sentiers battus et je vais vous parler de mon chouchou depuis 6 ans.

Messagease

Bon allons droit au but : voilà à quoi il ressemble !

Tous les marquages activés ça fait un peu fouilli

C'est esthétiquement particulier je le conçois.

Il est développé par une petite boîte californienne pour Android initialement et maintenant aussi pour iTrucs. Il est donc composé de 9 touches principales auxquelles on en rajoute 5 pour le reste.

Comment ça marche ?

  • Les lettres en jaune sont en accès direct : vous appuyez dessus et elles appraissent.
  • Les caractères sur les côtés de chacune des 9 cases principales s'obtiennent en glissant le doigt depuis le centre de cette case en direction du dit caractère. ex : Pour faire un c on appuie sur o en glissant vers u et en relâchant le doigt c'est pris en compte.
  • La touche en forme de main c'est pour déplacer/redimensionner le clavier.
  • En dessous c'est la touche de fonction avec entre autre le copier/coller et le passage aux chiffres.
  • Ensuite vient la touche backspace.
  • Encore après c'est la touche Entrée.
  • Et l'Espace est située sur la plus grande touche tout en bas.

Donc voilà, avec le principe du glissement on peut obtenir jusqu'à 9 caractères différents par touche.

Vous pouvez aussi basculer sur le clavier pour les chiffres.

Il s'agit d'un classique clavier à 10 touches.

Plus habituel

Sur celui-là aussi vous avez le même système ce qui permet d'ajouter encore plein de nouveaux caractères dont beaucoup sont identiques à ceux présents sur les lettres.

En pratique ça vaut quoi ?

Alors je ne vous cache pas qu'il va y avoir une phase d'apprentissage avant d'être efficace avec. J'en ai eu pour une bonne semaine avant de m'y sentir bien à l'aise et au bout de trois semaines j'écrivais déjà bien plus vite avec ce nouveau clavier.

L'utilisation est bien plus agréable en utilisation basique. Mais il se révele vraiment excellent avec l'habitude et quelques réglages supplémentaires.

J'utilise le téléphone uniquement à une main, même lorsqu'il m'arrive d'écrire des textes assez longs : le fait de pouvoir placer le clavier à la taille et à l'endroit qu'on veut permet de le faire arriver pile où se trouve le pouce quand on tient le téléphone.

Il m'arrive de discuter sur irc sans que les gens ne se rendent compte que je suis sur le téléphone tellement la vitesse de frappe est élevée (moins élevée que sur l'ordi tout de même mais franchement pas si loin).

Le clavier possède de très nombreux réglages. Et avoir tous pleins de réglages, j'adore ! On peut changer sa couleur, sa forme, le placement des lettres (par défaut il propose en accès direct les 9 lettres les plus utilisées en anglais mais propose des presets pour le français ou bien on peut le faire soi-même).

On peut régler ce qui est affiché, en le limitant, par exemple, aux caractères les plus courants.

Uniquement les lettres sont affichées, pas les caractères spéciaux

C'est plus aéré comme ça, pour débuter c'est plus recommandé.

Mais avec plus de pratique vous pouvez pousser le minimalisme en virant tout le marquage (c'est ce que je fais).

Le clavier tel que je l'utilise tous les jours, sans marquage.

Là, ça me plaît bien mieux.

Il n'y a que du bon ?

Et non. Le clavier n'est pas libre ni même opensource.

C'est le seul reproche que je peux lui faire.

Par contre il sauve les meubles : il ne demande pas de permission autre que clavier, il n'a pas de trackers selon Exodus Privacy, on peut le télécharger sur leur site sans passer par le store. L'entreprise derrière (exideas) annonce qu'elle ne revend pas de données perso toussa, on ne peut que tenter de les croire.

Des ptites astuces au passage ?

Allez vite fait :

  • Pour les Majuscules ce sont les deux flêches (vers le haut et le bas) sur la touche R, avec un Caps Lock si vous montez deux fois.
  • Vous pouvez le configurer pour ne plus avoir besoin d'aller sur le layout des chiffres : si vous faites un cercle dans le sens horaire vous aurez le chiffre correspondant à la case où vous le faite.
  • Pour taper une majuscule vous pouvez faire un cercle anti-horaire sur les caractères principaux ou bien un aller-retour sur les caractères des côtés.
  • Vous pouvez faire Ctrl avec la touche tout en haut à gauche.
  • Vous pouvez supprimer un mot complet en faisant un aller/retour sur backspace.
  • Vous pouvez faire Deleteen glissant vers la droite depuis backspace
  • Vous pouvez le configurer pour que deux Espace ajoutent un point (pratique en fin de phrase).
  • Vous pouvez faire un Sélectionner tout en faisant un cercle horaire sur la touche de fonction.
  • Vous avez des flêches cachées : gauche/droite se font en glissant depuis la touche Espace, haut/bas se font en glissant vers le haut et le bas respectivement sur I et S.
  • Pour faire apparaitre/disparaitre le marquage il faut glisser vers le haut (ou aller-retour) depuis Espace
  • Testez de réduire un peu la taille du clavier, c'est plus facile à utiliser quand il est petit.
  • Il existe plein de raccourcis planqués, pensez à aller voir les réglages et l'aide.

Voilà voilà.

une vue globale d'android avec le clavier pour avoir une idée de la taille

Voilà le clavier en action.

Mon TOC des processus

Je dois vous avouer que j'ai quelques obsessions. L'une d'elle est le nombre de processus qui tournent sur mes machines.

Franchement c'est con et je l'écris avec une touche d'humour mais ça me travaille réellement. Du coup quand je lance htop j'ai ça je suis content :

capture d'écran de htop montrant seulement 29 processus

Seuls 30 processus qui tournent et 5 en root

Mais dès lors que je tombe sur un Debian/RedHat … je pleure et j'ai peur :

le Htop d'ubuntu est interminable avec 247 tâches tournant.

Quand je vois ça j'étouffe. Merci Simon ;-)

Un programme contient forcément des bugs. Plus un programme est gros plus il en contient. Le code parfait n'existe pas.

Du coup plus il y a de programmes, plus il y a de bugs. Et plus un programme est complexe, plus il contient de failles de sécurité. Et ce, même si le logiciel est ancien et bien maintenu et très populaire… Il y aura toujours des failles et si ce n'est pas dans le logiciel en lui-même, ça sera son environnement (voir le cpu qui l'éxécute).

Et puis ça bouffe bien plus de ressources… Même si nos machines d'aujourd'hui peuvent surement encaisser, ça m'attriste toujours autant que ce qu'on faisait il y a dix ans sur l'ordi… bha on le fait pas spécialement plus vite aujourd'hui.

Bref, les machines que j'administre doivent être allégées. Au final je me retrouve dans un environnement où je sais ce que fait chacun des processus qui tourne et lorsqu'il se passe un truc louche je trouve rapidement le coupable.

Alpine s'inscrit parfaitement dans ce TOC car par défaut il n'y a quasiment pas de processus qui tournent et c'est un soulagement. Gentoo est également la candidate parfaite par sa modularité exemplaire.

Un autre truc que je recherche : diminuer le nombre de programme que fait tourner root. Root est tout puissant, donc moins il est sollicité mieux on se porte.

Petit tour du proprio

  • init : c'est le processus lancé par le kernel au boot. Dans mon cas c'est OpenRC. C'est lui qui va démarrer tout le reste et se charger de dégager les processus morts.
  • alacritty : ce sont tous les émulateurs de terminaux que je lance. Il peut y en avoir un comme cinquante. Ça dépend de ce que je fais.
  • zsh : Ce sont les shells lancés dans les terminaux.
  • XWayland : c'est le serveur X11 de Wayland pour faire tourner les applications non natives (mon navigateur entre autre).
  • qutebrowser : Il apparait en tant que python 3.6 et de multiples QtWebEngineProcess (un par fenêtre). Là aussi c'est légitime et je ne peux pas m'en passer.
  • ssh : Le client SSH pour se connecter à mon client IRC.
  • qingy : C'est mon gestionnaire de TTY. Je le préferre à getty car il permet deux trois trucs en plus en étant tout aussi léger. Il permet par exemple de sélectionner parmis plusieurs sessions différentes. Il vérouille le tty lorsque vous en partez (en demandant un mot de passe au retour). Bref je n'en lance que 3 car j'ai pas besoin de plus de sessions simultannées.
  • sway : c'est mon compositeur Wayland favoris. C'est lui qui gère les fenêtres et le rendu.
  • mpd : mon lecteur de musique. Pas d'interface graphique et se pilote essentiellement avec des raccourcis via sway. Très souvent je fais tourner tsmpcd en plus pour gérer la playlist.
  • udevd : le gestionnaire de périphérique. Lui se charge de gérer les appareils dynamiquement (ajout d'un appareil usb par exemple). On pourrait un peu s'en passer (après le boot) mais c'est quand même moins pratique.
  • slurp et grim : sont les logiciels pour prendre la capture d'écran. Slurp permet uniquement de sélectionner une zone de l'écran et grim lui prend une capture d'écran de cette sélection. Bref ils tournent sur le screenshot parceque… je prends le screenshot mais ils ne tournent pas en temps normal ;-)

C'est pareil pour les serveurs

Quand j'administre un serveur, j'enlève tout ce dont je n'ai pas besoin. Chaque service/processus en moins est une source de bugs et de failles en moins. La machine devient plus simple à administrer.

C'est d'ailleurs un peu pour la même raison que je n'apprécie pas systemd (ouai je sais c'est hasbeen de continuer à ressasser ça). Mais avoir des processus qui font des trucs un peu dans notre dos sans trop savoir pourquoi j'aime pas. Les gains apportés par systemd ne justifient pas à mes yeux tout le merdier que ça entraîne.

Avec la mouvance actuelle des containers, j'apprécie la philosophie, que Docker a pas mal popularisé, d'un container == un service. Du coup Alpine est une très bonne solution avec son userspace réduit au strict minimum

À cela si on rajoute les programmes compilés statiquement (ce qui est par défaut avec Go et Rust) on se retrouve avec des containers microscopiques et fonctionnels.

Gonib et ce qu'il y a autour

J'ai mis en service GoNib hier soir et il tourne désormais.

L'an dernier je vous parlais de Nib mon Nano Irc Bot. C'est mon assistant personnel qui même s'il ne parle pas, au moins ne m'espionne pas. Il me permet de faire des trucs plus ou moins utiles via IRC.

Ce script était au final tout un tas de logiciels mis bout-à-bout via du script shell. Ça marchait super bien mais je voulais un truc un peu plus propre et plus léger. J'ai donc entrepris de le refaire en Go durant ses dernières semaines.

Et BAM ! GoNib ! Bon pour l'instant il fait pas tout ce que faisait l'ancien mais suffisamment pour le remplacer dès aujourd'hui. Mais au delà du code que je vous ai déjà pas mal présenté dans les derniers articles, je vais vous montrer comment je l'ai mis en place.

Compilation du code

Je le dev sur ma machine qui est un ordi classique sous l'architecture amd64, mais je compte le faire tourner dans un container sur mon routeur qui lui n'est pas en amd64 mais en arm7. Pour crosscompiler du Go, rien de plus simple : GOARM=7 GOARCH=arm go build -ldflags="-s -w" gonib.go.

Voilà, on spécifie, l'architecture et c'est bon. Pour le fun je rajoute les options -s et -w qui permet de générer un binaire plus petit. Ça sert pas à grand chose mais quand même, j'aime bien.

Création du container

Bon, je suis toujours dans ma période Alpine Linux, donc je créer un container en version 3.8. Ensuite une fois dedans j'y installe tmux.

Il faut créer un service pour démarrer automatiquement au boot ce qu'il faut avec par exemple /etc/init.d/tmux :

#!/sbin/openrc-run

name="Tmux Init"
command="/usr/bin/$SVCNAME"
command_user="nib"
pidfile="/var/run/$SVCNAME.pid"
command_args="new-session -d -n gonib '/home/nib/gonib -server=irc.geeknode.org'"

depend() {
        need localmount
}

On place ce service au boot avec rc-update add tmux et tant qu'à faire on peut virer tous les autres services du boot à l'exception de crond qui servira pour lancer certaines actions.

Il faut ensuite créer l'utilisateur nib avec adduser nib.

On place le binaire gonib dans /home/nib/gonib et on le rend éxécutable et c'est bon.

Lancer le container au boot

Sur OpenWRT pour lancer les containers au boot, il faut les indiquer dans /etc/config/lxc-auto tout bêtement.

Tester

Bon bha yapuka !

lxc-stop -n gonib

lxc-start -n gonib

Et là pouf dans la seconde qui suit votre gentil ptit nib va apparaitre sur votre salon favoris.

Conclusion

Ça fonctionne pour le moment \o/

Bon j'ai toujours l'autre que je peux redémarrer au cas où mais j'ai confiance.

L'ancien container à base de Debian et tout le toutim pèse 384Mo. Le nouveau container à base d'Alpine fait 21.1Mo. Ça bouffe 10Mo de RAM pour tout le container.

Moins de pièces mouvantes, moins d'espace disque, moins de ram. Une belle optimisation !

Il ne reste plus que l'épreuve du temps à surmonter.

Meta : récap 2018

Bon bha voilà le moment de faire un petit récap de l'année concernant le blog.

Ça a été une super année !

Je me suis éclaté à rédiger pas mal d'articles assez différents.

  • Des trucs moins techniques (même si c'est rare, je vais ptet en faire un peu plus)
  • la série de traduction des articles concernant le Librem 5
  • De nouvelles catégories avec des couleurs pour les distinguer
  • De légères adaptations de l'esthétique du site
  • Une série d'articles avortés radicalement différents mais ptet trop différents. Mais leur écriture m'a été bénéfique quand même.
  • Quelques articles sur le Fédiverse qui ont été pas mal retootés.
  • Pas mal d'upvote sur le Journal du Hacker.
  • J'adore les Shares où je liste des trucs que j'ai envie de partager depuis des années.

Bref l'année a été excellente pour mon blog. Le pinnacle c'est quand même l'ouverture des commentaires cet été.

J'adore lire vos commentaires et je tente d'y répondre le plus possible :-) Merci à vous pour les corrections, les ajouts d'infos, les réflexions! Merci à vous d'aider à faire vivre un web différent, loin des machines à fric et leurs travers. Grâce à vous j'ai l'impression qu'écrire sur ce blog n'est pas juste un plaisir solitaire mais à une utilité également pour d'autres ;-)

Voilà, j'espère pour vous que cette année vous aura été aussi bonne qu'à moi !

J'en profite un peu de ce mini récap pour vous partager quelques stats sur les visites du blog :

 Date   Total Requests   Unique Visitors   Bandwidth  Posts
12/17 67798 10425 2.74G 5
01/18 102020 18021 5.53G 7
02/18 131813 19894 7.55G 9
03/18 175153 24721 12.39G 16
04/18 266904 21869 6.82G 10
05/18 213906 25774 10.83G 6
06/18 238001 22720 6.48G 8
07/18 358872 30263 9.08G 14
08/18 369634 28150 10.27G 14
09/18 447794 33076 6.33G 8
10/18 410086 35789 25.26G 11
11/18 464233 44698 25.98G 10
12/18 417390 38664 7.73G 11

Voilà tout ce que j'avais à dire.

/me retourne mettre une pièce dans le Jukebox pour la nouvelle année !

Une semaine pour coder par soi même : Jour 6 et 7

Bon aujourd'hui je groupe le week-end dans un seul post. Hier ? J'ai … rien fait.

Voilà. Aujourd'hui ? J'ai … débloqué le tout petit truc qui me coinçait.

Bref je pense avoir surpassé tous les ptits trucs qui me faisaient chier et maintenant j'ai un code que je comprends de partout et qui marche comme je l'intuitais. Je suis super content.

En fait, le truc qui m'a complètement paralysé dans ma fonction connection.Interact() était tout bête : j'arrivais à récupérer le texte et donc à l'afficher, mais étrangement je ne parvenais pas à réagir à ce texte reçu. Du coup lorsque je recevais un PING, je le voyais, je créais le PONG qui va bien, mais il partait pas. Et j'ai buté sur ça depuis vendredi soir.

Et encore une fois cette nuit, l'illumination ! Dans ma fonction connection.Interact(), lorsque je recevais le PING, j'étais dans le case reader en train d'éxecuter la commande parseIrc, mais du coup, je n'étais plus en mesure d'écouter le chan entrant. Bon c'est dur à expliquer mais, le truc pour débloquer ça, a été tout simplement de foutre le parseIrc dans une routine en parallèle, comme ça, pendant que ça fait son boulot, la boucle se termine et elle est de nouveau disponible en écoute.

Voilà Samedi je n'y ai pas touché à cause de ça (bon j'ai été assez pris à côté faut dire, mais du coup je n'ai pas été très motivé). Une fois ce verrou enlevé j'ai eu envie de me refaire chier à faire des trucs tordus.

J'ai donc commencé un système antiflood, pour ralentir le texte sortant afin de ne pas se faire jarter comme un pleutre lorsqu'on balance trop de texte d'un coup. J'utilise donc une variable que j'incrémente à chaque fois que j'envoie du texte et qui se décrémente petit à petit chaque seconde. Bon j'ai pas encore fait tourner le truc comme il faut mais c'est une première étape.

Avant de rajouter des commandes à proprement parlé au bot, j'ai envie de gérer le texte sortant comme une FIFO et donc gérer ça avec un fichier comme j'ai fait dans le bot en bash. Je vais donc m'attarder à regarder un peu la doc de Go pour voir comment gérer les fichiers mais ça ne devrait pas être bien compliqué.

Bon et même si à la base je ne voulais que dédier une semaine à ce projet, il est suffisamment avancé pour que je le finisse maintenant. Vais pouvoir foutre au rencard mon Frankenscript et remplacer par ce ptit programme.

Le code

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
package main

import (
	"bufio"
	"fmt"
	"io"
	"net"
	"os"
	"strings"
	"time"
)

var server string = "localhost"
var port string = "6667"
var channel string = "#lms"
var nick string = "bab"
var onchan bool
var rouge string = "\033[1;31m"
var vert string = "\033[1;32m"
var jaune string = "\033[1;33m"
var cyan string = "\033[1;36m"
var normal string = "\033[0m"
var me string
var debug bool = false

type Ircconnection struct {
	Server   string
	Port     string
	Nick     string
	Channel  string
	Bidule   bool
	Conn     net.Conn
	Receiver chan string
	Emitter  chan string
	RawEmitter	chan string
	counter	 int
}

func (connection *Ircconnection) Connect() {
	var err error
	connection.Conn, err = net.Dial("tcp", server+":"+port)
//	defer connection.Conn.Close()
	fmt.Println(rouge + "Connection to " + server + ":" + port + normal)
	if err != nil {
		fmt.Println(err)
		os.Exit(1)
	}
	connection.Receiver = make(chan string)
	connection.Emitter = make(chan string)
	connection.RawEmitter = make(chan string)
	fmt.Println(rouge + ">> NICK " + nick + normal)
	io.WriteString(connection.Conn, "NICK "+nick+"\n")
	fmt.Println(rouge + ">> USER " + nick + " 0.0.0.0 " + nick + " :" + nick + " bot" + normal)
	io.WriteString(connection.Conn, "USER "+nick+" 0.0.0.0 "+nick+" :"+nick+" bot\n")
	go io.Copy(connection.Conn, os.Stdin)
	go connection.handleIncoming()
//	go connection.handleCounter()
	go connection.Join(channel)
	go connection.Interact()
}
func (connection *Ircconnection) Disconnect() {
	connection.Conn.Close()
}
func (connection Ircconnection) Join(channel string) {
	time.Sleep(1000 * time.Millisecond)
	fmt.Println(rouge + ">> JOIN " + channel + normal)
	io.WriteString(connection.Conn, "JOIN "+channel+"\n")
}
func (connection Ircconnection) SendMsg(msg string) {
	fmt.Println(rouge + ">> PRIVMSG " + connection.Channel + " :" + msg + normal)
	//io.WriteString(connection.Conn,"PRIVMSG "+connection.Channel+" :"+msg+"\n")
	connection.Emitter <- msg
}
func NewIrcconnection() Ircconnection {
	return Ircconnection{Server: server, Port: port, Nick: nick, Channel: channel}
}
func (connection *Ircconnection) SetNick(newnick string) {
	connection.Nick = newnick
	fmt.Println(rouge + "Changement de pseudo pour : " + vert + newnick + normal)
	io.WriteString(connection.Conn, "NICK :"+newnick+"\n")
}
func (connection *Ircconnection) handleIncoming() {
	scanner := bufio.NewScanner(connection.Conn)
	go func() {
		for scanner.Scan() {
			ln := scanner.Text()
			fmt.Println(jaune + "<< " + ln + normal)
			connection.Receiver <- ln
		}
	}()
}

func (connection *Ircconnection) Interact() {
	for {
		select {
			case writer := <-connection.Emitter:
    				connection.counter+= 200
    				if debug {
					fmt.Println(cyan + writer +" "+jaune+"[",connection.counter,"]"+ normal)
    				}
				go io.WriteString(connection.Conn,"PRIVMSG "+channel+" :"+writer+"\n")
			case writer := <-connection.RawEmitter:
				fmt.Println(cyan + writer + normal)
				go io.WriteString(connection.Conn,writer+"\n")
			case reader := <-connection.Receiver:
				//fmt.Println(cyan+reader+normal)
				go parseIrc(connection, reader)

		}
	}
}

// Futur système anti-flood. tout pourri pour le moment.
func (connection *Ircconnection) handleCounter(){
	for {
    		fmt.Println("On boucle : ",connection.counter)
		time.Sleep(time.Duration(connection.counter+500) * time.Millisecond)
		if (connection.counter > 0) {
			connection.counter -= 10
		} else {
    			
			connection.counter = 0
		}
	}
}

/////////////////// MAIN //////////////////////////////////////
func main() {
	if len(os.Args) > 1 {
		server = os.Args[1]
	}

	connection := NewIrcconnection()
	connection.Connect()

	in, err := net.Listen("tcp", ":4321")
	defer in.Close()
	if err != nil {
		fmt.Println(err)
		os.Exit(1)
	}

	for {
		inconn, err := in.Accept()
		if err != nil {
			fmt.Println(err)
			continue
		}
		go handleIncoming(inconn, connection)
	}
	
}

// ------------------
// Côté IRC
// ------------------

func parseIrc(connection *Ircconnection, msg string) {
	var elements []string = strings.Fields(msg)
	if debug {
		for i, element := range elements {
			fmt.Print(cyan+"[", i, "|"+normal+element+cyan+"] "+normal)
		}
	}
	if len(elements) < 2 {
    		fmt.Println("Syntax IRC ERROR !!!!")
		return
	}

	if elements[0] == "PING" {
		connection.RawEmitter <- "PONG :"+strings.TrimPrefix(msg, "PING :")
	}

	switch elements[1] {
	case "421":
		fmt.Println("!! Commande non reconnue par le serveur !!")
	case "433":
		fmt.Println("le pseudo déconne")
		nick = nick + "_"
		io.WriteString(connection.Conn, "NICK "+nick+"\n")
	case "JOIN":
		if ":"+nick == stringCut(elements[0], "!") {
			me = strings.TrimPrefix(elements[0], ":")
			fmt.Println(me + " a rejoin le salon " + strings.Trim(elements[2], ":"))
			onchan = true
			connection.Emitter<- "Salut "+channel+" !"
		}
	case "PART":
		fmt.Println("On est parti de " + strings.Trim(elements[2], ":"))
		onchan = false
	case "KICK":
		if elements[3] == nick {
			fmt.Println("Ptain on s'est fait kicker de " + elements[2] + " par " + elements[4] + " !")
			io.WriteString(connection.Conn, "JOIN "+channel+"\n")
		}
	case ":Closing":
    		fmt.Println("\n\n\nHa et merde on est déconnecté !\n\n\n")
		// Déconnecté
		time.Sleep(10000 * time.Millisecond)
		connection.Connect()
	}
	if len(elements) > 3 {
		switch elements[3] {
    			case ":cycle" :
				connection.Disconnect()
				connection.Connect()
			case ":heure" :
    				connection.Emitter<-"Paies-toi une montre vaut rien!"+msg
		}
	}
}

// ------------------
// Serveur en écoute
// ------------------

func incoming(connection Ircconnection) {
	in, err := net.Listen("tcp", ":4321")
	defer in.Close()
	if err != nil {
		fmt.Println(err)
		os.Exit(1)
	}

	for {
		inconn, err := in.Accept()
		if err != nil {
			fmt.Println(err)
			continue
		}
		go handleIncoming(inconn, connection)
	}
}

func handleIncoming(in net.Conn, connection Ircconnection) {
	fmt.Println(vert+"Incoming from ", in.RemoteAddr(), normal)
	inbuf := bufio.NewReader(in)
	for {
		inmsg, err := inbuf.ReadString('\n')
		if err != nil || !onchan || inmsg == "\n" {
			break
		}
		fmt.Print(vert + "<<]] " + inmsg + normal)
		connection.SendMsg(inmsg)
		time.Sleep(500 * time.Millisecond)
	}
}

// ------------
//  Génériques
// ------------

func stringCut(incoming string, pattern string) string {
	var results = strings.Split(incoming, pattern)
	if len(results) < 1 {
		return incoming
	} else {
		return results[0]
	}
}

Bon bha voilà que s'achève cette semaine de blogposts chiants. Je vous referai ptet un article une fois terminé mais c'est tout.

Une semaine pour coder par soi même : Jour 5

J'ai cogité toute la nuit à cette histoire. Je pense que mon subconscient est allé puiser au fin fond de souvenirs anciens et il m'a resorti deux trucs : les pointeurs, les getters/setters.

Et du coup au réveil : Bon sang mais c'est bien sûr !

Allez hop ni une ni deux, j'enfourche mon fidèle kakoune et je crée une méthode bidon changeant juste une variable de ma Ircconnection struct, je parsème de fmt.Println et comme prévu, avant et après la dite méthode la modif n'est pas prise en compte. J'appelle ce coup-ci le pointeur dans la méthode : bingo daze !

Bref j'ai à vue de nez la solution à tous mes problèmes, vais pouvoir me démerder.

Après avoir bidouillé deux heures je me rends vite compte qu'il me faut un moyen de "parler" aux go routines. Et visiblement ce moyen ce sont les channels.

Ça complexifie pas mal le merdier mais d'un autre côté pour avoir des trucs asynchrones ça a l'air d'être LA façon de faire. Du coup pour tester je me suis fait un ptit serveur netcat basique avec ce système. Ça fonctionne mais ça commence à être un poil complexe pour moi, je n'ai pas encore le niveau requis. Adapter mon client IRC avec ça représente pas mal de boulot.

Toujours est-il que ce serveur netcat fait maison pourra me servir un peu pendant les tests. Et du coup je m'en inspire pour bidouiller petite à petit mon client IRC. J'ai réussi à adapter suffisamment pour arriver plus ou moins au même niveau de fonctionnement donc la théorie marche. J'ai pas encore tout adapté à ce modèle mais après une bonne nuit de réflexion les pièces du puzzle devraient s'emboiter plus facilement. Au bout de ces quelques jours seulement j'ai le sentiment d'avoir bien progressé et lire des bouts de codes qui me paraissaient abscons m'est déjà beaucoup plus aisé.

Le code

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
package main

import (
	"bufio"
	"fmt"
	"net"
	"os"
	"io"
	"strings"
	"time"
    )

var server string = "localhost"
var port string = "6667"
var channel string = "#lms"
var nick string = "bab"
var commander string = ":Lord!Lord@geeknode.fuckyeah"
var onchan bool
var rouge string = "\033[1;31m"
var vert string = "\033[1;32m"
var jaune string = "\033[1;33m"
var cyan string = "\033[1;36m"
var normal string = "\033[0m"
var me string
var debug bool

type Ircconnection struct {
	Server		string
	Port		string
	Nick		string
	Channel		string
	Bidule		bool
	Conn		net.Conn
	Receiver	chan string
	Emitter		chan string
}

func (connection *Ircconnection) Connect(){
	var err error
	connection.Conn,err = net.Dial("tcp",server+":"+port)
	fmt.Println(rouge+"Connection to "+server+":"+port+normal)
	if err != nil {
		fmt.Println(err)
		os.Exit(1)
	}
	connection.Receiver = make(chan string)
	connection.Emitter  = make(chan string)
	fmt.Println(rouge+">> NICK "+nick+normal)
	io.WriteString(connection.Conn,"NICK "+nick+"\n")
	fmt.Println(rouge+">> USER "+nick+" 0.0.0.0 "+nick+" :"+nick+" bot"+normal)
	io.WriteString(connection.Conn,"USER "+nick+" 0.0.0.0 "+nick+" :"+nick+" bot\n")
	go io.Copy(connection.Conn, os.Stdin)
	go connection.handleIncoming()
}
func (connection *Ircconnection) Disconnect(){
	connection.Conn.Close()
}
func (connection Ircconnection) Join(channel string){
	time.Sleep(1000 * time.Millisecond)
	fmt.Println(rouge+">> JOIN "+channel+normal)
	io.WriteString(connection.Conn,"JOIN "+channel+"\n")
}
func (connection Ircconnection) SendMsg(msg string){
	fmt.Println(rouge+">> PRIVMSG "+connection.Channel+" :"+msg+normal)
	io.WriteString(connection.Conn,"PRIVMSG "+connection.Channel+" :"+msg+"\n")
}
func NewIrcconnection() Ircconnection{
	return Ircconnection{Server:server,Port:port,Nick:nick,Channel:channel}
}
func (connection *Ircconnection) SetNick(newnick string){
	connection.Nick = newnick
	fmt.Println(rouge+"Changement de pseudo pour : "+vert+newnick+normal)
	io.WriteString(connection.Conn,"NICK :"+newnick+"\n")
}
func (connection *Ircconnection) handleIncoming(){
	fmt.Println("Entrée dans handleIncoming()")
	scanner := bufio.NewScanner(connection.Conn)
	go func(){
		for scanner.Scan(){
			ln := scanner.Text()
			fmt.Println(jaune+"<< "+ln+normal)
			connection.Receiver <- ln
		}
	}()
	fmt.Println("Sortie de handleIncoming()")
}

func (connection *Ircconnection) Interact(){
	fmt.Println("Entrée dans Parse()")
	for {
		select {
			case reader := <- connection.Receiver :
//    				fmt.Println(cyan+reader+normal)
				parseIrc(*connection,reader)
			case writer := <- connection.Emitter :
    				fmt.Println(cyan+writer+normal)

		}
	}
	fmt.Println("Sortie de Parse()")
}

/////////////////// MAIN //////////////////////////////////////
func main() {
	if len(os.Args) > 1 {
		server = os.Args[1]
	}

	connection := NewIrcconnection()
	go incoming(connection)
	connection.Connect()
	go connection.Join(channel)
	connection.Interact()
	//time.Sleep(5000 * time.Millisecond)


}

// ------------------
// Côté IRC
// ------------------

func parseIrc(connection Ircconnection, msg string){
	var elements []string = strings.Fields(msg)
	if debug {
		for i, element := range elements {
			fmt.Print(cyan+"[",i,"|"+normal+element+cyan+"] "+normal )
		}
	}
	if len(elements)<2{
		return 
	}
	fmt.Println("")
	

	if elements[0] == "PING" {
//		connection.Emitter <- "Envoyer un PONG serait judicieux !"
		fmt.Println(rouge+">> PONG "+strings.TrimPrefix(msg, "PING :")+normal)
		io.WriteString(connection.Conn,"PONG "+strings.TrimPrefix(msg, "PING :")+"\n")
	}

	switch elements[1] {
        	case "421" :
        		fmt.Println("!! Commande non reconnue par le serveur !!")
        	case "433" :
        		nick = nick+"_"
        		io.WriteString(connection.Conn,"NICK "+nick+"\n")
        	case "JOIN" :
        		if ":"+nick == stringCut(elements[0],"!"){
				me = strings.TrimPrefix(elements[0],":")
        			fmt.Println(me+" a rejoin le salon "+strings.Trim(elements[2],":"))
        			onchan = true
        			connection.SendMsg("c'est moi que vla!")
        		}
        	case "PART" :
        		fmt.Println("On est parti de "+strings.Trim(elements[2],":"))
        		onchan = false
        	case "KICK" :
        		if elements[3] == nick {
        			fmt.Println("Ptain on s'est fait kicker de "+elements[2]+" par "+elements[4]+" !")
        			io.WriteString(connection.Conn,"JOIN "+channel+"\n")
        		}
        	case ":Closing" :
        		// Déconnecté
        		time.Sleep (5000 * time.Millisecond)
        		connection.Connect()
	}
	if len(elements) > 3 {
		if elements[3] == ":cycle" {
        		connection.Disconnect()
        		connection.Connect()
        	}
	}
}

// ------------------
// Serveur en écoute
// ------------------

func incoming(connection Ircconnection){
	in, err :=net.Listen("tcp",":4321")
	defer in.Close()
	if err != nil {
		fmt.Println(err)
		os.Exit(1)
	}

	for {
		inconn, err :=in.Accept()
		if err != nil {
			fmt.Println(err)
			continue
		}
		go handleIncoming(inconn,connection)
	}
}

func handleIncoming(in net.Conn,connection Ircconnection){
	fmt.Println(vert+"Incoming from ",in.RemoteAddr(),normal)
	inbuf := bufio.NewReader(in)
	for {
    		inmsg, err := inbuf.ReadString('\n')
    		if err != nil || !onchan || inmsg == "\n" {
			break
    		}
    		fmt.Print(vert+"<<]] "+inmsg+normal)
    		connection.SendMsg(inmsg)
		time.Sleep(500 * time.Millisecond)
	}
}

// ------------
//  Génériques
// ------------

func stringCut(incoming string, pattern string) string{
	var results = strings.Split(incoming, pattern)
	if len(results) < 1 {
		return incoming
	} else {
		return results[0]
	}
}

Bon le channel Receiver fonctionne bien contrairement au Emitter qui ne se laisse pas dompter encore mais là je sature pour aujourd'hui ;-)

Le code a pas mal grossi aujourd'hui et il faudrait que j'en profite pour virer les morceaux obsolètes avant que ça ne s'accumule trop et que ça se disperse dans ma mémoire.

Une semaine pour coder par soi même : Jour 4

Allez je vais être franc, j'y ai pas trop trop touché aujourd'hui, j'étais occupé par ailleurs. J'ai presque pas lurker sur le Fédiverse et à peine sur les IRC.

J'ai quand même un peu discuté avec Cacatoès qui m'a soufflé que ça serait très probablement un peu mieux en utilisant de la programmation orientée objet. Et après discussion et lecture à droite à gauche, ça pourrait être pas mal plus simple.

Ça m'a également fait remonter quelques vieux souvenirs de Java. Je fais quelques tests sur une version copiée et effectivement ça a l'air jouable.

Du coup, allez hop, je reprends le code d'hier et je commence à y créer une structure pour la gestion de l'IRC. Je commence à faire une première méthode, ça marche, une seconde ça marche. Et là attention, je tente le tout pour le tout et BAM ça marche plus. Le scope des variables de mon objet me pose soucis.

J'ai l'impression que si je modifie une variable de ma structure dans l'une des méthodes (typiquement le net.Conn) dans une autre méthode ça n'a pas été modifié :-( J'ai naïvement pensé que les méthodes d'un struct pouvaient modifier les variables du struct globalement mais visiblement non. Du coup je suis pas spécialement plus avancé. Je voulais créer une méthode qui se connecte au lieu de le mettre dans le New mais du coup je ne peux pas…

J'imagine qu'il y a probablement une subtilité qui m'échappe.

Encore une fois je précise que je débute à 100% et que je compte pas en faire mon métier ni rien, c'est plus pour (re)découvrir et tenter de faire un ptit projet fonctionnel.

Bon et pour avoir l'impression d'avoir un truc un peu mieux qu'hier, j'ai mis le switch.

Voilà rien de transcendant aujourd'hui :-/

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
package main

import (
	"bufio"
	"fmt"
	"net"
	"os"
	"io"
	"strings"
	"time"
    )

var server string = "localhost"
var port string = "6667"
var channel string = "#lms"
var nick string = "bab"
var commander string = ":Lord!Lord@geeknode.fuckyeah"
var onchan bool
var rouge string = "\033[1;31m"
var vert string = "\033[1;32m"
var jaune string = "\033[1;33m"
var cyan string = "\033[1;36m"
var normal string = "\033[0m"
var me string
var ircconn net.Conn
var debug bool


func main() {

	if len(os.Args) > 1 {
		server = os.Args[1]
	}
	ircconn = initIrc(server, port, nick, channel)

	go incoming()
	ircconnbuf := bufio.NewReader(ircconn)
	go io.Copy(ircconn, os.Stdin)

	for {
		msg, err := ircconnbuf.ReadString('\n')
		if err != nil {
    			fmt.Println(err)
			break
		}
		fmt.Print(jaune+"<< "+msg+normal)
		parseIrc(msg)
	}
	
	defer ircconn.Close()
}

// ------------------
// Côté IRC
// ------------------

func initIrc(server string, port string, nick string, channel string) net.Conn{
	conn, err := net.Dial("tcp",server+":"+port)
	fmt.Println(rouge+server+":"+port+normal)
	if err != nil {
		fmt.Println(err)
		os.Exit(1)
	}
	fmt.Println(rouge+">> NICK "+nick+normal)
	io.WriteString(conn,"NICK "+nick+"\n")
	fmt.Println(rouge+">> USER "+nick+" 0.0.0.0 "+nick+" :"+nick+" bot"+normal)
	io.WriteString(conn,"USER "+nick+" 0.0.0.0 "+nick+" :"+nick+" bot\n")
	go joinChan(conn,channel)
	return conn
}

func joinChan(conn net.Conn,channel string){
	time.Sleep(1000 * time.Millisecond)
	fmt.Println(rouge+">> JOIN "+channel+normal)
	io.WriteString(conn,"JOIN "+channel+"\n")
}

func parseIrc(msg string){
	var elements []string = strings.Fields(msg)
	for i, element := range elements {
		fmt.Print(cyan+"[",i,"|"+normal+element+cyan+"] "+normal )
	}
	fmt.Println("")

		if elements[0] == "PING" {
			fmt.Print(rouge+">> PONG "+strings.TrimPrefix(msg, "PING :")+normal)
			io.WriteString(ircconn,"PONG "+strings.TrimPrefix(msg, "PING :")+"\n")
		}

		switch elements[1] {
        		case "421" :
        			fmt.Println("!! Commande non reconnue par le serveur !!")
        		case "433" :
        			nick = nick+"_"
        			io.WriteString(ircconn,"NICK "+nick+"\n")
        		case "JOIN" :
            			if ":"+nick == stringCut(elements[0],"!"){
					me = strings.TrimPrefix(elements[0],":")
        				fmt.Println(me+" a rejoin le salon "+strings.Trim(elements[2],":"))
        				onchan = true
        				sendIrc("c'est moi que vla!")

            			}
        		case "PART" :
        			fmt.Println("On est parti de "+strings.Trim(elements[2],":"))
        			onchan = false
        		case "KICK" :
        		if elements[3] == nick {
        			fmt.Println("Ptain on s'est fait kicker de "+elements[2]+" par "+elements[4]+" !")
        			io.WriteString(ircconn,"JOIN "+channel+"\n")
        		}
        		case ":Closing" :
        		if elements[2] == "Link:" {
        			// Déconnecté
        			ircconn = initIrc(server, port, nick, channel)
        		}	
		}
}

func sendIrc(msg string){
	msg = strings.TrimSpace(msg)
	fmt.Print(rouge+">> PRIVMSG "+channel+" :"+msg+"\n"+normal)
	io.WriteString(ircconn,"PRIVMSG "+channel+" :"+msg+"\n")

}

// ------------------
// Serveur en écoute
// ------------------

func incoming(){
	in, err :=net.Listen("tcp",":4321")
	defer in.Close()
	if err != nil {
		fmt.Println(err)
		os.Exit(1)
	}

	for {
		inconn, err :=in.Accept()
		if err != nil {
			fmt.Println(err)
			continue
		}
		go handleIncoming(inconn)
	}
}

func handleIncoming(in net.Conn){
	fmt.Println(vert+"Incoming from ",in.RemoteAddr(),normal)
	inbuf := bufio.NewReader(in)
	for {
    		inmsg, err := inbuf.ReadString('\n')
    		if err != nil || !onchan || inmsg == "\n" {
			break
    		}
    		fmt.Print(vert+"<<]] "+inmsg+normal)
    		sendIrc(inmsg)
		time.Sleep(500 * time.Millisecond)
	}
}

// ------------
//  Génériques
// ------------

func stringCut(incoming string, pattern string) string{
	var results = strings.Split(incoming, pattern)
	if len(results) < 1 {
		return incoming
	} else {
		return results[0]
	}
}

Le bilan positif de la journée : je n'ai pas plus de ligne de code qu'hier !

Une semaine pour coder par soi même : Jour 3

Je piétine. J'ai un peu lu à droite à gauche, je sais toujours pas trop comment m'en sortir de ces histoires de "variables globales".

Du coup j'ai continué un peu à raffiner le support d'IRC :

  • Je détecte désormais si le pseudo est déjà occupé pour en prendre un autre.
  • Je détecte également s'il y a une déconnexion propre de la part du serveur. Mais je sais pas me débrouiller pour faire en sorte de repartir sur la fonction initIrc sans que ça foute la merde avec la variable conn….
  • Je détecte lorsque je me fais kicker et je rejoin automatiquement.

J'utilise maintenant des variables globales. C'est pas bien il paraît mais j'ai pas trop réussi à savoir si dans mon cas c'était justifié ou non, mais comme ça marche pour le moment ça me va bien.

J'ai été étonné de voir que dans la lib strings il n'y avait pas moyen de récupérer une sous-chaîne en coupant une chaîne en entrée jusqu'à un caractère particulier du coup me la suis rajoutée. Rien de bien méchant mais ça permet de se simplifier la tâche plus tard.

J'ai remarqué une petite erreur dans la logique de la fonction parseIrc où je bouclais sur plus qu'il ne fallait. Je pense qu'il serait malin de remplacer l'empilement de if par un switch, mais là j'ai un poil la flemme pour le moment.

Bon ça peut sembler assez peu mais … au final je suis assez satisfait des maigres avancées, j'ai l'impression (mais c'est peut-être complètement faux) que mon code est un peu plus robuste grâce aux variables globales.

Le code

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
package main

import (
	"bufio"
	"fmt"
	"net"
	"os"
	"io"
	"strings"
	"time"
    )

var server string = "localhost"
var port string = "6667"
var channel string = "#lms"
var nick string = "bab"
var commander string = ":Lord!Lord@geeknode.fuckyeah"
var onchan bool
var rouge string = "\033[1;31m"
var vert string = "\033[1;32m"
var jaune string = "\033[1;33m"
var cyan string = "\033[1;36m"
var normal string = "\033[0m"
var me string
var ircconn net.Conn
var debug bool


func main() {

	if len(os.Args) > 1 {
		server = os.Args[1]
	}
	ircconn = initIrc(server, port, nick, channel)

	go incoming()
	ircconnbuf := bufio.NewReader(ircconn)
	go io.Copy(ircconn, os.Stdin)

	for {
		msg, err := ircconnbuf.ReadString('\n')
		if err != nil {
    			fmt.Println(err)
			break
		}
		fmt.Print(jaune+"<< "+msg+normal)
		parseIrc(msg)
	}
	
	defer ircconn.Close()
}

// ------------------
// Côté IRC
// ------------------

func initIrc(server string, port string, nick string, channel string) net.Conn{
	conn, err := net.Dial("tcp",server+":"+port)
	fmt.Println(rouge+server+":"+port+normal)
	if err != nil {
		fmt.Println(err)
		os.Exit(1)
	}
	fmt.Println(rouge+">> NICK "+nick+normal)
	io.WriteString(conn,"NICK "+nick+"\n")
	fmt.Println(rouge+">> USER "+nick+" 0.0.0.0 "+nick+" :"+nick+" bot"+normal)
	io.WriteString(conn,"USER "+nick+" 0.0.0.0 "+nick+" :"+nick+" bot\n")
	fmt.Println(rouge+">> JOIN "+channel+normal)
	io.WriteString(conn,"JOIN "+channel+"\n")
	return conn
}

func parseIrc(msg string){
	var elements []string = strings.Fields(msg)
	for i, element := range elements {
		fmt.Print(cyan+"[",i,"|"+normal+element+cyan+"] "+normal )
	}
	fmt.Println("")

		if elements[1] == "421" {
			fmt.Println("!! Commande non reconnue par le serveur !!")
		}

		if elements[1] == "433" {
			nick = nick+"_"
			io.WriteString(ircconn,"NICK "+nick+"\n")
		}
		
		if elements[0] == "PING" {
			fmt.Print(rouge+">> PONG "+strings.TrimPrefix(msg, "PING :")+normal)
			io.WriteString(ircconn,"PONG "+strings.TrimPrefix(msg, "PING :")+"\n")
		}

		if elements[1] == "JOIN" {
    			if ":"+nick == stringCut(elements[0],"!"){
        			me = strings.TrimPrefix(elements[0],":")
				fmt.Println(me+" a rejoin le salon "+strings.Trim(elements[2],":"))
				onchan = true
				sendIrc("c'est moi que vla!")

    			}
		}

		if elements[1] == "PART" {
			fmt.Println("On est parti de "+strings.Trim(elements[2],":"))
			onchan = false
		}

		if elements[1] == "KICK" && elements[3] == nick {
			fmt.Println("Ptain on s'est fait kicker de "+elements[2]+" par "+elements[4]+" !")
			io.WriteString(ircconn,"JOIN "+channel+"\n")
		}

		if elements[1] == ":Closing" && elements[2] == "Link:" {
			// Déconnecté
			ircconn = initIrc(server, port, nick, channel)
		}
}

func sendIrc(msg string){
	msg = strings.TrimSpace(msg)
	fmt.Print(rouge+">> PRIVMSG "+channel+" :"+msg+"\n"+normal)
	io.WriteString(ircconn,"PRIVMSG "+channel+" :"+msg+"\n")

}

// ------------------
// Serveur en écoute
// ------------------

func incoming(){
	in, err :=net.Listen("tcp",":4321")
	defer in.Close()
	if err != nil {
		fmt.Println(err)
		os.Exit(1)
	}

	for {
		inconn, err :=in.Accept()
		if err != nil {
			fmt.Println(err)
			continue
		}
		go handleIncoming(inconn)
	}
}

func handleIncoming(in net.Conn){
	fmt.Println(vert+"Incoming from ",in.RemoteAddr(),normal)
	inbuf := bufio.NewReader(in)
	for {
    		inmsg, err := inbuf.ReadString('\n')
    		if err != nil || !onchan || inmsg == "\n" {
			break
    		}
    		fmt.Print(vert+"<<]] "+inmsg+normal)
    		sendIrc(inmsg)
		time.Sleep(500 * time.Millisecond)
	}
}

// ------------
//  Génériques
// ------------

func stringCut(incoming string, pattern string) string{
	var results = strings.Split(incoming, pattern)
	if len(results) < 1 {
		return incoming
	} else {
		return results[0]
	}
}

Ha au fait j'ai installé un vrai serveur IRC pour tester en condition un peu plus réelle sans pour autant pourrir un vrai réseau IRC… Du coup mon ptit script bash d'hier n'a pas servi.

L'affaire du Siècle

Attention je risque de dire des conneries, je serai râvis d'entendre votre avis à ce sujet !


Quatre associations se lancent dans une pétition en vue d'attaquer en justice l'État Français. Leur objectif est de forcer l'État à respecter ses engagements climatiques. Réduire les émissions de gaz à effet de serre.

J'ai signé la pétition et j'espère que vous allez le faire. C'est ICI !

Bon par contre… bha je suis pas non plus d'accord à 100%. Dans leur court texte (il n'y a finalement pas grand-chose comme info sur le site), ils sortent des trucs cools comme réduire la dépendance au pétrole, fournir des alternatives en matière de transport, la rénovation des logements, promouvoir les énergies renouvelables.

Mais là, c'est le drame abandonner le nucléaire.

Un jour où l'autre faudra ptet ouvrir les yeux et se rendre compte que le nucléaire est la seule source d'électricité ne produisant pas de CO2 mais aussi à produire suffisamment d'énergie.

Renoncer au nucléaire à court terme c'est augmenter la part des énergies fossiles et donc repartir dans du bon gros CO2. Renoncer au nucléaire à moyen terme c'est accroitre la production de panneau photovoltaïque qui est notoirement pollueur pour leur fabrication. Et tout ça pour quoi ?

La sécurité ?

Ouai c'est vrai que le nucléaire n'est pas 100% safe, il y a eu quelques exemples de soucis mais c'est il suffirait de renforcer les normes de sécurité et investir plus dans la rénovation/entretien du parc nucléaire et construire de nouveaux réacteurs.

Les déchets ?

Ouai il y a toujours une contre-partie et notamment les déchets nucléaires, on ne peut que les enfouir dans un trou et tenter de les oublier. Mais c'est largement moins dangeureu que de laisser cracher des centrales à charbon ou des usines de fabrication de panneaux photovoltaïque.

Et si dans 15/20 ans on était capable de rendre inofensif ces déchets nucléaires ? Cela changerait la donne à 100%.

Arrêtons de se voiler la face

Le nucléaire fait de la France l'un des pays avec la production électrique rejetant le moins de CO2 au monde. Regardez cette carte pour vous en rendre compte.

Le photovoltaïque et l'éolien sont malheureusement intermittents et ne produisent pas assez. L'hydroélectrique c'est bien gentil mais on ne peut pas en construire partout et quand bien même l'impact environnemental n'est pas neutre pour autant.

Bref, selon des calculs de Jean-Marc Jancovici passer à 100% nucléaire permettrait de réduire les émissions globales de CO2 de près de 30% soit un peu plus de la moitié du chemin à parcourir pour tenir les objectifs.

Bref si l'on veut diminuer les gaz à effets de serre, le nucléaire est imbattable (surtout à court terme). Si l'on veut des transports polluant moins, il va probablement falloir passer aux véhicules électriques mais les alimenter en nucléaire est quasi-obligatoire pour que ça ne soit pas contre-productif (avion, bateau, voitures, trains).

Même si elle n'est pas parfaite la fission nucléaire est l'une des dernières solutions encore viable aujourd'hui. Le climat se pète la gueule maintenant, pas dans dix ans…

Réduire la consommation électrique serait biensûr une excellente piste mais personne n'est près à moyen terme à sacrifier son petit confort de vie (moi le premier, je me vois pas me passer de réfrigérateur).


Étant super optimiste j'ai comme des doutes quant au fait que ça change grand-chose cette pétition mais bon je l'ai tout de même fait et pensez-à le faire aussi ;-)

Je me demande vraiment ce que ça pourrait changer si l'État Français perdait ce procès ? Rien ?

Une semaine pour coder par soi même : Jour 2

Contrairement à hier, j'écris l'article au fil de l'eau.

Raccourcir la boucle

Bon pour ce second jour j'ai commencé par automatiser un poil la façon de tester le code. Pour le moment je lançais un netcat en écoute sur un port dans un terminal, puis je lançais le go run ircc.go. Sauf qu'à chaque fois que je le quittais, fallait retourner sur le term avec le netcat et le relancer… chiant.

Du coup premier truc de la journée : faire un micro-script shell pour lancer ça dans un tmux :

#! /bin/bash
Reload(){
        tmux send-keys -t .+ C-c
        tmux send-keys C-c
        tmux send-keys -t .+ nc Space -l Space -p Space 6667 Enter
        tmux send-keys go Space run Space ircc.go Enter
}

Loop(){
        while true
        do
                read -s -n 1 input
                Reload
        done
}

Loop

Il permet d'envoyer un Ctrl-c aux deux panes, puis de relancer le serveur et le programme en Go. La boucle permet de relancer ces actions en appuyant sur n'importe quelle touche comme ça c'est on ne peut plus simple.

Foutre des variables et virer le hardcode

Ouai c'était pas terrible du coup j'ai commencé à mettre tout pleins de variables. Déjà parceque c'est facile à faire, il suffit d'être méticuleux et de ne rien oublier. Pour commencer la journée c'est soft.

J'en ai également profité pour tenter de récupérer les arguments donnés au programme. Pour l'instant j'en ai pas spécialement besoin mais ça pourrait servir ensuite. Du coup j'en profite pour récupérer os.Args (en testant au préalable sa longueur). Je pourrai picorer cet exemple plus tard pour l'utiliser différemment.

Parser un peu mieux IRC

Bon pour l'instant c'était très très basique. Du coup je me suis attelé à faire ça un peu plus proprement.

Je suis donc parti dans l'idée de récupérer une chaîne de caractère et de l'éclater en plusieurs sous-chaîne (séparée par des espaces) pour ensuite comparer certains champs seulement.

En fonction de ça je déclenche des actions bidons pour le moment.

Se documenter

J'ai dégainé la RFC d'IRC car ça devenait indispensable sur certains points.

Les emmerdes

J'entrevois déjà pas mal de limitations dans ma façon de coder. Je me retrouve à balader certaines variables un peu partout (les conn, nick et compagnie). J'imagine qu'il y a moyen de faire autrement mais ça va être vite compliqué sinon.

Il me faut donc trouver le moyen de pouvoir écrire une fonction "envoyer_sur_IRC" qui soit appelable d'à peu près partout sans lui donner le socket et compagnie…

Le code maintenant

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
package main

import (
	"bufio"
	"fmt"
	"net"
	"os"
	"io"
	"strings"
	"time"
    )

func main() {

	var server string = "localhost"
	var port string = "6667"
	var channel string = "#lms"
	var nick string = "bab"
	var commander string = ":Lord!Lord@geeknode.fuckyeah"

	if len(os.Args) > 1 {
		server = os.Args[1]
	}

	conn, err := net.Dial("tcp",server+":"+port)
	go incoming(conn)
	if err != nil {
		fmt.Println(err)
		os.Exit(1)
	}
	defer conn.Close()
	connbuf := bufio.NewReader(conn)
	go io.Copy(conn, os.Stdin)

	initIrc(conn, nick, channel)

	for {
		msg, err := connbuf.ReadString('\n')
		if err != nil {
			break
		}
		fmt.Println("<< "+msg)
		parseIrc(msg,conn,commander,channel)
	}
	
}

// ------------------
// Côté IRC
// ------------------

func initIrc(conn net.Conn, nick string, channel string){
	fmt.Println("NICK "+nick+"\n")
	io.WriteString(conn,"NICK "+nick+"\n")
	fmt.Println("USER "+nick+"0.0.0.0 "+nick+" :"+nick+" bot\n")
	io.WriteString(conn,"USER "+nick+" 0.0.0.0 "+nick+" :"+nick+" bot\n")
	fmt.Println("JOIN "+channel+"\n")
	io.WriteString(conn,"JOIN "+channel+"\n")

}

func parseIrc(msg string,conn net.Conn, commander string, channel string){
	var elements []string = strings.Fields(msg)
	for i, element := range elements {
		fmt.Println( i,": "+element )

		if elements[1] == "421" {
			fmt.Println("!! Commande non reconnue par le serveur !!")
			break
		}

		if elements[0] == "PING" {
			fmt.Println(">> PONG "+strings.TrimPrefix(msg, "PING :"))
			io.WriteString(conn,"PONG "+strings.TrimPrefix(msg, "PING :"))
			break
		}

		if elements[1] == "JOIN" {
			fmt.Println("On a rejoin le salon "+strings.Trim(elements[2],":"))
			break
		}

		if elements[1] == "PART" {
			fmt.Println("On est parti de "+strings.Trim(elements[2],":"))
			break
		}
	}
    

}


func sendIrc(conn net.Conn,channel string, msg string){
	fmt.Println(">> PRIVMSG "+channel+" :"+msg)
	io.WriteString(conn,">> PRIVMSG "+channel+" :"+msg)

}

// ------------------
// Serveur en écoute
// ------------------

func incoming(outconn net.Conn){
	ln, err :=net.Listen("tcp",":4321")
	if err != nil {
		fmt.Println(err)
		os.Exit(1)
	}

	for {
		conn, err :=ln.Accept()
		if err != nil {
			fmt.Println(err)
			continue
		}
		go handleIncoming(conn, outconn)
	}
}

func handleIncoming(in net.Conn, out net.Conn){
	fmt.Println("Incoming from ",in.RemoteAddr())
	inbuf := bufio.NewReader(in)
	for {
    		inmsg, err := inbuf.ReadString('\n')
    		if err != nil {
			break
    		}
    		fmt.Println("<<]] "+inmsg)
    		io.WriteString(out,"PRIVMSG #lms :"+inmsg)
    		time.Sleep(500 * time.Millisecond)
	}
}

Une semaine pour coder par soi même : Jour 1

J'ai toujours été frustré de pas savoir coder. J'ai pourtant toujours un peu codé des bidouilles.

Déjà des pages webs donc en HTML avec son CSS mais jamais de Javascript. Mais ces langages ne sont pas de la programmation à proprement parlé.

Puis en cours, j'ai eu le droit à un peu de théorie en algo mais pas grand-chose (suffisamment pour savoir si on accroche ou pas). J'ai aussi eu le droit à du Java. Ça m'a assez plu car c'était très pratique (faire un ptit truc de chat notamment). Et puis du C et là … bha en fait ça m'a gavé.

Les pointeurs… pourquoi se faire chier encore avec ça ? Et à l'époque j'étais pas spécialement à l'aise avec Linux du coup je galérais également avec l'OS. Après cette expérience douloureuse avec le C, j'ai fait du PHP.

Lors d'un stage, j'ai créé un système de gestion de tickets chronométrés pour utiliser le wifi, couplé à un serveur Radius. Bref un truc assez fun qui a fonctionné en prod deux semaines après avoir commencé. C'était du gros bidouillage dégueu toussa mais … bha il a fonctionné sans aucun accroc !

Depuis j'ai jamais rien fait et ça remonte à pas mal d'années maintenant.

Étant un geek, qui plus est versé dans le Logiciel Libre, je dois avouer que ça m'a toujours titillé mais les souvenirs des galères du C m'ont toujours hantés.

Depuis j'ai toujours fait des ptits scripts et compagnie. J'en suis même arrivé à faire des scripts shells plutôt poussé à un point où j'ai eu plusieurs fois des remarques comme quoi en Python ça serait beaucoup plus court et rapide et pratique et joli… blabla.

Bon du coup cette semaine je suis en congé et … bha je vais m'y mettre un peu dès aujourd'hui.

J'ai choisi de faire du Go. Un truc que j'aime bien avec ce langage c'est que ça génère des ptits binaires statiques. Tu les copies/colles et hop ça fonctionne ailleurs et ça c'est super pratique.

Et en plus tu peux avoir un fonctionnement un peu hybride dans le sens où ça a beau être un langage compilé, tu peux faire du go run ta_source.go et hop ça tourne direct (j'imagine qu'avec des programmes complexes ça tourne un peu moins instantanément, mais ça sera pas mon cas).

En plus ce langage est hype, donc autant voir pourquoi. J'aurai été moins quicheux, j'aurai probablement choisi Rust mais je pense ne clairement pas avoir le background technique suffisant.

J'ai fait quoi aujourd'hui ?

Bon bha pour mon tout premier programme en Go, j'ai choisi ce matin de faire un client IRC.

Ouai on se refait pas.

Bref IRC c'est le protocole de chat probablement le plus simple du monde, c'est du TCP avec juste une fine surcouche pour rendre ça plus utilisable et voilà.

Bon le but, à terme, est de remplacer mon bot Nib. Pour l'instant c'est donc du Shell assez porcasse avec du bidouillage de partout. Même si ça fonctionne, le truc tourne dans un container avec beaucoup de dépendances. Donc le but va être d'intégrer le plus possible, directement dans le programme en Go, pour ne pas recourrir à des logiciels externes.

En pratique donc j'ai commencé doucement, mais pour moi c'est déjà énorme. Je peux déjà me connecter à un serveur irc (hardcodé pour le moment), répondre au Pings envoyés par le serveur (histoire de pas être déconnecté), recevoir/envoyer du texte brut et j'ai même commencé le serveur d'écoute.

Je me suis aidé en suivant des morceaux de codes vus à droite à gauche. Et je suis arrivé au résultat suivant pour le moment.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
package main

import (
	"bufio"
	"fmt"
	"net"
	"os"
	"io"
	"strings"
	"time"
    )

func main() {
	conn, err := net.Dial("tcp","localhost:6667")
	go incoming(conn)
	if err != nil {
		fmt.Println(err)
		os.Exit(1)
	}
	defer conn.Close()
	connbuf := bufio.NewReader(conn)
	go io.Copy(conn, os.Stdin)

	fmt.Println("NICK bab\n")
	io.WriteString(conn,"NICK bab\n")
	fmt.Println("USER bab 0.0.0.0 bab :Bab bot\n")
	io.WriteString(conn,"USER bab 0.0.0.0 bab :Bab bot\n")
	time.Sleep(1500 * time.Millisecond)
	fmt.Println("JOIN #bab\n")
	io.WriteString(conn,"JOIN #bab\n")
//	_, err = io.Copy(conn, os.Stdin)

	for {
		msg, err := connbuf.ReadString('\n')
		if err != nil {
			break
		}
		fmt.Println("<< "+msg)
		if strings.HasPrefix(msg,"PING") {
			fmt.Println(">> PONG "+strings.TrimPrefix(msg, "PING :"))
			io.WriteString(conn,"PONG "+strings.TrimPrefix(msg, "PING :"))
		}
	}
	
}

func incoming(outconn net.Conn){
	ln, err :=net.Listen("tcp",":4321")
	if err != nil {
		fmt.Println(err)
		os.Exit(1)
	}

	for {
		conn, err :=ln.Accept()
		if err != nil {
			fmt.Println(err)
			continue
		}
		go handleIncoming(conn, outconn)
	}
}

func handleIncoming(in net.Conn, out net.Conn){
	fmt.Println("Incoming from ",in.RemoteAddr())
	inbuf := bufio.NewReader(in)
	for {
    		inmsg, err := inbuf.ReadString('\n')
    		if err != nil {
			break
    		}
    		io.WriteString(out,"PRIVMSG #bab :"+inmsg)
    		time.Sleep(500 * time.Millisecond)


	}
//	go io.Copy(in,out)

}

J'espère que le code ne vous fera pas trop mal aux yeux. Je me doute qu'il est plein de conneries.

C'est pour l'instant la toute première étape, j'ai déjà pas mal de pistes d'améliorations mais ça va me demander du creusage de méninges et surtout prendre de nouvelles habitudes et m'habituer à la syntaxe. Pour l'instant j'ai dû dédier environ 4 heures à ça. Au final j'ai fait plus que ce que je comptais faire pour la première journée.

On verra demain pour la suite.

Une histoire de 'Magie'

J'ai découvert il y a peu cette histoire que j'ai trouvé excellente et donc il me fallait vous la partager.

C'est une histoire parue dans le Jargon File de Eric S. Raymond où il raconte une mésaventure qu'il a vécue il y a quelques années.

L'original - cache local

L'article est en anglais, mais je me risque à vous le traduire ;-)


Une histoire de “Magie”

Il y a quelques années, j'étais en train d'observer les baies contenant le PDP-10 du labo MIT AI et remarqua un petit interrupteur collé sur l'une des parois de l'armoire. C'était évidemment un bricolage maison, ajouté par l'un des hackers (bidouilleurs) du labo (personne n'a su qui).

Biensûr, on ne touche pas un bouton d'un ordinateur sans savoir ce qu'il fait, cela pourrait crasher l'ordinateur. L'étiquettage du bouton n'aidait pas vraiment à connaître sa fonction. Il avait deux positions qui étaient marquées au crayon sur le corps en métal du bouton avec “magie” et “plus de magie”. Le bouton était sur “plus de magie”.

J'ai appelé un autre hacker pour venir voir. Il n'avait jamais remarqué ce bouton auparavant. Après plus d'observation il s'est avéré que le bouton n'avait qu'un seul fil ! Le bout du fil disparaissait dans les entrailles de l'ordinateur, mais c'est un fait connu de tous les électriciens et électroniciens qu'un bouton ne peut fonctionner que s'il y a deux fils connectés. Ce bouton avait un fil connecté d'un côté et rien de l'autre.

Il était évident que ce bouton était une blague stupide. Convaincu que ce bouton ne servait à rien, on l'a actionné. L'ordinateur crasha instantanément.

Imaginez notre surprise totale. Nous pensions à une pure coincidence mais quoi qu'il en soit nous avons remis le bouton sur “plus de magie” avant de redémarrer la machine.

Un an plus tard, j'ai raconté cette histoire à un autre hacker, David Moon si je me souviens bien. Il semblait clairement pas convaincu par les vertues magiques de ce bouton. Pour lui prouver, je lui montrai le fameu interrupteur, toujours collé sur l'armoire avec un seul fil, toujours sur la position “plus de magie”. On reluqua encore plus l'appareil pour se rendre compte que l'unique fil était raccordé à un plot de masse de l'ordinateur. Cet indice supplémentaire rendait le bouton doublement inutile : non seulement électriquement il ne peut pas fonctionner, mais il est raccordé à un endroit qui ne pourrait pas avoir d'incidence sur le fonctionnement de l'ordinateur. On a donc actionné le bouton.

L'ordinateur planta instantanément.

Ce coup-ci nous avons appelé Richard Greenblatt à la rescousse, un éminent hacker du MIT qui était non loin de là. Il n'avait jamais remarqué ce bouton auparavant, lui non plus. Il l'inspecta avant de juger qu'il ne servait à rien et choisi de le retirer complètement. Nous avons ensuite relancé l'ordinateur et il a toujours fonctionné parfaitement depuis.

On ne sait toujours pas pourquoi ce bouton fait planter l'ordinateur. On a émis une hypothèse comme quoi il s'agirait d'une microfuite de courant pendant un millionième de seconde qui modifierait une capacité électrique suffisante pour perturber la machine. Mais nous ne saurons jamais la vérité. Tout ce qu'on peut dire c'est que le bouton était magique.

J'ai toujours ce bouton dans mon grenier. C'est peut-être idiot, mais je le garde toujours sur “plus de magie”.

1994 : une autre explication m'a été apportée. Il faut préciser que le corps du bouton est en métal. Supposons que le côté non branché de l'interrupteur était reliée au corps du bouton (habituellement le corps est connecté à un connecteur de terre, bien qu'il existe des exceptions). Le corps du bouton est connecté à la carcasse de l'ordinateur, qui est en théorie à la masse. Maintenant la masse de l'ordinateur n'est pas nécessairement au même potentiel que la masse de la carcasse. Donc en actionnant le bouton, la masse de l'ordinateur se retrouve connectée à la masse de la carcasse causant un chute/hausse de tension ce qui redémarre la machine. Cela a très probablement été découvert douloureusement cet écart de potentiel entre les deux masses qui a ensuite décideé de rajouter ce bouton pour faire une blague.

Sway la suite spirituelle de i3

J'utilise i3 depuis bientôt dix ans maintenant et ça fait maintenant près d'un mois que j'ai migré sur Sway.

Attends attends c'est quoi déjà tout d'abord ?

i3 est un gestionnaire de fenêtres pour le serveur Xorg. Son rôle est donc de placer les fenêtre à tel endroit, les organiser, les afficher ou non. Il permet également de gérer les raccourcis globaux pour lancer un programme ou une action lorsqu'il détecte une combinaison de touche. Tout ça est possible, car la gestion de l'affichage sous Linux est basé sur le protocole X11 qui défini tout un tas de règles et propriétés… Bref on s'en fout un peu de tout ce blabla…

X11 est donc un vieux protocole qui remonte à la moitié des années 80 et qui a subit des changements certes mais rien de bien folichon non plus. Depuis le temps, vous vous doutez que le matériel et le logiciel a radicalement changé. Maintenant certains concepts du protocole sont désuets et plus du tout adapté au matériel d'aujourd'hui. Du coup, un ensemble de nouveaux protocoles ont été développés pour remplacer X11 : Wayland.

Beaucoup de devs de Xorg ont donc décidé de participer à cette nouvelle initiative depuis dix ans et depuis ça mûrit doucement mais surement. Les plus gros environnements graphiques ont déjà (au moins partiellement) adopté Wayland (notamment GNOME et KDE). Mais tous les gestionnaires de fenêtre X11 n'ont pas encore commencé la transition.

Une capture d'écran prise lors de la rédaction de cet article.

Un petit aperçu de la bête.

Il faut dire que contrairement à X11, Wayland a une architecture complètement différente. Alors que sous X11, il suffit de peu de code pour implémenter un gestionnaire de fenêtre, sous Wayland, le concept même de gestionnaire de fenêtre n'existe plus. En plus de gérer les fenêtres, il faut gérer les entrés utilisateurs (claviers/souris/_), gérer les sorties (écrans), gérer la composition d'affichage, gérer les fenêtres… Bref il faut faire implémenter tout le protocole Wayland et non juste apprendre à manipuler les fenêtre de X11.

À cause de cela, le foisonnant écosystème de gestionnaires de fenêtres pour X11 ne migrera pas vers Wayland. Alors qu'avant c'était un ptit exercice de code pour un projet le temps d'un week-end pour les développeurs, implémenter l'équivalent pour Wayland est amplement plus compliqué et chronophage. Mais heureusement certains projets existent pour faciliter la tâche aux autres devs.

Bon ok mais du coup sur Wayland, il y a quoi ?

WLC a été dans les premiers frameworks pour aider les devs à créer de simples gestionnaires de fenêtres. Il est arrivé assez tôt mais au fil du temps a été abandonné car le code a été bidouillé un peu dans tous les sens sans vision globale (pas étonnant pour un projet qui défriche une nouvelle techno).

Wlroots est le nouveau porte étendard et a donc la lourde tâche de simplifier l'écriture de "WM" pour Wayland. Il est tout nouveau, tout beau pour le moment. Il est développé par une communauté de devs issus de différents projets ayant monté un crowdfunding pour accélerer le projet. Il sert de base à plusieurs projets comme Sway (un simili-i3) mais aussi Way-cooler (un simili-awesome), pour ceux qui suivent régulièrement mon blog, Purism s'en sert de base pour leur Phosh (interface pour téléphone portable sous Linux)… Le projet a donc déjà beaucoup plus de recul grâce à l'expértise acquise via WLC, on peut donc espérer qu'il saura se montrer robuste dans le temps.

Sway est donc la suite spirituelle de i3 au point où même le fichier de conf de i3 est compatible avec Sway (enfin partiellement, on vera plus loin). On peut donc avoir un comportement identique entre Sway et i3. La migration de l'un à l'autre est donc transparente et sans douleur. Ou presque.

Au départ, Sway était basé sur WLC mais cette lib a vite montré ses faiblesses. Maintenant (tout du moins les dernières beta) s'appuient sur wlroots et le projet atteint parfaitement son but d'être compatible avec i3.

Du coup pour migrer il faut ?

Déjà, faut emerge sway en veillant à bien prendre les beta de la branche 1.x et non les versions en 0.1x qui sont basées sur wlc encore. D'ailleurs quitte à migrer sur Sway, autant en profiter pour recompiler le plus de paquets possibles avec le support de wayland : dans /etc/portage/make.conf on rajoute wayland dans les USE. Puis un ptit emerge -UDnav @world . Une fois fait il vous reste plus qu'à démarrer votre sway !

Bon dans mon cas je n'utilise pas systemd ni elogind ni policy-kit et mon gestionnaire de session est qingy. Donc pour rajouter sway, on crée /etc/qingy/sessions/sway

#! /bin/sh

if test -z "${XDG_RUNTIME_DIR}"; then
    export XDG_RUNTIME_DIR=/tmp/${UID}-runtime-dir
    if ! test -d "${XDG_RUNTIME_DIR}"; then
        mkdir "${XDG_RUNTIME_DIR}"
        chmod 0700 "${XDG_RUNTIME_DIR}"
    fi
fi
exec /usr/bin/sway >> /var/log/sway.log

Bon ça fait rien de bien palpitant : ça crée le dossier temporaire qui va bien et après ça lance sway.

Facile !

Ouai ouai. Bon en vrai le fichier de conf i3 faut le compléter un peu.

Première chose, ajouter la conf du clavier dans ~/.config/sway/config :

input 65261:24672:Lord_Corp_Kbd_0.1 {
  xkb_layout fr,fr,us
  xkb_variant bepo,,
}

Si ce n'est pas le cas, il faut passer tous les bindsym en bindcode c'est-à-dire virer tous les symboles et le remplacer par le keycode. Pour avoir ça, il faut utiliser l'utilitaire xev et appuyer sur la touche correrspondante. Exemple en bépo pour é :

KeyPress event, serial 34, synthetic NO, window 0x800001,
    root 0x39c, subw 0x0, time 15988577, (963,-103), root:(2190,1340),
    state 0x0, keycode 25 (keysym 0xe9, eacute), same_screen YES,
    XLookupString gives 2 bytes: (c3 a9) "é"
    XmbLookupString gives 2 bytes: (c3 a9) "é"
    XFilterEvent returns: False

Le keycode est donc 25.

Après la conversion c'est bon pour Sway.

Quelques ajustements dans l'environnement ?

Bon premier truc à savoir, par défaut Sway (si configuré avec le use X) fera tourner vos applis X11 via XWayland sans rien faire à tel point que vous ne vous rendrez pas compte si une appli est native ou non. Et c'est le cas même pour des applis qui semblerait difficilement compatible (genre xclip fonctionne bien) mais pourtant…

Bon par contre aurevoir scrot. Le meilleur outil pour faire des captures d'écran ne fonctionne pas mais il existe Grim qui s'en rapproche surtout lorsqu'on le couple avec Slurp.

Concernant mpv, si vous aviez fait de la config particulière, il faut désormais faire en sorte d'utiliser la sortie vidéo gpu.

Concernant QuteBrowser… bha même s'il peut tourner nativement avec Wayland il a quelques soucis un poil chiant pour le moment, du coup je le fais tourner via XWayland.

Mais à quoi bon ?

Bha c'est plus moderne. Bon c'est aussi pour aider à essuyer les plâtres en reportant les bugs.

Mais il y a quand même un avantage non négligeable pour l'utilisateur de base : Plus de processus tournant avec les droits root. D'un point de vue sécurité c'est excellent. Qui plus est, il me semble que contrairement à X11, les risques de keylogger sont bien moindres.

PS : et tout roule ?

Tout. Sauf, les jeux.

  • GzDoom ne sait pas gérer la souris comme il faut.
  • Quake3 ne sait pas locker la souris même avec des builds issues de git.
  • RetroArch tourne nickel.

Eternal Jukebox

Je pense que vous avez tous déjà eu une chanson qui vous a obsedée pendant des jours/semaines. À peine terminer il faut se la remettre. Encore. Une troisième fois. Et encore une quatrième.

Mais il existe un moyen de s'écouter un même morceau pendant très longtemps.

L'Eternal Jukebox va scanner un morceau et indexer tous les beats. Il va répertorier tous les beats identiques et va vous permettre de lire le morceau. Mais c'est alors que la magie se produit : il ne va pas lire le morceau de façon linéaire mais aléatoirement passera d'un beats à l'autre si les deux sont similaires.

Ça va aller en avant dans le morceau ou en arrière et du coup le morceau sera joué dans un ordre assez déroutant. Et au final vous n'arriverez jamais à la fin de votre morceau.

Il s'agit d'une repompe d'un précédent concept le Infinite Jukebox sauf que là c'est paramétrable et il y a quelques fonctionnalités en plus.

Vous pouvez donc régler la sensibilité de la détection de similarité des beats afin d'augmenter/réduire le nombre d'embranchements possibles, permettre de ne prendre que des branches qui retourne en arrière, uniquement des longues branches…

Il existe également une option pour auto-canoniser un morceau de musique. Bref ça transformera n'importe quel morceau en un canon et franchement j'aime pas mais certains apprécient visiblement.

Bon, vous voulez le lien ? … il est ici.

Voilà amusez-vous bien. Et pensez à Tune avec le Branch Similarity Threshold à 50 voire moins.

Certains morceaux sont plus "compatibles" que d'autres.

Quelques morceaux qui passent plutôt bien :

Monter un server esclave Dns

Si vous avez un nom de domaine à vous (et j'espère que si vous êtes sensibilisé à votre identité numérique vous en avez un) il y a deux possibilités :

  • soit vous laissez la tâche d'héberger votre zone à un prestataire (souvent celui qui vous a vendu le nom de domaine)
  • soit vous l'hébergez vous-même.

Bon, personnellement je pense qu'il vaut mieux que vous l'hébergiez vous-même. Soit dit en passant, je vous ai déjà concocté un joli guide concernant DNS plutôt complet. J'ai rien contre le fait de laisser un prestataire le faire. Je n'ai, à vraie dire, jamais vraiment entendu d'histoire de magouille/mauvaise gestion/d'usurpation ou autre saloperie à ce propos. Mais héberger son domaine est vraiment super simple, ça demande peu de ressource, pas vraiment contraignant. C'est vraiment le B.A.BA de l'auto-hébergement.

Et qui dit auto-hébergement, dit ?

Panne. Merci de suivre !

Bref, un jour où l'autre votre serveur se viandera et vous serez marron. Par chance, comme la plupart des anciens protocoles de l'Internet, DNS a été pensé pour être vraiment résilient. Il est très facile d'avoir plusieurs serveurs à même de répondre pour votre zone.

C'est une architecture Maître-Esclave où vous allez avoir votre serveur Maître qui connaît les informations concernant votre nom de domaine et qui les enverra aux serveurs esclaves qui recopieront ces informations et les communiqueront aux clients.

D'un point de vue de l'utilisateur, il ne verra pas de différence selon si l'info parvient d'un serveur esclave ou du maître. Il arrive d'ailleurs parfois que le Master ne soit pas joignable depuis Internet mais uniquement par un réseau privé et que donc seul les serveurs esclaves soit utilisés par les clients.

Vous pouvez avoir autant de serveur esclave que vous le voulez. Si jamais le maître tombe les serveurs esclaves seront toujours à même de fonctionner et vice versa.

Dans la suite je vais plutôt utiliser le terme zone DNS à la place de domaine. Allez on met ça en place !

Knot sur le master

On commence par modifier le serveur maître.

Rajouter un remote

Un remote est tout simplement un serveur distant avec lequel on interagira. Rien de bien méchant :

- id: slave_server
    address: 123.321.123.321

C'est tout.

Ajouter une ACL

Les ACL sont les régles définissants les droits que vous allez attribuer à une zone. En gros vous voulez autoriser votre zone à envoyer les modifs vers le serveur esclave.

  - id: acl_slave
    address: 123.321.123.321
    action: ["transfer","notify"]

Confer la zone

Bon jusqu'à présent vous avez ajouté des options globales à votre configuration Knot. Maintenant il faut affecter des options sur votre zone.

Soit vous mettez toutes les options dans un template que vous affecterez à vos zones, soit vous mettez les options à chacune de vos zones (le template permet d'appliquer les mêmes réglages à plusieurs zones d'un coup).

template:
  - id default
  acl: [ "acl_localupdate", "acl_slave"]
  notify: slave_server
  …

Là c'est un extrait du template par défaut où on affecte l'ACL que l'on a créé précédemment. Et ensuite on indique qu'il faut notifier le remote créé précédemment.

Le notify permet à votre master d'indiquer au slave qu'il doit rafraîchir ses infos car le master vient de modifier la zone.

C'est bon

Ouai c'est tout mais faut penser à reload avec un ptit knotc reload.

Knot sur le slave

Et maintenant on configure votre serveur esclave.

Rajouter un remote

Ça ressemble beaucoup à la même chose que tout à l'heure vous allez me dire ! Bha ouai.

- id: master_server
    address: 123.321.123.321

Ce coup-ci le remote est obligatoire et n'est pas là juste pour que ce soit clair.

Ajouter une ACL

  - acl: acl_master
    address: 123.321.123.321
    action: notify

Confer la zone

  - domain: mon.domaine
    master: master_server
    acl: acl_master

Et on reload !

Le master et le slave sont prêts et maintenant ?

Voilà c'est fait votre zone est maintenant répliquée sur un autre serveur qui peut prendre la main si votre serveur tombe en panne. Vous pouvez le tester avec l'outil Dig pour voir si le serveur esclave répond : dig votre.domaine @serveur.esclave

Bon si vous voulez que ça fonctionne il reste deux étapes capitales :

  1. Rajouter un enregistrement NS dans votre zone pointant vers votre serveur esclave.
  2. Informer également votre registrar pour que ça soit pris en compte.

C'est super mais…

Haa non pas d'objection !

J'ai pas les moyens de me payer un autre serveur !

Ha bha il suffit de demander à vos amis geeks. Héberger une zone pour un pote ça coûte absolument rien.

Et si vous avez pas d'amis bha… demandez-moi ! Je vous ferai une petite place volontier.

Ha mais c'est gentil mais j'utilise Bind…

Ça marche même si les serveurs maîtres et esclaves n'utilisent pas les mêmes logiciels vu que c'est un fonctionnement de base du protocole. Vous pouvez avoir du Bind et du Knot et du NSD par exemple. C'est d'ailleurs pas mal d'avoir des implémentations différentes (en cas de bugs, tous les serveurs ne seront pas impactés).

Vous trouverez des tutos pour faire de même avec Bind dans le pire des cas ;-)

Beurk c'est pas secure !

Rhaaa mais si c'est possible ! Juste que j'ai pas envie de vous faire un article fleuve mais la doc existe.

Hey mais mon DNSsec est foireux sur le slave !

Ouai. Et pour l'instant j'ai pas la solution car non il ne faut pas filer sa KSK au slave (on ne peut pas avoir autant confiance envers le slave).

Le HTTP Black Header

Rhaaaa ce que c'est chiant ces sites avec leur design super clair qui casse les yeux !

Bon maintenant qu'on a l'entête HTTP : Do-Not-Track, on pourrait pas avoir un nouvel header bien plus utile : Black.

Votre navigateur envoie cet entête et de lui même le serveur vous retourne un site ouaib avec un design tout de noir vếtu. Bon pas complètement noir non plus, mais un design sombre globalement.

Bon et si en passant, par défaut les navigateurs pouvaient se mettre dans le crâne que par défaut une page non chargée, pas besoin d'envoyer le plus étincellant des blancs mais au contraire un noir soyeux et suave ça serait pas mal.

On a tous subit le phare dans la nuit en plein visage lorsque tu sors le téléphone de sa léthargie pour vérifier un ptit truc vite fait (heuuu… je l'ai activé ou pas le réveil ?)…

Et je ne parle pas uniquement sur Android mais sur les gros ordis de bureaux également.

Bref ça changerait pas la face du monde mais ça serait pas dégueulasse comme option.

Il aura quand même fallu dix ans à Google pour se rendre compte qu'afficher une interface sombre peut épargner un ptit chouilla de batterie (d'autant plus maintenant avec les écrans oled), donc on va ptet ravoir une vague d'interface sombre comme à l'époque d'holo. Croisons les yeux.

PS :

Ça va peut-être exister bientôt ! Gabriel de #LDN m'informe qu'il existe un brouillon des Media Queries Level 5 dans lequel il y a la prefers-color-scheme ce qui permet de spécifier si l'on souhaite un thême plutôt clair ou sombre. Bref dans un futur incertain on aura probablement cette option.

Les services du Fédiverse fin 2018

J'aime le Fédiverse. Mais si vous savez, c'est le web 3.0. Mais contrairement aux annonces précédentes, il existe déjà et vous pouvez l'utiliser dès maintenant !

Donc le Fédiverse c'est tout un ensemble de différents services qui savent parler entre eux. Du coup, sur le même principe que les mails, un utilisateur sur le service X peut interagir avec un utilisateur du service Y.

Fini les silos de données qui vous enferment et vous retiennent prisonnier. C'est également un outil pour combattre l'effet réseau : si votre service est dans le Fédiverse, même si vous êtes que deux utilisateurs de votre service, c'est pas grave, vous êtes dans le Fédiverse et avez accès à des millions d'autres utilisateurs !

Le fonctionnement de la fédération ressemble à un mélange des mails et du RSS : vous vous créez un compte sur un serveur dans le Fédiverse et ensuite vous vous abonnez à des émetteurs de contenu (une personne qui blog, une chaîne de vidéo, un hashtag d'une instance, une galerie photo…) et ensuite vous n'avez plus qu'à attendre que le contenu vous soit envoyé dès sa création. Mais vous n'êtes pas seulement consommateur, vous pouvez également réagir, mettre en favoris, commenter, publier du contenu.

Le Web 2.0 c'est le web participatif où l'utilisateur est captif des plateformes, le Web 3.0 c'est l'utilisateur qui redevient maître de ses données et qui peut participer à toute une myriade de services interconnectés.

Allez c'est parti pour un petit tour du Fédiverse en cette fin 2018. Si j'oublie un service m'insultez-pas mais parlez-m'en pour que le je rajoute à la liste.

Mastodon

Mastodon(RSS) est le poids lourd du Fediverse avec ses près de deux millions d'utilisateurs. C'est donc un système de microblog avec des hashtags et une interface avec de multiples colonnes. De part sa notoriété maintenant, il est le fer de lance du Fédiverse et être compatible avec lui est un objectif primordial pour tout nouveau service qui se crée. Il est écrit en Ruby couplé à PostgresQL, Redis, NodeJS, bref pas le plus simple à héberger.


Pleroma

Pleroma est le service que j'ai désormais adopté.

C'est également du microblog avec hashtags comme Mastodon mais reposant sur des technologies un poil différentes. L'avantage est que c'est beaucoup plus simple à héberger que Mastodon et donc pour une instance mono-utilisateur c'est bien plus adapté.

L'interface PleromaFE est sure une colonne, à la twitter

Il paraît que ça ressemble à Twitter

Il y a plusieures interfaces utilisateurs, soit PleromaFE qui ressemble à Twitter avec deux colonnes, une avec les mentions et de quoi écrire et une seconde avec la timeline.

L'interface MastoFE est un copié collé de celle de Mastodon

Non, ce n'est pas Mastodon mais bien Pleroma mais avec MastoFE

La seconde interface est celle de Mastodon (inspirée de TweetDeck).

Le rythme de dev est assez élevé mais pour l'instant il n'y a pas de sorties officielles, du coup c'est via git uniquement. En plus de se fédérer via ActivityPub, il parle le OStatus ce qui permet de se raccorder à pas mal d'autres services. Il est compatible avec les applis Mastodon. C'est codé en Elixir et nécessite une base PostgresQL.

Bref si vous voulez en savoir plus j'ai déjà écrit un article rien qu'à lui.


GnuSocial

GnuSocial est le papy des réseaux sociaux fédérés décentralisés et libres. Parti d'Identi.ca pour finir en GnuSocial après moults forks et merges…

C'est encore du microblog à l'ancienne (comprendre Twitter) mais souvent les instances ont viré la limitation du nombre de caractères.

L'interface ressemble comme deux gouttes d'eau à Twitter

Le microblog approuvé par RMS

L'interface principale de Pleroma était à la base une interface pour GnuSocial. La montée en puissance de Mastodon lui a redonné un sursaut d'activité.

Il est codé en PHP avec une base MySQL ce qui était classique à l'époque où il a commencé.


MissKey

Misskey(RSS) est un Mastodon qui a été doppé, programmé principalement par des Japonais.

C'est donc du microblog mais propose pas mal de petites améliorations dans l'interface mais également des fonctions supplémentaires comme, par-exemple, des jeux/des sondages/des réactions… Ils se vantent d'être en perpétuelle évolution et force est de constater que le rythme de dev actuel est effectivement très élevé.

La Home de Misskey est assez joli avec des widgets un peu partout.

Au premier abord c'est assez fouilli mais au final pas tant que ça, il y a pas mal de thêmes différents (dont des sombres).

Je l'ai un peu testé mais pas plus que ça.

Côté technique c'est du NodeJS avec MongoDB


Microblog.pub

Microblog.pub est encore un service de microblog.

Il est orienté instance mono-utilisateur et se targue de ne pas nécessiter JS (tout le monde s'en fout ou presque mais moi non et visiblement l'auteur non plus).

Du microblogging pur, sans aucune fioriture

Le minimalisme dans le Fédiverse

Je ne l'ai pas testé, mais il a l'air un peu plus simple que la concurrence. J'ai l'impression qu'il s'oriente moins dans l'interaction et plus dans la publication.

Il est écrit en Python.


Osada

Osada est tout récent et représente un peu moins d'une centaine d'utilisateurs à l'heure actuelle.

Il parle ActivityPub mais aussi Zot (que je ne connais pas). Il n'est pas centré uniquement sur le microblog mais un mix étrange de différentes apps. On peut biensûr microblogguer (et ça fédère) mais il propose même du WebDAV (transfert de fichier) ce qui est pour le moins surprenant mais ça fédère pas.

aperçu de l'interface dépouillée d'Osada

le design est bien moins à la mode mais ça charge vite.

Il propose une gestion (basique) de calendrier et d'évènement, mais ça ne fédère pas.

Sa population est bien plus diverse qu'à l'accoutumée : à première vue peu d'occidentaux, beaucoup de Sud-Américains et de Caribbéens. Bon je l'ai testé une soirée, j'ai pas réussi à avoir de contacts avec d'autres personnes…

Le projet est surement bien trop jeune pour le moment mais à surveiller, il adopte une approche clairement différente et sa communauté pourrait s'avérer bien différente de ce à quoi on est habitué par chez nous.

Pour monter une instance ça sera encore du PHP et du MySQL ou PostgreSQL.

Plus d'infos dans les commentaires grâce à eSquid.


Hubzilla

Hubzilla ressemble un peu à Osada : il est compatible un peu avec tous les protocoles du Fediverse Zot, ActivityPub, Diaspora et OStatus. Le fourre-tout.

Encore une capture d'écran de réseau social, rien de bien différent

La home de Hubzilla | Lascapi

Je ne l'ai pas testé mais visiblement il tente de se fédérer le plus possible. Merci Lascapi pour l'image.

Si vous voulez monter votre instance c'est le classique PHP et MySQL.

Plus d'infos dans les commentaires grâce à eSquid.


Friendica

Friendica(RSS) est une implémentation de Diaspora (ça tire du côté de Facebook) mais est en passe d'ajouter le support d'ActivityPub (en plus de Diaspora et OStatus) et donc se fédère déjà avec les services précédemment cités.

C'est lui aussi un ancien avec environ 2000 utilisateurs actifs et un grand nombre d'instances.

| merci Jared

C'est moins orienté microblog et plus partage de photos/d'évènements et compagnie.

J'ai pas testé, mais ça ne m'attire pas dans le concept, c'est pas ce que j'affectionne dans les réseaux sociaux. Il propose le moyen de communiquer via IMAP ce qui est unique pour l'instant. C'est propulsé par le classique PHP+MySQL.


Peertube

Peertube est un projet monté par Chocobozz et fortement soutenu par la communauté via un crowdfunding monté par Framasoft. Il s'agit d'un service de vidéos en ligne à la Youtube mais encore une fois avec la fédération et tout.

Bien entendu vous pouvez regarder les vidéos des différentes instances sans vous y créer de compte.

Interface de l'instance Skepticon

L'interface est classique pour un visiteur lambda tout en étant fédéré, comme quoi c'est faisable.

Donc un vidéaste poste une vidéo et des gens depuis un autre service peuvent commenter/mettre en favoris… Le projet bien que déjà fonctionnel n'en est qu'à ses débuts et donc de nombreuses fonctionnalités sont encore à attendre.

Il est propulsé par NodeJS avec PostgreSQL mais aussi Redis et nécessitera FFmpeg pour l'encodage vidéo. Attention se monter une instance Peertube va nécessiter du CPU pour l'encodage des vidéos, de pas mal de stockage et aussi pas mal de bande passante, c'est clairement le plus cher à héberger de tout le Fédiverse.


Funkwhale

FunkWhale est lui le Grooveshark du Fédiverse. C'est une application pour écouter de la musique en fédérant les bibliothèques et à terme plus d'interactions avec le reste du Fédiverse.

L'interface est scindée en deux, à gauche la partie lecture, à droite la partie bibliothèque.

C'est effectivement assez ressemblant à Grooveshark comme à l'époque.

Pour se monter une instance il faut un ptit PostgreSQL, un Redis et surtout Python.


Plume

Plume est un service de Blog, pas microblog mais de vrai blog. Exit les limitations de caractères et bonjour le MarkDown pour rédiger des articles.

Il est codé en Rust avec une base PostgreSQL ou SQLite. Les articles sont donc suivables depuis les autres services.

Exemple de blog de Valère

L'interface de Plume et à droite, le même article vu depuis Pleroma.

Par exemple, depuis Pleroma, vous suivez un auteur, vous recevrez l'article complet qui apparaîtra dans votre Timeline un peu à la façon des RSS.


Write.as

Write.as(RSS) est un autre service de Blog, un peu comme Plume mais il s'agit d'une plateforme payante, mais le logiciel est libre et auto-hébergeable également. Je ne l'ai pas testé mais visiblement ça marche bien, les articles de blog sont bien poussés vers les followers et dans le futur il sera même possible de commenter depuis le Fediverse en répondant.

Cela ressemble à n'importe quel blog

À gauche l'article de blog et à droite comment ça apparait dans Pleroma.

Le logiciel qui propulse le service est WriteFreely et est écrit en Go et stock dans MySQL. Il est intéressant de voir que les devs du projet monte une instance officielle payante pour pouvoir se rémunérer mais qu'il est possible de s'auto-héberger gratuitement.


Read.as

Read.as est fait par la même équipe que Write.as (sisi je vous jure !), c'est pour … heuu … lire du contenu du Fédiverse. Pour le moment il n'y a pas grand-chose à se mettre sous la dent mais à voir dans quelque temps. Potentiellement intéressant. C'est aussi du Go et MySQL.


Prismo

Prismo est un simili HackerNews/Journal du Hacker/Reddit, bref, un aggrégateur de liens.

Du Ruby, du NodeJS et du PostgreSQL ici.

L'interface web de Prismo ressemble énormément aux alternatives

On reste sur une interface standard, la partie fédérée ne transparait pas.

Il est possible donc de poster des liens, qui seront notés et commentés.

Le projet est tout jeune mais déjà fonctionnel.


PixelFed

PixelFed est l'instagram du Fediverse. Bon je dis ça mais j'ai jamais vu Instagram non plus, je sais pas à quel point cette comparaison tient la route. Bref c'est du partage de photos fédéré.

Les images prennent le plus de place dans une interface très dépouillée.

La Home | Jared

Je ne l'ai pas testé mais quelques images en provenance de Dada : timeline-profile-settings-discover. Merci à Jared et Dada pour les images.

Il n'est pas encore complètement fédéré (c'est d'ailleurs à deux doigts de devenir un meme du Fediverse), mais ça arrive bientôt. Il tourne avec le classique PHP+MySQL avec supplément Redis.


Pinafore

Pinafore est juste un frontend pour Mastodon, une interface utilisateur quoi. Il vous faut un compte sur une instance Mastodon ailleurs et Pinafore vous fournira une interface différente.

L'interface est très sobre sur une seule colonne et très réactive

C'est plus dépouillé que le Mastodon par défaut et très réactif.

C'est écrit avec svelte que je ne connaissais pas.


Aardwolf

Aardwolf(RSS) va être un simili facebook. Il est codé en Rust mais n'est pour l'instant pas du tout utilisable, c'est beaucoup trop tôt.

C'est un prototype de la future interface

Juste une maquette pour le moment.

On en reparlera dans quelques années quand il se féderera via ActivityPub.


Anfora

Anfora se veut assez proche de PixelFed avec le partage de photo en ligne de mire. Codé en Python, il utilise pour sa part Redis. Il est lui aussi encore trop tôt pour l'utiliser, il ne se fédère pas encore au Fédiverse mais ça devrait arriver avant la première version 0.1.


Plus d'infos concernant le Fediverse

Il existe quelques sites qui vous permettront d'avoir des infos diverses et variées :

  • The-Federation.info propose des stats sur le nombre d'utilisateurs et de nœuds des différents services.
  • Fediverse.party est plus joli et plus joyeux (bha ouai c'est une fête !) est plus didactique et propose un flux RSS avec des news en provenance d'un peu tous les services du fediverse.
  • Fediverse.network est plus austère mais propose du monitoring des instances (et par la même occasion quelques stats).

Je remarque en passant que pas mal de ces projets héberge leur code ailleurs que sur Github (certains ont quand même un miroir sur github). Il existe d'ailleurs un projet de forge logiciel avec support ActivityPub, on pourra bientôt recevoir les commits dans notre ptite Timeline !

Clients ACME Pour Letsencrypt

La vague de blogposts concernant LetsEncrypt a l'air de s'être dissipée, du coup j'en profite pour en remettre une couche.

LetsEncrypt c'est une Autorité de certification gratuite mais ce n'est pas leur seule contribution. LetsEncrypt c'est également une automatisation pour la génération/signature des certificats x509 via un protocole normalisé : ACME.

Du coup, il y a le serveur (le logiciel se nomme Boulder et est libre lui aussi, vous pouvez le trifouiller depuis son dépot) qui est peu connu mais surtout les clients. Et j'ai bien dit LES clients.

Certbot

Avant de s'appeler Cerbot c'était LetsEncrypt mais la confusion entre l'autorité de certification et l'outil a poussé à le renommer. Il s'agit du client officiel et est donc le plus populaire.

Et c'est là que je vais jouer les grognons : il est pas terrible et chaque fois que je vois des gens l'utiliser j'ai mal pour eux.

Trop lourd

Il est écrit en Python et déjà ça commence comme un point noir : sur des install Linux minimaliste, Python est déjà suffisamment massif pour être contraignant. Je sais que pas mal de monde me trouve un peu trop extrémiste sur ce sujet et pourtant je persiste : installer autant de paquets pour ça me paraît absurde.

Chaque paquet que l'on installe est un potentiel de bugs et de failles et augmente d'autant la maintenance nécessaire. Avoir un système minimaliste est une des composantes de la sécurité (réduire la surface d'attaque).

Il s'auto-update

Ouai pour la sécurité c'est bien. Mais par contre ça prend une plombe. Et surtout il arrive que parfois ça se passe mal. Je l'ai déjà rencontré le coup du “Tiens mais pourquoi le certif est expiré, pourtant j'ai bien cronné cerbot !” qui déconne à cause de ses updates (et biensûr 0 supervision sur cette machine :-°).

Il touche potentiellement à la conf de votre serveur web

Ouai pour certains c'est un argument de vente mais pour moi absolument pas. J'aime pas qu'on touche à mes précieux fichiers de conf.

Les autres

Bon, j'ai pas donné trop d'arguments contre certbot mais c'est suffisant pour au moins aller voir la concurrence.

Il y en a dans tous les langages, tous les formats. Je ne les listerai pas, car je les ai pas tous testés, mais je vais vous en recommander deux différents.

Acme-client

Celui-là est en bon vieux C des familles. C'est-à-dire que vous aurez pas grand chose à installer : très peu de dépendances, pas d'interprêteur ni de machine virtuelle pour le faire tourner.

Il est issu de chez OpenBSD, ce qui est pour moi un gage de qualité (notez que je dis ça mais j'ai jamais fait tourner de BSD… une fois goûté Gentoo, on ne veut plus aller ailleurs). Il est dispo chez Gentoo et Alpine (entre autre) ce qui couvre mes besoins et s'appuie sur LibreSSL.

Il ne gère que le challenge http-01 ce qui suffit pour la majorité des cas (pas de wildcard du coup) et il va falloir confer votre serveur web comme il faut pour que ça tourne tout seul. Il s'automatise super bien, est très rapide et le code stable.

Dehydrated

Celui-ci, est en fait un simple script bash avec tous les outils qu'il faut lier les uns aux autres. Enfin simple script bash… il est tout de même super complet et fiable. Il utilise des outils qui ont fait leurs preuves, les dépendances les plus exotiques sont openssl et curl, c'est dire.

Il est plus complet qu'acme-client dans le sens où il gère également le challenge dns-01 ce qui vous permettra d'avoir un certificat wildcard.

Le fait d'être un script bash signifie qu'il est compabtible avec à peu près tous les nunux, c'est donc ma solution de repli quand acme-client n'est pas dispo. Un seul fichier à transférer pour l'installer, ensuite un fichier de conf à remplir et éventuellement un hook pour recharcher votre serveur. Le ptit fichier de conf de la doc est bien commenté de partout, il n'y a pas de surprise.


Voilà j'espère qu'avec ce ptit article je vous donnerai l'envie d'aller voir un peu les alternatives. Certaines peuvent probablement répondre mieux à vos besoins que Certbot.

Et merci LetsEncrypt pour tous ces certs.

La demoscene vol.5

Je vous ai déjà saoulé concernant les démos. Mais je vais continuer !

À l'origine la demoscene a débuté dans les années 80 en utilisant des C64, des Amiga et des Atari. Le but d'une démo était donc de pousser au maximum les capacités techniques de ces machines pour produire des œuvres les plus impressionnantes graphiquement et musicalement. Mais à partir de la moitié des années 90, la demoscene a entamé sa migration vers les PC (sans pour autant complètement délaisser les anciennes plateformes, même aujourd'hui).

Mais, le souci c'est que la plateforme PC est une plateforme mouvante question matériel. Du coup sa puissance augmente graduellement avec le temps. Du coup ça devient difficile de s'émerveiller devant une nouvelle démo : « Est-ce qu'il s'agit d'une performance incroyable dans le code ou bien juste que la machine est bien plus puissante que les précédentes ? ».

Je le répète encore mais la demoscene c'est aussi des compétitions (compo) dans différentes catégories. Du coup sur PC il devient très difficile de juger la performance technique d'une démo. De nouvelles catégories ont donc émergées.

Les catégories 64K et 4K (entre autre) sont en fait des contraintes : les démos doivent tenir dans moins de 64Koctets ou 4Koctets (c'est selon). C'est vraiment une contrainte énorme. 4 secondes de MP3 en 128kbps (l'un des formats les plus communs) représente 64Ko.

Il faut donc se débrouiller pour faire rentrer plusieurs minutes de musique et de graphismes en utilisant le moins de données. Cela va sans dire que la tâche est ardue.

Décroissons !

One of Those Days by Loonies

À peine sortie de l'emballage, cette démo est sortie pour la Revision 2018 et a gagné la première place de sa catégorie (pc 8K).

Une balade à ski bien rythmée avec un ptit tunnel psychédélique et enfin un bonhomme de neige.

capture d'écran de one of those days par Loonies

C'est de saison

Monarchahedron by Fulcris

Celle-ci aussi n'est pas bien vieille. De la géométrie avec des effets d'ombres diffuses, de réflexions et vraiment bien foutue techniquement.

Elle fait son ptit effet du haut de ses 6Ko.

Un sol orangé un ciel bleu et des octahèdres réflêchissants. très abstrait

Combien de face sur un Monarchahedron ?

Hartverdrahtet by Akronyme Analogiker

Première de la compo 4K lors de la Revision 2012. Elle mérite largement sa place avec sa musique électro, ses couleurs et ses ptits effets de lumière.

Mais surtout ses fractaux en 3D sont vraiment superbes.

On est à l'intérieur d'un fractal 3D extremement complexe. C'est légèrement brumeux, très atmosphérique.

C'est sûr que pour créer des modèles 3D très poussé le mieux c'est de pondre un fractal.

Gravity Haze by Traction and Fit

Et on finit par la plus petite de la fournée : 1Ko. C'est ridiculement petit.

Présentée en compet lors de l'Assembly 2015, celle-ci est vraiment mignonne avec une petite musique (mais ce sont des sons externes qui ne sont donc pas décomptés).

Un tour de force magistral.

complètement abstrait des formes colorés.

Ça ferait un joli screensaver :-þ

Updater le cache des méta-données lorsque Portage utilise git

Gentoo se modernise et depuis quelques années l'arbre Portage peut-être transmis non plus uniquement via rsync mais aussi par git maintenant. D'un point de vue réseau c'est bien plus rapide : au lieu de parcourir toute l'arborescence pour voir ce qui doit être mis à jour ou non, vous allez juste récupérer les commits depuis la dernière mise à jour. C'est vraiment plus rapide.

Par contre lorsque vous faites ceci, vous n'aurez plus les méta-données de l'arbre. Et ça pose soucis si comme moi vous utilisez eix pour chercher des infos sur les ebuilds. Si vous mettez à jour via emerge --sync ou même via eix-sync vous aurez donc potentiellement de nouveau paquets mais eix n'aura pas les infos.

Du coup pour mettre à jour le cache de méta-données il faut utiliser la commande egencache --jobs=8 --update --repo=gentoo

Et armez-vous de patience.

Autant la synchro via git fait gagner énormément de temps, la régénération du cache est super lent. Je ne le fais pas systématiquement. Étant donné que je suis tous les nouveaux ebuilds qui rentrent dans l'arbre via RSS, je sais à peu près ce qui est susceptible de m'intéresser et quand j'en vois un qui m'attire je régen le cache.

Quompression

J'ai l'algorithme ultime de compression de données. Vous allez pouvoir compresser plusieurs Go voir To de données et faire rentrer ça dans quelques dizaines d'octets.

Le quantum des données

L'algo en lui-même est assez flexible et permet de compresser sans aucune perte n'importe quel type de données. Le temps de compression est très rapide et s'appuie sur des technologies éprouvées.

Le système se base sur les data-hints afin d'améliorer la vitesse de décompression. Plus vous rajoutez de data-hints plus votre fichier compressé va gagner en taille. C'est donc tout un compromis qu'il va falloir faire : Préferez-vous un fichier rapide à décompresser ou la taille finale est vraiment le critère le plus important pour vous ?

Avec cette technique un jpeg de 2Mo est compressé dans moins d'1Ko sans data-hints.

Comment ça marche ?

L'algo de compression repose en grande partie sur les algos de hachage tels que md5, sha1

Utilisez ces algorithmes sur votre fichier, notez les résultats dans un fichier et … voilà.

Et niveau restitution ?

Bha là je vous cache pas que c'est là que le bât blesse. Va falloir bruteforcer.

Vous balancez des données aléatoires et vous hachez ces données et regarder voir si ça correspond aux hash que vous avez. Si c'est le cas, c'est bon vous avez vos données, si c'est pas le cas, vous jetez les données et vous recommencez. Ouai ça peut être un poil long voire impossible.

Mais toute l'astuce est dans les data-hints : Dans votre fichier compressé vous pouvez rajouter des données supplémentaires pour aider à la reconstruction des données.

Le plus répandu est size qui permet tout simplement d'indiquer la taille du fichier d'origine. Ça permettra à la décompression de créer déjà des données à la bonne dimension.

Ensuite un pratique est le fb qui rajoute comme information quel est le premier bit de données (est-ce un 1 ou un 0 ?). Ça va permettre à l'algo d'être deux fois plus rapide.

Un autre permettant encore de doubler est lb qui indique quel est le dernier bit de données (encore un 1 ou un 0 ?).

Comme expliqué plus haut, le format est très flexible, car vous pouvez ajouter autant de data-hints que vous le souhaitez et même en créer de nouveaux si ça peut aider. Par exemple mime qui indique tout simplement le type de fichier compressé. Ou alors pic-sub qui indique sur une photo quel est le sujet (un peu de machine learning peut aider à accélérer la décompression).

Décompression

J'ai jamais réussi à décompresser un fichier, mais je suis pas d'un naturel très chanceux.

Le format n'impose pas le type de hash ni leur nombre, mais il est préferable d'en indiquer au moins deux différents (surtout si vous n'ajoutez pas de data-hints) afin d'éviter les erreurs de décompression.

Gzip-bombe avec Nginx sans PHP

Bon je matais un ptit coup GoAccess et dans la section 404. Là, près de 18000 tentatives de connexion à wp-admin.php qui correspond à l'accès à l'interface d'administration de WordPress. Et plein de tentatives vers divers trucs du même genre pour tenter s'infiltrer dans la machine.

Heureusement pour moi, j'utilise Hugo qui est un générateur statique. Donc côté serveur web, il n'y a pas de PHP ou autre langage dynamique. Les pages webs sont de simples fichiers textes et le serveur web n'a aucune intelligence et ne fait qu'envoyer les pages demandées.

Mais du coup ça fait un bail que ça me titille de tenter de faire chier les scanners.

GZip Bombe

C'est une technique assez ancienne et simple. Vous créez un fichier bidon mais très gros contenant plein de fois un même caractère. Vous compressez ce fichier. Un trèèèès gros fichier donnera un très petit fichier.

La magie des serveurs web et clients web (les navigateurs mais aussi les logiciels qui scannent (entre autre)) fait que la plupart des logiciels savent communiquer en s'échangeant des fichiers compressés. Du coup le but du jeu est que le serveur envoie une bombe à un scanneur qui tentera alors d'ouvrir la page web en décompressant le fichier reçu sauf que ce fichier est énorme ce qui bouffera du CPU et probablement énormément de RAM.

Mise en place sur NGINX

On trouve déjà pas mal d'exemples de ce genre de truc avec Nginx mais ils sont tous prévus pour être utilisés via PHP. Un ptit tour sur votre moteur de recherche favoris vous donnera plein d'exemples. Sauf que je vais pas foutre PHP juste pour ça…

Il va donc falloir ruser.

1. Créer la bombe

On va créer un fichier de 10Go avec uniquement des zéros. Et on va le gziper et ça va faire 10Mo.

dd if=/dev/zero bs=1M count=10240 | gzip -9 > 10G.php

Ça prend un peu de temps, vous inquiétez pas. Vous le placez à la racine de votre site ouaib.

2. Mise en place du piège

On édite la conf de votre vhost nginx : /etc/nginx/conf.d/lord.re.conf

location ~* \.php(/|$) {
	root /home/nginx/lord.re;
	try_files $uri /10G.php;
	types { text/html php; }
	add_header Expires "Wed, 11 Jan 1984 05:00:00 GMT";
	add_header Content-Encoding gzip;
}

Voilà on ajoute deux entêtes HTTP. Le premier sert pas à grand chose mais visiblement il est défini sur deux installations Wordpress que j'ai testé.

Le second entête indique que ce sont des données gzippés et que donc le client va devoir les décompresser. Si vous le faites pas, votre navigateur web va tenter de télécharger le fichier au lieu de tenter de l'afficher.

On redéfini le type du fichier php en tant que text/html pour indiquer au client que c'est une page web classique.

3. Profit !

Vous voulez tester ?

Et bha venez. Les navigateurs réagissent tous un peu différemment. Certains bouffent du CPU mais pas trop de RAM, d'autres bouffent à mort de RAM…


Merci à Fol pour les modifs qui rendent le truc un peu plus simple encore !

MPV et les scripts

MPV est de loin le meilleur lecteur vidéo toute plateforme confondue à l'heure actuelle. Et pas la peine de venir pleurnicher, VLC c'est bien gentil mais non merci : c'est largement moins bien foutu même si ça a des fonctionnalités exotiques utiles à moins de 1% des utilisateurs.

Bref je disais quoi ? Ha ouai MPV c'est super. Mais on peut encore un peu l'améliorer ! Et oui ma bonne dame, voyons ça de suite ! Et encore quelques points d'exclamations histoire de véhiculer un peu plus d'enthousiasme !!

Les scripts

MPV peut recourir à des scripts pour ajouter des fonctionnalités. Il en existe beaucoup en LUA quelques-un en Javascript et après un peu de vrac.

Ils sont à placer dans ~/config/mpv/scripts et hop ça marche. Oui c'est tout.

Bon après certains peuvent avoir des dépendances externes, d'autres peuvent nécessiter d'ajouter des raccourcis. Bha ouai, un script qui ajoute de nouvelles fonctions c'est cool mais encore faut-il pouvoir déclencher ces nouvelles fonctions !

Puisque je suis quand même super gentil, je vous explique comment ajouter un raccourci. Vous éditez ~/config/mpv/input.conf avec la combinaison de touche suivi de l'action. Un par ligne.

Et concernant les subs ?

Et bha en fait quand vous regardez votre vidéo de vacances il peut s'avérer que vous êtes en présence de touristes (ou si vous êtes le touriste et que vous croisez des touristes) et du coup vous comprenez pas ce qu'ils racontent parcequ'ils ne parlent pas votre langue. Il vous faut donc des sous-titres mais plutôt que de les chercher vous-même, autant mettre à contribution les Internets.

Subliminal est un logiciel spécialisé dans la recherche de sous-titre. Vous voyez où je veux en venir ? Et ouai, il y a un script qui vous permet d'utiliser subliminal et de vous mettre le sous-titre tout seul dans la vidéo juste avec une touche. Il vous faudra donc installer subliminal de votre côté. Ce script se nomme autosub. Une fois mis en place il suffit de choisir la langue en modifiant le fichier lui-même pour mettre un ptit "fr" qui va bien. Et maintenant b et pouf ça trouve votre sous-titre et le démarre.

Et là, des fois, ça fait chier, le sous-titre est pas synchro avec le film. Donc vous avez beau caler le sous-titre comme il faut à un instant t, bha deux minutes plus loin, c'est plus synchoro. C'est rageant, hein ?

Et c'est là qu'on dégaine fix-sub-timing qui va vous permettre de très facilement régler ce souci : Vous synchronisez une première fois le sous-titre et vous appuyez sur ctrl-w. Vous laissez passer un peu de temps, vous resynchronisez le sous-titre et vous remettez un coup de ctrl-w et c'est bon il vous recalcule tout comme il faut et gère la vitesse du sous-titre et c'est tout bon.

Quelques autres scripts kivonbien

Pour les bourrins

Il m'arrive régulièrement de commencer une vidéo et de pas la finir. Et de la reprendre plus tard. Bon là de base, MPV peut reprendre la vidéo car si vous avez été prévoyant vous avez fait en sorte que lorsque vous appuyez sur q ça sauvegarde l'état de la vidéo avant de fermer.

Sauf que je suis un bourrin et je ferme MPV comme un porc en le killant voir en killant Xorg, bref il a pas le temps de sauvegarder. C'est donc pour des gens comme moi qu'a été créé Autosave qui sauvegardera toutes les X secondes l'état. Comme ça lorsque vous rouvrez la même vidéo ça reprend là où vous en étiez.

Pour les sensibles

Pour protéger mes mirettes j'utilise Redshift (comme tout le monde j'espère) ça rougit l'écran pour moins vous bombarder les rétines. En plus de ça je baisse drastiquement la luminosité de l'écran via DDCUtil. Toujours est-il que la baisse de luminosité pour un film ne me chagrine pas, mais la teinte rougeatre m'horripile réellement. Du coup Toggle Redshift vous permet de mettre en pause puis de relancer Redshift tout seul.

Pour les Youtube Spectateurs

Un ptit Youtube Quality vous permettra d'un appui sur ctrl-f vous afficher un menu avec le choix pour la qualité des vidéos Youtube. Par défaut Youtube-dl sélectionne la meilleure qualité disponible mais c'est pas toujours le plus judicieux. Bref maintenant vous avez la solution, et vous pouvez le faire pendant la vidéo pour passer d'une qualité à une autre sans interruption.


Bon c'est tout ce que j'utilise, mais il y en a un petit paquet d'autres. Mais n'essayez pas pour autant de tous les mettre… car rappelez-vous l'adage : plus vous en mettez plus ça va merder.

Bloquer l'accès au net à un soft sous Nunux

Suite à une ptite question sur le Fédivers voilà une petite astuce pour votre nunux favoris.

Lorsque vous lancez une application par défaut, celle-ci a accès au net sans restriction. Voyons comment couper complètement l'accès au net à une application.

Pour cela vous aurez besoin de la commande ip faisant partie de iproute2 et … c'est tout. Il y a fort à parier qu'elles soit déjà installées vu que c'est la base pour configurer le réseau (non non, ifconfig est obsolète sous Linux depuis près de 17ans, faut se mettre à la page sans souffler et traîner les pieds, merci).

Il faut tout d'abord créer un namespace réseau qui n'aura pas accès au net. C'est impressionnant dit comme ça mais en vrai c'est juste ip netns add nonet . Là, on a donc créée nonet.

Et maintenant il ne reste plus qu'à lancer une application dans ce namespace particulier avec ip netns exec nonet votre_appli . Et voilà.

Bon bien entendu si vous ne voulez pas exécuter l'application en root il faut ajouter du su . Ce qui donne quelque chose comme ip netns exec nonet su lord -c "votre appli .

Voilà voilà :-)

En vrai les namespaces réseau peuvent faire des trucs bien plus puissant comme avec l'utilisation d'un VPN forcer des applis à l'extérieur d'un VPN et d'autre les forcer à l'intérieur mais c'est pas le but de notre article ;-)

Pleroma : L'alternative à Mastodon

Je me suis monté une instance Pleroma perso. Il y a peu je vous chantais les louanges de l'interface de Mastodon et là PAF je vous parle de la concurrence !

Pleroma est logiciel de microblog fédéré compatible OStatus et s'appuyant sur ActivityPub. Cette description devrait faire tilt chez certains d'entre vous : « Mais c'est de Mastodon qu'il parle le con ! » Et bien oui et non.

Pleroma == Mastodon ?

Pleroma est une alternative à Mastodon mais participe au même réseau : le Fediverse. Ça veut dire que n'importe qui sur Pleroma peut s'abonner à un mastonaute et vice versa. Tout comme on peut également s'abonner à un compte Peertube, à une instance Plume, à un compte PixelFed… Bref, le nouveau web décentralisé et fédéré.

capture d'écran de l'Interface MastodonFE pour Pleroma

C'est très proche de Mastodon, hein ?

Mastodon est le logiciel le plus populaire du Fediverse avec le plus grand nombre d'instances et d'utilisateurs. Mais il existe pas mal d'autres logiciels dans le Fediverse avec des buts différents. Beaucoup sont orientés microblog (à la twitter) dont Pleroma et GnuSocial. Pleroma est très proche de Mastodon dans son fonctionnement, au point d'avoir même un fork de l'interface par défaut de Mastodon avec de très légères modifs. Du coup Pleroma propose actuellement deux interfaces différentes : PleromaFE se basant sur une colonne de contenu et MastodonFE se basant sur un nombre variable de colonnes configurables. Pleroma est bien moins connu mais mériterait plus de reconnaissance et de popularité dans le Fediverse.

Mon indépendance

J'ai utilisé un compte Mastodon d'ailleurs pendant un peu plus d'un an et demi. Mais je squattais une instance choisie un poil au hasard (mais ça s'est avéré un excellent choix avec une super admin et tout). Je n'ai pas l'habitude d'utiliser des services que je n'administre pas en dépendant du bon vouloir de quelqu'un d'autre, du coup ça fait un bail que ça me titillait de me monter une instance Masto. Bref je me suis monté une ptite instance Pleroma (voir plus bas) uniquement pour moi et j'en suis super content.

Pourquoi du Pleroma au lieu du Mastodon ?

Parceque contrairement à Mastodon ça consomme trois fois rien, pas cinquante dépendances et bha pour l'instant ça tourne automagiquement. Je n'ai pas encore eu d'upgrade majeure (juste du git pull, mix deps.get, /etc/init.d/pleroma restart) mais pour l'instant rien à déplorer. Un ptit downtime de trois minutes à chaque fois et c'est reparti.

Un des points forts de Pleroma est qu'il s'agit d'une implémentation un peu plus stricte d'ActivityPub par rapport à Mastodon. En interne, Pleroma fonctionne nativement en ActivityPub et suit plus les spécifications. Du coup si vous suivez un blog Plume parlant ActivityPub, vous voyez les articles complets avec leur formattage. Pleroma arrive à se fédérer à plus de services différents que Mastodon.

Un article du blog Funkwhale vu depuis Mastodon.

Vu depuis Mastodon c'est pas la joie.

Un article du blog Funkwhale vu depuis Pleroma avec le formattage et l'article complet.

Vu depuis Pleroma c'est bien plus joli.

Le souci c'est que Mastodon étant devenu le mastodonte du Fedivers (facile celle-là), il faut se plier à ses façons de faire et être compatible avec lui. Mais la communauté étant plutôt bienveillante tout s'arrange assez vite et tout progresse dans la bonne direction.

Monter son instance

Sur Alpine Linux c'est un poil plus exotique mais c'est pas pour autant compliqué. Elixir est un peu chiant, car il veut compiler des trucs avec gcc. Bref il va vous falloir install tout un tas de trucs avec apk add elixir erlang-runtime-tools erlang-tools erlang-xmerl gcc make musl-dev postgresql postgresql-contrib .

J'ai créé un user spécialement dédié, ensuite un ptit git clone depuis leur gitlab. On installe les dépendances via mix deps.get et enfin on conf la bête avec mix generate_config. La conf générée est à mettre dans config/prod.secret.exs (ouai n'ayant jamais tripotté d'Erlang avant on est dépaysé par ces commandes et ces extensions de fichiers).

On crée la base postgresql via le script fourni su postgres -c "psql -f config/setup_db.psql" . Yapuka démarrer ça tout seul avec un fichier d'init fait maison genre

#! /sbin/openrc-run
name="Pleroma"
description="Pleroma : social network qui poutre."
depend() {
  use postgresql nginx
}

start() {
  ebegin "Starting Pleroma"
  start-stop-daemon -v --start --exec "/usr/bin/mix" --user "pleroma" --chdir "/home/pleroma/pleroma" --env "MIX_ENV=prod" --background --stdout "/var/log/pleroma.log" --stderr "/var/log/pleroma.err" --make-pidfile --pidfile "/run/pleroma" -- "phx.server"
  eend $?
}

stop() {
  ebegin "Stopping Pleroma"
  start-stop-daemon --stop --exec "/usr/bin/mix phx.server" --user "pleroma" --chdir "/home/pleroma/pleroma" --env "MIX_ENV=prod" --pidfile "/run/pleroma"
  eend $?
}

Il vous reste plus qu'à copier (et adapter un peu) la conf nginx fournie : cp installation/pleroma.nginx /etc/nginx/conf.d/pleroma.conf. Là il faut changer le server_name (à deux endroits), l'emplacement des clés ssl_trusted_certificate et ssl_certificate et enfin ssl_certificate_key et enfin le connect-src 'self' wss://example.tld et à reload votre nginx.

Ça y est, vous avez votre instance prête à démarrer. Vous allez pouvoir créer votre utilisateur et commencer à follow vous amis du Fediverse !

Bon ça prend rien en CPU, concernant le skeudur par contre ça augmente (enfin uniquement la base de donnée).

  DB Postgres     /home/pleroma  
29/10/2018 26 Mo 144.5 Mo
04/11/2018 88 Mo 144.9 Mo
20/11/2018 320Mo 161.5 Mo
02/02/2019 1212 Mo 256.4 Mo
18/03/2019 1809 Mo 280.4 Mo
31/05/2019 5021 Mo 345.7 Mo

Migration de Mastodon vers Pleroma

Par défaut la limite de caractères est de 5000 ce qui est au moins dix fois mieux que les 500 de Mastodon.

Pour migrer depuis Mastodon, j'ai exporté la liste de comptes que je follow que j'ai ensuite importé dans Pleroma. Ça m'a permis de très vite peupler ma federated timeline et de retrouver tous les gens que je suivais auparavant. Et d'ailleurs, fait amusant, comparé à Mastodon, on voit également les réponses des gens que l'on follow quand la conversation est initiée par des gens que l'on ne follow pas, ce qui permet de facilement trouver des gens potentiellement intéressants.

Dans les options de compte Mastodon, on peut indiquer le nouveau compte vers lequel on migre ce qui permettra aux gens de volontairement vous suivre sur le nouveau compte.

Autre bon point, les applis pour Mastodon sont compatibles avec Pleroma : j'utilise encore Tusky sans rien faire de particulier.

Bref, j'ai pas perdu de contenu et je n'ai pas changé mes habitudes : j'utilise MastodonFE qui est l'interface de Mastodon avec quelques légères modifications : les colonnes s'adaptent en largeur toutes seules. Par contre j'ai perdu tous mes followers… pas un drame, si les gens aimaient ce que je publiais avant, ils aimeront ce que je publie maintenant et me followeront à nouveau.

Si vous débutez dans le Fediverse et que vous voulez avoir un minimum d'indépendance, il est probablement préferrable de vous monter une instance Pleroma plutôt qu'une instance Mastodon. C'est plus simple et plus léger tout en étant quasi identique (voire mieux) à l'utilisation. Par contre je ne sais pas comment ça se comporte avec de multiples utilisateurs, peut-être que ça monte moins en charge que Mastodon…


EDIT : 20/11/2018 : Pleroma envoie les bons headers HTTP de lui même donc plus la peine de faire ça via Nginx. Merci Tetsumaki.

Confer un ONT alcatel

Une panne de connexion Internet à la maison est l'un des plus grand cataclysme des temps modernes. Pour parer à toute éventualité (enfin à mon niveau), j'ai choppé un ONT de rabe.

Un ONT est un petit appareil qui fait la conversion entre le signal optique de la fibre… optique vers un signal électrique en RJ45. Mais il ne fait pas uniquement cela (ça serait un media converter sinon). Le FTTH en France est très majoritairement en GPON. C'est-à-dire que sur une seule fibre on y mutualise plusieurs clients (jusqu'à 32 voire 64 ça dépend).

Du coup l'ONT doit parler avec l'OLT (qui est l'appareil chez l'opérateur) en faisant en sorte de pas marcher sur les platebandes de vos voisins avec qui vous partagez la fibre. Et il doit également faire en sorte de chiffrer vos communications pour que vos voisins ne puissent pas chopper vos précieuses données. Et cela se fait à base de SLID qui est un mot de passe.

Donc voilà, votre ONT n'est pas juste une bête boiboite noire à poser chez vous, il faut aussi y configurer le SLID. Il s'agit en vrai d'un mini ordinateur sous Linux (comme d'hab) avec ses failles.

Configurons donc un Alcatel I-010G-U

  1. Raccordez votre PC directement au cul de l'ONT via un câble réseau
  2. Configurez votre PC en 192.168.1.1/24 (ex: ip a a 192.168.1.1/24 dev eth0)
  3. Démarrez l'ONT
  4. Maintenez 5s le bouton reset de l'ONT jusqu'à ce qu'un ptit flash ait lieu sur les LED
  5. Ouvrez votre navigateur sur la page http://192.168.1.251
    Page d'accueil de l'ONT

    La page d'accueil de l'ONT

  6. Rendez-vous dans SLID configuration
    Page d'accueil de l'ONT

  7. Entrez votre SLID
  8. Rebootez l'ONT
  9. Patientez 5 minutes qu'il se mette à jour et redémarre plusieurs fois
  10. Profitez des Internets \o/

Et voilà un ONT prêt à prendre le relai en cas de soucis avec le premier.

L'interface web de l'ONT n'est plus accessible désormais. Si vous voulez y retourner, il faut refaire un reset de la bête.

Acko.net

Winamp va revenir foueter des lamas

Winamp fait sa comm en ce moment pour un retour prochain. Bon je ne vais pas jouer les rabats-joie et remettre en question l'intéret de la chose (il y a vraiment des gens normaux qui utilisent encore un lecteur audio ?). Mais plutôt vous parler vite fait d'AVS.

Winamp était franchement bien à l'époque. Son architecture à base de plugin était vraiment super. Du coup on pouvait rajouter des codecs, des skins à ne plus savoir qu'en faire et tout. Mais ce qui me plaisait le plus c'était l'AVS : l'Advanced Visualization Studio.

L'AVS

C'est un truc assez classique vu de loin. Une représentation graphique de la musique jouée en temps réel.

Classique. Ouai mais non ! Là c'était carrément un éditeur temps réel avec quelques fonctions et effets que l'on pouvait ajouter/combiner/programmer.

Il y avait une grande communauté de bidouilleur s'affairant à faire le truc le plus impressionnant. Et le tout était uniquement calculé par le processeur en réagissant aux signaux audio. Ça ressemble fortement à la demoscene : créer des œuvres synesthésiques avec une contrainte de temps réel !

Exemple d'un preset AVS

Houuu les gros pixels baveaux

L'éditeur était super simple d'accès et chaque modif était appliquée en live, sans phase de compilation ou autre. À peine tu modifies une variable que tu voyais le résultat à l'écran. J'étais particulièrement mauvais du fait que je ne savais pas programmer (ça n'a pas changé je vous rassure). Heureusement, Winamp était livré avec quelques presets (c'est le nom des scripts) parmi les plus appréciés du forum de l'époque.

Il existe une version Web désormais mais c'est pas aussi intuitif que l'original.

Si vous voulez retrouver une bonne sélection de presets vous pouvez aller visiter VisBot sinon cette vidéo Youtube vous donnera un aperçu du truc.

Acko

Quelques artistes créaient des packs complets où ils épataient la galerie. Un de mes préférré est Steven Wittens plus connu sous le nom de Whacko avant de devenir Acko qui a créé quelques packs. Il a créé parmi les presets les plus travaillés avec de la 3D et tout. Si vous avez un Winamp fonctionnel, vous pourrez tester ses presets téléchargeables.

Mais au-delà d'AVS, le gars s'est créé un des sites web les plus extraordinaires qui soit d'un point de vue technique. Acko.net est un petit bijou. Baladez-vous sur son site avec Javascript activé. N'oubliez pas de cliquer sur le bouton Play.

Survolez ces articles même si vous les comprenez pas (notamment MathBox2), il y a toujours une visualisation en CSS/WebGL. Et surtout ne ratez pas les Toys And Research sur la droite. Ses outils seraient particulièrement efficaces pour des cours de mécanique, physique et autres dans les collèges et lycées.

Franchement ce site est toujours impressionnant, c'est dommage qu'il ne reçoive pas plus de contenu.

L'UI de notre cher Mastodon

J'aime pas vraiment les réseaux sociaux web (parceque le mail et irc sont aussi des réseaux sociaux, mais je déteste le mail aussi). J'ai jamais ouvert de compte Facebook. J'ai ouvert un compte truitteur juste pour un concours (ouai j'ai craqué) mais il n'a jamais servi. J'ai bien eu un compte identi.ca pendant un temps avec mon propre serveur auto-hébergé mais ça n'a pas spécialement pris (la communauté était vraiment trop petite à l'époque).

Mais il y a presque deux ans j'ai découvert Mastodon et le Fédiverse et le concept m'a bien plus plu. Je ne vous ferai pas l'affront de présenter Mastodon le Twitter libre décentralisé s'intégrant dans le Fédiverse qui compte plusieurs logiciels différents.

Bref c'est sympa et mine de rien la communauté commence à être suffisamment grande pour que le Fédiverse soit intéressant. L'interface de Mastodon est vraiment pas mal du tout. Le thême par défaut est sombre et c'est pas mal personnalisable et ça s'adapte bien aux écrans larges avec son système de colonnes.

Le Fédiverse est peuplé de pas mal de gens différents et de pas mal de bots. Le souci c'est que certains sont de très gros posteurs qui auront tendance à non pas polluer parceque ce terme est trop péjoratif mais à remplir un peu trop votre Home Timeline (la timeline remplie par les comptes que vous suivez). Du coup les mastonautes un peu moins prolixes auront tendance à ne pas trop apparaître dans votre Home.

C'est d'autant plus vrai que certains bots peuvent poster très très régulièrement (comme, par exemple @FIP en direct qui annonce chacun des morceaux de musique à l'antenne donc toutes les 3/5minutes). Le fait de suivre des gens sur différentes timezones c'est sympa mais du coup selon l'heure où l'on regarde sa Home, autant des fois tu ne tomberas que sur du contenu US, autant des fois ça sera que du contenu FR. Mais du coup c'est un peu chiant pour retrouver le contenu FR de la veille quand les US ont bien tooté toute la nuit…

Les listes à la rescousse

Heureusement pour tous ces soucis il existe une solution : les listes.

On peut créer des listes des gens que l'on suit.

Du coup je me suis créé une liste Bots, une liste Fr et une liste En.

Et par contre là, bha… faut se les faire manuellement. Va falloir prendre chacun de vos abonnements et les classer dans telle ou telle liste.

capture d'écran de mastodon avec les 3 colonnes de listes

Pas mal le résultat, non ?

Tuto ?

Allez voyons ça vite fait.

Pour créer une liste il faut cliquer sur l'Hamburger Menu en haut à gauche. (mais si vous savez, l'icône avec les trois lignes parallèles, on la retrouve partout cette icône maintenant, faut vous y faire).

Dans la colonne Getting started tout à droite, vous avez maintenant Lists

capture d'écran de la colonne en question

Vous entrez un titre pour la colonne et vous cliquez le chtit + puis vous cliquez sur la liste qui vient d'apparaitre juste en dessous.

Vous vous retrouvez désormais dans votre liste, il faut y ajouter les mammouths que vous suivez dans cette liste. Pour ça cliquer sur la ptite icône de réglages tout en haut à droite et là Edit list.

Une fenêtre modale s'affiche avec un ptit champs de recherche. Là vous entrez une partie du pseudo de la personne en question et dans la liste de résultat le ptit +.

Voilà vous avez peuplé votre liste. Il ne reste plus qu'à la Pin pour devenir une colonne habituelle.

Une fois pin, vous pouvez la déplacer de gauche à droite avec les ptits < et >.

Si comme moi vous avez mis absolument tout le monde dans vos différentes listes (tiens d'ailleurs un compte peut être dans plusieurs listes, c'est bon à savoir), vous pouvez même virer la Home en l'Unpin.

Apparté concernant les raccourcis claviers

Mine de rien l'interface pas mal utilisable juste au clavier.

Les chiffres vous permettent de sélectionner la colonne voulue. Ensuite les flèches haut et bas vous permettent de faire défiler les toots. Enter vous permet d'ouvrir un toot. Et enfin n vous permet de démarrer un nouveau toot. Et les deux derniers utiles sont r pour répondre et f pour foutre en favoris.

Apparté concernant les performances

Si vous laissez tourner Mastodon dans un onglet constamment, vous allez vous rendre compte que le Mammouth broute le CPU allégrement. Après quelques bidouillages et avec l'aide de Lapineige et de Sp3r4z j'ai pu me rendre compte qu'on peut drastiquement diminuer l'appétit de la bête. Dans les préférences de votre compte, décochez Auto-play animated GIFs et hop vous voilà grandement soulagé. Sans ça, au bout de quelques heures, l'onglet qui me bouffait entre 20 et 40% de CPU ne consomme désormais plus que 8%.


L'interface utilisateur de Mastodon est vraiment bien. En plus d'être jolie, elle est suffisamment simple et intuitive en utilisation basique tout en étant pas mal flexible. Et la cerise sur le gâteau est la présence des raccourcis claviers bien branlés.

C'est d'autant plus rare pour un projet aussi jeune mais c'est très probablement une des raisons de son succès.

Et d'ailleurs profitez-en pour faire un bisou à votre admin d'instance et même lui payer une binouze.

Rituel à chaque nouveau kernel

Dans plus très longtemps maintenant, on va passer à Linux 5.0. Bon c'est pas une version plus majeure qu'une autre… c'est juste que … c'est chiant de compter à plus de 20, donc autant repartir au dessus à zéro.

Bon donc à chaque nouvelle sortie du kernel Linux, je m'empresse (keuf keuf) de mettre à jour.

Voilà donc mon petit rituel lors de la sortie d'un nouveau kernel !

  1. Récupération des sources
  2. Décompression et mise à jour du lien symbolique
  3. Configuration des nouveautés
  4. Compilation
  5. Installation et test
  6. Mise à jour du bootloader

Activons donc le mode verbeux !

1. Récupération des sources

Et quel meilleur endroit pour récupérer les sources que d'aller à la source ?

Gogo https://kernel.org

Et là je me fais pas chier je prends le lien du Latest Stable Kernel en cours.

2. Décompression et Mise à jour du lien symbolique

cd /usr/src/ Je me fous dans le bon dossier.

wget le latest Je télécharge donc le lien choppé précédemment.

tar xvf *.tar.xz Je détarre le bousin.

unlink linux Je supprime le lien symbolique pointant vers les sources du kernel précédent (on peut utiliser rm mais ça impressionne plus d'utiliser unlink !).

ln -s linux-votre-latest linux Je crée un lien symbolique vers les nouvelles sources.

3. Config

zcat /proc/config.gz > linux/.config Je récupère la conf du kernel qui tourne actuellement et je la fous dans les sources du nouveau.

make oldconfig Et c'est parti pour voir toutes les nouveautés du kernel et à chaque nouvelle option il demande si je veux ou pas l'ajouter (généralement non, j'aime les kernels minimaux). Il faut souvent chercher un peu sur le web à quoi correspond certaines nouveautés.

4. Compilation

make -j32 Bon bha compilation.

su Pour la suite faut devenir le patron.

make modules_install J'installe les modules kernels (j'en ai pas beaucoup mais ça les fout au bon endroit (/lib/modules/la.version/)). Bon bha là c'est bon, enfin j'espère. Des fois c'est pas si bon.

5. Installation et test

mount /dev/sda1 /boot Je monte la partoche de boot.

cp /arch/x86/boot/bzImage /boot/boot/kernelXXXX J'y copie le kernel tout juste sorti de la calculette.

reboot Le reboot indispensable.

e Pour interrompre Grub et éditer la ligne de boot, j'y change la version du kernel qui boot.

6. Mise à jour du bootloader

Si ça boot sans encombre il reste plus qu'à passer ça en dur.

su Je remets mon cosplay de patron.

mount /dev/sda1 /boot Je remonte la partoche de boot.

vi /boot/boot/grub/menu.lst Et j'édite la conf de grub en changeant juste le nom du kernel que je boot.

Et voilà c'est fini.

Bon de temps à autre faut penser à virer les anciens kernels de /boot et aussi les anciens modules dans /lib/modules .

21ème article d'avancement du Librem 5

Ceci est une traduction libre de cet article concernant les avancées de la société Purism concernant le smartphone Librem 5. L'article original est sous licence CC BY-SA 4.0 tout comme ma traduction.

Ce smartphone a bénéficié d'un crowdfunding et a pour but d'apporter une alternative à Android en proposant un OS basé sur Linux et toutes les briques logicielles opensource qui vont avec. Ils collaborent avec le projet Gnome, le projet KDE, UBPorts et le projet Matrix. Ils sont assez transparents sur leurs avancées et sont reconnus pour leur ligne de laptops.

Bref, voilà l'article :


Bonjour tout le monde ! Et bhé, ces dernières semaines fûrent bien remplies. Voilà un rapport détaillé des avancées faites sur les différents fronts du Librem 5.

Conférences

Diverses collaborations in situ ont eu lieu. Il y a eu un hackfest en Allemagne où une grande partie des membres de l'équipe Librem 5 s'est rendu pour bidouiller (hacker), travailler et renforcer l'esprit d'équipe. Nous avons également participé au Libre Application Summit où nous avons donné une conférence au sujet du Librem 5. C'était aussi génial d'avoir pu participer au XDC où nous avons pu avoir des discussions utiles concernant wlroots et Pengutronix.

Design

Le design logiciel avance et s'améliore afin que les devs puissent avancer. Voici certains de ces derniers designs :

Travail logiciel

Les images

Les images sont toujours basées sur Debian Buster, mais elles peuvent maintenant se baser sur PureOS. Pour décrouter un peu les images, quelques scripts SSHd pour la génération des clés ont été ajoutés à l'image et des dépendances ont été déplacés dans le paquet librem5-base.

Comme à la fois les kits de devs et les téléphones se baseront sur des cartes i.MX 8M SoM, beaucoup de travail a été fait pour rendre le kernel 4.18 compatible et construire les images pour ces cartes.

Phosh

Dans phosh, de nombreux bugs ont été corrigés et le code a été nettoyé. Des efforts ont également été fait concernant les traductions : l'allemand et le français ont été mis-à-jour, les entêtes po ont été standardisés pour simplifier le travail pour de nouveaux traducteurs.

Un premier app switcher a été ajouté ainsi qu'un premier app switcher tactile.

Capture d'écran de l'app switcher

Le panneau de tête a été nettoyé ce qui le rend plus joli et le rapprochant un peu plus des maquettes.

Capture d'écran montrant le fameux panneau ainsi que des terminaux.

Si cela ne suffisait pas, la première version (0.0.1) de phosh a été libellé !

GNOME Settings

L'application GNOME Settings commence à être porté au Librem 5 et continue d'être travaillé.

gnome-session/gnome-settings-daemon

Un bug upstream concernant le démarrage de gnome-session en mode débug est résolu.

Sur le plan des plugins il y a eu des avancées. Un premier plugin WWAN a été proposé upstream pour prendre en charge le déverrouillage de la SIM par code PIN.

Ce gnome-settings-daemon a été ajouté aux images en attendant qu'il soit intégré upstream afin de déjà pouvoir gérer le déverrouillage de la SIM.

capture d'écran du vérrouillage de l'OS demandant un code PIN

Wlroots/Keyboard

De nombreuses améliorations ont eu lieu au niveau de virtboard. Parmis les nombreuses corrections de bugs, il y a notamment eu celui concernant l'affichage et la mise à l'échelle. L'input-method-v2, la text-input-v3 et le liant ont été ajoutés à virtboard et input-method-v2 est en cours d'adoption upstream. Virtboard apparait désormais et démarre par défaut sur les images et le clavier a été amélioré pour se comporter comme on l'attendrait.

Dans le même ordre d'idée, des changements ont été adoptés upstream dans wlroots et GTK+ en plus de tout ça. Nous avons corrigé des problèmes concernant les claviers virtuels dans GTK+. Il est important que les mouvements du curseur soit traités relativement aux surfaces et pas uniquement à l'écran. Nous avons donc codé un patch à ce propos. Il y avait aussi un problème sur la génération de tag qui est corrigé et soumis upstream.

Calls

L'application Calls a connu de nombreuses améliorations récemment avec de nombreuses corrections de bugs, des avancées audio et un ravalement de façade de l'interface utilisateur. On peut désormais ouvrir le GTK+ Inspector sur la version flatpak de Calls.

Pour préparer les kits de développement, un driver dérivé de QMI pour ModemManager pour les modems SIMCom a été complété pour mélanger QMI et les commandes AT pour le streaming audio et ajouter le support des appels audio. Un paquet Debian de ModemManager a été créé et contient ces patchs pour les appels.

Puisque les modems utilisés sur les téléphones seront potentiellement différents de ceux des kits de devs, des tests sont faits sur le Gemalto PLS8.

Il y a aussi eu une refonte partielle de l'interface utilisateur avec de nombreux changements intéressants à venir !

Il y a un nouveau daemon, Hægtesse pour convoyer le flux de données audio entre le modem et PulseAudio. Le daemon est intégré dans nos images et se lance au démarrage.

Libhandy

La bibliothêque libhandy a aussi eu droit à son lot d'avancées depuis la dernière fois. En plus des corrections de bugs mineurs, deux widgets ont été ajoutés. Un widget HdyTitleBar a été ajouté pour contourner les glitches de la barre de titre et un widget HdyHeaderGroup a aussi été ajouté pour mettre à jour automatiquement tous les entêtes des barres. Le widget existant HdyLeaflet a reçu une nouvelle propriété pour plier. Pour aider la communauté à jouer avec libhandy, l'application d'exemple de libhandy a été mise à jour avec des corrections de style.

Libhandy 0.0.3 est sortie et envoyée à Debian unstable mais une nouvelle version 0.0.4 est sortie entre-temps.

C'est d'autant plus excitant de voir libhandy utilisé dans la nature. Podcasts est la première application tiers à recourir à libhandy ! Voilà une courte vidéo démontrant les avancées de libhandy et le comportement actuel.

GTK+

Notre collaboration rapprochée avec l'équipe GTK+ a amené de nombreux changements dans les séparateurs entre autre. Un bug de style sur les séparateurs selection-mode a été rapporté et l'apparence des séparateurs a été amélioré lorsqu'on sépare deux barres d'entête en mode sélection. Des corrections supplémentaires pour Adwaita concernant les séparateurs, les problèmes de barre de titre et la simplification des réglages de sélection de mode ont été intégré upstream.

D'autres corrections et des modifications de la documentation ont été intégrés upstream. Par exemple, une correction à propos de l'entrée des [numéros de séries lorsque text-input est en cours](https://gitlab.gnome.org/GNOME/gtk/merge_requests/339] (c'est un pré-requis pour le clavier).

Et si vous ne l'avez point encore lu, jetez un œil à l'article de blog de Guido Gunther à propos de GTK+ et des application id. Cela vous sera d'une aide précieuse si vous prévoyez d'écrire des applications flatpak pour le Librem 5.

Upower

Upower est un bon candidat pour devenir l'API que les autres applications utiliseront pour par exemple obtenir des informations concernant la batterie donc de nombreuses améliorations de la documentation ont été ajouté.

Contacts

L'application Contacts doit être rendu adaptive grâce à libhandy donc voilà le fork adaptif de Contacts. Des modifications ont été apportées upstream pour pouvoir être potentiellement fusionné. Une simple correction du style de séparateur et une simple correction des conditions de taille ont été soumis upstream. L'application de menu et de raccourcis des comptes online devaient également bouger.

Messaging

L'application Chatty apporte de nombreuses améliorations et changements. Chatty peut également être empaqueté dans un flatpak désormais.

La vue "en bulle" est en train d'être transformé en widget et une version basique du widget msg-list est en train d'être completée et sera prochainement inclue dans libhandy. Quelques modifications dans GTK+ étaient requis pour afficher les conversations libpurple dans des chat-lists séparées et la liste d'amis est désormais fonctionnelle !

Un plugin libpurple est à l'essai pour la conservation des messages dans une base de données SQLite. Mais pour rendre cela utilisable, il faut d'abord remplacer les fonctionnalités de journalisation de libpurple avec un sous-système capable de gérer la signalisation des SMS (envoyé/lu…). Un parser pour les fichiers de log purple a été créé pour que l'historique de conversation soit affiché dans msg-bubbles. Le parser est la solution temporaire pour afficher l'historique des conversations dans message-view pour le moment.

Nous travaillons actuellement sur la gestion des comptes. Quelques écrans de configuration ont été ajoutés pour la création de comptes XMPP et pour les activer/désactiver séparémment. Il y a aussi eu des avancées sur l'interface utilisateur Blist (formattage des entrées, icônes rondes, passer la police en gras lorsque les messages sont non lus, ajout d'un horodatage) pour améliorer l'esthétique.

Kernel/mesa/etnaviv/libdrm

Comme mentionné plus tôt, un nouveau CPU (i.MX8) sera dans les devs kits et les téléphones en lieu et place des I.MX6 initialement prévus. Du coup, il faut redoubler d'effort pour faire tourner un nouveau kernel sur ce nouveau CPU ainsi que sur etnaviv et mesa. Voilà les principaux points.

Puisque les dev kits et les téléphones auront un USB type-C avec Power Delivery, un patch a été soumis upstream pour supporter cela.

Etnaviv fonctionne quasiment avec notre couche drm (direct rendering manager, pas digital right management) sur arm64 avec un kernel 4.18. Etnaviv a été activé sur la version Debian de libdrm. Plus de décalages vers les états sensibles ont été ajouté à etnaviv pour éviter les alertes et un patch a été intégré upstream pour permettre au parser de commandes de travailler.

Notre arbre mesa est disponible en attendant que les patchs soient intégrés upstream. Les compilations aarch64 de mesa ont été amélioré. Un patch pour une vérification d'alignement a été proposé et des problèmes de mappage non mis en cache sur arm64 furent corrigés.

Nous aimerions remercier les mainteneurs d'etnaviv, du kernel linux, libdrm et mesa pour leur support puisque nous nous appuyons fortement sur ce qu'ils ont déjà construis au préalable et qu'ils sont d'une grande aide pour l'intégration upstream de ces patchs.

Fractal

Puisque nous investissons également dans l'effort de fractal pour le chiffrement de bout-en-bout (E2E pour end-to-end), nous sommes contents d'annoncer que le module E2E en développement supporte les fonctionnalités basiques désormais. Nous pouvons déjà commencer à l'intégrer et travailler dessus. Il reste beaucoup de travail à faire, mais on y arrive petit à petit.

Côté matériel

Nos ingénieurs matériel et Nicole travaillent étroitement avec l'équipe d'assemblage des devkits. Pour cela, les fichiers finaux de prototypage (de fabrication de prototype et les dessins d'assemblage de KiCad) ont été envoyé a l'équipe d'assemblage. Nicole s'est rendu à Carlsbad (Californie) pour les assister pour la fabrication, l'assemblage et les tests d'un premier ensemble de devkits pour vérifier la qualité de notre design électronique. Nous avons eu quelques soucis, comme par exemple des composants perdu lors de la livraison qu'il a fallu se re-procurer mais tous les obstacles ont été surmontés ! Si tout se passe bien avec les tests sur ces prototypes, la première fournée de devkits (qui sera livré aux backers) devrait commencer incessement sous peu.

Côté communauté

L'équipe Librem 5 continue de collaborer avec l'équipe Plasma afin de créer une image utilisable avec les devkits. Pour l'instant, des tâches Jenkins sont nécessaires pour construire les paquets Plasma nécessaires et les membres de l'équipe Plasma travaillent avec nous pour corriger les soucis.

La documentation pour devs a vu des mise-à-jour concernant GTK+ et de nouveaux exemples de code.

Puisque nous avons reçu des offres d'aide pour la traduction du système d'exploitation, nous avons monté une instance Zanata publique pour permettre à la communauté de collaborer. Pour l'instant, le projet phosh est disponible sur Zanata, les autres projets suivront (libhandy, calls, chatty, virtboard).

Un grand "Merci !" pour toutes les équipes externes qui nous ont aidé à évaluer et intégrer nos modifications dans les différents projets upstream. Le temps et les contributions de chacun sont grandement appréciées !

Merci pour tout, les gens. Continuer de nous suivre pour le prochain rapport à venir.


Heather Ellsworth

Encore un article qui résume pas mal tout ce qu'ils font un peu partout. C'est pas mal du tout, surtout d'un point de vue kernel.

Mine de rien c'est sympa de voir qu'un produit commercial va permettre à tout un écosystème libre d'avancer et de bien progresser.

Recompresser ses photos et ses vidéos

Ces derniers temps je suis en pleine migration de serveurs et donc je bouge pas mal de données. Je vous en ai parlé, j'ai recompressé tout plein de photos persos mais également les vidéos.

La compression par défaut de l'appareil photo est pas super optimisée. Et pour les vidéos c'est pire encore.

Bref voilà comment j'ai gagné énormément de place sans forcément perdre en qualité.

Avant de commencer j'ai un backup des données d'origines que je ne toucherai pas avant … longtemps.

Photos

Pour les photos j'ai fait un ptit script tout simple :

#!/bin/bash
du -ch "$1"
parallel --eta -j 32 /usr/bin/mogrify -sampling-factor 4:2:0 -interlace JPEG -colorspace RGB -quality 85 "{}" ::: "$1"/*.JPG
parallel --eta -j 32 /usr/bin/mogrify -sampling-factor 4:2:0 -interlace JPEG -colorspace RGB -quality 85 "{}" ::: "$1"/*.jpeg
parallel --eta -j 32 /usr/bin/mogrify -sampling-factor 4:2:0 -interlace JPEG -colorspace RGB -quality 85 "{}" ::: "$1"/*.jpg
du -ch "$1"

Tout d'abord il donne la taille des données, ensuite je recompresse en parallèle les photos en JPEG en bonne qualité et enfin il redonne la taille après compression. C'est plutôt rapide et simple.

Mais méfiez-vous, la commande mogrify qui recompresse, supprime le fichier d'origine (pour ça qu'il faut backup avant).

En moyenne, les photos deux fois plus légère que ce que pond l'appareil photo (les photos issues de téléphones sont déjà plutôt bien compressées).

Vidéos

Là, le processus est plus manuel. Les vidéos de mon appareil sont dans un format à la con (du H264 en preset High, enrobé dans de l'AVCHD). Et en plus j'ai une légère tendance à la tremblotte, donc quitte à réencoder les vidéos je vais les stabiliser.

Il y a donc une passe d'observation de la vidéo, puis une passe de stabilisation et encodage.

#!/bin/bash
for i in $PWD/*.MTS

do
  echo "Processing vid $i ...${i%.*}"
	ffmpeg -i "$i" -vf vidstabdetect=stepsize=6:shakiness=4:accuracy=15:result=/tmp/transform_vectors.trf -f null -
	ffmpeg -i "$i" -vf vidstabtransform=input=/tmp/transform_vectors.trf:zoom=2:smoothing=10,unsharp=5:5:0.8:3:3:0.4 -c:v libx265 -crf 28 -c:a aac -b:a 128k "${i%.*}.mp4"
	rm /tmp/transform_vectors.trf
done

Ouai… je sais… j'ai choisi d'encoder en h265… c'est un format bardé de brevets et autres saloperies made in MPEG-LA, mais l'encodage est bien plus rapide que l'AV1 ou le VP9, la qualité est top et je sais pertinemment que dans dix ans je serai capable de le décoder… Je verrai dans quelque temps si ça vaut le coup de le refaire en AV1 (j'ai toujours le backup des originaux).

Ici je conserve la vidéo originale et je vérifie manuellement que la nouvelle est bonne (la stabilisation m'inspire moyennement confiance, même si au final je n'ai eu aucun souci à déplorer). Le gain sur les vidéos varie entre 2x plus petit et 10x plus petit avec une moyenne aux alentours de 7x plus petit à qualité égale et en étant bien plus stable.

Voilà, je suis passé de près de 500Go à près de 200Go avec tout ça

Prochaine étape : l'archiver quelque part.

Reflexe Dane

J'ai déjà plusieurs fois abordé DNSSEC et une fois survolé DANE mais je vais en remettre une couche.

Bon déjà reprenons vite fait du début.

DNSSEC c'est quoi donc ?

Il s'agit d'un ajout au protocole DNS ajoutant de la crypto permettant d'assurer l'intégrité des réponses DNS. Le but est de s'assurer que les données que vous échangez avec votre résolveur sont authentiques, elles restent toute fois lisibles, le but n'est pas de rendre votre trafic DNS illisible par votre FAI ! Si vous utilisez un résolveur DNS qui valide DNSSEC vous pouvez être assuré qu'une réponse est authentique si elle a le petit flag ad (quand vous utilisez la commande dig).

Ça se base sur tout un système de crypto à base de clés publiques et privées qui sont changées régulièrement (le roll) avec deux principaux types de clés :

  • les KSK qui sont les key signing key qui servent à signer d'autre clés
  • les ZSK qui sont les zone signing key qui servent à signer les enregistrements de votre zone

DNSSEC est une chaîne, signer votre zone c'est bien mais pas suffisant. Il faut que la zone parente soit elle aussi signée et surtout il faut un ptit morceau sur la zone parente qui lie votre zone (DS). Si ce n'est pas le cas la chaîne de certification n'est pas complète et donc pas de DNSSEC.

Une fois tout ceci mis en place (c'est pas bien compliqué, franchement faite-le !), les infos présentes dans votre zone peuvent être distribuée de façon sûre. On peut donc s'amuser à y mettre des données un poil sensibles. Sensibles mais publiques. Le DNS ce sont des données publiques. Mais alors pourquoi sensibles ?

Bha sensible dans le sens où maintenant qu'on peut s'assurer qu'elles n'ont pas été alteré, ces données peuvent attester de l'authenticité d'une information (typiquement attester que tel certificat est LE certificat utilisé par un service).

DANE

DANE est exactement l'application de ce principe : le certificat utilisé par tel service est celui-ci. Le logiciel peut donc vérifier que le certificat présenté par le service est bien identique au certificat publié dans le DNS.

DANE permet donc d'assurer à un utilisateur qu'il n'est pas en train de subir une attaque de type Man-In-The-Middle.

DANE repose donc sur DNSSEC mais également sur le fait que ça doit être implémenté par chaque logiciel voulant l'appliquer (logique). Malheureusement, aucun logiciel grand public ne l'utilise. Ça serait pourtant un sacré pas en avant dans la sécurisation du web.

Le jour où Chrome l'adopte le reste de l'industrie s'y mettra mais avant… œuf/poule.

Pondons l'œuf !

DNSSEC

Et voilà \o/ DNSSEC est en place. Bon en vrai c'est un tout petit peu plus compliqué.

Avec Knot, dans votre fichier de conf où vous déclarez vos différentes zones, vous devez attribuer une politique de signature. Celle par défaut peu convenir mais perso j'ai pas envie de me faire chier à changer la KSK trop souvent donc j'ai défini ma mienne :

policy:
  - id: ecdsa
    algorithm: ecdsap384sha384
    zsk-lifetime: 7d
    ksk-lifetime: 700d
    ksk-size: 384
    zsk-size: 384

puis dans votre zone :

zone:
  - domain: lord.re.
    file: lord.re
    dnssec-signing: on
    dnssec-policy: ecdsa

Et voilà Knot va se démerder en créant les clés les faire tourner et tout.

Maintenant vous transmettez le DS chez votre registrar. Pour l'instant Knot ne va pas commencer à rouler les clés tant que le DS n'est pas publié. Une fois fait il faut lui signaler avec knotc zone-ksk-submitted lord.re.

Voilà votre zone devrait être bien signée et tout, vous n'avez plus rien à faire jusqu'au prochain roulement de KSK dans 700 jours (mettez un rappel).

TLSA

DANE c'est le gentil nom de la technique mais en vrai il s'agit juste d'un enregistrement de type TLSA dans votre zone DNS. Prenons un cas concret : lord.re .

On va utiliser le générateur habituel.

Donc là si comme tout le monde vous avez un certificat signé par LetsEncrypt, le mieux est d'utiliser un TLSA 312 qui a l'avantage de ne pas devoir être renouvelé tous les 90 jours quand le certificat est renouvelé. Les enregistrements TLSA 312 s'appuient sur la clé publique qui n'est pas modifiée à moins de manuellement en régénérer une.

Donc, il faut copier/coller votre certificat cert.pem dans l'emplacement prévu dans le générateur. Avec acme-client ça se trouve dans /etc/ssl/acme/lord.re/cert.pem .

Le numéro de port dépendra du service que vous voulez protéger par cette technique. Pour le web c'est 443 et le protocole tcp.

Et enfin entrez le nom de la machine qui héberge le service lord.re dans l'exemple.

Ça vous pond une longue ligne à ajouter à votre zone. Sur votre serveur DNS hébergeant la zone DNS vous pouvez : knsupdate
server 127.0.0.1
zone lord.re
update add _443._tcp.lord.re 600 TLSA 3 1 2 enriuetjesuisuntrèsmauvaisgénérateurd'aléatoireuirnse==

Et voilà :-)

Et maintenant on le teste sur Le webtest de sidnlabs si c'est pour un serveur web ou sur bien sur le webtest de sys4 si c'est pour du mail.

Le réflexe

Bon c'est franchement pas dur. Ça se fait en près de deux minutes.

Maintenant il faut chopper le réflexe : À chaque fois que vous créez un nouveau certificat ou que vous utilisez un certificat existant sur un nouveau service, pensez à ajouter l'enregistrement TLSA qui va avec.

Si le réflexe est adopté par de nombreux sysadmin l'implémentation par les logiciels pourrait avoir lieu un de ces jours (admirez l'optimisme).

Bon pour cet article j'ai volontairement planté mes zones DNS afin d'expérimenter et tout mais au moins c'est clean et dans ma tête et pour vous.

Gestion de l'enregistrement DS chez OVH et Online pour votre DNSSEC

Étant actuellement en pleine migration de serveur, je fais pas mal d'adminsys ces derniers jours.

Dans le lot je bouge mon serveur DNS et j'en profite pour mettre à jour un peu mes zones DNS. Et je vous ai déjà parlé de DNSSEC où je vous disais qu'à l'époque, on ne pouvait pas faire de DNSSEC avec un nom de domaine acheté chez Online. Bha maintenant on peut.

DNSSEC est une chaîne de confiance : chaque niveau hiérarchique est relié au niveau inférieur. Dans le cas de lord.re., la racine . est liée à .re et ensuite lord.re. est aussi lié à .re. . L'enregistrement DS est ce qui relie votre domaine au niveau hiérarchique supérieur.

C'est donc un enregistrement DNS particulier que votre registrar doit vous permettre de leur envoyer.

Chez OVH

L'interface d'OVH a changé il n'y pas si longtemps que ça (encore). C'est plus joli mais c'est toujours aussi lourdingue. Leur système de robot qui planifie les modifs dans quelque temps et tout et ses messages d'erreurs peu explicites sont bien chiants.

Bref voilà comment il faut faire.

  • Tout d'abord rendez-vous dans votre domaine dans leur console d'administration.
  • Ensuite, dans l'onglet DNS servers, vérifiez que les serveurs déclarés ici correspondent bien à ceux déclarés dans votre zone (dig votre.domaine NS) sinon vous aurez le droit à une erreur du robot.
  • Ensuite rendez-vous dans l'onglet DS Records.
  • Cliquez sur Edit.
  • Le Key tag est donc le tag de votre KSK pour obtenir le votre, sur votre serveur DNS lancez keymgr votre.domaine ds ce qui vous donnera 3 représentation de votre KSK. Ça a cette gueule "votre.domain. DS XXXXX 13 1 YYYYYYYYYYYYYY". Le tag c'est le XXXXX
  • Le Flag c'est le type de clé, donc 257 pour les KSK et 256 pour les ZSK mais la ZSK changeant très souvent, contentez-vous de la KSK.
  • L'Algorithm est … l'algorithme de la clé. Knot par défaut vous sort l'algorithme 13 qui est ECDSAP256SHA256.
  • Et enfin la Public key est la partie chiante à récupérer avec knotc zone-read votre.domaine @ DNSKEY qui vous listera les différentes clés dont une de type 257 qui est votre KSK, il faut donc foutre le champ assez long qui se fini par ==
capture d'écran montrant le résultat sur l'interface d'OVH

Et voilà le résultat chez OVH

Une fois confirmé, ça créer une tâche planifiée que vous pouvez accélérer histoire de gagner 24h.

Chez Online

Il y a peu c'était pas possible, mais il est désormais possible de publier l'enregistrement DS chez eux.

L'interface est plus zen et tant mieux. Il y a ce qu'il faut et pas plus. Les modifs sont quasi instantannées.

  • Rendez-vous dans la console admin de votre domaine.
  • Vérifiez dans Manage DNS servers que les serveurs déclarés ici correspondent à ce qui se trouve dans votre zone (dig votre.domaine NS @127.1).
  • Puis dans Manage DNSSEC ajoutez l'enregistrement DS
  • Sur votre serveur DNS lancez keymgr votre.domaine ds et on va considérer la dernière ligne qui est la meilleure niveau crypto.
  • Le Key id est le troisième champ de la commande.
  • L'Algorithm est à faire concorder avec ce que vous a donné la commande précédente dans le quatrième champ : vous aurez un chiffre (par exemple 13) pour savoir à quel algo ça correspond reportez-vous au tableau de l'IANA (ouai c'est dommage de pas avoir mis les numéros direct dans leur interface…).
  • Pour le Digest Type c'est comme l'étape précédente, reportez-vous au tableau IANA pour faire correspondre la valeur du cinquième champs avec le type demandé.
  • Et enfin Digest vous mettez le sixième champ.
capture d'écran de l'interface d'administration d'Online

C'est un chouilla plus simple et plus beau que chez OVH, non ?


Knot gérant toute la génération de clé tout seul, les registrars étant de plus en plus au fait de DNSSEC, il n'y a plus d'excuse de ne pas le mettre en service en 2018.

Ré-Augmentation du piratage suite à la fragmentation du marché

Hahahahahaha j'adore cette news.

Visiblement, le piratage audio-visuel reprend du poil de la bête après des années de perte de vitesse. But_why.gif

Netflix avait à peu près à lui seul réussi à progressivement tuer le piratage (notamment les torrents). Faut dire que la plateforme est super pratique, propose pas mal de fonctionnalités en plus (passage d'un épisode à l'autre automatiquement en zappant le générique, diffusion des séries par saison complète et non au compte goutte, un catalogue massif et qui se renouvelle chaque mois…) le tout à un tarif super avantageux (pour le prix d'une place de cinéma ou d'un bluray).

Naturellement, les gens ont délaissé le piratage pour se goinfrer sur cette plateforme.

Mais qu'est-ce qui a changé cette année ?

C'est pas vraiment spécifique à 2018 mais de nombreux concurrents à Netflix arrivent progressivement et chacun y va de son exclusivité pour attirer le chaland. Il faut piocher du contenu chez Amazon, chez Netflix, chez Hulu, chez HBO, chez Salto (hahahaha non je déconne) bref le marché se décentralise.

Mais du coup, personne ne peut se payer un accès à toutes ces plateformes et s'en prend éventuellement un et pirate les autres. Voilà voilà.

On était arrivé à une situation cocasse :

  • les politiciens ont rejeté plusieurs fois l'idée d'une licence globale permettant de légaliser le piratage.
  • Ensuite une boîte américaine a proposé pour un prix fixe un catalogue à peu près illimité ce qui a grandement réduit le piratage. On était donc dans une situation proche de la licence globale sauf que le pognon revenait à une boîte privée outre-atlantique.
  • Et maintenant toutes les concurrents fractionnent le marché et le piratage repart de plus belle.

Du coup, quand est-ce qu'on reparle de mettre en place une licence globale ?

Virez l'Hadopi, remettez des pubs sur les chaînes de téloche française et réallouez une partie de la redevance TV en licence globale (quitte à l'augmenter un peu au passage).

Ça n'empêchera pas les gens de se prendre des abonnements Netflix (leur force n'est pas uniquement leur catalogue mais dans la convivialité et la praticité de leur écosystème) ou autre.

Youtube : La menace des Youtubeurs

Comme je vous l'ai dit précédemment, je reviens du Festival Frames qui s'est déroulé à Avignon et où de nombreux Youtubeurs sont venus. Et du coup j'ai pas mal réflêchi à leurs soucis qui commencent à revenir de plus en plus dans l'actualité : les problèmes psychologiques liés à leur «profession».

Tout d'abord je mets profession entre guillemet parceque ça n'en est pas une. Non pas que je dénigre leur boulot mais Youtubeur n'est pas une profession. Ils ne sont pas employés par Youtube, ils ne cotisent pas pour leur retraite, ils n'ont pas de salaire régulier, légalement c'est une galère pour déclarer leurs revenus, toussa toussa. Bref ils n'ont pas de statut et pas grand monde pour les aider.

Certains commencent donc à se regrouper pour monter une structure pour discuter sérieusement de tout ça et pour s'entraider (un simili syndicat). Le but est à la fois d'aider les vidéastes directement, mais aussi d'avoir plus de poids auprès des plateformes de diffusions (Youtube en tête, faut pas se le cacher) mais aussi auprès de l'État.

Bon je suis ptêt super optimiste, mais je pense que de ce point de vue, ça va s'améliorer incontestablement. Il restera alors toujours des causes qui affectent les Youtubeurs et qui en mènent pas mal à la dépression et/ou au burnout.

Youtube est la plus grande menace des youtubeurs

Beaucoup de Youtubeurs veulent vivre de leur activité. Produire des vidéos sur Youtube, c'est pas juste se filmer avec sa webcam et uploader ça sur Youtube contrairement à ce que semble penser les professionnels de la Télévision. Une ptite vidéo navrante pour illustrer le dédain du monde de la téloche à leur encontre.

Un Youtubeur doit écrire son texte/scénar, préparer son lieu de tournage/décor, mettre en place techniquement son matériel (cadrage caméra, placement des micro… ), il doit tourner et gérer ses acteurs/lui-même, réaliser, se maquiller, puis dérusher, monter, étalonner, mixer, faire des inserts, poser un synthé, rajouter de la voix-off, pondre des schémas, illustrer, encoder, uploader, créer une vignette, rédiger une description, gérer sa communauté. Tout ce travail d'équipe est parfois fait par une personne, parfois par une dizaine de personnes et dans des cas exceptionnels par plus de monde. Et ça, ça revient vite cher avant d'éventuellement de rapporter. Pour info, une vidéo Nexus VI leur coûte près de 20 000€.

La rémunération offerte par Youtube est … ridicule, mais elle a le mérite d'exister. Seul une grosse poignée de Youtubeurs français peuvent vivre exclusivement de leurs vidéos. Grâce à cette rémunération, Youtube a su attirer de nombreux vidéastes alors devenu Youtubeurs. L'effet réseau jouant, plus il y a de Youtubeurs, plus le public grandit et avec la force du système d'abonnement Youtube, les créateurs peuvent dénombrer leur audimat et leur communauté. Ils ont un feedback quasi instantané sur leur production.

Au fil du temps, Youtube a étoffé ses services pour devenir un réseau social complet, avec des commentaires, des abonnements à des chaînes, de la notation binaire (j'aime/j'aime pas), possibilité de faire du direct… Mais qui dit réseau social, dit … les tarés. Parceque bon maintenant on le sait tous, dans le monde physique, la plupart des gens savent se tenir à peu près, mais dès qu'il y a un écran dans l'équation, les comportements changent et deviennent beaucoup plus démesurés. La modération des commentaires sur Youtube est à peu près inexistante et la prose des spectateurs arrive directement en pleine face des Youtubeurs.

Les revenus provenant de Youtube sont en fonction du nombre de vues des pubs collées à la vidéo. La moindre modif dans l'algorithme de recherche/classement de Youtube peut radicalement impacter positivement ou négativement la visibilité d'un créateur de contenu. Pire encore, même en étant abonné à un Youtubeur, un utilisateur peut ne pas être au courant de la sortie d'une vidéo (il faut cliquer la ptite cloche). Et enfin, la démocratisation des bloqueurs de pubs peut finir d'achever le tableau : pas de pub == pas de sous.

Youtube a l'énorme avantage de gérer les problèmes de copyright. Du coup, un Youtubeur peut envoyer n'importe quelle vidéo, il ne sera jamais emmerdé (au pire une suppression de son compte et voilà, pas de soucis d'ordre judiciaire). Jamais un utilisateur ne recevra de plainte pour mise à disposition d'autrui du contenu copyrighté. Youtube a l'énorme désavantage de gérer les problèmes de copyright. Du coup, un Youtubeur peut envoyer n'importe quelle vidéo, il se sera jamais assuré que sa vidéo soit disponible (la suppression ou la démonétisation est monnaie courante). Constamment, des ayants-droits (rien que le mot fait peur) peuvent à tout moment se plaindre d'une violation de leur copyright et Youtube obtempérera immédiatement sans s'assurer de la légitimité de la plainte.

Des pistes de solution ?

Bon bha je vais enfoncer une porte ouverte : la majeure partie des soucis provient du pognon.

Thanks Cpt. Obvious !

YANA

Réellement, les risques de démonétisation, la nécessité de jouer le jeu de l'algorithme (produire très régulièrement), le blocage de la pub a un impact direct sur les Youtubeurs. Ils en viennent à se surmener : Le Joueur du Grenier est l'un de ces exemples. Ils adorent créer leurs vidéos habituelles de critiques de jeu entremêlé de fiction. Mais ces vidéos leur nécessitent beaucoup de temps et il leur est quasi impossible d'en produire plus d'une par mois ce qui relève déjà de l'exploit. Mais une vidéo par mois, même avec des millions de vues, bha ça rapporte peanut du coup ils ont monté une seconde chaîne nécessitant moins de boulot avec beaucoup plus de contenu. Enfin moins de boulot, faut le dire vite : ça veut dire 4 à 5 vidéos par semaine de dix/vingt minutes sur des formats certes moins travaillés : moins d'effets, moins de fiction, moins de décor, moins artisanal quoi. Mais au final c'est ce qui leur permet de vivre et de continuer leur format de prédilection.

Bref, pour pouvoir sortir une vidéo par mois, ils doivent en sortir vingt à côté.

Cet effort n'est clairement pas possible pour tout le monde et le fait qu'ils soient déjà au moins deux (en vrai un peu plus) est probablement ce qui les fait tenir. Donc une première piste serait de savoir s'entourer et de ne pas être seul.

Trouver du pognon ailleurs

Ouai, c'est le nerf de la guerre mais il faut parvenir à ne pas compter sur les revenus directs issus de Youtube. Il va falloir monter un crowdfunding récurrent à la Tipeee et compagnie. Mais encore une fois c'est à double tranchant : ça met grave la pression.

C'est difficile moralement pour un Youtubeur de récolter mensuellement des dons s'il n'y a pas eu de vidéo dans le mois. Et dans le cas d'une donation à chaque sortie de vidéo, il y a toujours la crainte de passer pour une personne non scrupuleuse qui publie une vidéo juste pour publier et toucher la cagnotte. Dans les deux cas de figure c'est néfaste moralement.

Il existe désormais une petite aide du CNC mais qui nécessite des démarches administratives et qui ne peut représenter que 50% maximal du coût de production d'une vidéo. C'est pas un revenu fixe et assuré et seuls les plus gros seront probablement à même de la décrocher mais c'est déjà un premier pas dans le bon sens. Je vous recommande d'ailleurs cette vidéo de RealMyop qui explique pas mal ces nouvelles aides.

Ignorer et pousser à la bienveillance via la modération

Comme souvent, il y a une majorité silencieuse qui ne se manifestera jamais dans les commentaires ou les avis binaires, mais il y aura toujours la minorité bruyante qui sera toujours là pour pourrir. « C'était mieux avant ! » « T'étais plus drôle quand tu étais gros ! » « Retourne dans ta cuisine, tu racontes n'importe quoi. » Bon je vais pas tous vous les faire, hein, vous voyez le genre.

Ignorer ce genre de commentaire est plus facile pour certains que pour d'autres. Et quand bien même on parvient à ignorer ponctuellement, il est particulièrement pesant de recevoir des commentaires complètement hors-sujet sur un vidéo qui a demandé X heures de boulot et que rien de valable ne ressorte des commentaires, surtout si c'est récurrent.

La modération des commentaires de Youtube laisse clairement à désirer. Les trolls notoires agissent inlassablement en toute impunité.

Il faut réussir à impliquer votre communauté pour qu'elle rapporte d'elle-même les commentaires indésirables.

Contrer le blocage des pubs en l'intégrant à la vidéo

Ouai j'ai horreur de la pub, mais malheureusement il ne faut pas se voiler la face, c'est la seule source de revenu des youtubeurs. Donc une des solutions possible pour eux, est d'inclure la pub directement dans leur contenu.

La chaîne Linus Tech Tips fait déjà cela, en présentant un produit en début de chaque vidéo. Malheureusement ce n'est possible que parceque c'est Linus Tech Tips… une des plus grosses chaînes Youtube, qui s'est professionnalisée il y a longtemps avec sa propre régie de pub et tout. Mais pour un gros Youtubeur ou un rassemblement, c'est peut-être envisageable mais nécessitera de devoir maintenant gérer la pub plutôt que de se reposer sur Youtube. Ils ont déjà suffisamment de casquettes à leur arc.

Youtube Premium

Si vous n'êtes pas encore au courant, Youtube propose désormais un abonnement payant donnant accès à de nouvelles vidéos en partie financées par Youtube. J'imagine que pour les vidéastes sélectionnés ils ont été rémuneré réellement avec un contrat de travail et tout. Le souci vient alors de la réaction du public pas habitué à payer pour Youtube. De nombreux commentaires insultants à l'égard des créateurs ayant acceptés cela reprochent violemment ce nouveau modèle économique. « Pourquoi payer pour la même chose qu'avant ?! » C'est pas complètement faux.

Il faut bien voir que seuls quelques élus auront le droit de participer à cette aventure. Youtube tourne à perte depuis des années et ça sera très probablement le cas encore quelques années (toujours ?) et donc le budget alloué par Google pour ce service n'est pas extensible à l'infini.

À mon avis la meilleure des pistes à long terme

Passer de Youtubeur à vidéaste. Se casser de Youtube.

J'ai très brièvement abordé le sujet avec RealMyop ce week-end et sa réponse était de la forme (pas les termes exacts) : « Non pas possible, c'est là où est le public. On préfere plier l'outil pour l'adapter à nos désirs plutôt qu'adopter un autre outil. » Je veux bien l'entendre que Youtube est incontournable en 2018 et très probablement 2019 et 2020. Problème d'œuf ou de poule.

Mais en tout cas, c'est pas de Youtube qu'il faut attendre le moindre changement, leur situation de monopole est à leur avantage et la seule chose qui pourrait amoindrir leur monopôle serait la fuite de leurs créateurs.

Certe la plateforme est techniquement parfaite et en plus gratuite mais les rares alternatives sont sur le déclin et/ou à l'agonie.

Peertube ?

Ouai, ça pourrait, mais pas maintenant en tout cas. Le projet est bien trop jeune et ne propose pas suffisamment d'outil pour les vidéastes mais justement le projet est très jeune et est libre donc malléable. Mais à terme ça pourrait le faire. Un Youtubeur pourrait commencer à uploader son contenu sur une instance pour déjà tester tout en continuant son business sur Youtube.

Techniquement Peertube peut proposer des vidéos en multiples résolutions, des sous-titres, à cela on ajoute le côté p2p pour essuyer les afflux massifs ponctuels de spectateurs. Les commentaires sont gerés sur le Fediverse et mine de rien, le Fediverse possède d'excellents outils de modération (silence d'un utilisateur voir d'une instance complète, report à l'admin d'une instance…) ce qui pourrait pousser les utilisateurs à la bienveillance. Surtout que la communauté actuelle de Mastodon est bien plus moderne dans l'intolérance des propos sexiste/*phobes qu'à peu près tous les réseaux sociaux. Peertube pour l'instant ne gère pas la pub mais justement tout est faisable pour le moment et pourrait pourquoi pas proposer des trucs innovants (soyons fous : des objets en 3D WebGL des objets présents dans la vidéos pour manipuler l'objet sur le côté de la vidéo et l'acheter ou ce genre de conneries).

Bref le financement par la pub c'est bien (erf, ça me fait mal de dire ça quand même) mais clairement pas suffisant. Il va faloir trouver autre chose. Comment salarier les vidéastes ? Le revenu de base universel et sans condition. Oui mais pour l'instant c'est de la science-fiction et un peu plus ne fera pas de mal. J'ai absolument pas de solution pour ça :-/ Les politiciens ne veulent pas de licence globale (c'est dommage le succès de Netflix prouve que ça marcherait), on aurait pu l'augmenter ou ponctionner une part de celle-ci pour rémunérer les vidéastes.

Une fois la problématique pognon réglée, le plus gros souci sera de sauter le pas. Youtube a une communauté immense. Peertube… rien. Les systèmes fédérés décentralisés comme Peertube ne sont pas compris par le grand public pour le moment contrairement aux silos centralisés auxquels ils sont habitués. Il va faloir amorcer la pompe pour contrer l'effet réseau naissant.

Perso, je ne vois en Youtube Premium qu'un moyen supplémentaire d'entretenir le monopôle. Ils se sont fait bouffer la communauté gaming par Twitch sans trop s'en rendre compte et n'ont pas réussi à faire prendre Youtube Gaming. Ils voient Netflix rafler le marché des séries et tente de produire un équivalent avec Youtube Premium en attirant des créateurs dans leur giron. L'avenir nous dira si ça prend ou non.

Youtube Premium est déjà une plateforme séparée de Youtube (vu que c'est payant…), du coup il y a déjà la perte de l'audimat. Pourquoi ne pas prendre ce même risque et aller carrément ailleurs sur une autre plateforme ?

La fin Septembre 2018

Ouai le titre est nul (en vrai je l'ai pas encore écrit mais je sais pas quoi mettre donc ça sera probablement nul quand je publierai).

Bref ne perdons pas de temps en palabres, je poste un peu moins en ce moment, mais je suis pas mal occupé de trucs offline et/ou de truc pas suffisamment intéressant pour en écrire des articles. Du coup je vais faire un seul ptit article avec un peu tout ça.

Frames

Ce week-end s'est tenu le Frames Festival à Avignon. C'est une convention sur deux jours (pour le grand public) avec des vidéastes venant présenter leurs dernières créations mais aussi pour discuter en rapport avec leur domaine respectif ou carrément de création de contenu audio-visuel.

J'y allais moyennement chaud mais au final j'ai été conquis. Les intervenants sont tous supers sympas et surtout accessibles. Ils sont à portée de bras et il y a toujours moyen de trouver un ptit créneau soit pour faire sa groupie et grapiller un autographe soit carrément de discuter quelques minutes. La team de l'orga s'est vraiment décarcassée pour rendre les attentes moins longues, les lieux sont sympatoches (erf j'ai appris que le cinoche Pandora était en galère administrative, j'espère qu'ils pourront rouvrir même si je peux pas trop y aller, le concept est franchement génial). J'ai d'ailleurs appris qu'ils sont en train de monter une asso/syndicat/société de protection pour aider les vidéastes, ça a été discuté lors des journées PRO précédents le week-end. J'ai pu rencontrer dans le désordre :

  • François Descraques qui a dédicassé son livre en avant première et a pu balancer pas mal d'anecdotes croustillantes. Et ptet même qu'il va y avoir une suite à 3ème droite et ptet même que ça se lira pas…
  • Le Fossoyeur de films qui est co-organisateur de l'initiative a tenu quelques conférences toutes centrées sur la saison 3 de Twin Peaks si j'me souviens bien.
  • Son pote Patrick Baud le fameux Axolot qui a diffusé sa prochaine escale à Paris.
  • Cyrus North avec son acolyte (désolé j'ai pas retenu le nom) qui a enregistré en live un podcast avec donc Axolot et Léo Grasset de Dirty Biology sur comment survivre à une invasion zombie.
  • Flober qui a donné une bonne liste de conseil à propos de l'écriture de scénar et la diffusion de sa dernière vidéo.
  • Alt236 que je ne connaissais pas. J'ai découvert une semaine avant le festival et me suis tout tapé et suis devenu fan : il parle de cinéma, fait de la musique, relie ça à de la peinture, bref de l'art avec toujours des thêmatiques tourné vers l'étrange, le sombre, le glauque. Il est super sympa et passionné et a tenu donc une conférence sur "l'inquiétante étrangeté". Bref allez-voir ce qu'il fait. J'ai eu son tout premier autographe !
  • Realmyop, Florence Porcel, French Food Porn et Aude GG qui ont discuté des troubles mentaux des youtubeurs. Rien de bien nouveau sous le soleil et d'ailleurs je pense que je ferai un article dédié à cela mais ça va demander un peu plus de réflexions.
  • Adrien Ménielle et Jérôme Niel nous ont présenté un court métrage qui ne sera diffusé sur Youtube que dans un an. Un hommage aux séries des années 90. Franchement bien fait et hilarant.
  • La team Nexus VI qui fait l'une des meilleures chaîne francophone à mon goût. Techniquement ça claque, ça sort de la masse et en plus c'est drôle et ça parle science-fiction et visiblement j'ai des goûts cinématographiques raccords avec le Capitaine. Mais ce qui était bien c'est que c'était une apparté avec les techos du Nexus VI qui ont abordé leur façon de bosser et tout. Ils vont faire un crowdfunding en Octobre ;-) Tiens d'ailleurs, la 3D est faite sous Blender : des gens biens !
  • Une aparté avec Bruce d'E-penser on a parlé un peu avenir de sa chaîne, d'Arel3 et on a pas réussi à avoir le moindre spoiler :-(
  • J'ai découvert Romain Houles qui a récemment monté une chaîne youtube : Derrière le masque qui parle des effets spéciaux (non numériques). On a un peu discuté et du coup je ne connaissais pas encore son travail, mais j'ai maintenant vu deux de ses vidéos et c'est pour l'instant vraiment bien avec pas mal de boulot de recherche et tout.

Bon bha va falloir y aller l'an prochain ! J'ai pas pu tout voir mais bon.

Serveur

Online a récemment décidé de monter ses prix. Mais quand ils le font ils font pas semblant. Du coup je vais résilier zapp que je louais chez eux depuis quelques années. Il était clairement surdimensionné, mais il avait pas mal de stockage ce qu'ils ne proposent plus (tout du moins pas du tout dans cette gamme de prix).

Du coup je me suis trouvé un autre VPS et je vais me débrouiller autrement pour le stockage. Je suis donc progressivement en train de migrer ce qu'hébergeait zapp.

J'ai fait le DNS ce soir à base de copié/collé des fichiers inhérents à Knot de l'ancien vers le nouveau. Ensuite direction le registrar (recoucou online), où je modifie les serveurs DNS ayant autorité sur la zone pour donner le nouveau VPS. Je modifie le SOA en accord avec ça. Et d'ailleurs je remarque qu'enfin, Online permet de signer sa zone DNSSEC (enfin permet de lui passer le DS record pour fermer le dernier maillon manquant de DNSSEC). Du coup très bientôt vous pourrez chopper la zone lord.re en DNSSEC.

Il va me rester à migrer TinyTinyRSS, les mails (que je meure d'envie de dégager, je HAIS les mails) et le ptit Sandstorm.

Pour les backup je vais me débrouiller autrement.

Routeur

Vous avez probablement constaté quelques interruptions de services il y a quelques jours. Orange a décidé de modifier la façon dont ils attribuent les adresses IP. Pour les clients utilisant une box pas de soucis elle a eu une mise à jour va bien mais pour les autres… bha faut se démerder.

En gros, le DHCP répondait plus. Certains ont donc remis la livebox et ont sniffé le trafic réseau entre l'ONT et la box. Ils se sont rendu compte que l'auth DHCP avait quelques peu changé (trois fois rien mais suffisamment pour que ça soit plus compatible). Une fois rajouté une chaîne de caractère dans l'auth DHCP, pouf tout remarche comme avant.

IPv6

J'en ai d'ailleurs profité pour enfin faire marcher l'IPv6. Et pour une fois, je me suis laissé guidé par OpenWRT. D'habitude je déteste toute leur façon de faire. Ne connaissant pas trop trop IPv6 et n'ayant pas d'expérience à ce propos, bha j'ai fait à leur sauce et tout a marché en deux deux.

Du coup me voilà enfin sur l'Internet de 1998 !

Backup

Bon pour l'instant mon backup était assez simple :

  • Les données originales sont dans Bender (un serveur/nas)
  • J'ai un premier backup en tant que disque dur interne branché sur un dock USB sur Bender
  • J'ai un second backup extérieur sur la dédibox

La dédibox va dégager, il me faut donc retrouver un endroit pour le backup.

J'ai pas loin de 600Go de données dans le backup pour la très grande majorité des photos d'appareils numérique et de téléphone. La première étape a été de recompresser les photos, il faut dire que les téléphones pondent des jpeg plutôt bien compressés mais mon appareil photo pas vraiment. En recompressant les jpeg en gardant toujours une excellente qualité (comparaison côte-à-côte) j'ai pu réduire la quantité de données de moitié et suis donc à environ 280Go. Je devrais pouvoir gagner 50 Go en compressant les vidéos ce que je ferai probablement un peu plus tard en AV1. Bref la volumétrie est plus facilement bougeable.

J'ai acheté un SSD au format mSata pour 90 balles que j'ai foutu dans le Turris Omnia où il hébergera les containers LXC dont un dédié au backup. Comme ça à la maison j'aurai les données sur du ext4 mécanique, du xfs mécanique et du btrfs ssd.

Il me manque plus qu'un backup distant ce qui va se finir probablement en NAS chez ma moman.

Sécuriser le relay Weechat avec LetsEncrypt

Weechat (le meilleur client IRC de tous les temps et de loin) possède un fonction super sympa : le relay. Il permet soit à un autre client IRC de se connecter à Weechat comme un bouncer soit à des interfaces de Weechat de se connecter.

Les interfaces Weechat

Il y en a plusieurs selon les besoins.

Il y a Weechat-Android qui est pour les moins perspicaces une interface pour les smartphones Android. L'interface utilisateur est vraiment pas mal, c'est pas moche et c'est très fonctionnel.

Également vous pourriez être intéressé par Glowing Bear qui est une interface Web qui permet donc d'avoir accès à votre client favori directement dans votre navigateur. Elle possède en plus quelques ajouts sympa comme la prévisualisation des images directement dans le chat, pareil pour les tweets, les vidéos Youtube, on s'approche d'un clone systèmes de chats à la Matrix/Slack/Mattermost (comme quoi ça peut se faire via IRC également). Cette interface est en plus assez Michu-Friendly.

Il en existe quelques autres que je ne vais pas lister.

Le relay

Donc ces interfaces ne sont pas des clients IRC complets mais juste une interface utilisateur pour Weechat. Il faut donc un Weechat qui tourne dans un coin (ou ailleurs) et le configurer pour activer le relay.

Un simple /relay add ssl.weechat 5002 fera l'affaire.

Et qui dit SSL, dit certificat et compagnie donc LetsEncrypt.

Chez Alpine

Je vous ai pas assez parlé d'Alpine Linux. C'est une super distro ultra légère et tout, je vous ferai un article à ce propos un de ces quatre.

Voyons comment faire pour avoir notre petit cert en deux minutes :

apk add nginx acme-client

On conf le ptit Nginx pour qu'il puisse s'occuper tranquilou de servir le challenge LetsEncrypt. Donc dans /etc/nginx/conf.d/votre.vhost.truc.conf

   location  ^~ /.well-known/acme-challenge {
           allow all;
           alias /var/www/acme;
   }

Un ptit /etc/init.d/nginx reload (ça vous rapelle les bons souvenirs où ça marchait bien, hein les debianneux ?).

Et maintenant on crée le script qui sera exécuté chaque semaine pour mettre à jour votre certif :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
#!/bin/sh
weerenew(){
        cat /etc/ssl/acme/private/votre.vhost.truc/privkey.pem /etc/ssl/acme/votre.vhost.truc/fullchain.pem > /home/lord/.weechat/ssl/relay.pem
        printf '%b' '*/relay sslcertkey\n' > /home/lord/.weechat/weechat_fifo
}
hosts="votre.vhost.truc"
for host in $hosts; do
        acme-client -a https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf -Nnmv $host && renew=1
done
[ "$renew" = 1 ] && rc-service nginx reload && weerenew

Et vous l'exécutez et c'est tout bon, plus besoin de s'en soucier.

L'astuce réside dans le fait de concaténer la privkey et le fullchain dans le relay.pem et ensuite d'envoyer la commande /relay sslcertkey dans la fifo de weechat. Comme ça, de l'extérieur du client IRC vous déclenchez le rafraîchissement du certificat par Weechat.

Être propriétaire de son matos

J'ai toujours voulu être proprio de mon appart. Pouvoir faire les trous comme je veux dans le mur, peindre de la couleur que je préfère, avoir son ptit coin à soit. Pouvoir faire ce que l'on veut de son bien sans devoir demander à qui que ce soit la permission.

Et comme je le disais sur Masto ce matin, cette semaine les gros de la tech nous montrent leur conception de la propriété. Dans l'ordre alphabétique.

Apple

Apple s'est permis de supprimer de la bibliothèque iTunes d'un de ses clients des films qu'il avait acheté en version dématérialisée.

Apple ayant perdu les droits de diffusion en question, au lieu d'enlever la possibilité à de nouveaux clients de l'acheter ils l'ont retiré des précédents clients. Quelle idée d'acheter du dématérialisé ?! Et ils s'en sont pas vantés ni n'ont prévenu les clients impactés.

L'article de presse vous donnera plus de détails.

Google

Ensuite, continuons ce coup-ci avec une démonstration de bonnes intentions. Un ouragan terrible est annoncé sur les USA et du coup Google a eu la brillante idée d'activer à distance sur des millions de téléphones Android le mode économie d'énergie.

C'est gentil de se soucier à ce point de ses clients et de prendre de telles initiatives. Il n'y a pas vraiment de conséquences trop négatives à cette activation. Ça a été repéré sur un thread reddit.

Microsoft

Comme tout le monde vous avez acheté volontairement votre nouveau Windows 10 flambant neuf. Comme tout le monde la première chose que vous faites, vous allez sur le web pour télécharger des photos de chats et quelques petits programmes pour votre OS. Une nouvelle fonctionnalité arrivée dans une béta de Win10 veillera désormais au grain et vous demandera confirmation si par mégarde vous tentez d'installer Chrome ou Firefox ! Pfiouuuu, vous avez failli par mégarde installer un navigateur web concurrent ! Heureusement que Microsoft est là pour vous éviter cette connerie !

C'est GHacks qui en parle dans son cet article.

Tesla

Allez on s'éloigne un peu de l'informatique (mais pas trop non plus) pour aller voir Tesla ! Eux aussi, à l'approche de l'ouragan Florence ont eu la magnanimité d'augmenter gracieusement la capacité batterie de certaines de leurs voitures (celles qui sont pourvues d'une batterie plus grande que ce que le client a accepté de payer). Du coup pour fuir ça peut donner un ptit supplément d'autonomie non négligeable. Et tout ça, à distance sans avoir rien à faire.

C'est Ars Technica qui relate ça.

Est-ce qu'acheter chez ces fabricants vous rend maître de leur produit ?

On pourrait clairement se poser la question !

À distance, sans rien demander, le comportement de votre appareil est altéré en bien ou en mal. Est-ce que vous êtes vraiment proprio de votre achat ?

Ces différents exemples prouvent bien que du jour au lendemain on pourrait vous couper l'utilisation de vos appareils.

PARANO-MODE : le jour où une guerre se déclenche contre les USA, ne pourraient-ils pas tout couper du jour au lendemain ? L'Europe en est un chouilla consciente vu qu'ils ont dépensé des milliards pour monter Galileo, un système concurrent au GPS, mais pour tout le reste de l'informatique, qu'en est-il de la souveraineté ?

Notre armée n'est-elle pas remplie de Microsoft à ras-bord ? Tout comme notre Éducation Nationale. On sait bien se foutre de la gueule de la Chine, la Russie et la Corée du Nord avec leurs OS soi-disant de brics et de brocs mais au moins ils ont un début de plan…

L'article 11 et 13

Le web est en émoi : l'Europe prend la direction d'une loi qui va amocher l'Internet.

Really ?

Ouai j'ai comme un doute… Franchement cette loi elle va changer quoi ?

Article 11

L'article 11 déjà, doit aider la rémunération de la presse en poussant les gros à devoir rémunérer les liens vers du contenu issu de la presse.

Hahahahahah. Ils y croient ne serait-ce qu'une seconde ? Franchement Facebook déteste quand on pousse ses utilisateurs à aller voir en dehors de Facebook. Pour Facebook, quelqu'un qui fout un lien vers l'extérieur, c'est une publicité à l'encontre de leur business. Vous pensez vraiment que Facebook va vouloir payer pour un truc qui leur déplait ?

La presse elle par contre rêve d'atteindre l'audience de Facebook. Mais pire encore, est-ce que "la presse" (ouai c'est un peu nébuleux) est au courant des agissements actuels de Google ?

Google fait la pluie et le beau temps sur les sites ouaib. Rien de nouveau. Et en ce moment, Google pousse les producteurs de contenu à créer non plus des pages web, mais de l'AMP pour Accelerated Mobile Pages. En gros c'est du web classique, mais on vire tout le superflu comme ça c'est plus rapide. Mais ça ne s'arrête pas là. Le contenu au format AMP est alors hébergé chez Google. Le but ? Que ce soit plus rapide pour les utilisateurs.

Forcément, les producteurs de contenu AMP sont favorisés dans les résultats Google. Et vous savez est le premier producteur de contenu AMP ? La presse.

Bon du coup, la presse mange dans la main de Google, puis tente de lui cracher dessus. Sauf que là, ton contenu sera hébergé chez Google (sinon tu seras doublé par la concurrence) donc tu pourras pas te faire rémunérer et si la mayonnaise prend, tu paieras pour que Google accepte d'héberger ton AMP pour pas disparaitre.

Vous vous êtes déjà fait bananer en 2011 quand suite à un procès Google vous a déréferencé… ils ne vous ont pas pleuré eux. Pfffff

Article 13

Bon là c'est pas mieux.

En gros l'article 13 vise les grosses boîtes (pas les TPE/PME/non-lucratifs) qui seront forcées de mettre des filtres à l'envoi de données afin de vérifier que les données en questions ne sont pas copyrightées.

Cette loi vise clairement les GAFAM. Mais… heuuu… vous savez que Youtube (le G de gafam) a déjà mis un tel système depuis des années ? Concernant Facebook j'en sais rien, je les connais pas suffisamment mais même s'ils n'en ont pas, ils ont les reins suffisamment solides pour soit se payer un système comme ça, soit dédier suffisamment de main d'œuvre pour en créer un toussa toussa.

Bref ceux que vous visez s'en foutent. Ça ne serait pas le cas, ils auraient placardé de partout des appels citoyens…

Ça ne va rien changer pour eux directement. Par contre un potentiel concurrent va devoir en chier encore plus pour commencer à exister. Il devra soit se le créer à la mano ce qui est colossal pour un nouvel entrant soit aller voir les solutions toutes faites… toutes faites par Google et/ou Facebook.

Haha. Vous leur enlevez de potentiels concurrents et en plus vous leur ouvrez un marché. slow clap

Bon et en vrai est-ce que les GAFAM vont payer ?

Bha non, la presse va disparaître des grosses plateformes si elle demande paiement.

Les créateurs de contenu vont continuer à alimenter Youtube pour assurer sa publicité.


Ouai je suis mollement énervé : C'est la victoire des loosers. Franchement, pourquoi tenter de faire vivre un truc qui se tire une balle dans le pied ?

Une bonne licence globale, un revenu universel, une dépénalisation du cannabis, des transports en communs gratuits et une unification de l'Europe et la vie serait bien plus simple. Arrêtons de se faire chier sur ça.

Décortiquer une URL

Un débat sur le web est en train d'éclater.

Chrome pour fêter ses dix ans a décidé de ne plus afficher une partie des URL. Ils suppriment le fameux www dans la barre d'adresse.

C'est pour cela que ça s'insurge et compagnie, comme quoi c'est pas bien (effectivement c'est pas bien) et que c'est la faute des utilisateurs lambda qui ne savent pas lire une URL.

Voici donc un mini-cours pour savoir décortiquer une URL like a boss !

Déjà, c'est quoi une URL ?

Bon déjà URL ça veut Uniform Resource Locator donc en gros c'est un moyen uniforme de trouver une ressource. Une adresse qui pointe vers un seul truc, quoi.

C'est typiquement l'adresse d'un document trouvable sur le web (mais en vrai pas uniquement le web, mais passons). C'est ce que vous êtes censé écrire dans la barre d'adresse de votre navigateur web.

Quelques exemples :

Mais alors, c'est quoi un nom de domaine ?

Bonne question ! Le nom de domaine est un identifiant désignant un ensemble de machines. Une entité va se prendre un nom de domaine pour donner un nom à plusieurs ordinateurs. Dans mon cas, mon nom de domaine est lord.re et dedans j'ai bender.lord.re qui est l'ordi du salon, zapp.lord.re qui est un serveur que je loue …

D'ailleurs, une même machine peut-être dans plusieurs domaines. Être dans un domaine n'est qu'une vue de l'esprit, chacun pourrait s'amuser à intégrer un ordinateur distant dans son domaine : je pourrai me faire google.lord.re et faisant pointer ça vers un des ordinateurs de Google (ou ailleurs, c'est la base du phishing).

Les domaines sont hiérarchiques, ça s'écrit du moins important vers le plus important : bender est inclue dans .lord qui est lui-même inclue dans .re (calmez-vous les puristes, je sais pour le point final).

Allez, on décortique !

Exemple 1 :

On prend donc la meilleure des URL : https://lord.re/

https://lord.re/

Et voilà un "beau" décorticage !

  • le protocole parlé, généralement HTTP ou HTTPS, mais ça peut en être d'autres
  • le nom de l'ordinateur.
  • le fichier demandé (oui oui ça pointe vers un fichier particulier, ici la racine).

Bon, cet exemple est simpliste. Il y a peu d'intéret de distinguer le premier niveau du nom de domaine, vu que le nom complet de la machine est la partie rouge et bleue. Prenons en un plus complexe.

Exemple 2 :

https://gitweb.gentoo.org/repo/gentoo.git/diff/games-fps/quake3-cpma/quake3-cpma-1.48.ebuild?id=c5c0ebe77f1380487e6d61226e74ef054f285ce3

C'est similaire :

  • On est encore en HTTPS
  • Ici on parle à la machine gitweb.gentoo.org, c'est le nom de l'ordinateur qui va afficher la page web.
  • Le fichier demandé tout ce long machin. En vrai ce sont des dossiers : il y a repo dedans gentoo.git dedans diff…

Et la polémique ?

Au balbutiement du web (vers 1990), l'Internet existait déjà. Les noms de domaines existaient déjà et du coup des machines avaient déjà des noms simples à la example.org. Ils ont à l'époque rajouté un site ouaib pour example.org, pour cela ils ont installé un nouvel ordinateur sur lequel ils ont créé le site. Cette nouvelle machine a souvent été nommé www.example.org .

www.example.org et example.org sont deux machines différentes. Du coup il était courant que le web ne fonctionnait que sur www.example.org et non sur example.org. À l'époque, c'était donc nécessaire de distinguer les machines.

Le web se répandant et gagnant en popularité, il est devenu l'usage premier d'un nom de domaine. Mais par habitude, la coutume de nommer le serveur web en www.truc.machin est resté. Et maintenant, la tendance est de rediriger le trafic web de www.truc.machin vers truc.machin qui sont maintenant une seule et même machine. Mais ce n'est pas forcément vrai à 100% !

Il arrive régulièrement que www.machin.truc et machin.truc soient deux ordinateurs différents affichant des pages web complètement différentes. Une preuve ? https://pool.ntp.org et https://www.pool.ntp.org vous mèneront sur deux machines différentes avec deux sites ouaib radicalement différents.

En cherchant bien on doit pouvoir en trouver des dizaines.

Vous comprenez donc que la nouvelle idée de Google de supprimer l'affichage du www dans une URL est une hérésie. C'est comme si vous donniez votre adresse postale en omettant le numéro de rue.

20ème article d'avancement du Librem 5, le vrai

Ouai je me suis merdé la fois d'avant, c'était pas le 20ème… mais je vous jure, ce coup-ci c'est le cas !

Ceci est une traduction libre de cet article concernant les avancées de la société Purism concernant le smartphone Librem 5. L'article original est sous licence CC BY-SA 4.0 tout comme ma traduction.

Ce smartphone a bénéficié d'un crowdfunding et a pour but d'apporter une alternative à Android en proposant un OS basé sur Linux et toutes les briques logicielles opensource qui vont avec. Ils collaborent avec le projet Gnome, le projet KDE, UBPorts et le projet Matrix. Ils sont assez transparents sur leurs avancées et sont reconnus pour leur ligne de laptops.

Bref voilà l'article :


Conférences

Une partie de l'équipe Purism s'est retrouvée à l'Akademy 2018 à Vienne. Cette conférence a simplifié le contact avec les devs KDE et c'était sympa de se rencontrer en personne !

We would like to express our gratitude to @Puri_sm, not only for sponsoring #Akademy2018, but also for working with our developers so we can have a Plasma Mobile-based smartphone soon.

— Akademy (@akademy) August 20, 2018

Certains membres sont également allés au FrOSCon. Prochainement, Todd tiendra une conférence au AllThingsOpen et aussi au Capitole du Libre où François et Adrien tiendront un stand (n'hésitez donc pas à aller leur dire bonjour si vous y êtes).

We're excited to have Todd Weaver, Founder & CEO of @puri_sm, presenting at #AllThingsOpen! https://t.co/FXc3M9ENwi pic.twitter.com/piFRSZ5WOL

— All Things Open (@AllThingsOpen) August 29, 2018

Design

De nombreuses améliorations ont été apportées au prototype du shell. Ils seront bientôt finalisés ! De nouvelles icônes pointeront bientôt leur nez et nous les utiliserons dans nos builds de devs et dans les applications livrées avec le téléphone. Les nouvelles icônes de GNOME sont prévues pour la 3.32 courant 2019.

Côté logiciel

Images

Les images qcow2 sont archivées ainsi que les images brutes. Cela rend les images de machines virtuelles x86_64 plus accessible pour les plus impatients ou pour ceux n'ayant pas commandé le devkit. Vous pouvez retrouver les builds les plus récents ici. Ci-dessous vous pouvez voir une démo de la rotation sur l'image qcow2. Égalemement, quelques paquets ont été ajoutés aux images pour permettre le redimensionnement de la partition racine pour occuper tout l'espace partitionné.

Nous transformons le paquet Debian de Plasma Mobile en un dépot Git convenable pour notre système de build et nous le buildons. Ces paquets seront éventuellement inclus dans l'image Plasma Mobile du Librem 5. Nous collaborons actuellement avec les devs Plasma pour résoudre les problèmes de build restants.

Phosh

De nombreuses corrections et modifications ont été apportées à Phosh ces dernières semaines. Les calculs de la taille ont été corrigé (et par la même occasion la position du menu) sur les affichages redimensionnés avec des modes personnalisés. La traduction allemande a été mise à jour. Désormais, un login shell est utilisé lorsqu'on démarre gnome-session, ce qui s'assure que XDG_* est correctement initialisé, du coup les icones des applications flatpak sont correctement reconnues par phosh. Pour assurer la robustesse de phosh, plus d'alertes de compilations ont été activées et une partie de celles-ci ont été corrigées.

gnome-settings-daemon

Pour préparer le terrain concernant la configuration du modem, une discussion avec l'upstream a débuté afin de débattre sur la façon dont gnome-settings-daemon doit se comporter vis-à-vis des modems.

Wlroots

Wlroots crashait lorsque phosh se reconnectait mais c'est maintenant corrigé. Nous continuons de garder wlroots à jour avec les versions upstreams.

GTK+ 4 et libhandy

Puisque le compositor et GTK+ doivent travailler main dans la main, un bug a été corrigé pour faire en sorte que le app_id de xdg-shell corresponde à l'application-id de GApplication. C'est donc plus simple pour le compositor de faire correspondre les applications avec les fichier .desktop dans Wayland.

Parmis les nombreuses et récentes corrections dans libhandy, il a été fait en sorte que le build soit plus fiable en échouant en cas d'alerte. Il y a trois bugs dans GTK+ qui affectent la possibilité de créer des interfaces utilisateurs adaptive : un souci de coin non-rond, un problème d'affichage hors de l'écran et un bug qui rend parfois le séparateur transparent. Un correctif a été proposé pour le bug du séparateur. Upstream, ils continuent de travailler sur le séparateur pour ajouter un mode sélection alternatif et simplifier l'inclusion d'un séparateur ce qui est nécessaire pour avoir des panneaux proprement définis dans HdyLeaflet. En plus de ça, le runtime pour libhandy flatpak (org.gnome.Platform) a été mis à jour depuis 3.26 vers master afin d'être sur la toute dernière version.

Clavier

Concernant l'OSK, l'ensemble de patch text-input-v3 a été ajouté à wayland-protocols et gtk-3.24. Le support préliminaire de text-input-v3 a également été ajouté dans wlroots. En plus, un patch pour le protocole virtual-keyboard a été mis-à-jour et est en cours d'évaluation. Une RFC pour le protocole input-method-v2 a été posté. Préparrez-vous donc à taper sur votre clavier virtuel !

Appels et messagerie

Puisque la décision d'implémenter un backend ModemManager à l'application Calls a été prise, quelques modifications dans cette appli sont nécessaires. Pour donner plus de droits à ModemManager, des fichiers policy kit ont été créés. Pour améliorer l'interface de Calls, une partie du code de l'affichage de Calls a été nettoyé et l'interface s'approche plus du design final.

De nouvelles fonctionnalités devraient bientôt voir le jour dans l'application Messaging. Un nouveau plugin libpurple pour les SMS est en cours de dev et des tests avec la fenêtre debug de Pidgin pour vérifier que l'interface avec ModemManager fonctionne. Des progrès ont lieu concernant l'interfaçage entre les objets Chatty GTK+ et les structures et signaux de libpurple UiOps. Un article concernant Chatty − complet avec une démonstration vidéo − a été publié donc lisez-le si vous ne l'avez pas déjà fait !

Kernel

D'importants efforts ont été faits pour faire tourner le kernel 4.18 sur le devkit SoM. Afin de simplifier le débuggage des freezes du kernel, nous avons contribué à openocd pour ajouter la configuration de la carte pour le devkit et alerter quand le CPU n'est pas stoppé par l'appel phys2virt. Les gens d'OpenOCD nous ont grandement aidés pour cela !

Les efforts continuent dans le kernel concernant les autres morceaux. Nous continuons le travail sur le driver de l'alimentation électrique et du chargeur de batterie avec les devs upstreams du kernel, ce qui mènera à son inclusion prochaine. L'USB2 a été testé et fonctionne. Il y avait quelques soucis d'horloge résolu depuis et le SDMA et le RTC fonctionnent correctement maintenant.

Côté matériel

L'équipe hardware de Purism a envoyé à fabriquer les fichiers pour la fabrication des PCB et l'assemblage des prototypes. Les fichiers sont en cours d'évaluation.

Coté communauté

Un patron de rapport de bug a été ajouté aux projets phosh, libhandy, calls, chatty, docs et virtboards afin de guider les utilisateurs pour qu'ils fournissent les informations nécessaires. Pour plus d'information à ce propos, lisez notre page de doc sur les rapports de bugs.

Un grand merci à toutes les équipes externes qui nous ont aidé en évaluant et incluant les modifications dans les projets upstreams. Le temps et les contributions de chacun sont grandement appréciés.

C'est tout pour le moment. Restez connectés pour plus de nouveautés à venir !


Original par Heather Ellsworth.

Ha bha enfin ça parle un peu plus de Plasma Mobile !

Bon sinon pas grand-chose à dire. Encore une fois désolé, je pensais que le précédent article était l'avancement 20 mais non c'était un hors-série…

N'utilisez pas de lecteur d'empreintes digitales !

Une mode assez récente dans le monde des smartphones est d'avoir un lecteur d'empreintes digitales pour remplacer les mots de passe . Et si un bête malware (sous forme d'appli gratos) mimant l'allure de l'écran de verrouillage s'amusait à capturer les empreintes digitales de tout le monde et allait stocker ça quelque part pour revendre ou autre ? Probablement du pognon à se faire !

Bon j'ose espérer qu'en vrai le capteur d'empreinte ne stocke pas l'empreinte elle-même mais produit un hash de celle-ci.

D'ailleurs utiliser les empreintes digitales pour ça me pose quelques soucis :

  • Inconsciemment on laisse nos empreintes digitales un peu partout.
  • On ne peut pas changer ses empreintes digitales.
  • On ne peut pas prêter ses empreintes digitales (il y a quand même quelques cas légitimes de partage de mot de passe (avec son conjoint en cas de mort de l'un ou l'autre)).
  • On peut très facilement récupérer l'empreinte de quelqu'un.
  • On peut très facilement forcer quelqu'un à donner son empreinte.
  • On ne peut pas nier qu'une empreinte n'est pas la sienne si c'est le cas.

Bref, voilà pourquoi je n'utiliserai probablement jamais mes empreintes pour ça.

20ème article d'avancement du Librem 5

Ceci est une traduction libre de cet article concernant les avancées de la société Purism concernant le smartphone Librem 5. L'article original est sous licence CC BY-SA 4.0 tout comme ma traduction.

Ce smartphone a bénéficié d'un crowdfunding et a pour but d'apporter une alternative à Android en proposant un OS basé sur Linux et toutes les briques logicielles opensource qui vont avec. Ils collaborent avec le projet Gnome, le projet KDE, UBPorts et le projet Matrix. Ils sont assez transparents sur leurs avancées et sont reconnus pour leur ligne de laptops.

Bref voilà l'article :


Comme vous vous en êtes aperçu lors du «dernier appel» concernant les devs kits, de nouvelles spécifications ont été publiées. Je veux expliquer ce qui nous a poussé à ces spécifications et pourquoi nous avons fait ces choix et quel est le calendrier actuel pour les devkits et les Librem 5.

Nous voulons fabriquer un appareil mobile de communication sûr qui propose une expérience proche des smartphones concurrents actuels, tout en étant aussi libre et transparent que nous puissions au vu de la situation actuelle. Nous prenons le concept de «libre» et «liberté» sérieusement afin de coller au label «Respects Your Freedom» (RYF) de la Free Software Foundation (FSF). Obtenir cette certification est important et un objectif capital pour nous. Les critères de la RYF interdissent un grand nombre de matériel ce qui rend la tâche de créer un smartphone certifiable par la RYF très compliqué. Il aurait été à peu près trivial de fabriquer un smartphone avec des drivers GPU non libres et un CPU intégrant le GPU et la radio en quelques mois, mais créer un smartphone classique n'est pas notre objectif. Nous avons des ambitions bien supérieures.

Nous avons choisi de fabriquer un appareil libre. Un appareil respectant la vie privée et la sécurité de ses utilisateurs. Nous l'avons choisi car c'est un défi pour notre entreprise et pour fournir un produit se souciant réellement de la liberté logicielle et matérielle. C'est un point où nous ne ferons aucun compromis, car nous savons pertinemment que c'est atteignable.

Parlons donc de l'état actuel du projet.

La route depuis l'i.MX6 vers l'i.MX 8M

Vous vous rappelez probablement d'un article précédent où nous expliquions le raisonnement du changement de plateforme de l'i.MX6 à l'I.MX8M. Aujourd'hui, nous vous donnerons plus de détails et les avancées sur la transition en cours.

Le matériel d'un téléphone comprend un SoC (System on a Chip - un système sur une puce) et des périphériques comme les modems pour se connecter au réseau téléphonique. Début 2017, lorsque nous avons commencé nos recherches pour trouver le bon SoC, nous sommes rapidement arrivés à la conclusion que la famille NXP i.MX − avec les drivers libres Etnaviv pour le GPU Vivante embarqué − serait le meilleur choix. Le fait que le i.MX6 ne nécessite pas de firmware propriétaire pour une utilisation normale de smartphone combiné avec le driver libre «etnaviv» disponible étaient très attirant pour nous. Le fait que le SoC soit sur le marché depuis un certain temps signifie également que les drivers étaient stables et solides.

À la fin de l'été 2017, nous étions alors au courant d'une nouvelle génération de SoC "i.MX 8" dont les rumeurs prédisaient la sortie prochaine. À ce moment, nous avions déjà lancé notre campagne de crowdfunding et nous devions donc continuer sur les plans initiaux. La possibilité d'avoir un SoC bien plus récent suffisait pour que l'on contacte NXP et certains distributeurs pour avoir plus d'informations. Alors que nous continuions le travail pour les autres composants et sur l'aspect logiciel, nous avons continué de nous tenir au courant concernant les opportunités sur ce nouveau SoC pendant six mois. Nous avons pu alors obtenir un début de documentation mais pas de date de disponibilité.

Début 2018, nous avons appris que la famille d'i.MX 8 serait annoncé à l'«Embedded World» à Nürnberg en Allemagne. Du coup, après un petit hackfest en Allemagne, le président de Purism Todd Weaver et moi nous sommes rendus à Nùrnberg et avons rencontré NXP et les partenaires i.MX8. Nous avons eu le droit à une démonstration de matériel i.MX8 avec les firmwares associés pour le voir tourné. Même les derniers Etnaviv fonctionnaient déjà correctement. Nous étions excités à l'idée d'utiliser du matériel bien plus récent.

Nous étions confiants sur la capacité de l'i.MX8 pour faire tourner le Librem 5 et pour être disponible en quantité suffisante pour notre date de livraison de janvier 2019. La décision de se tourner vers un SoC de nouvelle génération apporte les avantages d'un CPU moderne de 64bits, plus de GPU sur la puce, moins de conso électrique et d'autres améliorations tout en étant toujours compatible avec la certification «RYF» de la FSF. Nous pensons que le compromis de changer de matériel vaut le coup. Le SoC n'est bien entendu pas la seule préoccupation pour le Librem 5.

L'épreuve de fabriquer un smartphone Non-Android

Fabriquer un téléphone non android faisant tourner un système d'exploitation approuvé par la FSF supportant toutes les fonctionnalités attendues (réseau cellulaire, Wifi, Bluetooth, écran tactile) requière de la recherche étant donné qu'aucun smartphone n'a obtenu la certification RYF et les découvertes impliquent de trouver des solutions à de nouveaux problèmes.

L'industrie propose tout le matériel pour créer facilement un smartphone, puisque les fournisseurs de SoC incluent un modem (cellulaire et wifi) intégré. Une simple recette : prenez un SoC, Placez-le sur un PCB, Ajoutez de la RAM et une puce de mémoire flash par-dessus (ce sandwich s'appelle un PoP : Package on Package), Ajoutez des antennes et de l'énergie. La difficulté réside dans les firmwares et les logiciels pour faire tourner le tout. Les firmwares requis sont fournis par les fabricants de puces, tout comme les drivers pour le GPU et autres. Ces logiciels sont par contre propriétaires sans code source et peu voir pas d'alternatives.

Modem cellulaire (baseband)

Le modem cellulaire est de loin l'élément le plus complexe d'un téléphone mobile. C'est le composant qui doit implémenter toute la famille de protocole de téléphonie (2G, 3G, 4G et bientôt 5G). Il le fait en faisant tourner son propre système d'exploitation comme une boîte noire. Il est couvert pas des milliers de brevets détenus par des centaines d'entités différentes. Maintenant imaginez cela : Le modem est situé sur le bus de la RAM du SoC ! Du logiciel non-libre qui a non seulement accès aux données entrant et sortant du SoC, mais avec également la possibilité de les altérer. Parce que l'OS de ce modem est une boîte noire proprio, on n'a aucune idée de ce que ce composant fait et quelles sont ses vulnérabilités.

Revenons au design du Librem 5, nous estimons que ce n'est assurément pas une bonne solution. Le modem doit être isolé du SoC pour qu'il ne puisse pas accéder à la RAM. La situation s'est compliquée, lorsque lors de nos recherches pour un modem, nous avons réalisé qu'il y a très peu de fabricant et que la quasi-totalité d'entre eux intègrent leur modem dans un SoC. Qui plus est, vous devez acquérir une licence pour faire tourner ces firmwares proprio dans un SoC.

Cela nous a donc laissé qu'un choix : utiliser un «module» de modem tout prêt et notre propre arrangement pour isoler le modem du SoC. Il existe différents modems disponibles avec différents formats et différentes spécifications de vitesse, de fréquence radio, etc. En s'orientant vers un module, nous pouvons nous fournir auprès d'un fournisseur répondant à nos critères stricts et aussi permettre une isolation entre le modem et la RAM ainsi que le CPU.

Pour isoler le modem, nous le placerons donc sur un (remarquablement rapide) bus USB et donc le téléphone interagira à travers l'USB au lieu de la RAM. Cela séparera le modem sur son propre bus sans qu'il voit d'autre données.

Modem Wifi/Bluetooth

Pour le Wifi et le Bluetooth nous collaborons étroitement avec Redpine Signal. Ils nous fourniront une solution WIFI/Bluetooth à faible conso utilisant l'interface SDIO. Nous nous sommes tournés vers eux car leurs puces ne nécessitent pas de téléchargement de firmware lors du fonctionnement contrairement à d'autres fournisseurs. Devoir télécharger un firmware violerrai les recommandations RYF de la FSF. Au final, nous pensons avoir une excellente solution Wifi et Bluetooth qui s'intègrera bien et consommera peu. Ceci souligne l'attachement que porte Purism en tant qu'entreprise à but social de pousser nos convictions du Libre et de la liberté de nos utilisateurs dans notre chaîne d'approvisionnement.

EE, ID et MD (Electronics Engineering, Industrial Design et Mechanical Design)

Pour trouver les bons partenaires pour fabriquer nos composants matériels, Todd et moi nous sommes rendu à Shenzhen en Chine il y a quelques temps. C'est l'endroit où sont fabriqués les deux tiers des smartphones ; plus d'un milliard d'appareil y sont fabriqués chaque année. C'est ici que s'est développé une chaîne logistique optimisée ces dernières décennies et où se retrouve l'expertise électronique de nos jours. Nous avons choisi cette zone car c'est ici que nous trouverions les compétences pour fabriquer les composants matériels que nous avons choisis.

Sélectionner des partenaires pour la fabrication de nos designs fait maison était un exercice excitant de part les possibilités qui vont se concrétiser. Depuis le début Avril de cette année, nous avons évalué des entreprises de fabrications et des usines intéressées pour travailler avec nous. En accord avec notre planning originel nous avons commencé avec une maison de design électronique et peu de temps après nous avons trouvé notre design mécanique et notre fabrique matérielle.

État des devkits

Si tout se passe comme prévu, nous enverrons les devkits en octobre. Nous avons conscience de l'impatience des centaines de développeurs et sommes tout aussi pressé de vous permettre de travailler sur la plateforme PureOS du Librem 5. Nous avons pas mal mis la pression sur notre chaîne d'approvisionnement pour que tout aille aussi vite que possible. Ils seront équipés des SoC i.MX 8M. L'état actuel des choses est que nous avons terminé le design et nous travaillons vers les tests d'allumage. Nous sommes fiers de vous annoncer que les devkits seront assemblés et fabriqués aux USA, plus précisément à San Diego en Californie alors que la production finale des téléphones aura lieu elle en Chine.

Avec ce nouveau SoC, les devkits auront un matériel plus récent, rapide, un GPU plus puissant (quatre cœurs au lieu de deux), 64bits ainsi qu'une consommation en baisse et moins de chauffe. Cela améliorera l'attractivité du téléphone pour ceux comparant avec la concurrence durant leur shopping.

La documentation pour développeur des devkits est presque prête et nous pensons que ceux recevant leur kit pourront commencer à écrire des applications relativement vite.

Ces trois/quatre derniers mois ont connus une grande activité ici chez Purism avec beaucoup de débroussaillage, de négociation, de répartitions des tâches − une valse avec les différents partenaires pour travailler de concert dans un effort commun de concevoir le bon produit. Mais comme vous, nous sommes impatients du résultat : un téléphone fonctionnant au Libre que nous espérons voir disrupter le marché d'aujourd'hui avec des concepts innovants tout en ayant toutes les fonctionnalités d'un téléphone d'aujourd'hui.

photographie d'une table jonché de sachets de composants électroniques

Des éléments du devkits dans nos bureaux allemands. Le design des PCB que nous construisons comprennent plus de 700 composants

État de la feuille de route du Librem 5

Abordons le planning de sortie du Librem 5. Avec les dernières informations dont nous disposons, nous envisageons un retard de production jusqu'à Avril 2019. La faute revient à un bug dans le silicium du SoC causant une surconsommation sur la batterie. Si nous sortions le téléphone en l'état, la batterie serait à cours en près d'une heure… Ce n'est pas la première impression que nous voulons donner !

L'errata de NXP (le fabricant du silicium) pour la révision en cours de vente peut se trouver ici. Plus spécifiquement, ce document où les deux problèmes affectant la gestion de l'énergie et la consommation d'énergie sont identifiés en tant que «e11174» et «e11171».

Nous collaborons étroitement avec NXP pour régler le souci. Pourquoi avril ? Nous souhaitons être réalistes dans nos projections en se basant sur quelques facteurs :

  1. Si le problème se résout d'ici décembre, ça tombe pendant les vacances de fin d'année en Europe et Amériques.
  2. Février est le nouvel an chinois et effectivement le pays tout entier est à l'arrêt pour ce mois. Ce qui veut dire que nous pouvons relancer la production en mars pour que les premières pièces sortent en avril.
  3. En interne, nous avons de nombreux plans à accorder en fonction de la sortie afin de synchroniser les relations presse, la communauté (en ligne mais également à différents évènements), nos investisseurs et autres.
  4. Nous voulons vous donner une date qui soit réaliste afin de ne pas vous frustrer. Nous voulons vous épater et pour cela nous avons besoin d'une longue période de QA (Assurance qualité). C'est pour cela que nous espérons commencer la production en avril (si nous pouvons le faire plus tôt, tant mieux, mais nous préférons ne pas faire de promesse intenable).

Vous vous demandez probablement pourquoi les plans pour les devkits ne sont pas plus impactés que ça comparé aux Librem 5. Les devkits sont faits pour être branchés et ne sont donc pas impacté négativement par les bugs dans le silicium. Ils seront donc livrés avec les puces contenant ces bugs, mais cela n'affectera pas les développeurs (puisque ce n'est pas comme si vous vouliez vous balader avec le devkit avec une longue autonomie).

Pour vous ouvrir l'appétit, admirez quelques schémas des devkits (ne les utilisez pas comme référence !) ainsi que quelques rendus 3D pour le plaisir des yeux.

un schéma de devkit assez joli où l'on voit quelques composants majeurs

Un des premiers schémas du devkit

un rendu 3D du devkit avant et arrière plutôt réaliste

Rendu 3D du devkit Librem 5 avant et arrière

Au-delà des devkits, un détail qui devrait tous vous plaire est l'utilisation d'une batterie remplaçable par l'utilisateur : contrairement à la majorité des smartphones sur le marché aujourd'hui, les nôtres n'auront pas leur batterie soudée sur la carte mère et la coque ne sera pas collée.

Les schémas du design du téléphone sont à peu près terminés et nous sommes actuellement concentrés sur l'assemblage de l'appareil. Certaines pièces font encore défaut comme le modem, mais au-delà de ça, il n'y a aucun soucis pour l'assemblage.

Nous nous sommes également affairés pour qu'il y ait aussi peu de branding que possible sur le téléphone.

L'épopée continue

Une incroyable montagne de travail a été nécessaire dans la création du Librem 5 et nous apprenons encore de nouvelles choses et faisons encore face à certains challenges. L'une des plus grandes difficulté a été l'établissement d'une chaîne de fournisseurs et collaborer avec un grand nombres de partenaires à travers le monde, trouver les bons contacts pour obtenir ce que l'on veut. On ne doit pas sous-estimer la difficulté qu'a été de créer cette chaîne d'approvisionnement. L'autre défi est de trouver du matériel compatible avec notre idéologie et la compatibilité avec le RYF de la FSF lorsque toute la chaîne d'approvisionnement est optimisée pour la réduction des coûts. Trouver des fournisseurs permettant d'éviter tout blob dans le système d'exploitation s'est révélé, incroyablement, long et fastidieux.

Nous continuerons d'avancer en comprenant mieux comment fonctionne cette partie de l'industrie. Le succès de notre téléphone est critique car il nous apportera une légitimité et nous donnera les moyens pour orienter les fabricants de matériel vers notre façon de penser en leur montrant que nous avons le potentiel d'être leader sur un marché de produits éthiques qui respectent leurs utilisateurs.

Pour ceux qui ont investi en nous et continuent d'être patient avec nous : vous avez toute notre gratitude. Pour ceux qui ont adopté l'approche wait-and-see (j'attends de voir pour juger), nous espérons que vous rejoindrez la famille Purism soit avec notre téléphone soit avec nos autres offres. Merci


Original par Nicole Faerber.

Et bha voilà ! Ils annoncent enfin qu'ils auront du retard. Bon j'imagine que ça n'étonne personne mais bon, perso ça ne me gène pas du tout. Déjà parce que c'est que quatre mois et aussi parceque ça leur permettra de peaufiner un peu plus l'OS.

En plus c'est un peu en grande partie la faute du fabricant du SoC qui a un bug matériel. Ça arrive assez fréquemment, surtout sur des designs complètement nouveaux. Bref rien de bien grave pour le moment, espérons qu'il n'y ait pas d'autres déconvenues matérielles.

Pfiouuu qu'il était long cet article. On sent qu'ils arrivent vers la fin du projet et que ça approche de la concrétisation.

Gare à vous, ils ont l'intention de vous disrupter votre marché du smartphone !

Quelques sites/outils pour améliorer votre site

Il existe de plus en plus de sites promouvant de bonnes pratiques pour le web. Ça peut être à propos de l'accessibilité, ou bien de la sécurité ou des performances.

Ils vont donc analyser votre site (ou au moins une page) et vous attribueront une note, et proposeront des conseils pour améliorer votre jouet. J'adore ce concept. Un peu de gameification (attribution du score) pour un cercle vertueux. En plus c'est généralement assez rapide et pertinent.

Donc voilà une ptite liste de différents sites du genre :

Multiples

  • WebHint : un peu de tout avec une très jolie interface et des conseils qu'on retrouve pas ailleurs. Plus poussé que les autres du genre.
  • Dareboost : Très joli et assez moderne (il gère http2 par exemple), il analyse un peu la sécurité et le SEO également.

Sécurité

  • SSLLabs : est probablement le plus connu pour juger votre mise en place de TLS. Visez au minimum du A, c'est vraiment pas compliqué et c'est gratuit et n'a aucun effet secondaire.
  • CryptCheck : moins connu mais beaucoup plus rapide et tout aussi pertinent que le précédent. Il peut également vérifier votre serveur SMTP et XMPP.

Accessibilité

  • Wave : Assez complet concernant à la fois la structure du site mais également la vérification du contraste (et là c'est dur de n'avoir aucune alerte !).
  • AChecker : très complet aussi et s'intéresse beaucoup à la norme WCAG. Dur d'avoir un site parfait également mais pas mal de ptits trucs sont corrigeables sans difficulté.

Performance

  • Pingdom : Joliment fait et permet de tester depuis plusieurs coins du globe.
  • GTMetrix : Très connu aussi celui-là et complet.
  • PageSpeed Insights : forcément c'est made in Google donc si vous voulez être bien vu, il faut avoir un bon score sur celui-là.

SEO

  • SEOSiteCheckup : J'imagine qu'il est pertinent. Perso je m'en fous un peu…
  • WooRank : À peu près pareil qu'au-dessus.

Vrac

  • EcoIndex : Celui-là vous jugera sur l'aspect plus environnemental de votre site.
  • 1and1 Website Checker : Bon ça vaut pas grand-chose mais certains conseils sont toujours bons à prendre.
  • PowerMapper : Alors celui-là c'est qu'une démo mais est pas mal complet. Il fait un peu d'analyse de perf, de l'accessibilité, de l'utilisabilité, un peu de SEO, de la conformité de syntaxe…
  • NetRenderer : Si jamais le rendu de votre site ouaib sur Internet Explorer vous intéresse…
  • HTML Validator : le classique du W3C pour valider la syntaxe de votre HTML.
  • CSS Validator : la même mais pour le CSS.
  • Down or Not : permet de tester si un site déconne pour tout le monde ou juste pour vous.

Pas du web mais du Mail

  • MXToolBox : Il fait un peu tout concernant le mail.
  • Mail Tester : est pas mal pour tester un mail avant d'envoyer dans une newsletter voir à quelqu'un point il ressemble à du spam.
  • SMTP STS Check : Pour tester votre implémentation de MTA-STS.

Pas du Mail mais du DNS

  • ViewDNS : la trousse à outil classique qu'on retrouve sur d'autres sites du même genre.
  • ZoneMaster : outil de l'AFNIC très sympas si vous avez un serveur DNS pour vérifier que la conf soit correcte.
  • DNSSec-Analyzer : Celui-là vous permettra de vérifier que votre conf DNSSec est correcte.
  • DNSViz : Assez similaire au précédent mais un peu plus graphique.

Bon avec ça, normalement vous avez très probablement de nombreuses pistes d'amélioration pour votre site et un peu aussi pour votre serveur mail. Je vais tenter de grappiller quelques points pour l'accessibilité encore.


PS : Merci à Anna, Pifyz, Pofilo, Cascador et Tuxi pour leurs propositions !

Ecometer : De mauvais à plutôt bon en paginant.

J'ai de loin maté une conf concernant le GreenIT appliqué au web. Habituellement le GreenIT est assez pipeau mais étonnamment j'ai trouvé ça plutôt cohérent.

Et du coup dans cette conf ils évoquent EcoIndex un site web analysant des pages web pour leur attribuer un score. J'adore ce genre de truc !

Ici le score se base sur la performance environnementale. La taille de la page, le nombre de requête, le nombre d'élément DOM et bha je crois que c'est à peu près tout. Bon ça vaut ce que ça vaut (si pour générer la page il faut trente secondes de génération dans le langage X, c'est sûr que l'impact environnementale sera catastrophique).

Bref, tout confiant d'avoir un bon score je lance le test et j'obtiens D avec un 44.6. Pourtant tout est bien en dessous de la médiane sauf la complexité de la page où la médiane se trouve à 603 éléments alors que j'en envoie 2431 ! Bon bha va falloir améliorer ça pour donner l'exemple.

D'où ça vient ? Tout simplement du fait que sur la page d'accueil je liste chacun des articles du site et que bha ça commence à faire. Et c'est d'ailleurs peu pertinent d'afficher des articles d'il y a plus de dix ans… Remédions à cela et vite !

Paginons !

Bon donc on va juste afficher les 20 derniers items sur la home puis mettre les habituels liens précédents/suivants et compagnie.

Dans layouts/index.html on remplace le range par :

{{ $paginator := .Paginate (where .Data.Pages "Type" "in" .Site.Params.sectionsInHomepage ) }}
{{ range $paginator.Pages }}

Et ensuite il ne reste plus qu'à rajouter les liens de pagination donc dans ce même fichier à l'endroit qui vous convient ajoutez :

{{ template "partials/pagination.html" . }}

Et voilà ? Non.

Le template de pagination made in Hugo me convenait pas du coup je l'ai retouché à ma façon donc maintenant on créer layouts/partials/pagination.html :

<div class="pagination" style="text-align:right;">{{ $paginator := .Paginator }}{{ $.Scratch.Set "CurrentPage" .Paginator.PageNumber}}
{{ if gt $paginator.TotalPages 1 }}{{ if gt $paginator.TotalPages 4 }}<a href="{{$paginator.First.URL}}" aria-label="First">««</a>{{end}}
{{ if $paginator.HasPrev}}<a href="{{$paginator.Prev.URL}}" aria-label="Previous">«</a>{{end}}
{{ range $paginator.Pagers}} <a {{if eq ($.Scratch.Get "CurrentPage") .PageNumber}}style="font-size:1.3rem;font-weight:900;"{{end}}href="{{.URL}}">{{.PageNumber}}</a> {{end}}
{{ if $paginator.HasNext}}<a href="{{$paginator.Next.URL}}" aria-label="Next">»</a>{{end}}
{{ if gt $paginator.TotalPages 4 }}<a href="{{$paginator.Last.URL}}" aria-label="Last">»»</a>{{end}}{{ end }}
</div>

Le rendu est beaucoup plus compacte que le template par défaut Hugo.

Verdict ?

Et bha c'est pas mal du tout !

  • La page d'accueil passe de 49.7Ko à 14.7Ko.
  • Le score passe à un joli A avec 77.6 !
  • Le nombre d'éléments DOM passe de 2431 à 342.

D'ailleurs dans le même genre d'idée j'ai limité le nombre d'articles dans mon flux RSS. Mine de rien rien que le flux RSS représente près de 3Go de bande passante mensuelle. En sachant que les personnes déjà abonnées au flux RSS ne seront pas impactées, seuls les nouveaux abonnés ne verront que X articles lors de l'abonnement.

  • Je passe donc de 20 à 5 articles dans le flux RSS.
  • Le fichier fr passe de 188Ko à 52Ko.
  • le fichier en de 68Ko à 16Ko.

Une très belle réduction !

19ème article d'avancement du Librem 5

Ceci est une traduction libre de cet article concernant les avancées de la société Purism concernant le smartphone Librem 5. L'article original est sous licence CC BY-SA 4.0 tout comme ma traduction.

Ce smartphone a bénéficié d'un crowdfunding et a pour but d'apporter une alternative à Android en proposant un OS basé sur Linux et toutes les briques logicielless opensource qui vont avec. Ils collaborent avec le projet Gnome, le projet KDE, UBPorts et le projet Matrix. Ils sont assez transparents sur leurs avancées et sont reconnus pour leur ligne de laptops.

Bref voilà l'article :


Aujourd'hui sera l'occasion d'avancées techniques et d'une démo de SMS et de chiffremment de bout-en-bout de messages XMPP sur l'application que nous développons : Chatty. Mais tout d'abord un peu de contexte historique…

La montée en puissance et la chute des messageries instantanées

Dans le monde d'aujourd'hui, toujours plus prompt au changement, de nouveaux produits propriétaires apparaissent chaque quart d'heure. Certains parviennent à attirer un grand nombres d'utilisateurs et survivent sur le marché pour deux années. Cependant, parfois ils disparaissent au profit d'un nouveau service plus attractif dans ses fonctionnalités ou juste par la force de leur campagne marketing. Dans le monde des médias sociaux, on a vu Myspace disparaitre dans l'indifférence lorsque les gens ont rejoint Facebook. Mais il y a eu bien plus de fluctuation dans le monde des messageries instantanées ces deux dernières décennies. Vingt ans auparavant nous utilisions ICQ jusqu'à son acquisition par Yahoo. Puis pour quelque temps, MSN et Yahoo Messenger ont eu leur instants de gloire. Le premier s'éteint en 2013, alors que Yahoo débranche son service pour ses 20 ans le 17 juillet de cette année.

Aujourd'hui WhatsApp et Facebook-messenger sont à leur pic. Mais comme les habitudes des utilisateurs changent, il est fort probable que ces services ne perdurent pas et que leur durée de vie soit similaire à leurs prédécesseurs. Aujourd'hui, les utilisateurs de Facebook-Messenger se tournent vers la messagerie d'Instagram et Telegram grignote des utilisateurs à WhatsApp et ainsi de suite.

S'échapper des Walled Garden

Les services de messagerie instantanée sont majoritairement centralisés, non-fédérés et tournent grâce à une seule entreprise. Puisque le protocole et/ou le logiciel serveur n'est pas du Logiciel Libre (où le code est disponible), les utilisateurs ne peuvent savoir comment leurs données sont utilisées. Même si le fournisseur de service ne peut pas forcément lire vos conversations lors de l'utilisation de chiffrement de bout-en-bout, il peut tout de même savoir avec qui vous discutez et à quels moments puisqu'ils gèrent vos comptes, votre liste de contacts avec toutes les métadonnées associées.

Les alternatives aux systèmes mono-fournisseur sont les systèmes décentralisés, des structures fédérées faisant fonctionner une pile logicielle complètement Libre. De nombreux serveurs relaient les informations en utilisant un protocole commun, permettant aux gens inscrits chez différents fournisseurs de communiquer ensemble. Ce type de conversation fonctionne à peu près comme les emails. Bien sûr, chacun doit avoir confiance envers son fournisseur de service pour gérer son compte mais en plus les données seront aussi manipulées par d'autres stations-relais où certaines métadonnées devront être partagées avec le serveur abritant vos amis.

XMPP (Extensible Messaging and Presence Protocol) est l'un de ces systèmes fédérés ainsi qu'un standard maintenu à long terme et bien spécifié. Inventé en 1999 par la Jabber Open Source Community pour faire de la messagerie instantanée, de la présence, du chat de groupe, de la voix et aussi des appels vidéos. De nombreuses implémentations existent. N'importe qui peut faire tourner un serveur XMPP avec par exemple Prosody. Débuté avec un client est assez simple car il existe une multitude de clients pour toutes les plateformes (Pidgin, Gajim ou Dino pour Linux; Adium et Swift pour macOS;Conversations sur Android; ChatSecure sur iOS) et il existe de nombreux serveurs XMPP publics à choisir (lorsque vous voulez choisir un serveur de la liste, vérifiez sa sécurité avec IM Observatory. Il effectue quelques connexions pour tester et évaluer le chiffrement entre le client et le serveur ainsi que le chiffrement entre serveurs).

SMS : old but gold

Aujourd'hui, la plupart d'entre nous utilisent notre banque en ligne avec son authentification à deux facteurs via SMS. De nombreux services en ligne ont également recours à ce système. Les SMS semblent archaïque, mais la réalité veut qu'ils jouent un grand rôle dans les technologies modernes. Un sondage a montré que les SMS sont le meilleur moyen pour joindre une personne avec près de 90% de taux de lecture dans les minutes suivant l'envoi. Pourquoi ? Parceque lorsqu'ils reçoivent un SMS les gens pensent qu'il doit s'agir de quelque chose d'important. Envoyer un SMS est vu comme fiable. Et franchement, j'envoie régulièrement des SMS lorsque je veux être sûre d'être lue en temps et en heure même si j'ai du wifi à portée.

“The rumors of my death have been greatly exaggerated” − Mark Twain

Donc, réellement, un téléphone comme le Librem 5 se doit d'avoir une application pour gérer les SMS.

Les SMS seront gérés par notre application au nom de code “Chatty” (le nom définitif n'est pas encore attribué), en tant que plugin pour libpurple comme interface pour ModemManager.

  • La libpurple supporte de nombreux protocoles de messagerie via des plugins et permet aux utilisateurs de se connecter à divers services simultanément depuis une seule application. Le client de messagerie ayant recours à cette lib le plus connu est Pidgin puisqu'elle a été développée pour lui.
  • Libpurple permettra ainsi à d'autres devs de créer leur propre application de SMS.

Island hopping

Au tout début, “Chatty” devait simplement être l'appli des SMS pour le Librem 5 à cause de nos contraintes de temps et nos ressources limitées.

À force d'en discuter dans l'équipe, l'idée d'intégrer le chiffrement de bout-en-bout et les SMS dans une seule application s'est imposée. C'est toujours un fardeau de devoir se rappeler quel écosystème de discussion choisir lorsqu'on veut discuter avec un ami avec qui l'on a pas discuté depuis un bail, nous nous sommes dit que l'idée d'avoir une seule appli pour gérer de nombreux services différents était une évidence, d'autant plus lorsque libpurple fait tout le boulot “gratuitement”.

Néanmoins, Chatty supportera XMPP avec le chiffrement OMEMO ainsi que les SMS lors de la sortie. D'autres protocoles comme Telegram pourrait arriver plus tard si la fonctionnalité peut s'intégrer correctement dans l'interface.

Libpurple fournit des fonctionnalités essentielles pour la messagerie instantanée en général, pas uniquement le support des protocoles. Lorsqu'un contact est choisi dans la liste, libpurple récupère les données liées à cette personne, choisi le plugin associé au protocole, établie une connexion, et émet le signal pour que l'application puisse afficher l'interface avec l'historique.

Donc, comment s'en sort Chatty ?

Pour le moment Chatty peut faire la base (ce qui est probablement le plus difficile) comme envoyer et recevoir des SMS via ModemManager et un modem SIMCOM, ainsi que des messages XMPP/OMEMO via libpurple et le plugin lurch, comme vous pouvez le voir dans la démo en vidéo :

Pour le moment, les fonctions basiques de Chatty seront étendues par l'écriture de fonctions pour lier des objets GTK+ à libpurple. Ces fonctions de callback seront enregistrés dans les structures d'interface d'UI de libpurple pour que son noyau gère les conversations, la liste de contacts ainsi que l'interface utilisateur.

Il reste un long chemin afin de rendre Chatty suffisamment utilisable pour le Librem 5. Voici certaines des tâches à accomplir en ce sens :

  • Wrapper le code des SMS/ModemManager dans un plugin libpurple (ça a déjà commencé. L'interface avec ModemManager fonctionne et sa sortie peut être vue dans la fenêtre de debug de pidgin.)
  • Stocker l'historique des messages dans une base de données
  • Créer une visualisation des messages avec le support des images et des capacités de lazy load (chargement des images que lorsque c'est nécessaire)
  • S'interfacer avec la base de données des contacts
  • Designer les écrans de gestions des comptes libpurple (pour XMPP et ceux que l'on ajoutera plus tard)
  • Implémenter le chiffrement de bout-en-bout pour les fichiers (images) dans le plugin lurch
  • Ajouter la gestion de confiance dans le plugin lurch et designer une UI appropriée

Aucun client XMPP n'était dispo pour les appareils mobiles avant la sortie de “Conversations” en 2014 sur Android. C'est d'autant plus excitant comme mission de rendre XMPP disponible sur le Librem 5. Et peut-être que d'autres protocoles seront ajoutés par la suite via les plugins libpurple.

Lectures intéressantes

Des mythes persistent concernant les performances d'XMPP. Cet article les abordent.

Daniel Gultsch a écrit un long article concernant ses efforts à lui ainsi qu'Andreas Straub pour rendre le chiffrement OMEMO disponible pour de nombreux clients XMPP. Alors qu'ils ont eu besoin de plus de deux ans, Whatsapp, par exemple, a pu déployer le chiffrement du jour au lendemain. Mais rien ne pourra mieux décrire leur épopée que la conclusion de l'article de Daniel :

“…Enabling end-to-end encryption in a homogenous environment is easier than introducing it in a heterogenous one like Jabber… However, if something is hard to achieve there are two possible approaches: Either try your best and don’t give up, or put your head in the sand and create yet another walled garden that is no different from other proprietary solutions.”

“…Apporter le chiffrement de bout-en-bout dans un environnement homogène est plus simple que dans un environnement hétérogène comme Jabber… Cela dit, si quelque chose est difficile à réaliser il y a deux approches possibles : Soit vous faites de votre mieux en vous démenant sans abandonner, soit vous vous plantez la tête dans le sable et créez un autre jardin clôt similaire à l'approche propriétaire.”


Original par Andrea Schäfer.

La démonstration est rassurante et montre un système déjà fonctionnel et compatible avec un système radicalement différent (un iTruc). L'utilisation de libpurple est bon signe car l'ajout d'autres protocoles sera plutôt aisé (que ce soit par eux ou par des devs extérieurs). Toujours pas de nouvelles concernant le kit de dev qui devraient déjà être livrés.

Je n'ai pas traduit Walled Garden car je ne trouve pas d'expression équivalente. Le walled garden est littéralement le jardin clôt. Il s'agit du principe selon lequel une entreprise enferme ses utilisateurs dans un environnement clôt incompatible avec l'extérieur (Facebook, les iTrucs, …). Pour discuter avec une personne dans un walled garden, il faut soi-même être dans ce même walled garden. On pourrait parler de «chasse gardée», de «prison dorée», bref vous voyez quoi.

Je n'ai pas traduit Island Hopping car je ne pense pas qu'il y ait d'expression équivalente non plus. Notre cher wikip nous apprend qu'il s'agit d'une stratégie militaire adoptée par les USA pour atteindre le Japon. Au lieu de traverser l'océan Pacifique d'une traite, ils ont conquis les îles sur le chemin en y établissant des bases. Donc en gros au lieu de se taper un long et incertains voyage d'une traite, il est préférable de le découper en de multiples plus petits voyages pour arriver à ses fins. Scinder pour moins se décourager.

Je me rends compte que j'ai vraiment du mal à traduire quand ça parle vraiment code. Je ne connais que les termes anglais et du coup ne sait pas faire de phrases vraiment claires. Heureusement qu'il y en a assez peu dans ces articles…

Client MPD : TSMPCD

Il y a trois mois je vous parlait de ma migration de Groovebasin vers MPD dans cet article. Et je vous avais parlé de mon Frankenscript qui me sert de client MPD. Entre temps il a changé de nom, maintenant c'est TSMPCD pour Tiny Shell Music Player Client Daemon.

C'est donc un script bash (pas pur sh) Il est basique mais avec trois objectifs.

  1. Son job est donc de faire en sorte que la playlist ne s'assèche jamais en rajoutant des morceaux aléatoires à la suite.
  2. Faire des notifs avec le titre du morceau qui démarre.
  3. Permettre de contrôler MPD avec des raccourcis basiques.

Tout repose sur mpc qui est le client mpd basique en ligne de commande. Pour les notifs c'est du dmenu avec un ptit patch pour pas qu'il prenne le focus. Le reste c'est du shell classique (en dehors du read qui n'est pas posix).

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#! /bin/bash
#Tiny Shell Music Player Client Daemon

CheckMPD(){
  if [ ! "$(pgrep -x mpd)" ]; then
    timeout 3 i3-nagbar -m "MPD n'est pas lancé"
    exit 1
  fi
}

Loop(){
  while true
  do
    CheckMPD
    if [ "$(mpc playlist | wc -l)" -lt 30 ]; then
      mpc findadd Title "$(mpc list Title | shuf -n 1)"
    fi
    if [ "$(mpc current -f %position%)" -gt 15 ]; then
      mpc del 1
    fi
    printf "\033[0;32m%s\033[0m\n" "$(mpc -w -f "[%title%] [by %artist%]  [from %album%] [ :  %time%]" current)"
    flock -F /tmp/mpdnotif.lock -c 'mpc current -f "%title% - %artist% [%track%] %album% - %date% | %time% |" | timeout 6 dmenu -g -b' &
  done
}

Input(){
  while true
	do
    read -s -n 1 input
    if [ "$input" = "n" ]; then
			mpc -q next
		elif [ "$input" = "p" ]; then
			mpc -q prev
		elif [ "$input" = "" ]; then
			mpc -q toggle
		elif [ "$input" = "h" ]; then
			Intro
		fi
	done
}

Intro(){
  printf "TSMPCD !\n-------\nSPC : play/pause\tN : next\tP : previous\tH : help\n"
}
Intro
Loop&
Input

Bon bha maintenant j'ai tenu ma promesse de le publier. Je doute qu'il intéresse grand monde cela dit. Ça monopolise un terminal rien que pour ça.

capture d'écran du script

Il gagnera pas un concours de beauté ce script

Scinder Firefox en deux versions

Tiens une autre idée que j'ai tooté ce soir.

Créer deux versions distinctes de Firefox, une version purement communautaire, sans branding et sans parternariats commerciaux et une autre avec tout le toutim.

Un peu à la manière d'un Chromium et de son acolyte Chrome nous aurions donc deux versions.

Une version Made in Mozilla Corp. avec toutes les décisions à la con : partenariat Google, partenariat Pocket (bon c'est racheté depuis mais bon), partenariat Laserlike, les DRM … bref tous les trucs qui génère du pognon et qu'il faut absolument proposer à Madame Michu. Le Firefox actuel avec ses logos et tout.

Une version Made in Mozilla Foundation sans les partenariats chiants, sans le branding, sans télémetrie, une version bien quoi. Avec 90% du dev ayant lieu ici. Les geeks se ruent ici, les Michus continuent d'abandonner progressivement le Firefox originel.

Concernant le financement de Mozilla Foundation, ça ne changerait pas, le pognon pour payer les devs et l'infra serait issu majoritairement de Mozilla Corp. mais aussi des quleques dons.

Et on fout des équipes dirigeantes différentes dans les deux entités, hein.

Ha, et je vous vois venir, « suffit d'utiliser un des forks de Firefox ! ». Oui mais non, Firefox évolue si rapidement qu'un fork n'est pas une solution à moyen ni à long terme. Ça représente trop de boulot de proprifier Firefox. Vaut mieux une version crade issue d'une version propre que l'inverse.

ZSH plus loin : ZMV

Les petites gens utilisent un environnement de bureau mais en tant que rustre, je préfère largement l'austérité d'un sombre terminal.

Vous connaissez probablement la commande mv qui permet de move un fichier. C'est bien dans 90% des cas, mais il arrive des fois que vous ayez plein de fichiers à bouger avec juste une partie à renommer. Et là c'est pas mal galère.

Vous allez pouvoir renommer les fichiers en masse avec quelques options sympatoches grâce à notre cher ZMV !

vous voulez changer un motif récurrent en début de nom par un autre (souvent je préfixe les fichiers) :

Original Renommé
XXX-fichier1.jpg YYY-fichier1.jpg
XXX-fichier2.jpg YYY-fichier2.jpg
XXX-fichier3.jpg YYY-fichier3.jpg

zmv 'XXX(*)' 'YYY$1'

 

Tout simplement.

zmv 'le_motif_quon_change(*)' '$1-cequonchange'

Pour être safe, on peut rajouter -n qui affichera les modifs devant être effectuées sans les faire. Et sinon il y a le mode interactif avec -i qui nécessitera que vous validiez chacune des modifs.

Bien entendu il y a d'autres options qui sont documentées mais celles-là devraient vous suffire.

L'extra-bonus vient du support des modifiers et du globbing de ZSH mais ça c'est pour une prochaine fois. Avec ces deux bidules supplémentaires, il est possible d'ajouter des critères pas mal du tout. ex : zmv '* *' '$f:gs/ /_' pour remplacer les espaces par des underscores. Bon j'arrive jamais à m'en rappeler, hein, mais au moins je sais où le retrouver.

PS : Pour pouvoir l'utiliser il faut ajouter autoload -U zmv dans votre ~/.zshrc.

La demoscene vol.4

Plus de trois quatre mois depuis la dernière fois, réparrons de suite ce méfait ! Et en plus maintenant c'est dans la section shares :-)

Bon donc voici une sélection de démo sans contraintes sur PC.

Ziphead by CNCD & Fairlight

Allez on commence direct par un sacré coup de cœur.

Capture d'écran de Ziphead

Ziphead by CNCD & Fairlight

Rien que pour la musique celle-là vaut le détour. Elle peut passer en boucle sans soucis.

Et graphiquement elle en fout plein les mirettes, bon par contre ça clignote pas mal, si vous y êtes sensibles évitez ptet. La synesthésie est totale, les couleurs pimpantes, techniquement sans contraintes (en dehors du temps réel bien entendu) et du coup ils y sont allé à fond.

J'ai dit que je l'aimais ? Elle a fini première en pc demo compo à la Revision 2015 et bon bha … ça le mérite quoi.

Lifeforce by ASD

Plus atmosphérique, posée, poêtique. Celle-ci est un classique, arrivée première lors de l'Assembly 2007 en pc demo compo.

Capture d'écran de Lifeforce

Lifeforce by Andromeda Software Development

Malgré les années qui commencent à s'accumuler elle est toujours bien même sur l'aspect technique. Le dézoom infini à la fin fait toujours son ptit effet !

1995 by Kewlers and MFX

On remonte encore d'un an ce coup-ci pour une démo qui n'a fini que troisième lors de l'Assembly 2006.

Capture d'écran de 1995 montrant des boules avec du raytracing

1995 by MFX & Kewlers

C'est une démo hommage à l'année 1995. La musique est géniale en flirtant avec le chiptune avec par-dessus un soupçon de vocoder.

Graphiquement on retrouve pas mal de motifs d'époque : des formes 3D simples, défilement d'étoiles, nuages de points, lumières volumétriques, des tunnels, des greetings, des images en surimpression avec du texte en "dessins bizarres" et des bouboules tout en raytracing. Bref un hommage aux anciennes démos.

Je dois d'ailleurs avouer que les modèles 3D composés de ptits cubes de tailles différentes ce qui crée un effet "d'antialiasing volumétriques" (je sais pas trop comment l'expliquer) me laisse moite.

J'ai toujours trouvé bizarre qu'elle ne soit pas parvenue à être première, la concurrence devait être sacrément rude cette année.

Second Reality by Future Crew

Bon là c'est la légende des démos. Une des plus connues. Mais je l'aime pas trop pour autant.

capture d'écran de second reality d'un monstre avec une loupe devant

Second Reality by Future Crew

Elle a un peu trop vieilli à mon goût. Il y a toujours quelques effets sympathiques, mais la musique m'est difficilement supportable.

Bon faut remettre ça dans le contexte de l'époque, Windows 95 n'était pas encore sorti, Linux n'était pas l'ombre de ce qu'il est maintenant. Du coup ouai pour l'époque, sortir une simili ville en 3D avec une caméra qui virevolte, un ptit effet de raytracing, une simulation de flotte 3D ça devait effectivement être assez impressionnant. Par contre qu'est-ce que ça manque de rythme… ce générique qui dure aussi longtemps que la démo…

Bref il faut la voir une fois pour la culture mais désormais… c'est vieillot. Il existe un documentaire à son sujet visible sur youtube.

Google Will Eat Itself

Ça faisait un moment que je le recherchais ce site. Perdu au fin fond de ma mémoire impossible de remettre la main dessus. Et là pouf, une lueur venue de nulle part et pouf j'ai pu retrouver ce maudit site !

GWEI est à mi-chemin entre la blagounette, l'œuvre artistique de génie et le plan machiabolique. Le concept est simple : ils ont monté quelques sites plus ou moins bidons avec des pubs AdSense dessus. Avec le pognon que Google leur donne (pour l'affichage et le clic sur les pubs), ils achètent des actions GOOG en bourse.

Ils se servent du pognon que Google leur donne pour racheter Google ! Pure Genius !

Bon en pratique ils sont pas près d'atteindre leur but mais c'est franchement marrant comme concept. Ils ont montré deux trois preuves de leurs méfaits que l'on retrouve sur leur site. Ça s'est monté en 2005 et c'est vrai que depuis c'est assez calme. J'imagine que le site continue d'exister mais que c'est désormais au point mort vu que les pubs ne rapportent plus rien.

Mais s'ils n'ont pas dilapidé leurs actions elles doivent valoir bien plus qu'à l'époque. Il y a bien un endroit où c'est marqué qu'au cours actuel ça représenterait pas loin de 400K$, mais est-ce tout de même à jour ? Bref toujours est-il que cette initiative est pour le moins drôle.

Ha ouai j'allais oublier : http://gwei.org/index.php

Ouverture Des Commentaires

Ceux qui lisent jusqu'en bas des articles ont dû voir que depuis hier, ça y est, il y a moyen de commenter.

J'ai donc installé une ptite instance Isso qui gère les commentaires. C'est un système auto-hébergé en python qui stocke les commentaires dans une ptite base de donnée SQLite.

Ces commentaires ne sont donc pas stockés ailleurs que chez moi, vous n'êtes pas plus traqués qu'avant. Ça repose bien entendu sur javascript, sans ça vous les verrez pas.

Les commentaires ne sont pas modérés à priori cela-dit, si du spam apparaît, je passerai en modération à priori ce qui nécessitera que je les valide un par un.

J'espère que ça insufflera un peu de vie et d'interaction.

Comment ça a été mis en place ?

La doc sur le site d'Isso est plutôt claire et suffisante.

J'ai donc créé un user dédié, installé isso via pip, créé un ptit fichier de conf, créé un vhost avec son certif x509 pour TLS, ajouté deux lignes dans le template hugo pour avoir le html et le script js qui va bien.

Et voilà ! Et bha non. Ça marchait pas.

Le souci vient du fait que Isso se protège en acceptant les commentaires que du site que vous définissez dans la config. Or le site et isso se trouvent sur la même machine mais tous deux derrière un reverse proxy où se trouve du NAT. Donc isso ne pouvait pas se connecter à https://lord.re/ nativement (via l'ip publique).

Il me manquait un peu de Hairpinning sur le routeur. En gros dans mon LAN mes machines discutent entre elles avec des adresses IP locales en 10.0.0.0/8. Par contre quand sur mon LAN je tente de me connecter à lord.re les machines tentent de se connecter à 92.167.84.9. Or, depuis mon LAN cette IP n'est pas renatté vers l'intérieur… Un ptit coup de /usr/bin/iptables -t nat -A POSTROUTING -s 10.0.0.0/8 -d 10.2.0.51 -p tcp --dport 443 -j MASQUERADE et le tour est joué. Tout mon LAN peut désormais accéder à https://lord.re sans recourir à du bidouillage dans /etc/hosts.

Et là comme par miracle Isso a accepté de fonctionner. Et du coup c'est Arnauld qui nous a gratifié d'un premier commentaire :-).

Vacances en Angleterre

Je viens de passer deux semaines sur le territoire de notre chère Grande Bretagne. Pas de programme bien établi : l'hôtel pour les quatre premières nuits réservées deux jours avant et c'est tout ce qui était prévu. Plutôt que de faire un roman je vais plutôt faire une longue liste de pensées concernant tout ça.

Random facts

  • Wharf est un mot anglais mais aussi un mot français pour embarcadère. Et il y a pleins de wharf à Londres.
  • Beaucoup de magasins ont leur "café" à l'intérieur. J'imagine que les Britains se déshydratent très vite ! Certains magasins ont même leur machine à café à disposition où tu remplis ta propre tasse et hop c'est gratos. Ha non c'est gratos que si tu as la carte de fidélité mais comme on te la demande pas…
  • Tiens un truc un peu déroutant : j'ai l'habitude de ne boire quasi exclusivement que de l'eau du robinet. Généralement pas de boisson et encore plus rarement de l'alcool. Du coup quand au restau tu demandes de l'eau du robinet, on t'apporte un verre. Mais on t'apporte pas la carafe. Moi qui aie l'habitude de boire près d'un litre par repas c'est pas pratique. Mais généralement quand tu redemandes une seconde fois de l'eau on t'apporte la carafe. C'est d'autant plus gonflant quand tu as marché toute la journée et que c'est la canicule. Haha non je déconne au plus chaud il a fait 24°c alors qu'en partant de la maison on avait le droit a de jolis 36°c. Le retour est d'ailleurs assez nocif quand tu sors de l'avion et que tu te demandes si tu crèves de chaud parceque tu recommences à bouger après deux heures d'oisiveté ou si c'est juste la chaleur ambiante.
  • Les Fish'n'Chips ? Le pinacle de la gastronomie anglo-saxonne. Mouai je vais retourner bouffer de la grenouille (non quand même pas).
  • Tant qu'à parler bouffe : ils sont constamment en train de grailler des chips (pas des frites). Je pensais pas ça si populaire.
  • Malgré les polémiques comme quoi AirBnB augmentent les loyers pour les autochtones et compagnie, bha si tu veux partir en ayant encore un peu d'argent t'es presque obligé d'y recourir. Pioncer à Londres coûte super cher ! C'est près de trois fois moins cher que l'un des hôtels les moins chers de Londres (certes c'était pas un super quartier mais tout de même à 2minutes à pied d'une station de métro). Et c'est également moins cher que les dortoirs d'auberge de jeunesse. Et c'est à peu près pareil pour Oxford : on s'est retrouvé dans une guesthouse à 70£ la nuit, les prestas étaient vraiment bas de gamme…
  • S'il ne pleut pas, prenez des photos quand même, vous trouverez des tutos pour rajouter des nuages en retouches pour que ça ait l'air plus réaliste. D'ailleurs la pluie ça va ça vient, dans la même journée il peut faire bien moche, beau puis rebien moche. D'ailleurs si la météo indique des précipitations de 2.2mm en une heure, ce n'est pas la quantité d'eau qui tombe qui est indiquée mais l'épaisseur nécessaire du K-Way pour rester à peu près sec. Bref c'est la Grande-Bretagne à juste titre.
  • Les chiottes sont souvent étrangement placés dans les restaus et compagnie. Prévoyez un peu de temps pour y aller. Vous allez passer une porte indiquée "Loos" et là c'est parti pour l'aventure : une bifurcation, on monte trois marches, on passe pas la porte des cuisines mais la porte juste après, là on descend un étage sur un escalier moquetté, il commence à faire sombre là le couloir se sépare en deux mais tu as pas d'indication, tu choisis au hasard et avec un peu de bol tu trouves les gogues. Bref une vraie épopée d'où l'on ressort grandi et soulagé.

Londres

Boutiques / visites

  • Tu croises toujours les mêmes boutiques et les mêmes restaus constamment aussi bien à Londres qu'à Oxford. Et pour les pubs c'est presque pareil, beaucoup sont la main mise de Greene King.
    Un ancien pub de Londres le Prospect Of Whitby

    Il est vraiment beau celui-là, non ?

  • À Londres tu peux pas faire dix mètres sans avoir un Starbucks.
  • Le fameux musée Madame Tussauds : la gestion de la file d'attente est vraiment bien pensée avec des billets donnant une heure d'entrée du coup tu fais presque pas la queue (ne surtout pas venir en avance ça sert à rien). Par contre le musée en lui-même… On te prend vraiment pour une vache à lait ultime. À peine fait dix mètres qu'on tente déjà de te vendre du popcorn et autre chinoiserie en plastoc. Cinquante mètres plus loin on veut te vendre pour 5£ un accès à une section optionnelle du musée. Dans mon cas c'était Alien, comment résister ? Allez on raque pour ça, on a le droit à un Fassbender livide puis des "animacteurs" tentant de mettre l'ambiance en gueulant parcequ'on se fait attaquer, une ptite photo souvenir, puis on te fait rusher dans deux salles où tu vois un random cadavre le dos explosé et subrepticement un alien que tu as absolument pas le temps de regarder (ni même prendre en photo) et … bha voilà, c'est tout pour la partie optionnelle. L'arnaque. Tu continues de déambuler dans le circuit du musée avec du Marvel et du Star Wars (ptain que j'en peux plus de Star Wars). Encore des boutiques de popcorn tshirts et débilleries, un ptit court métrage en «"4D"» sur du Marvel avec une esthétique cheapos as fuck et une simili-histoire naze. Tiens pour 5£ par personne tu peux aussi avoir une extension dans le thème Sherlock Holmes version Guy Ritchie : Nope me suis déjà fait arnaquer une fois. Encore deux trois salles et hop tu as le droit au shop officiel. C'est déjà assez cher en lui-même l'entrée du musée. Bref j'en attendais rien et j'ai quand même été déçu. L'impression d'être un porc amené à l'abattoir, faut serrer les miches et courir si tu veux repartir avec ton lard. (C'est d'ailleurs marrant de voir l'engouement des gens pour foutre leurs doigts dans le nez de Trump)
  • Allez passons à la Boutique 9 ¾. Pour ceux qui savent pas c'est une boutique Harry Potter dans la gare de Kings Cross. Alors déjà tu peux faire la queue pour prendre la même photo que tout le monde en train de t'emplafonner avec ton caddie et ta valise avec quelqu'un te zigouillant avec ton écharpe marron dégueulasse. Ensuite tu as le droit de faire la queue 20 minutes pour pouvoir rentrer dans la boutique. Et c'est juste une boutique dans une gare, donc vraiment pas grande, pas spécialement adaptée pour contenir beaucoup de monde, donc il y a du personnel pour attendre que les gens sortent pour faire rentrer les nouveaux mais malgré ça la boutique est BONDÉE. Et dedans… ça pue le cheapos de partout. Avec des goodies à la qualité plus que déplorable de partout avec des prix plutôt élevés avec en prime les gamines hystériques en train de prendre tout en photo tout en bousculant tout le monde en criant "OMG OMG OMG" (Je suis d'ailleurs probablement sur quelques-unes de leurs photos en les regardant bien méchamment). Bref nul à chier (mêmes selon les dires d'une fan).
    Clocher de la gare Saint Pancras

    Clocher de Saint Pancras qui se trouve juste à côté de la gare Kings Cross.

    L'intérieur de Saint Pancras

    C'est beaucoup plus beau que Kings Cross.

  • Continuons le tour des boutiques pour fan : le Who Shop. Une expérience radicalement à l'opposé d'Henry Potier. La boutique est certe petite et assez excentrée (faut prendre le métro un ptit moment) dans un quartier bien moins huppé mais c'est tellement plus agréable. J'en ai pas parlé avant mais au moins ici le personnel est agréable et comprends que parler un peu moins vite quand on a des frenchies en difficulté ça aide à se faire comprendre. La boutique est calme, tu peux reposer ton armure et prendre le temps d'observer tous leurs goodies. Et là il y a de quoi faire, ça oscille du truc tous pourris en plastoc qui vaut rien à l'authentique Dalek grandeur nature ainsi qu'un authentique Tardis (pas grandeur nature car l'intérieur n'est pas plus grand :-( ) ayant eu son heure de gloire dans quelques épisodes. Il y a tout une collection de photos dédicacées, quelques vêtements ou des trucs plus artisanaux. On ne peut prendre de photos qu'avec l'accord du personnel qui aura alors la joie de faire un peu de mise en scène, allumer le Dalek et tout. Franchement génial. Et pour 3£/personne vous pourrez accéder à un ptit musée collectant de nombreux costumes ayant servis pour divers épisodes aussi bien pour la première série que pour la seconde. Ratez pas les photos ! On a craqué pour un Dalek tricoté habillé en David Tennant ainsi que pour un ptit Tardis métallique. D'ailleurs on s'est rendu compte après coup que l'on avait pas payé l'accès au musée… chacun pensant que l'autre avait payé. Mais à notre décharge c'est la faute du vendeur qui a passé plus de temps à nous faire prendre la pose dans le Tardis qu'à prendre notre pognon !
    Dalek ayant servi dans la série dans le musée Dr Who

    EXTERMINATE !

    Un Masque de Ood avec sa boule

    Un fameux Ood (ou spaghet-chatte)

  • L'organisation du Madame Tussauds est mieux que le musée lui-même, par contre pour le London Eye (la très grande roue sur la Tamise) c'est l'inverse. On avait également des billets avec une heure indiquée mais tout le monde s'en fout. Et quand je dit qu'ils s'en foutent, ils n'ont même pas scanné notre billet, on aurait pu rentrer gratos. Et par contre Coca-Cola est passé par là et s'est payé du branding pas possible. Tu as des logos de partout. Beurk. Je suis vraiment plus habitué à la pub. Et pendant la file d'attente tu as un ptit stand photo sur fond vert où tu dois te justifier pour pas être pris en photo… Heureusement que l'attraction est vraiment bien. On voit vraiment bien la ville, le tour n'est ni trop court ni trop long. En plus la météo était pas trop dégueue. On est pas trop quiché dans la cabine par contre le vertige peut en bloquer certains.
    La gare London Bridge vue depuis le London Eye

    On croirait un train électrique.

    Déjà que ce manège est haut, le London Eye est vraiment _très_ haut

  • Si vous êtes fans de Goodies et compagnie en plus des boutiques évoquées plus haut, il y a le Noble Collection qui propose pas mal de trucs. Et à peine plus loin Forbidden Planet et là c'est mi-librairie mi-paradis : de la figurine, des porte-clés, des jeux, des bouquins, des frusques, des casquettes… allez-y sans le porte-monnaie.

Quartiers

  • Canary Wharf est un quartier ultra moderne avec tous pleins de gratte-ciels. Ça en construit d'ailleurs plein d'autres (dont une massive qui n'est pas près de se terminer toujours dans le même état d'avancement que sur la photo de 2010). En sous terrain il y a un centre commercial et tout le toutime. J'aime beaucoup ce côté ultra moderne.
  • BigBen est en travaux :-/ . Les échafaudages sont magnifiques. On a quand même pu voir l'horloge.
    Big Ben complètement recouvert d'échafaudage

    C'est pas super photogénique.

  • Si vous savez pas quoi faire : balade à pied sur la rive nord de la Tamise de Canary Wharf jusqu'à Hyde Park. Vous aurez mal aux pieds et serez fatigués mais c'est super. Vous commencez donc au pied de tours immenses, puis dans des quartiers résidentiels bien calmes avec des immeubles aux tailles plus raisonnables ensuite vous aurez droit aux immeubles sortant tout droit de la révolution industrielle (bonus point si le ciel est bien grisâtre, vous pourrez siffloter du Sweeney Todd ou bien les ziks de Sherlock Holmes de Guy Ritchie (enfin made in Hans Zimmer quoi). Vous déboucherez ensuite sur une ptite enclave non loin de l'auberge Dickens toute mimi (avec sa bouffe meh). Quelques pas plus loin vous aurez le fameux London Bridge à bascule qui a une putain de classe malgré sa cohorte de touristes sortant de la Tower of London juste à côté. À cet endroit vous aurez un point de vue extra-ordinaire avec donc une forteresse moyen-âgeuse et dans le fond les tours flambant neuve de La City. Après une ptite pause bien méritée, continuez vers Cannon Street puis la Cathédrale Saint-Paul faisant passer notre Panthéon Parisien pour un jouet. Ensuite vous arriverez dans les parcs de notre chère Reine avec sa modeste bâtisse en bout que vous contournerez pour aller à Hyde Park. Et hop une journée bien remplie de photo.

    Un ptit cottage au beau milieu de la nature d'un parc

    Franchement qui ne voudrait pas habiter là-dedans ?

    Un wharf résidentiel très industriel

    Moins sexy que le cottage.

    Saint Katharine Docks Marina

    Vous voyez l'immeuble dans le fond ? C'est la tour où se déroule The IT Crowd.

    Le Royal Albert Hall

    Le Royal Albert Hall où allait se dérouler le BBC Proms. Grande salle de spectacle.

  • Architecturalement parlant c'est génial. Contrairement à Paris où vous avez soit de l'Haussmanien super joli mais vite ennuyeux soit du moderne pas terrible terrible, à Londres il y a du victorien ultra joli et surtout bien moins répétitif que l'Haussmanien. Mais il y a aussi des tours pas toujours superbes mais quand même globalement pas moches (j'ai un faible pour le Gherkin).

    Le Gherkin

    Gherkin veut dire cornichon, j'ai adopté ce surnom.

    Vu du pied de la Tower of London vers La City

    Ce contraste ancien/moderne.

  • Les entrées de métro sont presque toujours au pied des immeubles, dans les immeubles, pas un escalier dans le trottoir qui prend de la place et tout. C'est un détail con mais c'est pratique en ne bouffant pas de la place sur un trottoir pas toujours large.

  • J'imagine que c'est parceque c'était août mais Londres est quand même pas mal calme. En dehors des quartiers d'affaires et/ou ultra touristique tu peux discuter dans la rue sans hurler, marcher sur la route et t'arrêter prendre une photo, trouver des quartiers avec absolument pas de voitures.

  • Gringotts (banque d'Harry Poteux) se trouve être la Australia House et n'est donc pas visitable.

  • Il y a un Tardis stationné à la sortie du métro Earl's Court comme ça tout seul. Personne n'y prête attention. D'ailleurs étrangement les boutiques de souvenirs affichent toutes leurs merdiers Harry Potter, ou bien des drapeaux, des assiettes avec les deux zigottos qui se sont mariés récemment (je dois avouer ne pas savoir exactement qui c'est, car je m'en fous, mais je m'en fout royalement (Badum Tss)), tous pleins de trucs à l'effigie des émojis (sisi je vous jure !) mais globalement rien de Doctor Who. Doctor Who est apparemment moins populaire que je ne le pensais.

    Le Tardis d'Earl's court

    Ouai ouai tout le monde s'en fout !

  • La rive sud de la Tamise est super sympa à parcourir aussi. De l'Ouest à l'Est vous aurez le droit aux parties de Bonneteau sur le Westminster Bridge, le London Eye, quelques salles de concert et autre théâtres, un bâtiment IBM (un datacenter ? possible vu l'allure). L'OXO Tower Wharf où vous trouverez des boutiques qui sortent de l'ordinaire (principalement des artisans qui font de l'art/des bijoux). Vous serez vite sur le parvis du Tate Modern où vous pourrez rentrer gratuitement observer… des trucs (ouai je suis pas réceptif à cet art). Vous aurez ensuite le Globe Theater de William Shakespear reconstruit suite à divers incendies. En poursuivant vous arriverez sur un galion qui traîne là sans rien dire. Ensuite en s'éloignant un poil de la Tamise vous aurez droit à un marché de Street Food sous un pont et vous arriverez nez-à-nez avec The Shard la plus grande tour du moment. À son pied une gare (de train et de métro) toute neuve vous mènera à la Hays Galleria un ancien wharf reconverti en ptite place avec resto et quelques boutiques et surtout une superbe œuvre d'art Steam Punk d'un bateau qui parfois s'anime avec de la flotte faisant tourner une roue. Juste en face y est stationné le HMS Belfast un croiseur de la seconde guerre mondial. En continuant encore un peu plus vous arrivez proche du London Bridge. Ensuite quelques restaus sur le bord de la Tamise puis soudainement vous arriverez dans le quartier résidentiel de Bermondsey. Normalement ça devrait commencer à vous prendre une bonne partie de journée. Vous pourrez rejoindre le métro gris (jubilee line) pour rejoindre votre nid douillet.

    Sculpture dans la Hays Galleria avec un bâteau Steampunk

    La sculpture steampunk de la Hays Galleria

    Vu depuis la Hays Galleria en direction de La City sur la rive opposée

    De nuit La City est assez charmeuse

    La plus grande tour d'europe : the shard

    On la croirait pas vraiment finie en haut.

    vue de nuit de la rive sud

    Elle est jolie la lune

    Intérieur du Tate Modern Art

    L'intérieur du Tate Modern Art : c'est juste des gens fatigués ou une œuvre ?

  • Les parcs de la ville sont peuplés de gentils écureuils curieux prêts à venir chopper des noix (et des chips :-/ ). Vous verrez aussi les perruches vertes qu'on croise dans pas mal de villes désormais, il n'y en a pas beaucoup, mais on trouve quand même.

    Un écureuil du parc

    Ils sont à portée de main.

  • Un peu plus loin du centre dans sa banlieue, à Southmere qui est l'endroit où se déroule la série Misfits. Et là on peut pas être déçu du voyage. C'est tout moche comme dans la série : avec ces immeubles grisâtres, le lac un peu crade, le community center mochtoc. Bon en vrai il est en travaux actuellement et sera un peu modernisé donc on a pas trop pu l'arpenter. Mais on a vu les garages (où le beau-père de Nathan rôde nu), la ptite colline qui ne mène en vrai qu'à un peu de nature avec des chevaux, des oies et des renards. Une balade sympathique comme tout. Et puis il y a 0 touriste ici.

    Le fameux community center que l'on voit dans toute la série

    Le fameux community center que l'on voit dans toute la série

    On s'y croirait, hein ?

    Les garages de Misfits

    C'est peu ragoûtant si vous avez pas vu la série…

    Immeubles autour du lac Southmere que l'on voit dans Misfits

    Icônique, non ?

    Immeubles autour du lac Southmere que l'on voit dans Misfits

    On est juste au-dessus des garages en fait.

Oxford

  • Oxford est plein de Colleges tous plus jolis les uns que les autres. Mention spéciale pour Christ church avec ses prés supers sympas à visiter où broutent ses belles vaches.
    Devanture du college Christ Church

    La façade côté Meadows de Christ Church en impose.

  • Pas mal de visites à Oxford dont le musée d'histoire des sciences avec tous ses objets magnifiques. Ce qu'il montre est joli, le bâtiment est joli, c'est intéressant et en plus c'est gratuit. Que demande le peuple ?
    Un astrolabe dans l'une des vitrines du musée

    Un ptit astrolabe classieux du musée

  • Le Museum of Natural History est MAGNIFIQUE , rien que le bâtiment est une tuerie. L'architecture est superbe. Mais en plus il fait en sorte que chacune des colonnes soit décorées à l'éffigie d'une plante différente, soit fait d'une pierre différente, orné d'un scientifique différent : en plus d'être joli ça complète le but de documentation/démonstration. Ils ont une jolie collection de restes de dinos (dont un t-rex). Pas mal de jolis pierres, d'animaux, d'insectes… Tiens je vous ai pas dit : c'est gratuit O___O. Incontestablement une de mes visites favorites de ce séjour.
    Extérieur du museum of natural history

    T'es même pas rentré que tu veux remplir deux cartes SD de photos.

    Intérieur du museum of natural history

    Même pas besoin d'exposer des trucs, le bâtiment pourrait se suffire à lui-même.

    Intérieur du museum of natural history

    Il y a des dizaines de statues de scientifiques contre les colonnes du bâtiment.

    Intérieur du museum of natural history

    Et les colonnes sont en différents matériaux et représentent diverses plantes, un musée en lui-même.

    Un squelette de Trex complet est présent.

    Ho la grosse patoune de poulet !

  • Le Pitt Rivers Museum est à peu près du même calibre que le précédent mais consacré aux humains. Je sais pas comment on s'est débrouillé mais on l'a raté alors que son entrée est dans le musée précédent. Il est lui aussi gratos, lui aussi dans un bâtiment qui, à lui seul, vaut la visite. Bon le sujet m'intéresse moins mais c'est tout de même fichtrement sympa. Ça couvre quelques pans de l'humanité : les vêtements, les armes, les instruments de musiques, les moyens de transports, les coutumes…
    L'intérieur du Pitt Rivers est aussi magnifique

    Franchement superbe et pleins de curiosités.

  • Oxford c'est pas si grand pour les touristes, trois ou quatre jours suffisent pour voir à peu près tous les gros trucs.
  • Les bus à Oxford sont bizarres : c'est plein de compagnies différentes, du coup tu en as pas deux qui se ressemblent, mais sinon ça marche bien. Il y en a vraiment pleins super régulièrement. Et c'est toujours un plaisir d'être à l'étage aux places tout devant pour admirer le spectacle.
  • Il y a la Bodleian Library qui est la première bibliothèque publique du monde où ils conservent un exemplaire de chaque publication sortie désormais. Ils ont près de 13 millions d'articles. On peut en visiter une partie dont la Duke Humpfrey qui contient de vieux ouvrages que l'on ne peut pas consulter (à moins d'être étudiant et d'avoir une raison valide d'ouvrir un de ces bouquins).
  • Si vous êtes versés Tolkien il y a une expo qui lui est consacré à la Weston Library à Oxford où l'on peut y voir quelques-uns de ces manuscrits, des originaux de ses aquarelles, une carte en 3D avec un projecteur expliquant les chemins parcourus par les différents protagonistes du Seigneur des Anneaux. C'est aussi une visite gratuite mais faut réserver un créneau pour y aller.
  • Attention à Oxford à peu près tout ce qui se visite ferme à 17h, même au mois d'Août. Par chance les boutiques de souvenirs de merde restent ouvertes jusqu'à 21h pour certaines… les pubs, eux, pas de soucis !
  • Tiens d'ailleurs concernant les touristes j'ai été impressionné du nombre de chinois. Ils représentaient bien plus de la moitié des visiteurs à Oxford ! Et globalement je trouve que l'hospitalité des britains est pas au top dans les boutiques/restau/hotels. Lorsques certains commencent à parler super vite avec un accent vraiment prononcé, tu as beau demander à répéter doucement, tu as le droit à exactement le même discours avec le même vocabulaire, le même rythme et le même effort sur l'accent. C'est d'autant plus agréable quand c'est un hotel 4* réservé via une plateforme en ligne où on te montre que tu fais bien chier.

Retour en France

Voilà, ces vacances étaient éprouvantes pour les petons mais régalantes pour les yeux. Franchement brexitez un an ou deux puis revenez, on vous aime bien (et adoptez les euros ce coup-ci)!

Va falloir y retourner pour voir d'autres morceaux ! Bon bha pour finir voilà une photo de mur.

Mur bétonné laissant apparaitre ses briques.

C'est qui le génie qui s'est dit que bétonné ça serait plus beau ?

#1 Tap to Passthrough I3

J'utilise des gestionnaires de fenêtres pavants (je me force mais c'est clairement pas naturel… arg je tiens plus) enfin des tiling WM quoi depuis des années. J'ai utilisé principalement wmii et depuis 2009 je suis sur i3.

Le souci c'est que wmii utilisait la touche Alt pour toutes les commandes et je l'ai donc naturellement réutilisée sur i3. Du coup chaque commande i3 nécessite d'utiliser Alt. Bon jusque-là rien de bien méchant.

Sauf que Alt est souvent utilisée par d'autres logiciels pour des raccourcis. Du coup, si le raccourci existe pour i3, bha le logiciel avec le focus ne le reçoit pas. L'idée à la noix du jour serait de pouvoir tout de même envoyer le raccourcis si par exemple on lui faisait un petit tap au préalable.

Donc en gros Alt Alt+t et pouf i3 n'interprête pas le keybinding et transmet ça à l'appli ayant le focus.

Alors oui je pourrai remapper, mais ma mémoire musculaire est trop bien implantée désormais, j'ai pas envie de réapprendre les raccourcis d'i3. Et puis remapper chaque appli qui utilise Alt… arg la flemme.

Contrer la vague de spam touchant IRC

Bon ça fait plus de deux semaines qu'un bande de péquenots s'amuse à spammer joyeusement à peu près tous les réseaux IRC existants (enfin s'ils sont suffisamment gros).

L'attaque

C'est un flood avec toujours les mêmes phrases (!) consistant à envoyer des URL vers des blogs. Là où c'est encore plus dégueulasse, c'est que ces blogs sont ceux des membres de l'équipe de Freenode qui est le plus gros réseau. Et ces blogs annoncent fièrement que la pédophilie c'est super chouette… Cela va sans dire que ces blogs ne sont pas les blogs du staff Freenode mais ont été monté pour l'occasion avec des articles antidatés.

L'attaque utilise donc une belle armada de bots, tout d'abord hébergés sur le Google Cloud, puis l'Amazon Cloud, puis juste dispersés à droite à gauche désormais. Les bots prennent des pseudos d'utilisateurs légitimes en ajoutant parfois quelques chiffres en fin et hop.

Maintenant l'attaque se poursuit également en discussions privées.

Chouette -____-

La défense

Par les serveurs

Pour bloquer tout ce spam côté serveur, le mieux est de mettre en place des spamfilters mais tous les ircd ne possèdent pas cette fonctionnalité (comme, par exemple, ceux qu'utilise Freenode). Cette technique permettra de virer les bots au moment où ils envoient les fameuses phrases qui du coup ne seront pas relayées aux utilisateurs. Il ne reste alors que les join/quit qui malheureusement ne peuvent pas être distinguées de ceux légitimes.

Par les @ d'un salon

Plusieurs possibilités avec chacunes leurs inconvénients.

  • Voicer tous les utilisateurs légitimes et passer le salon en +m : il faut voicer tous les nouveaux arrivants.
  • Restreindre le salon aux utilisateurs enregistrés avec +R : les utilisateurs doivent avoir enregistré leur pseudo auprès des services.
  • Restreindre le salon aux utilisateurs avec une connexion sécurisée (tls) +z : les utilisateurs doivent se connecter via TLS.
  • Mettre en place une liste de badwords (la façon de faire varie beaucoup) : il faut se tapper la liste à la main et que le serveur le gère.

Côté clients

Pas grand-chose à faire.

Mais il y a quand même moyen de rendre le truc invisible si un spamfilter a été mis côté serveur. Le but va être de planquer tout ce merdier de join/quit

Une myriade infinie de Join/Quit sur le salon de La Brique Internet

C'est moche hein ?

Weechat possède un super truc appelés les smartfilters qui permettent de n'afficher les Join/Quit uniquement si la personne en question a parlé il y a quelques minutes (ce qui n'est pas le cas des bots). Les salons de discussions redeviennent agréables à utiliser.

/set irc.look.smart_filter on
/filter add irc_smart * irc_smart_filter *

Et hop. Vous pouvez l'activer/désactiver avec Alt =

Pour Irssi il existe un script perl apportant cette même fonctionnalité mais en 2018 plus personne n'utilise Irssi, non ?

Pour les autres clients IRC ? Voici une doc exhaustive qui vous sera utile.

17ème article d'avancement du Librem 5

Ceci est une traduction libre de cet article concernant les avancées de la société Purism concernant le smartphone Librem 5. L'article original est sous licence CC BY-SA 4.0 tout comme ma traduction.

Ce smartphone a bénéficié d'un crowdfunding et a pour but d'apporter une alternative à Android en proposant un OS basé sur Linux et toutes les briques logicielles opensource qui vont avec. Ils collaborent avec le projet Gnome, le projet KDE, UBPorts et le projet Matrix. Ils sont assez transparents sur leurs avancées et sont reconnus pour leur ligne de laptops.

Bref voilà l'article :


L'équipe du Librem 5 a été pas mal occupée par le GUADEC avec de nombreuses avancées dans le dev. Voilà un petit récap de ce qu'il s'est passé ces dernières semaines.

GUADEC

Récemment, la majorité des membres de l'équipe étaient au GUADEC. Certains ont même donné des conférences. Même si certaines ne sont pas encore montées, en voilà certaines à regarder :

D'autres confs ont eu lieu concernant la sécurité et l'implémentation de l'interface de téléphonie avec GTK+. Nous vous fournirons les liens lorsque leurs montages seront terminées.

Design

Le Librem5 sera beau mais cela ne se fait pas sans effort. Dernièrement, notre équipe design s'est acharné sur la création d'un nouveau pack d'icônes pour GNOME 3.30 qui sera utilisé par le téléphone. Ils ont aussi créé de nouvelles maquettes pour les réglages propres à la téléphonie avec plus de réglages avancées en peaufinant également le shell.

Travail logiciel

Images

Les images prenaient trop de temps à être créées, mais nous sommes parvenus à accélérer la procédure en faisant quelques ajustements. Cela simplifie le dev et les tests. Les images ne sont pas encore complètement basées sur PureOS (toujours sur Debian buster) mais ça arrivera bientôt. Si vous avez utilisé la machine virtuelle x86_64, vous serez heureux d'apprendre que les nouvelles images permettent de redimensionner la partition racine pour s'accommoder de plus d'espace (31Go). Il sera donc plus simple de dev puisqu'auparavant elles étaient limitées à 3.6Go. Il y a encore certains aspects à peaufiner mais c'est déjà fonctionnel.

Phosh

Phosh a connu de nombreuses améliorations sous le capot sous forme de corrections de bugs tels que de nombreux crashs potentiels et des initialisations manquantes. Le bouton de luminosité est également réparé pour se comporter normalement lorsqu'il bouge.

Le Wayland global handling a été [bougé dans un GObject séparé][https://source.puri.sm/Librem5/phosh/merge_requests/84). Le gestionnaire de verrouillage a été ajouté pour désencombrer (il récupère la tempo de timeout depuis GSettings maintenant) et tous les Layersurfaces ont été converties en PhoshLayerSurfaces.

Ce sont tous ces petits nettoyages de code qui permettront d'obtenir des contributions de la communauté car plus le code est bien organisé, plus est simple à comprendre et donc y contribuer.

L'intégrité de phosh est capitale puisque ce sera l'interface du téléphone donc un smoketest gitlab a été mise en place pour passer phosh dans Valgrind. Il y a également un début du support de l'internationalisation du coup des traductions espagnole et allemande ont été ajouté.

Quelques bugs ont également été éradiqués de phosh. Comme mentionné lors du dernier article d'avancements, des avancées ont été faites pour le support de redshift. Le code est inclus dans la branche principale ainsi qu'un correctif de bug concernant des races conditions lors de l'énumération des modes vidéos. Phosh/wlroots peuvent être démarrés par gnome-session et un bouton accueil (logiciel) a été créé en bas de l'écran.

Wlroots

Du côté de wlroots de nombreux changements ont eu lieu. Quelques patchs pour le support de modes vidéos personnalisés a été inclus upstream. Puisque le Librem5 ne supportera pas X, nous devions virer les dépendances à xwayland. Désormais wlroots est compilé avec ET sans le support de xwayland. Un freeze de wlroots s'avère être causé par la déconnexion de la session ssh ayant lancé wlroots ce qui est débattu upstream pour savoir comment gérer ce cas.

Clavier

Le clavier (virtboard) bénéficiera de l'important travail ayant lieu sur le protocole text-input. Le patch text-input-v3 a été mis à jour et envoyé upstream à Wayland pour revue. Une implémentation du protocole text-input pour GTK3 a été envoyé upstream et est en cours. Pour le support wlroots, une implémentation a été prototypé et sera bientôt envoyé pour revue.

Calls

Afin d'intégrer Calls dans gnome-settings-daemon et gnome-control-center, il nous est apparu évident lors des discussions au GUADEC que la meilleure façon de faire est d'utiliser ModemManager au lieu d'oFono. Bien que jusqu'à présent tous les essais a été fait pour l'implémentation d'oFono, c'est un changement inévitable. L'implémentation initiale du backend ModemManager pour Calls est complète et les tests ont commencé.

L'interface de Calls s'est grandement amélioré pour ressembler aux maquettes de l'équipe design. En dessous vous pouvez voir l'implémentation (gauche) et sa maquette (droite).

La maquette et l'application se ressemble comme deux gouttes d'eau

Libhandy

Quelques bugs ont aussi été corrigés dans libhandy ainsi que du travail pour préparer l'arrivée prochaine de GTK+4. Un des problèmes réglé est une fuite de mémoire. Également, un bug trouvé et corrigé dans HdyColumn où une mauvaise largeur était utilisée pour les calculs de la hauteur de colonne.

Si vous suivez la mailing-list librem-5-dev, vous avez probablement vu passer la sortie de libhandy v0.0.2.

Epiphany/GNOME Web

Personne n'aime les pubs donc Better le bloqueur de pub a été suggéré pour inclusion upstream pour être utilisé dans epiphany.

Messaging

Les technologies de messagerie vont être séparées en deux applis distinctes. Une dédiée aux conversations à deux personnes ou pour les petits groupes (Chatty) et l'autre pour les discussions publiques comme sur les salons IRC (Fractal).

L'application Chatty est développé par Purism, s'appuie sur libpurble et permettra des communications E2EE par messages XMPP via OMEMO dès la sortie (lorsque les Librem seront livrés en janvier), ainsi que les SMS non chiffrés. Puisque nous nous sommes rendu compte qu'il nous fallait utiliser ModemManager en lieu et place d'Ofono, un handler D-BUS a été créé pour le backend ModemManager de l'application. Avec cette installation de ModemManager, envoyer et recevoir des SMS fonctionne.

Le client Fractal ne permettra pas forcément les communications E2EE dès la sortie, mais nous travaillerons pour que cela arrive.

Sécurité

La sécurité est l'un de nos aspects favoris (vous l'avez peut-être remarqué) donc des recherches ont été commencés à propos de TrustZone, TPM et autres. Nous avons eu quelques discussions internes à propos d'un boot anti-sabotage, Heads et la sortie vidéo par les modes alternatifs de l'USB. Nous envisageons sérieusement l'implémentation de mesures de sécurité dans le Librem 5.

Kernel

Avoir un kernel fonctionnel pour l'i.MX8M n'est pas une mince affaire. Après de gros efforts, nous sommes parvenus à avoir l'ethernet fonctionnel. Afin de faire marcher le DRM et l'affichage, nous avons d'abord porté le support du PCIe. Le second port SD fonctionne mais pas SDIO (la carte SDIO étant alimenté par USB), il va falloir le support de l'USB en premier. Plus d'appareils i2c ont été activés. La carte nécessitera également un chargeur de batterie et donc nous testons actuellement le BQ25896 de TI, mais un driver d'alimentation électrique a été ajouté et soumis upstream.

Il reste un important chemin à parcourir avant d'avoir un kernel pleinement fonctionnel avec tous les drivers en ordre, particulièrement pour tout ce qui concerne l'affichage. S'il y a des experts en drivers graphiques prêt à filer un coup de main, merci de nous contacter sur le salon de discussion Matrix.

Travail matériel

Nous travaillons toujours d'arrache-pied avec le potentiel fabricant des cartes de dev pour évaluer les schémas développés par nos ingénieurs matériel et faire les changements suggerés. Cependant, certaines choses sont maintenant gravés dans le marbre et de nombreux composants ont déjà été commandés. Voici donc ce que vous trouverez à coup-sûr sur les cartes de devs :

Communauté

Il y a une nouvelle FAQ sur le site de documentation basés sur les questions reçues sur le salon de discussion matrix community/librem-5. Nous n'y mettrons pas TOUTES les questions car cela nécessiterait trop de temps mais certainement les plus fréquentes.

Un grand merci à toutes les équipes externes qui ont évalué et inclus les patchs dans les différents projets upstreams. Le temps et les contributions de tout le monde sont fortement appréciées.

C'est tout pour le moment les amis. Restez branchés pour plus de mises à jour à venir !


Original par Heather Ellsworth

Bon on sent que cet article a été rédigé en parallèle du précédent car il y a un peu de redites. D'un point de vue logiciel ça progresse vraiment bien dans tous les projets connexes. C'est agréable de voir plusieurs communautés collaborer (plus ou moins indirectement) vers un but commun : les joies du libre.

D'un point de vue matos ils ont l'air d'avoir la majeure partie des composants arrêté, ce qui est bon signe.

Ils semblent toujours confiants pour janvier 2019.

Ils commencent à aborder les aspects de sécurité et ça semble plutôt encourageant. On peut s'attendre à avoir un truc qui les différencie des habituels Android/IOS. Ça pourrait être un argument de vente pour certaines personnes pas spécialement touchées par le Libre mais plus pour la sécurité.

Polissage du thême Hugo : NeoDark

Salut les lecteurs ça va ?

Et bhé ! Vous êtes pas très causant.

Bon je vais pas me fâcher même si c'est un peu vexant de pas avoir de réponse.

J'ai encore un peu retravaillé NeoDark (ouai le nom est bidon) mon thème Hugo. Le but est d'enfin le partager proprement avec vous pour que vous puissiez le réutiliser.

Avant de vous le partager, bha il fallait virer les saloperies que j'avais faites.

Par exemple au lieu d'avoir un template spécifique pour les posts, un autre pour les fast-posts et un troisième pour les shares, j'ai tout viré et fait un seul template générique où juste une class css est modifiée. Du coup maintenant tout a la même gueule, juste des ptites modifs de couleurs mais c'est plus rationnel. Donc non seulement le design final est plus unifié mais en plus c'est vachement plus rapide pour Hugo. Je suis passé de 800ms à 330ms pour créer tout le site.

Le thême du site a d'ailleurs été déjà retaillé par Franck Paul qui l'a adapté pour DotClear.

Bon et zavez-vu ? Il y a des ptites icônes SVG à gauche maintenant. Ça enlève un peu de texte et ajoute un peu de couleur…

Et donc voilà un tar du thème Hugo.

J'espère que ça vous plaît !

Dans la catégorie ça sert à rien mais ça m'amuse : j'ai mis un lien vers la version dans une autre langue directement à côté de chacun des “Lire en entier …”. J'ai à peu près 0 lecteur pour les articles en franglais mais bon… Avant c'était juste accessible depuis la sidebar mais du coup pour l'accessibilité c'était vraiment pourri. D'ailleurs si vous vous y connaissez en accessibilité et que vous trouvez des trucs vraiment nul à chier sur mon site n'hésitez pas à m'en parler, je me ferai une joie de trouver une piste d'amélioration.

Bon dans la catégorie spoilers : l'arrivée d'une nouvelle catégorie bientôt.

Voilà tout.

Le Geekcode

Allez, je déballe encore une vieillerie !

Il fut un temps, où pour briller en société (keuf keuf), il fallait sortir sa carte de visite. Comme chacun sait, le geek a bien du mal à sortir de sa tanière physique tout entravé dans sa barbe qu'il est, du coup il lui fallait une carte de visite pour le monde numérique.

C'est d'ailleurs presque un CV plus qu'une carte de visite : le Geekcode.

Nani ?!

Il y a vingt ans, être un geek n'était pas à la mode et ne signifiait pas être capable de débourser 1000€ dans le dernier smartphone à la mode et sortir trois termes techniques. Le mot "geek" lui-même, n'était pas connu du grand public et c'était d'ailleurs proche de l'insulte. Quoi qu'il en soit, déjà à l'époque une distinction existait entre les différents types de geeks.

Parcequ'au-delà de l'informatique, en vrai, un geek est juste une personne passionnée++ mais du coup de nombreux domaines existent et donc toute une pléthore de geeks différents !

illustration de 56 sortes de geeks différents par Scott Johnson

Vous retrouvez-vous plus de deux fois là-dedans ?

Partant de ce constat, un certain Robert A. Hayden a entrepris la tâche de classer ces drôles de bêtes et de fournir un moyen d'afficher quel type de geek on est. Pour cela un grand questionnaire à choix multiples qui attribuent des lettres avec des symboles associés. On fout tout ça à la suite et pouf vous obtenez votre Geekcode !

Ok c'est où ?

Bon malheureusement la dernière version officielle 3.12 est pas mal obsolète car datée de 1996 mais l'idée est bonne. Un Français a entrepris de proposer une bonne update en 3.20 en 2010. Mais bon la référence officielle est tout de même la 3.12.

Voilà le mien refait pour l'occase.

-----BEGIN GEEK CODE BLOCK-----
Version: 3.1
GIT d? s--: a C+++ UL++++ P L+++ E--- W+++
N+() ?o ?K w-- ?O !M ?V !PS !PE Y++ PGP(+)
t@ ?5 ?X ?R !tv b- DI D++ G e++ h r+++ z?
------END GEEK CODE BLOCK------

Quelqu'un de motivé pour en faire une version 2018 ?

16ème article d'avancement du Librem 5

Ceci est une traduction libre de cet article concernant les avancées de la société Purism concernant le smartphone Librem 5. L'article original est sous licence CC BY-SA 4.0 tout comme ma traduction.

Ce smartphone a bénéficié d'un crowdfunding et a pour but d'apporter une alternative à Android en proposant un OS basé sur Linux et toutes les briques logiciels opensource qui vont avec. Ils collaborent avec le projet Gnome, le projet KDE, UBPorts et le projet Matrix. Ils sont assez transparents sur leurs avancées et sont reconnus pour leur ligne de laptops.

Bref voilà l'article :


Nous avons passé les dernières semaines concentrés sur le design des applications de communication par défaut du Librem 5. Nous sommes donc parvenu à établir des spécifications pour deux applications. L'une d'elle se nomme Calls et sert à - vous l'avez deviné - recevoir et émettre des appels téléphoniques. La seconde est Messages quant à elle permet comme son nom l'indique d'envoyer et recevoir des messages.

Tobias, notre lead designer, a particulièrement bien bossé en communiquant et collaborant avec l'équipe design de GNOME ce qui nous a permit de faire de grands progrès conjointement avec le projet upstream GNOME. Quand Tobias nous a rejoint, nous avons eu une conversation avec Allan Day et Jakub Steiner (de l'équipe design de GNOME) où nous leur avons présenté le projet, nos buts et discutés à propos de la structuration de nos contributions à GNOME. Par exemple, nous avons un dépot de design applicatif sur le serveur Gitlab upstream de GNOME où nos designs et prototypes sont rendus disponibles à tous. Au final, notre projet et sa vision semble bien reçu par la communauté GNOME.

L'application Calls

L'application étant nouvelle, nous sommes donc partit de zéro. Nous l'avons fait alors que Bob progressait dans l'implémentation des fonctions basiques d'appels.

Les différents écrans visibles lors d'un appel

Calls est supposé permettre à l'utiliateur d'utiliser les fonctions de base d'un téléphone classique mais n'est pas limité à cela. Elle est architecturé de façon telle qu'elle promet un haut niveau de sécurité et d'intimité (privacy) via du chiffrement de bout-en-bout de façon transparente. Les appels privés, entre deux appareils supportant cette fonction seront établis juste en sélectionnant un contact et en appuyant sur le bouton d'appel.

Le numéroteur ainsi que les contacts de l'application Calls

Le design complet de l'application peut être admiré dans notre propre dépot.

L'application Messages

Photo des devs lors du hackfest fractal

Au début de l'été, certains de nos employés (Dorota, Adrien, Tobias et moi-même) avons participé au Fractal hackfest à Strasbourg. Le but était d'analyser et discuter des possibilité d'utiliser Fractal comme appli par défaut pour la messagerie dans PureOS et le Librem5. C'est motivé par notre souhait d'être en phase avec les choix upstreams mais aussi par le fait que Tobias, en plus d'être designer des applis du Librem 5 est également le designer de Fractal. Nous avons également profité de l'opportunité pour rencontrer Matthew de Matrix qui nous apporta des clarifications techniques bienvenues à propos de Matrix.

Il était clair lors de ce meeting que les plans pour Fractal soient en accord avec les principes du Design éthique que le Librem 5 et PureOS suivent. Une application suivant ces recommandations doit être simple et dédiée à une seule tâche.

On pourrait penser que l'état actuel de Fractal sied déjà au but premier de Messages (envoyer et recevoir des messages), mais elle est trop générique en terme de but. Discuter en privé avec un ami est différent d'une discussion dans un salon public IRC bondé. Bien que la technologie employée dans le fond soit la même, l'interface utilisateur doit répondre à des objectifs différents. Ce fût discuté lors du hackfest Fractal (Tobias a eu recours à l'analogie du "barbecue" et du "banquet" pour exposer le soucis), où les devs de Fractal décidèrent de scinder l'application en deux : une application pour les discussions en aparté ou petit groupe (le barbecue) tandis que la seconde sera dédiée aux discussions publiques (le banquet). Il faudra cependant un peu de temps pour découper l'application existante.

L'application simplifiée Messages que nous avons développée est basée sur le cas du "barbecue"; ce qui s'avère être l'utilisation majoritaire. Le but de Messages est d'être capable de gérer des SMS mais aussi des messages chiffrés de bout-en-bout de façon transparente entre deux appareils compatibles.

Exemple de conversation dans Messages

Le design global de Messages peut être reluqué dans son propre dépot.


Original par François Téchené

Un retour sur leur collaboration avec l'équipe Matrix. Les screenshots sont plutôt encourageant surtout pour ceux appréciant le look de GNOME. Ça commence franchement à avoir une gueule d'OS de smartphone.

Un truc qui serait pas mal c'est une compatibilité avec l'application Silence pour Android qui permet d'envoyer des SMS de façon chiffré même pour des personnes pas spécialement douées en informatique.

TDC

Et alors qu'une vague de spam sévit actuellement sur les IRC (oui oui en 2018 ça se fait encore…), je me sens obligé de vous présenter l'un des meilleurs sites old-school encore sur le ouaib.

tROu dU cuLz hiDeOuT

L'une des meilleures ressources du ouaib encore dispo pour devenir un 1337. Ne vous laissez pas berner par l'esthétique pleine de charme et d'un esthétisme certain, le contenu prévaut sur la forme ici.

Vous y apprendrez plein de trucs indispensables :

  • Comment devenir un rebelz en utilisant Linux (et en méprisant wiNfUcK'98) ?
  • Comment bafouer la nétiquette sur Usenet ?
  • La joie de snober le bas peuple sur les IRC.
  • L'intérêt de monter sa homepage de daube.
  • Plein d'autres trucs uber classe.

Bref tout un art de vivre à adopter pour débuter sur le web en cette fin des années 90.

Outre l'aspect limite vulgaire de ces pages humoristiques, j'aime beaucoup l'aspect historique. Ça rappelle pas mal de souvenirs. Haaa, le bon vieux temps du net avant que ce ne soit monopolisé par tout l'aspect business d'aujourd'hui.

Cette page circulait assez régulièrement à l'époque. Bon par contre pour les gens sur téléphones mobiles, le site n'est pas très très responsive mais bon les smartphones n'existaient pas à l'époque…

Voilà le TDC Hideout, vous en reviendrez grandi (ou pas) !

J'aime toujours retrouver des bouts du web d'antan où chacun osait se lancer avec un design dégueu trois bouts de balises html, une bonne louche de gif mais qui au final produisait un contenu original. À l'ère des réseaux sociaux à la brièveté absolue et où l'on favorise principalement le retweet, le reposts, ça fait du bien de revoir l'époque où créer était plus important.

Configuration Weechat 2018

Weechat 2.2 vient de sortir et c'est l'occasion de lui faire un ptit article. Ça fait maintenant très longtemps que je l'utilise comme client IRC. Je l'ai pas mal trifouillé de droite et de gauche depuis le temps du coup je voulais poser un peu toutes ces personnalisations quelque part pour les retrouver au cas où et pour vous les partager.

Les scripts

Du haut de ses 15 ans, Weechat a sû se créer un petit écosystème complet de plugins/scripts (et bientôt des thêmes !).

J'ai toujours préferré éviter de trop en cumuler. Du coup j'en utilise assez peu :

  • colorize_nicks.py : Permet de colorer les pseudos lorsqu'ils sont cités dans une phrase. Très pratique pour repérer quand ça parle de gens présent sur le salon.
  • autoconnect.py : Permet de se reconnecter automatiquement aux précédents serveurs et salon ouverts lors d'un redémarrage.
  • chanmon.pl : permet d'avoir un buffer aggrégeant tous les salons. Pratique pour voir d'un coup d'œil ce qu'il se raconte partout.
  • colorize_lines.pl : Permet de colorer les lignes de texte de la même couleur que le pseudo. Excellent pour améliorer la lisibilité.

Et voilà, j'ai réussi à ne pas être trop gourmand.

Autoconnect me sert peu car weechat tourne 24/7 sur un serveur mais au cas où, on sait jamais.

Les deux plugins de colorations sont purement esthétiques mais pourtant je pourrai pas m'en passer. Ça simplifie grandement la lecture des conversations, surtout si on augmente le nombre de couleurs utilisées par weechat.

Chanmon est lui dispensable mais étant sur de très nombreux salons, j'ai très souvent la hotbar assez bien remplie avec de l'activité dans pleins de chans à la fois. Ça me permet de ne pas aller dans un buffer où il y a de l'activité pour rien.

Layout

capture d'écran de l'interface de Weechat

Par défaut c'est… meh

On va élaguer tout ça je vous préviens !

Bon alors la barre à gauche qui liste les buffers on peut virer : ça sert à rien. /bar del buflist

La barre de droit avec la liste de pseudo, même combat : ça dégage. /bar del nicklist Les rares fois où vous aurez besoin de voir la nicklist vous ferez un ptit /names et hop.

Vous voyez la barre avec le titre en haut ? Vous voyez où je veux en venir : /bar del title

Bon bha déjà c'est pas trop mal.

Bon cette barre bleue en bas c'est pas mal mais qu'est-ce que ça bouffe comme place ! It would be a shame if… /bar del status

Ha merde il y avait des trucs pas mal dedans quand même ! Bon faisons une barre mieux foutue du coup ! /bar add ubar root bottom 1 0 buffer_number+:+buffer_name,hotlist,input_text,time,[completion]

Et voilà notre übar, plus qu'à virer celle par défaut : /bar del input

Voilà, on a gratté à peu près tout l'espace disponible, on a fusionné la status_bar avec l'input_bar et viré toutes les autres. C'est bien minimaliste tout en étant parfaitement fonctionnel.

Bon maintenant, il ne reste plus qu'à faire en sorte de voir le chanmon en haut. On va donc découper la fenêtre horizontalement avec un ptit /window splith 10 et on a donc 10% de l'espace vertical qui est dispo pour un autre buffer. Pour passer à la fenêtre du haut on fait un ptit /window up on peut y changer de buffer (typiquement on se fout sur celui de chanmon) et on retourne à celui du bas et voilà.

Bon on a fait le plus gros du boulot je crois. Il va rester à fignoler quelques ptits réglages pour rendre le truc encore un peu plus séyant.

Ptites optimisations

On va virer tous les scripts inutiles (ou juste ne pas en installer). /script Et là on coupe avec /script remove xxx.yy .

Et surtout on va aussi virer tous les plugins inutiles. /plugin et maintenant /plugin unload xxx et surtout set weechat.plugin.autoload "*,!buflist,!exec,!fset" pour que ça persiste à un redémarrage de la bête.

En virant tout le superflux j'arrive à faire tourner mon instance weechat dans un container de 64Mo de ram avec pourtant près de 200 buffers ouverts simultannément tout en ayant le relay. Et le tout avec un uptime de plusieurs mois. Bref ça tourne comme sur des disquettes.

Mais mais ! À quoi ça ressemble maintenant qu'on a tout trifouillé ?!

Capture de Weechat une fois toutes les modifs effectuées

Beau comme un rognon !

Vrac moins intéressant

  • irc.network.send_unknown_commands on # Pour envoyer les commandes d'admin du serveur
  • plugins.var.perl.chanmon.alignment channel # Histoire que ce soit joli à voir et pas le dawa
  • plugins.var.perl.colorize_lines.highlight off # Pour ne pas qu'un HL colore toute la ligne (c'est moche et trop agressif)
  • weechat.color.chat_time orange # Un peu de orange pour l'heure
  • weechat.completion.nick_completer "" # Ouai j'aime pas quand ça rajoute ":" quand on tab un pseudo
  • weechat.look.prefix_align_max 10 # Pas plus de 10 lettres pour les pseudos… largement suffisant
  • weechat.look.prefix_same_nick "" # J'aime bien le fait de pas avoir le même pseudo affiché en boucle lors de ligne successive
  • weechat.look.prefix_suffix "│" # Pour avoir des jolies barres complètes
  • weechat.color.chat_nick_colors "028,029,030,031,032,033,034,035,036,037,038,039,040,041,042,043,044,045,046,047,048,049,050,051,058,059,060,061,062,063,064,065,066,067,068,069,070,071,072,073,074,075,076,077,078,079,080,081,082,083,084,085,086,087,088,089,090,091,092,093,094,095,096,097,098,099,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229" C'est long mais ça rajoute tout pleins de nouvelles couleurs utilisables.

Ralentir le flux

Tiens un petit fast-post rapide sur le feu.

En ce moment je cherche à ralentir un peu le rythme de mon TTRSS. Il se connectait toutes les heures sur chacun des flux RSS pour voir s'il n'y avait pas une nouveauté.

Au final ça représente un sacré bastringue réseau pour rien les trois quarts du temps. J'ai donc diminué la fréquence d'actualisation de quasiment tous les flux à une fois toutes les 24h.

Les sites publiant plusieurs fois par jour je l'ai monté à 2h et certains 12h. J'ai donc pas mal diminué la cadence en espérant alléger légèrement mon empreinte réseau/ressource à la fois de ma machine mais aussi de chacun des sites que je poll constamment. C'est probablement anecdotique mais comme d'hab, les molards font les grandes rivières.

Il est d'ailleurs dommage qu'un flux RSS ne puisse pas spécifier une cadence de rafraichissement (qu'il soit biensûr possible d'outre-passer) pour que lors de la souscription se soit suggéré à l'aggrégateur.

En plus d'alléger les machines et le réseau, mes flux arrivent désormais un peu plus par vague, plutôt qu'au compte-goutte toute la journée. Ça permet d'un peu moins se disperser. Et d'y consacrer un peu moins de temps au final.

Bref ça peut vous tenter d'essayer d'expérimenter ça.

L'Histoire d'Iloth

J'en ai jamais vraiment parlé sur mon blog et pourtant Iloth représente une page de ma vie.

Iloth est une association membre de la FFDN. J'en ai été membre quelques années pas au tout début mais pas trop loin, jusqu'à très récemment où j'ai eu besoin de passer à autre chose.

Du coup je vais vous raconter un peu la vie d'Iloth, certains de ses moments forts et tout et tout. Ça sera bien entendu mon point de vue sur l'asso et non quelque chose de purement objectif. Par contre pas de bol j'ai un mal de chien avec les dates donc ça sera pas super précis.

2010 : Création

En l'an de grâce 2010 née la FFDN, Fédération FDN qui cherche à essaimer. Pourquoi ? Parce que l'asso FDN devenait trop grosse et du coup gagnait en poids mais malheureusement perdait le côté local/associatif où tu connais tout le monde toussa.

Du coup de nombreuses petites assos locales se sont créées et regroupées dans une fédération afin de garder un certain poids tout en recréant un côté local qui est bénéfique pour l'humain.

Iloth a été dans la première vague de la FFDN à l'initiative de 3 geeks Montpellierains et voilà que le 31 Août 2010 l'asso existe officiellement avec la publication au Journal Officiel et intègre donc la FFDN. Internet Libre et Ouvert à Tous dans l'Hérault

À cette époque les 3 valeureux gugusses se sont tapés toute la paperasse administrative, ont ouvert un compte en banque, se sont déclarés officiellement comme étant un vrai FAI auprès de l'ARCEP. Ils ont fait la partie vraiment chiante.

Peu de temps après (je sais pas quand exactement), l'asso sympathise avec une boîte locale qui héberge et fournit des services et notamment des connexions Internet neutres à des entreprises du coin. Des liens sont tissés et c'est ainsi qu'une relation solide s'est créée et permettra à l'asso de vivre et surtout d'avoir une présence sur Internet. Une convention est signée et permet à l'asso d'héberger son propre serveur dans un datacenter montpellierain avec un peu de bande passante. Bref l'asso peut commencer à officier en tant que FAI.

Et là ça va commencer à patauger, comme souvent dans le milieu associatif, chacun investit le temps qu'il peut quand il peut… L'asso commence donc déjà à battre de l'aile. Elle n'a pas de vitrine, ne se réunit pas, n'existe pas vraiment. Il n'est pas vraiment possible d'adhérer car aucun moyen de les contacter.

2012 : La seconde vague

On est désormais aux alentours de fin 2011 début 2012 si je me rappelle bien. C'est à ce moment là que j'ai voulu rejoindre l'asso. Sauf que pas de bol, le site était sacrément vide («Coming Soon»), le salon IRC était en calme plat pendant des semaines complètes malgré plusieurs tentatives d'attirer l'attention.

J'ai réussi à faire venir une deuxième personne sur le salon IRC qui était également intéressée et même une troisième que je ne connaissais que d'IRC. Bref nous étions désormais au moins trois à vouloir intégrer les membres de l'asso et vla-ti-pas qu'un quatrième larron sorti de nulle part est également intéressé et se met à traîner également sur le salon #iloth .

Et un jour, Ô miracle ! Un des pères fondateurs voit ça et commence à parler sur IRC.

On s'organise une rencontre dans un café du centre de Montpellier pour discuter de vives voix. Bon comme on s'en doutait, la démotivation était totale. En gros il s'est dit «Bon bha si vous voulez je vous donne l'asso, j'ai plus le temps ni l'envie, on a déjà tout un tas de trucs en place, yapuka. Si vous êtes motivés, organisez une Assemblée Générale pour trouver un président, un tréso et un secrétaire et roulez jeunesse».

Bon une fois la rencontre finie… on a quand même été un poil étonné. Mais au final on était partant tous les quatre et une AG a été faites courant Mars 2012 où l'on s'est entre-élus. Bon pas de bol j'étais pas dispo le jour de l'AG du coup je n'ai pas pu y participer.

Voilà la seconde vague d'Iloth était lancée. Nous étions donc 4 nouveaux membres et il ne restait plus qu'un membre actif de l'équipe d'origine.

2013 : La belle époque

C'était donc une période faste. Nous étions 4 supers motivés pour monter un FAI. La partie ultra-chiante avait été bien gêrée par l'ancienne équipe et nous allions remotiver le dernier membre restant de la première vague.

  • Nous voulions un logo
  • Nous voulions monter un service de VPN fournissant du vrai Internet neutre.
  • Nous voulions proposer de l'ADSL en marque blanche depuis FDN.
  • Nous voulions monter des services.
  • Nous voulions un joli site ouaib pour communiquer.
  • Nous voulions organiser des conférences.
  • Nous voulions faire du réseau comme des grands.

Bref on était chaud.

On avait une machine fonctionnelle, pas mal de temps libres. On a également tissé des liens avec d'autres assos locales tel que Montpellibre (de loin) et un peu plus intimes avec Le BIB notre cher Hackerspace Montpellierain. Nous nous y réunionnons une fois par mois dans leur garage pour faire une réu-apéro qui généralement se termine dans un restau.

Un des prototype de logo non retenu

L'une des propositions non retenues de logo

Le côté social de l'asso commence à décoller. Avec le temps le noyau dur de l'asso se connait désormais pas mal et nous sommes devenus une bande de potes.

On organise notre première foire associative L'antigone des assos 2012 où l'on tente maladroitement d'attirer le chaland sans avoir rien à présenter. «Quoi ? Un fournisseur d'accès Internet comme Free ? Et du coup c'est gratuit vu que c'est associatif ? Ha mais vous faites pas d'ADSL ?»

Recruter de nouveaux membres va être compliqué, nous ne sommes clairement pas de bons communicants mais c'est pas grave on va progresser. Ça nous permet en plus d'établir une roadmap : monter des services pour montrer du concret, travailler la comm pour rendre le bousin un peu plus compréhensible. On va avoir une année bien remplie.

On a donc fait un site web statique sous Bootstrap histoire d'avoir une vitrine un peu jolie et on y a mis un tout petit peu de contenu.

On commence à discuter d'un projet de créer un IX sur Montpellier afin de relier tous les opérateurs présents localement afin d'améliorer le maillage Internet. Actuellement si deux opérateurs se trouvent physiquement à Montpellier, il y a de très grande chance qu'ils n'y soient pas interconnectés et qu'il faille remonter jusqu'à Paris. Le but est donc de créer un point d'échange local, neutre et gérer par une asso à but non lucratif : le Sudix. Pour l'instant c'est à l'état de discussion de restau.

On s'est empressé de prendre un numéro d'AS ainsi qu'un premier bloc /24 d'adresses IP bien à nous.

On possède des IP, à nous. Je répète des IP qui sont rien qu'à nous ! Wow ça en jette. Nous sommes enfin un vrai opérateur de réseau Internet. Quelque bidouilles BGP plus tard et paf nos IP sont accessibles du grand Ternet !

Mi avril 2013, on ouvre officiellement le service de VPN avec nos ptites IP à nous le tout sur notre serveur hébergé physiquement à Montpellier. La conf OpenVPN est assez simple et pleinement fonctionnelle. Et on peut enfin commencer à utiliser notre bande passante de 10Mbps burstable à 100.

Bon on se monte un serveur mail et on y accroche une mailing-list. Nous avons alors à cette époque du DNS, du mail, du web, du VPN de fonctionnel. On peut maintenant communiquer à peu près officiellement. Et notre infra est à peu près complète.

Et voilà qu'arrive notre seconde foire associative, nous sommes donc Septembre 2013. On va se reconfronter au grand public avec notre petit stand de geeks avec ce coup-ci un truc à annoncer : Iloth participera aux RMLL2014 en fournissant le réseau lors de l'évènement qui se déroulera en Juillet de l'année suivante. On a d'ailleurs réussi à faire venir quelques nouveaux membres dans l'asso à ce moment là. On atteint la dizaine de membres dont environ 7 ou 8 actifs. Je me retrouve non-officiellement propulsé trésorier de l'asso et je commence à faire mumuse avec Dolibarr (beurk) et la banque (beurk beurk).

Le début des emmerdes. Le poste de trésorier est clairement le plus chiant de l'asso. C'est le seul où il y a constamment de la paperasse. Générer des factures et tout. Communiquer avec la banque est d'un compliqué avec leurs horaires d'ouvertures qui ne conviennent pas vraiment avec la vie active et le fait qu'ils demandent constamment des papiers avec des confirmations toussa. Bref ce sont des emmerdeurs de première qui nous font suer encore maintenant.

Fin Octobre, on ouvre notre première ligne ADSL pour notre cobaye belge. C'est de la marque blanche de chez FDN. En gros Iloth ne fait pas grand chose à part facturer l'abonné et recevoir une facture de la part de FDN. Mais on a un service existant pour le grand public !

Le mois suivant on sera également aux JM2L pour nous chauffer pour les RMLL approchant. Nous y serons à trois membres dans une bonne ambiance décontractée le temps d'un samedi.

2014 : année ReuMeuLeuLeu

L'AG de Janvier instaure officiellement un rythme mensuel de réunion chaque premier lundi du mois.

Le site passe sur un Wordpress auto-hébergé en conservant son design fait main convertit pour l'occasion en thême Wordpress. Le but de l'opération est de permettre à plus de membres de le manipuler en lieu et place du site statique précédent.

Le rythme de croisière va s'intensifier pour l'organisation des RMLL. Le but est de fournir du réseau neutre à haut débit lors de l'évènement, à la fois sur le campus universitaire mais également lors du "village grand public" organisé sur l'esplanade Charles de Gaulle. Pour ceux qui ne connaissent pas Montpellier, cet esplanade est en plein centre ville, une grande allée bordée de platanes. Le défi va être de parvenir à y faire arriver du réseau. De nombreuses réunions vont avoir lieu auprès de la FRUL (l'association regroupant d'autres assos locales pour l'orga des RMLL).

On a également organisé une petite conf à propos de la neutralité du net organisé dans les locaux du Bib le 16 Mai. C'était un peu à l'arrache mais au final ça s'est bien passé, même si c'était ma première fois.

À côté de cela, dans le monde des cinémas alternatifs se montent un projet de distribution dématérialisé des films : DCP Bay. Iloth participera en fournissant deux connexions ADSL au cinéma Utopia qui est dorénavant membre de l'asso. Nous les avons aidé en câblant un peu leur bâtiment et en mettant en place logiciellement le client torrent et compagnie. Le cinéma peut maintenant recevoir certains de ces films sans passer par des disques durs externes envoyés par transporteur. Un projet bien sympas auquel je suis fier d'avoir participé et j'ai d'ailleurs un magnifique sticker rond en forme de tranche de citron !

Juillet arrive et nous voilà donc en train de grimper dans les arbres de l'esplanade avec une grande échelle et un touret de fibre optique au milieu des passants.

Les premiers petits arbres de l'esplanade

Les premiers petits arbres de l'esplanade

Les premiers petits arbres de l'esplanade

Les premiers petits arbres de l'esplanade

On tire près de 1250m de fibre dans les arbres en espérant qu'elle survivra une semaine. C'est en partie réussie (une seule fibre pétée paralysant qu'un tiers des stands, on comblera avec un peu de wifi). Malgré quelques soucis de MTU et compagnie le réseau fonctionnera sur le campus. J'en aurai beaucoup chié à cause du manque de sommeil au point de ne plus trop parvenir à réfléchir le jour J. L'évènement est un succès et permet à l'asso de beaucoup se voir et être active, l'ambiance est au beau fixe, les voyages pizza et les restaus pour adultes soudent un peu plus l'équipe.

Moment d'euphorie lors des RMLL2014

L'euphorie lors des RMLL2014

En Août un membre offre un Edge Router Pro à l'asso qui permettra de délester notre unique serveur de la partie réseau. Nous possédons donc un routeur, un switch et un serveur. Un FAI dans moins de 300W.

Pour finir l'été le rendez-vous annuel de l'Antigone des assos. Probablement une des meilleure année, avec à peu près toute l'équipe Iloth présente toute la journée pour faire découvrir l'asso à tout le monde.

Stand 2014 pour l'antigone des assos

Stand 2014 pour l'antigone des assos

On a réussi à gagner encore quelques membres.

Et les trois derniers mois seront plutôt calmes.

2015

On commencera l'année en Mars avec une projection du film Citizen Four au cinéma Utopia lors d'une soirée débat co-organisé par Montpellier Journal et Montpel'libre.

L'AG a lieu comme d'hab courant Mars dans les nouveaux locaux du Bib et je suis désormais Président ! Après avoir tenu tant bien que mal la tréso deux ans et demi à base de fichier texte pour savoir qui doit payer un abo vpn, qui doit payer un abo adsl, faire le lien entre un pseudo et un vrai nom/prénom, savoir que tel numéro de ligne = telle personne…, je suis désormais président. Plus à moi de gérer Dolibarr \o/

On remarque déjà qu'une fois les RMLL passées, le rythme de l'asso diminue drastiquement et que la motivation connait une baisse drastique. Cependant, l'asso lance des idées de projets qui ne seront jamais menés à bien… Il a également été décidé d'organiser deux permanences par mois afin de pouvoir organiser des ateliers/débats mais celles-ci n'auront lieux que trois fois faute de participants (internes et externes). C'est dommage on aura réussi à y recruter un membre très actifs par la suite.

Nous menons une campagne de contacts des députés pour les pousser à ne pas voter pour l'instauration des boîtes noires dans les réseaux opérateurs. Nous les avons contactés par courrier postal et n'aurons malheureusement qu'un seul retour (négatif) des neufs députés contactés. Bref j'en repartirai pas mal refroidi de cette expérience politique.

On tente de recruter de potentiels membres en zone blanche pour fournir de la connectivité wifi. Trois ans plus tard force est de constater que … bha non, ça ne se fera jamais.

L'activité globale de l'asso décline continuellement depuis le passage des RMLL. Le nombre de membres réellement actifs commence même à diminuer. Je me lance dans le projet des briques internet en espérant que ça ramène du sang neuf et que ça remotive les membres actuels.

Je parvient à écouler une première fournée de 10 briques que j'aurai déballé, monté, installé, configuré, vendu moi même. C'est globalement assez chiant. Pour au final tomber en panne quelques jours après ou alors n'être jamais mis en service. Assurer le SAV est une galère ultra chronophage.

Rien de mieux pour démotiver quelqu'un.

Bref les restaus mensuels s'enchaînent toujours, mais je suis encore seul à devoir les organiser. Si je ne le fais pas… ça se fait juste pas. Mais quand on y est ça se passe toujours bien, juste une bande de potes contents de se retrouver chaque mois pour discuter de tout et de rien autour d'un peu de bouffe. Socialement le but de l'asso est complètement rempli et depuis qu'on fait moins de technique (vue que c'est déjà en place) bha l'asso se casse carrément la gueule.

Tiens, en passant, en Décembre on connait notre première petite panne de quelques heures. Comme quoi on a beau être une ptite asso et tout, le service rendu est tout de même assez fiable.

2016

Cette année l'AG courant mars aura lieu dans les nouveaux locaux du Bib (oui encore des nouveaux :-) ). L'équipe continue de s'étioler avec de moins en moins de membres actifs et de participants.

Les restaus mensuels continuent de se dérouler toujours dans la bonne humeur mais on y croise de moins en moins souvent de nouvelles têtes et on y parle de moins en moins de l'asso et même au fur et à mesure, même les habitués ne sont plus 100% dispos.

Notre installation dans le datacenter de Cogent à Montpellier

Notre infra au datacenter Cogent, imaginez à peu près la même chose dans celui de Zayo

Je présente deux confs, une dans un fablab de Montpellier pour y présenter la neutralité du net et aborder vite fait la brique Internet et une seconde dans un Lycée à Mendes sur les mêmes sujets. Je suis à peu près le seul membre actif désormais. La motivation est désormais au plus bas.

Montpel'Libre (un GUL de Montpellier) promeut de plus en plus l'initiative de dé-googlisation de Framasoft. Un début de collaboration un peu plus poussé émerge alors avec Montpel'Libre mais également le Bib pour monter un CHATONS local. En s'appuyant sur les trois associations nous toucherions un large public pas forcément initié, avec des lieux de rencontre et une infrastructure réseau déjà existante. Qu'est-ce qui pourrait déconner ?

Il est décidé de repartir sur une seconde fournée de dix briques à distribuer. Je le fait un peu à reculons mais étrangement les autres membres sont intéressés pour continuer cela (sans avoir participé au premier batch). Bref on les prépare à plusieurs et je parviens à ne pas garder tout le stock et n'en avoir que deux. Ils se débrouilleront avec les autres briques. C'est triste de voir que le but est désormais de se débarrasser des tâches à faire.

Je rédige également quelques articles sur le site d'Iloth qui auront un succès pas trop dégueu. C'est d'ailleurs en partie ce qui m'a remotivé à reprendre en main mon site perso. Même deux ans plus tard, certains articles amènent encore quelques visiteurs sur le site de l'asso, c'est une bonne pub naturelle. Malheureusement personne d'autres ne semble intéressé pour en rédiger.

Et voilà pour l'année…

2017 ou la vache maigre

L'AG sera l'occasion d'avoir un nouveau président pour me remplacer, je vais pouvoir m'éclipser petit à petit. Pas de bol quelques semaines plus tard il abdique sans donner aucune raison et on ne le revit plus jamais… Dans la foulée, le reste du bureau démissionne également et l'asso se retrouve sans plus personne.

Un début de drama commence à éclater lorsqu'un des membres de l'asso prend peur de la pérennité de son VPN et discute avec son avocat pour éventuellement mettre encore plus en péril l'asso voire certains membres. C'est tout pile ce qu'il fallait pour donner envie de reprendre le bousin…

Bref quelques temps après une Assemblée Générale Extraordinaire est organisée où un nouveau Bureau reprend les rennes de l'asso. L'asso est donc officiellement sauvée. Le drama est finalement étouffé avec plus de peur que de mal puisque de toute façon rien ne pouvait être reproché à quiconque et que l'asso (ou ses ressources) ne pouvait pas être reprise par une seule personne.

Cette année, pas de foire associative vu que personne n'a rien prévu, on cède gracieusement notre stand (pourtant vraiment bien placé cette année) au Bib.

2018

Bon bha on est déjà à la moitié de l'année mine de rien donc j'en profite pour faire le bilan vu d'ici. Bha malgré toute la bonne volonté du nouveau Bureau, bha … il n'y a plus de membres actifs. L'asso vivote tant bien que mal.

D'un point de vue politique, le Bureau a tenté d'arranguer les foules concernant la loi européenne concernant le copyright toussa toussa. Bon bha, en dehors du Bureau personne n'a rien fait. Bref, no comment.

Et voilà.

BIM : le CHATONS montpellierain

Tiens et d'ailleurs faisons un point sur le projet de CHATONS en collaboration avec les trois assos. Bha j'ai monté un Sandstorm (plateforme de cloud pour avoir pleins d'applications sans administration toussa, je ferai un article dessus un de ces quatre) sur lequel on a commencé à organiser pas mal de trucs.

Logo de BIM

Bienvenue sur l'Internet Montpellierain : Bib Iloth Montpel'Libre

Niveau matos on a désormais un bon gros serveur bi-proc avec 64Go de ram toussa. On a tout pleins d'IP dédiées aux différents services. Une instance Etherpad lite, un Pastebin, un Studs (Framadate) et bha on est deux et demi à avoir fait tout ça. Et au final on a été que deux et demi à s'y investir. Du coup bha au bout de deux ans, plus envie d'y toucher. Je vais maintenant faire comme les autres, attendre de voir ce que font les autres.

Bref j'ai lâché l'affaire et du coup j'imagine que c'est la mort du projet.

Conclusion ?

Je suis triste que l'asso soit morte mais d'un certain point de vue j'y ait fait d'excellentes rencontres. J'y ai trouvé une bande d'amis, j'ai testé pleins de restaus du secteur, j'ai appris pas mal de truc de réseau, j'adore tout l'environnement de la FFDN, j'aime pas devoir gérer les gens surtout dans une structure associative.

Une association n'existe que par l'investissement de ses membres. On est jamais servi QUE par soit même.

Iloth a toujours eu un fonctionnement assez libre. Tu veux rentrer dans l'asso pour faire des trucs : ok pas de soucis, mais c'est toi qui va le faire ! Faut pas juste vouloir donner un coup de main, il faut vouloir faire le truc en question et ne pas être paralysé de peur de se planter. Fais ce que tu veux (si c'est dans les clous de l'asso), l'asso peut te filer une place sur un serveur, un peu de réseau, mais n'attend pas à ce qu'on le fasse à ta place, au mieux tu auras un coup de main.

Et surtout ne venir qu'avec une idée n'est pas vraiment utile. Apporter une idée, c'est inscrire quelque chose sur la todo-list de quelqu'un d'autre.

Si tu viens avec une idée c'est à toi de la réaliser !

Bref si vous êtes motivés pour faire avancer les choses, apprendre pleins de trucs, découvrir des nouveaux gens, participer à Iloth est génial. N'hésitez pas à le faire et à vous rendre sur le salon de discussion. L'asso a un grand besoin de nouveau souffle, a du matos, un peu de pognon, il ne manque que des cerveaux motivés.

Moi pour l'instant, je prends des vacances, je reviendrai ptet quand il y aura de la vie.

Termtosvg : capturer la cli dans un svg

Capture faites lors de la rédaction de cet article ! Peut prendre un peu de temps pour charger.

L'article en cours de rédaction ~3min

Voilà vous le voyez sous vos yeux ébahis : Termtosvg est un petit logiciel en python qui permet d'enregistrer ce qu'il se passe sur votre terminal et d'en faire un joli SVG.

SVG est un format graphique permettant de faire des images zoomables sans perte de qualité et "sélectionnables" car les données enregistrées ne sont pas des pixels mais des éléments graphiques définis de manière procédural. Il est donc possible de sélectionner le texte du SVG pour faire un copie/coller.

Bref c'est un format bien comme tout, le seul soucis c'est qu'il a une légère tendance à rapidement devenir assez massif surtout quand c'est animé. Par chance ça se compresse assez bien dans le format gzip ce qui devient donc un fichier .svgz qui est bien interprété par les navigateurs nativement.

Termtosvg est donc un excellent outil pour présenter voir faire des tutos de manips faites en console. Je l'utiliserai probablement pour de futurs articles.

Bon par contre un petit point négatif, c'est que par défaut le navigateur n'essaie pas de décompresser les svgz s'il ne reçoit pas le bon content-encoding. Vous me direz c'est tout justement à quoi sert le content-encoding. Ouai mais malheureusement, dans mon cas, nginx et hugo server n'envoient pas le bon content-encoding pour svgz du coup j'ai pas de preview avec hugo. Bon et j'ai dû faire une ptite modif à nginx pour qu'il envoie ce qu'il faut :

location ~ \.svgz$ { add_header Content-Encoding gzip; }

Bon c'est trois fois rien mais c'est dommage que ce soit pas par défaut…

Bon voilà. C'est quand même pratique le rendu est propre (quelques ptits glitch mais ça devrait s'arranger, le projet est super jeune).

Par contre il n'y a pas moyen de contrôler l'animation (play/pause/barre de progression) ce qui peut être un poil gênant pour des animations un peu longue comme dans l'exemple. Ptet qu'un jour les navigateurs ajouteront cette possibilité (rien à attendre à court terme).

Pour ceux intéressés sur le fonctionnement interne, dans sa série Github All Stars, Artur Skowroński a détaillé la bête dans cet article.

Bref vous le trouverez dans toutes les bonnes distros nunux ;-)

15ème article d'avancement du Librem 5

Ceci est une traduction libre de cet article concernant les avancées de la société Purism concernant le smartphone Librem 5. L'article original est sous licence CC BY-SA 4.0 tout comme ma traduction.

Ce smartphone a bénéficié d'un crowdfunding et a pour but d'apporter une alternative à Android en proposant un OS basé sur Linux et toutes les briques logiciels opensource qui vont avec. Ils collaborent avec le projet Gnome, le projet KDE, UBPorts et le projet Matrix. Ils sont assez transparents sur leurs avancées et sont reconnus pour leur ligne de laptops.

Bref voilà l'article :


Ces dernières semaines, l'équipe du Librem 5 a bossé d'arrache-pied pour améliorer la pile logicielle ainsi que pour finaliser les schémas du kit de dev. Voici les progrès les plus marquants réalisé.

Côté logiciel

Images

Les images produites pour la carte i.MX6 utilisent désormais phosh en shell par défaut et nous expérimentons sur PureOS comme OS de base (en lieu et place de Debian Buster). Il y a désormais une image de machine virtuelle en architecture x86_64 en cours de création. Vous pouvez suivre ces instructions pour en avoir une copie et la faire tourner. Cette machine virtuelle utilise la même résolution qu'utilisera le Librem5.

Alors que les images pour i.MX6 ont été faites pour le matériel actuellement en possession de l'équipe, elle continue d'être modifiées pour être utilisée sur la carte de dev i.MX8 et le téléphone. Soit dit en passant, lors de nos investigations concernant le CPU du i.MX8, des soucis concernant la liberté du code ont été repérés et devront être résolus. Pour en savoir plus à ce sujet, consultez l'article de blog Résoudre les premiers soucis de FSF RYF pour le Librem5 (FSF RYF signifie Free Software Foundation - Respect Your Freedom).

L'image construite pour l'i.MX8 peut désormais booter un kernel mainline très basique (au lieu du kernel du constructeur). La prochaine étape est de faire fonctionner plus de composants ( comme l'affichage) et de reverser à la communauté ces changements. Avec tout cela, l'image pour l'i.MX8 s'annonce plutôt bien.

Phosh / Wlroots

À un moment ou à un autre, les utilisateurs seront sur leur Librem5 la nuit, donc avoir redshift fonctionnel permettra d'amoindrir l'impact de l'écran sur nos yeux. Du boulot a été fait afin d'implémenter certaines API DBUS de Mutter dans Phosh afin, par exemple, de gérer la configuration de l'affichage ou bien de supporter redshift. Désormais, phosh peut détecter les sorties vidéos, les modes vidéo supportés et les communiquer comme le fait mutter/gnome-shell afin que nome-settings et gnome-settings-daemon soit content. C'est la base pour le futur support du gamma (redshift). Cela dépend d'un patch pour wlroots en cours de discussion.

D'autres améliorations ergonomique pour phosh ont été apportées. La temporisation  de l'écran de verrouillage a été augmentée pour accorder plus de temps pour se connecter. Également, les favoris et l'écran d'accueil ont été corrigés pour correctement placer les colonnes et ajouter des barres de défilement quand nécessaire.

Puisque phosh est le shell et qu'il travaille étroitement avec wlroots, ils sont tout deux des éléments centraux des images. Il y a eu des mises à jour fréquentes afin que wlroots soit sur la dernière version upstream existante. Un bug mineur a été corrigé sur wlroots afin d'améliorer la gestion des erreurs de compilations sur l'architecture armhf. En sus, le support des modes vidéos personnalisés a été ajouté à wlroots. Les devs sur phosh travaillent sur l'intégration des prompts-systèmes Gcr. Cela permettra de résoudre une foultitude de problèmes avec les fenêtres modales pour les authentifications comme par exemple pour le code PIN, le PUK, les mots de passe, les smart-cards et le porte-clef en utilisant ce qui est déjà intégré à Gnome.

Clavier

Des avancées ont aussi été faites sur le clavier visuel (virtboard) ce qui fait que désormais il est intégré aux images. Afin que virtboard soit affiché/caché lorsque nécessaire, l'intégration d'une méthode d'entrée dans wlroots était un pré-requis et l'équipe GTK+ a été contactée concernant l'intégration du code de cette méthode d'entrée. Nous travaillons a l'élaboration d'un patch pour sécuriser la méthode d'entrée dans notre compositeur. Il y a eu des retours continus pour l'intégration du protocole de clavier virtuel. En plus, le clavier s'adapte beaucoup mieux maintenant !

Calls

L'application calls a également été ajoutée dans les images pour un accès simplifié. Dans l'appli, l'envoi des fréquences DTMF a été ajouté comme cela il est possible d'entendre les fameux bips lors de la composition des numéros.

Afin de rendre calls plus robuste,la possibilité de faire des tests unitaires, dans oFono le backend de l'appli, en utilisant phonesim simulator a été envisagé. Cependant, faire tourner ofonod nécessite les privilèges root pour réquisitionner le nom org.ofono, ce qui rend les tests quasiment infaisable. Cependant, des tests unitaires ont été créés pour le fournisseur d'interface de Calls en utilisant l'implémentation dummy, ainsi que des test pour l'interface Origin et Call.

Libhandy

Le widget GTK+ libhandy a grandi également. HdyColumn a été ajouté afin d'ajouter le redimensionnement dynamique de colonne. Des tests unitaires ont fait leur apparition pour HdyArrows (utilisé pour le balayage directionnel). Une toute première version de libhandy est sortie et la version v0.0.1 a même été envoyée sur Debian experimental !

Epiphany / Gnome Web

Le navigateur web du Librem5 sera Epiphany donc les modifications pour le rendre adaptifs ont été implémentés upstream pour améliorer l'utilisation sur de petits écrans. Un menu interne a commencé a être implémenté mais n'est pas encore finalisé.

Messaging

Une application de démo s'appuyant sur libpurple a été esquissé afin qu'une conversation XMPP soit établie vers Dino. Pour le chiffrement, une conversation OMEMO tournant sur libpurple et le plugin Lurch a pu être faite. La récupération et l'affichage d'avatar et d'information de compte depuis une liste stockée en xml a été réussie. L'interface ofono pour les SMS et XMPP a été implémentée dans l'application de démo également.

Côté matériel

Des facteurs extérieurs ont causé des retards reposants la date initiale de livraisons de Juin concernant les kits de devs. Lorsque nous établissions les schémas pour les cartes de devs, toutes les infos n'étaient pas disponibles ce qui nous a poussés à investiguer plus concernant de nombreux composants ( ex : les caméras, WLAN+BT, les batteries, les interrupteurs, les boutons, etc). En plus des circuits devaient être ajoutés avant que les schémas puissent être considérés comme prêts par l'équipe de validation externe en charge de leur impression. L'équipe matériel du Librem5 a donc finalisé tout ça et en est à la phase de commande des composants pour envoi chez le fabricant des cartes.

Notre estimation au doigt mouillé actuelle pour l'envoi des cartes de dev est d'Août 2018, nous vous tiendrons au courant plus en détail dans un futur article de blog plus détaillé.

Communauté

Le salon de discussion matrix du Librem 5 a explosé avec de nombreux retours et questions. Certains membres de la communautés se sont même mis en quête de bugs à corriger et d'ajout de documentation. Suite aux demandes de la communautés, il y a désormais une image de machine virtuelle en x86_64 disponible qui ressemble comme deux gouttes d'eau à ce qu'utilise notre équipe sur les cartes i.MX6.

La collaboration entre Purism et la communauté Plasma se poursuit également. Il y a désormais des version arm et aarch64 des flatpaks de Plasma. L'équipe Purism réfléchie activement à la création d'image Plasma pour les cartes i.MX6.

La documentation pour dev a connu d'important modifications pour mieux guider tout le monde au bon endroit :          - La page volontaire a été mise à jour avec des instructions plus claires sur comment participer.     - Quel que soit le type de carte (physique ou virtuelle), des étapes communes ont été ajoutées à la page des premières étapes     - Il y a dorénavant des instructions sur la mise en route de l'image x86_64     - Un référentiel de contribution a été posté afin d'établir une charte des process de communication     - Une page GTK+ a été ajoutée avec des exemples d'applications et l'ajout de documentation sur les labels adaptatifs.     - Une page des contraintes de téléphone a été ajouté pour souligner quelques contraintes spécifiques à prendre en compte lors du dev d'applications pour le Librem 5.

Nous étions récemment au GUADEC en Espagne où nous avons pu interagir avec beaucoup de personnes attendant le Librem 5. Nous communiquerons plus sur cet évènement lors d'un prochain article de progression.

Photographie de tous les participants au Guadec 2018

Un grand Merci à toutes les équipes extérieures nous ayant aidé en révisant et intégrant nos modifications dans les différents projets upstreams. Le temps et les contributions de chacun sont grandement appréciés.

C'est tout pour le moment. Restez-là pour de prochaines mises-à-jour à venir !

Heather Ellsworth


Cela fait plusieurs fois que je ne sais pas comment traduire upstream donc je vais l'expliquer ici une bonne fois pour toute.

Dans le monde du libre, les codes sources sont disponibles et peuvent être modifiés/adaptés par chacun. Cependant ces modifications ne sont pas forcément répercutées dans le projet d'origine. Si un dev fait des modifs dans un logiciel, ce nouveau logiciel basé sur un autre s'appelle ça un fork. Mais ce dev peut tout à fait avoir l'intention que ces modifs soient intégrées au projet d'origine, il va donc les soumettre à l'équipe du projet. Cette équipe peut choisir d'intégrer ou non ces modifs.

Si elle accepte, tout va bien dans le meilleur des mondes. Si elle refuse (parceque le code est moche, buggé, dans un autre langage, ajoute des dépendances non voulues, la façon de faire ne convient pas, le dev en question n'est pas en odeur de sainteté, le code en question n'est pas forcément très légal, le projet ne veux tout simplement pas de ces modifs, l'équipe est aux abonnés absents, bref pour n'importe quelle raison), le dev peut soit laisser tomber et pouf ça tombe dans l'oubli, soit son projet devient un fork et peut alors soit devenir complètement indépendant soit continuer à suivre le projet d'origine en y intégrant ses modifs. Cela peut être uniquement temporaire et peut également être à l'initiative du dev en question qui ne désire pas forcément fusionner son travail avec le projet d'origine. Il existe désormais deux projet, le projet d'origine et son fork. Le projet d'origine est appelé upstream et l'autre le fork.

Dans le cas présent, les équipes de Purism créer des forks de plusieurs projets existants pour ajouter les nouvelles fonctionnalités nécessaires, il les testent et compagnie. Quand le résultat est acceptable, ils soumettent leur fork aux projets upstreams en espérant que ce soit acceptés histoire de ne pas avoir à continuer leur fork pour que les projets fusionnent.


Bref niveau logiciel ça a l'air de pas mal avancer sur tous les plans. Cela dit côté matos, on voit les premiers retards se confirmer. Bon c'est pas trop trop étonnant mais bon ça jette toujours un léger froid.

On sent quand même que la collaboration vis-à-vis de Plasma semble assez légère. J'espère qu'à la sortie, l'équipe de KDE saura proposer un truc suffisamment stable et utilisable et pas juste un proof-of-concept bâtard.

Les Vidéos Primitives

Je suis fan des vidéos primitives. Vous êtes jamais tombé dessus ?

Ce sont des vidéos de personnes simulant la vie primitive c'est-à-dire sans technologie. Alors ça se contente principalement de construire des trucs plus ou moins utiles.

Mais il y a des codes à respecter :

  1. Partir de 0 : pas d'outil ou autre. Il faut se construire ses propres outils à partir des ressources à disposition localement.
  2. Ne pas parler : les vidéos ne sont pas des tutos. La partie audio se contente des bruits ambiants.
  3. Être dans la nature. Faut pas faire ça dans le jardin de mamie avec les immeubles dans le fond.
  4. Être à moitié à poil. Bha ouai on est primitif mais pas trop non plus. L'uniforme habituel est le bermuda uni et c'est tout (enfin probablement un slibard/calçouf j'imagine mais dur à vérifier)
  5. La caméra est en plan fixe de façon à pouvoir être manipulée par l'acteur qui la place puis vaque à ses occupations.
  6. Bonus point : être asiatique. Ouai les trois quarts des youtubeurs qui font ça sont asiatiques. Ce sont les rois de la discipline.

Voilà pour les règles.

Après faut avouer que certains les prennent plus ou moins au pied de la lettre. En faisant gaffe on entend parfois des bruits de motos dans le fond, ou alors certains ont recours discrètement à un outil non fait main, certains ne sont même pas asiatiques ! Généralement ça se pratique seul, mais on trouve des gugusses qui se mettent à plusieurs pour ça et souvent la caméra est gérée par une personne dédiée que l'on ne voit/entend pas mais qui parfois bouge la caméra, bref ça se professionnalise.

Au commencement : Primitive Technology

La première chaîne à se lancer dans la discipline est Primitive Technology dont la première vidéo a été publiée le 2 mai 2015. Ce gars est un Australien qui s'est payé un bout de terrain dans une forêt et a commencé à se faire des ptites cabanes. John Plant (ouai c'est son nom) s'est filmé lors de ses tribulations et a connu un succès d'abord un peu lent puis fulgurant. Il a ouvert un blog qui détaille chaque vidéo en fournissant des explications et tout.

Ses vidéos contiennent également des sous-titres détaillant ce qu'il fait.

Il me semble qu'il a depuis investit un second terrain pour pouvoir continuer ses aventures. Il cumule plus d'un demi milliard de vues à l'heure actuelle. C'est le big boss du domaine mais son rythme de publication est désormais assez faible.

Voilà sa chaine et surtout son flux rss.

L'engouement

Du coup quand un toituyauteur publie pas assez vite, on va voir les concurrents. Et là BIM ! Il y en a des cargaisons maintenant.

Depuis 2017 toute une tripottée de nouvelles chaînes se sont créées en reprenant le concept quasi à l'identique. La plupart sont d'origine asiatique donc j'imagine que là-bas ça doit être super populaire. Bref il y a des thailandais, vietnamiens, philippins… mais bon en vrai on s'en fout : les titres de vidéos sont en anglais et ça parle pas donc c'est parfait on peut profiter sans incompréhensions.

Primitive Life

Je sais pas pourquoi mais cette chaîne est dans mon top. Je sais pas pourquoi, mais ce gars m'apparaît sympatique avec son rythme et sa démarche bien à lui. Je saurai pas l'expliquer mais j'accroche particulièrement.

Je ne sais pas exactement d'où il est, mais je le soupçonne d'être vietnamien et de s'appeler Chris Wong. Bref il a commencé il y a moins d'un an et est passé du stade de débutant au stade de roi du −−−−−− en quelques vidéos. Je veux pas vous le spoiler, mais vous verrez vite.

Du travail de pro même si parfois on entend quelques bruits de civilisation mais bon ça sort pas pour autant de l'ambiance.

Bref voilà le lien de sa chaîne et son flux rss.

Primitive Survival Tool

Là c'est du travail d'équipe. Deux hommes pleins d'énergie. Mais vraiment plein d'énergie.

Ils construisent pas mal de cabanes/huttes différentes. Et ça se déroule comme un épisode de Télétubbies avec le réveil/sortie de la cabane/boulot boulot/retour à la cabane pour faire dodo.

Ils ont par contre recours à deux outils assez discrètement : une tête de hache enfichée dans un baton et un ptit outil pour percer le bamboo. C'est un peu dommage mais bon ils restent très bons surtout pour creuser !

Ils publient assez régulièrement, car ils ont commencé il y a six mois à peine. Voilà le lien de leur chaîne ainsi que leur flux rss.

Primitive Life

Ouai c'est le même nom qu'une autre chaîne… La particularité de celle-là est d'être tenue par une femme.

Ça change pas grand-chose au concept mais bon. Il y a un plus grand effort vestimentaire (pas forcément dans le bon sens) mais sinon elle s'en sort vraiment super bien et a tendance à pondre des vidéos un peu plus longues que les autres protagonistes.

Le rythme de publication est pas trop régulier. Il y a des périodes de rush et des périodes sans rien mais bon. Voilà donc sa chaîne youtube et son flux rss.

Et tout un tas d'autres

Bon je vais pas vous le cacher mais en fait on tourne assez vite en rond. Et j'ai pris pour habitude de mater ces vidéos en acceleré (] dans mpv) en 1.66x.

Ensuite ?

Je pense qu'il faudra un peu de renouveau dans la communauté assez vite pour pas que ça ne s'essoufle de trop. À vraie dire ils s'inspirent tous les uns des autres et, donc, on retrouve le même genre de construction chez tous.

Les vidéos ont tendance à stagner à partir du moment où ils parviennent à se procurer un approvisionnement de flotte, de filtrage de la flotte et un bassin.

J'avoue ne pas trop savoir ce qu'ils pourraient faire pour aller plus loin. Passer à l'âge de cuivre pour se fabriquer des outils ? J'imagine que c'est un peu plus compliqué pour un vidéaste de trouver un terrain avec les ressources nécessaires.

Bref seul le temps nous le dira.

Kakoune

Après avoir un peu utilisé Amp j'utilise désormais kakoune depuis quelques mois. En fait à la base je n'avais pas l'intention de migrer aussi vite vers un autre éditeur mais pas de bol, une mise à jour de ncurses à rendu Amp inutilisable à cause de bugs graphiques dans tous les sens. Une mise à jour était nécessaire mais du coup je suis allé voir un peu ailleurs voir ce qui se faisait.

J'ai été tenté par Xi mais je me suis rappelé d'un autre qui me faisait de l'œil depuis quelques années : Kakoune.

C'est pas du Vi mais c'en est pas loin non plus

Capture d'écran de l'accueil de Kakoune avec Clippy indiquant le changelog important

Welcome to Kakoune

Donc ce cher petit est modal (ouai j'essaye que ce genre d'éditeur mais j'aime beaucoup ce principe). Il se base également sur des actions (ou verbes) comme par exemple supprimer/remplacer… mais contrairement à Vi, la syntaxe est dans l'autre sens : d'abord on sélectionne le texte sur lequel on veut effectuer une action puis on choisi l'action. C'est le ptit détail qui a l'air assez insignifiant mais qui permet de mieux borner ses actions puisqu'avant même d'effectuer une action je vois la sélection sur laquelle elle sera appliquée.

Par défaut

Kakoune est assez récent et n'est donc pas encombré d'un lourd héritage et surtout possède des réglages par défaut vraiment utilisables. Après quelques mois, mon fichier de config ne contient que trois lignes. Pas besoin d'aller fouiller dans les confins de la doc ou autre pour le rendre utilisable au quotidien.

Par défaut il y a la coloration syntaxique, par défaut il y a l'auto-complétion automatique, par défaut il y a une status bar bien foutue. Bref par défaut c'est déjà suffisant pour la plupart des utilisations.

Aide contextuelle

Il y a toujours une petite aide contextuelle sous forme du célèbre Clippy qui reprend enfin du service ! Mais si Clippy ! Le ptit trombone de Word 97 avec ses supers conseils ! Et bha il est là ! Et mine de rien ça aide vachement et évite d'aller voir la doc pour des ptits trous de mémoire réguliers.

Un exemple ? Pour sauvegarder il faut taper :w puis Entrée, mais si vous n'appuyez pas tout de suite sur Entrée, vous verrez alors en bas de la fenêtre ceci :

capture d'écran de l'interface de Kakoune montrant la status bar et Clippy

Clippy the Almighty

Tout en bas il y a la status bar que je détaillerai plus loin. Et juste au dessus sur fond jaune (le thême de couleur par défaut est pas des plus seyant) vous avez le Clippy qui vous indique à quoi correspond l'action en cours et les options possibles.

Status bar

Dans tous les logiciels en TUI on retrouve souvent une status bar en bas. Kakoune ne fait pas exception, voilà ce que vous y trouverez par défaut :

  • Le nom du fichier en cours d'édition
  • La position dans le fichier sous la forme Ligne:Colonne
  • Le [+] indique le contexte
  • Le mode actuel
  • Le nombre de sélections (et donc de curseurs)
  • Les informations concernant le client/serveur

Et bien entendu vous pouvez changer tout cela pour afficher ce que vous voulez comme l'indique la doc.

Multi-curseur

C'est une fonctionnalité qu'on retrouve de plus en plus souvent et c'est vrai que c'est pas mal utile quand même. Au lieu de n'avoir qu'un seul curseur où écrire, vous pouvez en avoir plusieurs simultanément.

exemple 1

Par exemple, juste au dessus j'ai fait une liste d'éléments alors que lors de la rédaction j'ai fait une phrase. Du coup comment je l'ai découpée puis transformée en liste ?

Tout d'abord je sélectionne toute la ligne avec x, ensuite je lance la commande de sélection avec s ce qui ouvre un prompt en bas. Là je rentre les éléments que je veux sélectionner pour y placer les curseurs, dans mon cas , pour sélectionner chaque virgule. Après avoir validé avec Entrée je me retrouve avec tous mes curseurs. Maintenant un petit d pour supprimer les virgules, puis passage en mode édition avec i et enfin Entrée pour ajouter les retours à la ligne.   - pour créer les puces et voilà.

N'oubliez pas de virer tous les curseurs à la fin en appuyant sur la touche Espace.

Seek&Replace

Une fonction souvent utilisée est de remplacer une chaîne de caractère par une autre. Sous vim ça se ferait avec le fameux s/machin/truc/ avec éventuellement le % pour le faire sur tout le fichier en cours d'édition.

C'est absolument pas visuel et du coup ça a un fort potentiel de casse-gueulerie.

La méthode à la Kakoune pour ça est bien plus visuel :

Tout d'abord faut sélectionner la zone de texte où vous voulez l'appliquer (% pour tout le fichier). Par exemple pour le faire de la ligne 10 à 18 on se place sur la ligne 10 avec 10g puis on sélectionne jusqu'à la ligne 18 avec 18G (remarquez le G majuscule qui permet de sélectionner). Ensuite on démarre une sélection avec s puis vous tapez la chaîne de caractère à modifier machin et vous validez avec Entrée. Vous voyez du coup toutes les occurrences qui seront affectées par vos modifs. Et là c bidule pour changer le texte par "bidule".

C'est pas plus compliquée que la méthode vim et plus safe.

Verdict ?

Vous vous rendez probablement compte que du coup dans kakoune il faut prendre les bons réflexes pour sélectionner le texte que l'on veux modifier, c'est l'élément crucial. Une fois cette habitude acquise, l'utilisation est assez simple et rapide.

Il est bien plus avancé dans son dev que Amp par exemple. Pour de l'édition de texte c'est franchement génial. Pour coder j'imagine que ça ne plaira pas à tout le monde.

L'écosystème de plugin de vim est une sacrée force mais au final j'aime pas installer des cargaisons de plugins pour pouvoir me servir d'un éditeur de texte. Le second avantage de vi(m) est son omniprésence (intégré à busybox toussa). Ce qu'aucun éditeur de texte ne pourra jamais concurrencer.

Bref ces 5 derniers mois je l'ai pas mal utilisé et je vais continuer.

Tant pis pour Amp qui m'avait bien plu mais ton bug m'a fait goûter/adopter autre chose.

:wq

5000$ Compression Challenge

Ce second partage avec vous est une perle que je souhaitais vous montrer depuis des lustres mais je n'avais pas de moyen bien pour vous le partager auparavant.

Il s'agit d'un échange de mail entre Mike Goldman (j'ai pas trouvé d'infos) et Patrick Craig qui est un informaticien avec un site perso.

Notre cher Mike a décidé de lancer un concours avec à la clé 5000$ de gain en l'an de grâce -3 avant Facebook.

Le challenge

Le participant choisit une taille de fichier. Il recevra ensuite un fichier de la taille voulue et devra renvoyer ce même fichier compressé + le décompresseur. Pour gagner, la somme des deux devra être inférieure à la taille du fichier initial.

Pour participer il faut envoyer 100$.

La page en question-cache local

Bon par contre cette fois aussi, c'est en anglais.

TL;DR - Spoiler !

Pour ceux que l'anglais rebute ou qui n'ont pas la patience de lire l'histoire voilà un ptit résumé et quelques explications.

Le fichier que va génèrer Mike Goldman sera un fichier aléatoire bien foutu. Ça veut donc dire qu'en théorie, il n'est pas compressible efficacement. Même si ce fait n'est énoncé à l'avance il n'y a rien d'étonnant à cela.

Notre cher Patrick Craig est très probablement bien au fait de tout cela mais avant de participer pose une question faussement innoncente : Est-ce que la solution peut être constituée de multiples fichiers du moment que le décompresseur retourne le bon résultat ? Ce à quoi Mike Goldman ne vera pas d'objection.

Notre cher participant paie la taxe de participation et demande un fichier de 3Mo.

Entre temps, Mike Goldman a annoncé avoir un participant à son challenge sur la newsgroup comp.compression (ouai c'est pas récent, à l'époque les ng étaient pas mal utilisées encore). Il annonce fièrement que ce challenge est mathématiquement impossible (ce qui est effectivement le cas).

Patrick Craig nous explique ensuite qu'il est mathématiquement impossible de gagner ce challenge MAIS il y a une petite feinte. Le fait de pouvoir rendre plusieurs fichiers est l'astuce.

En gros le fichier original contient des caractères aléatoires. La compression consiste donc à lire le fichier original et de le découper à chaque apparition d'un caractère particulier ("5"), de supprimmer ce caractère et c'est reparti. Recompresser le fichier consiste à lire le premier fichier compressé, caténer le caractère "5" puis de passer au fichier suivant et ainsi de suite. Donc oui les fichiers compressés + le décompresseur sont plus petits que le fichier original. Mais non ils ne prennent pas moins de place.

Pourquoi ?

L'astuce réside donc dans le fait d'utiliser plus de méta-données afin de réduire la taille des données.

Le système de fichier, pour chaque fichier doit stocker des méta-données dans sa base de données. Donc au lieu d'avoir 1 fois des méta-données pour 1 fichier, il y a désormais 218 fois des méta-données pour 218 fichiers (+1 pour le décompresseur) mais comme le système de fichier ne les affiche pas.

Bref il y a eu filouterie :-)

Patrick Craig n'a pas eu le droit à ses 5000$ mais il ne comptait pas trop dessus. Il aura perdu tout de même 100$ de participation mais franchement c'est plutôt marrant l'histoire qui en découle et puis surtout :

« My main motivation was to "out-trick the tricker". »

La Renaissance Des RSS

Ça y est \o/ En ce moment on assiste à la renaissance des RSS et c'est pas moi qui le dit ! On le lit un peu partout en ce moment. On vit une époque formidable !

Mais attends une seconde : pour que ça renaisse, il faut que ça meurt !

Mais du coup, les RSS étaient morts ?

C'est ce que semble penser pas mal de monde visiblement. Pourtant les sites ne les ont pas supprimés. Mon ptit aggrégateur de flux n'a jamais tarit ces dix dernières années.

Ils sont morts quand ?

Apparemment deux évènements auraient sonné le glas : la mort de Google Reader et FeedBurner qui déconne.

Bon bha dans le cas de Feedburner je sais pas trop, j'ai jamais utilisé ce service mais visiblement ils ont changé leur façon de faire et ça aurait fait fuire une partie des utilisateurs.

Concernant Google Reader, bha je sais pas trop non plus. Effectivement c'était l'aggrégateur de flux rss le plus populaire à son époque mais sa fermeture est-elle vraiment une raison de la mort des RSS ? Quand ma connexion tombe en panne à la maison c'est pas la mort de l'Internet !

Il s'est passé quoi réellement ?

Google Reader est donc arrêté en 2013 et en fait à cette période beaucoup de monde a cessé d'utiliser les reuseuseu pour se tourner vers les réseaux sociaux : Facebook et Twitter en tête. À l'époque ça pouvait effectivement être une alternative plus ou moins potable. Leurs logiques de fonctionnement étaient pas exactement similaires à aujourd'hui. La course au profit n'était pas absolue et du coup les algoritmes régissant les timelines étaient assez inofensif.

Le temps passe.

Une élection est passée et avec un peu de recul maintenant le monde commence à un tout petit peu faire semblant de commencer à peut-être éventuellement ouvrir les yeux.

« Ha bon ? Les timelines sont biaisées ? Ha bon ça me manipule discrètement pour influencer mon jugement/vote/ressenti ? »

Les créateurs de contenu qui ont délaissé leur site perso pour bénéficier d'une audience élargie et se constituer un vivier public doivent désormais passer à la caisse pour parler à leur auditoire. Bref les réseaux sociaux doivent remplir leur comptes en banque désormais.

Quel rapport avec les RSS ?

Bon revenons à nos moutons : les RSS. Ils sont toujours là et les quelques très rares sites qui les ont zappés pour se contenter d'abreuver leur compte truitteur/faceplook commencent pour certains à revenir en arrière.

Et on arrive donc en 2017-2018. Il faut donc reconquérir son propre auditoire des griffes des bleus.

« Et si on créait une renaissance des RSS ?! » L'idée de génie que Bernard a eu ! Sérieux, on présente le truc comme le renouveau, on passe pour des gentils qui aident à se réapproprier une tech bonne pour la vie privée et EN PLUS on amenuise un peu notre dépendance au GAFAM !

BRAVO ! Bon c'est dommage que Bernard ne soit pas au courant que ça fait quinze ans que son site ne produit que du RSS tronqué suite à la décision de Jean-Kevin marketeux de son état qui s'est rendu compte qu'ils balançaient pas de pub/trackers/cookies dans les RSS. C'est bien gentil de crier contre les GAFAM quand ton site est pourri jusqu'à la moêlle au point que ton contenu ne représente que 10% du poids de tes pages webs. La presse en ligne adore vos données mais quand au final ils se font petit à petit bouffer par ceux qu'ils ont nourris, ils retournent leur veste sans pour autant se repayer une dignité.

Bon, crachons pas trop dans la soupe parceque bon les RSS c'est génial et si l'orchestration de "leur Renaissance" peut pousser un peu la populace à y recourir plutôt qu'aux réseaux sociaux… On sera ptet gagnant, sait-on jamais.

Les RSS ne sont jamais morts et la plupart de ceux qui le clâment auraient voulus les tuer à l'époque mais se font guanoter dessus désormais.

500 Miles Mail

Pour inaugurer cette section je vais vous vous mettre un lien vers une histoire assez cocasse :

Débugguer le souci des mails qui ne peuvent dépasser les 500miles.

Un adminsys reçoit un appel d'un directeur de son organisation qui ne parvient plus à envoyer de mails à des destinataires à plus de 500 miles. Forcément l'adminsys va devoir trouver comment démerdouiller le tout.


Je trouve cette histoire vraiment sympa et en plus bien écrit. J'ai tout de même un doute sur la véracité mais au final c'est assez plausible et bien écrit.

Bon par contre c'est en anglais…

Allez sans plus attendre voilà l'article en question - version en cache local.

Nouvelle section : Shares

Hello hello. Bon, pour passer le blues, quoi de mieux que de bidouiller le blog ?

Des partages

Ça fait un petit moment que j'aimerai vous parler de trucs plus … comment dire … "extérieur". Parler de trucs que j'ai lu/vu/écouté ailleurs et vous les recommander souvent.

Du coup voilà une nouvelle section qui commencera très bientôt à se remplir.

Adaptation CSS

Bon du coup pour ça j'ai remis un peu les doigts dans le CSS.

De ce que vous pouvez voir dès maintenant… ça n'a pas changé radicalement, juste quelques couleurs modifées.

Du coup chaque section a sa couleur :

  • Violet (limite rose) les posts.
  • Bleu les fast-posts.
  • Jaune les partages.

Et aussi pour rendre le truc un peu plus clair, j'ai rajouté une ptite étiquette en haut à gauche qui indique la catégorie. Bref ça devrait être un peu plus clair qu'avant sans rajouter trop d'éléments visuels au site.

D'ailleurs j'hésite à terme à mettre des liens vers les différentes catégories directement dans la barre latérale de gauche. Pourquoi pas ?

Faut que je réflêchisse à comment agencer ça.

Bref, j'ai poussé le CSS, avec les histoires de cache toussa vous verrez pas forcément les modifs tout de suite mais rien de bien grave.

Et dans quelques jours je vous envoie un premier share.

Les userscripts dans Qutebrowser

Qutebrowser est un super navigateur mais sur certains points il est loin des ténors. Son développement est bien plus lent que celui de Chrome et Firefox car c'est un projet bien plus petit avec bien moins de contributeurs et aucune entreprise commerciale pour pousser. Il n'en reste pas moins tout à fait fonctionnelle et propose une alternative crédible au prix de maigres sacrifices.

Un des sacrifices à faire est l'absence d'extensions. Mais on peut toute fois lui ajouter des userscripts. Il s'agit de petits bouts de javascripts qui s'executent sur les pages web pour modifier le comportement de la page.

C'est un système qui se base à l'origine sur l'extension Greasemonkey créée en 2005 mais qui a été souvent remplacé par TamperMonkey. Depuis, pas mal de navigateurs ont adoptés différents moyens pour être compatibles avec ces scripts.

Dans QB

Donc Qutebrowser ne fait pas exception à la règle et est nativement compatible avec ces userscripts. Pour les utiliser, rien de plus simple : Placez les scripts dans .local/share/qutebrowser/greasemonkey et voilà.

Super simple, rien à modifier ou autre.

Par contre faut le relancer…

Où les trouver ?

Plusieurs sites.

Il y a Greasy Fork qui en propose pas mal mais je suis trop fan de l'interface. Un meilleur site est OpenUserJS.

Ceux que j'utilise

  • Pour Youtube j'utilise Iridium qui permet d'ajouter tout pleins d'options pour Youtube plus ou moins utile (dont la possibilité de continuer la vidéo même en changeant de page sur youtube).
  • Pour explorer son système de fichier local j'utilise Supercharged Local Directory File Browser qui vous mettra une interface pas mal du tout lorsque vous ouvrez file:///home/lord/ .
  • Celui-là ne m'a jamais servi car je l'ai découvert après en avoir eu besoin mais je l'ai au cas où : Remove Web Limits empêche les sites de bloquer les clics droits, copier/coller et compagnie. Généralement les sites qui font ça je les contourne simplement par le fait que je n'active javascript qu'au cas par cas.

Voilà tout. Il y en a des tas d'autres mais j'ai su rester raisonable.

Hellblues

Ce week-end se tenait le Hellfest à Clisson. 4 jours dans une ambiance extra-ordinaire.

Extra-ordinaire est le mot le plus adapté qu'on puisse trouver pour ça. Pendant quatre jours tu vis dans une ambiance bienfaisante. Tout le monde est gentil, heureux, souriant, ensemble. J'oserai presque dire qu'il y règne une sorte d'ambiance de ZAD mais avec un thème radicalement différent. Alors que c'est tout à l'opposé de cette philosophie : il y a des tas de stands pour acheter des conneries hors de prix. Mais tout le monde y est paisible tout en étant extrêmement bruyant.

Tout le monde se fritte la gueule dans des pogos mais en prenant soin de tout de suite t'aider à te relever quand tu échoues sur l'herbe la poussière.

Tu dors difficilement 6 heures par nuit, tu passes tes journées à errer de scène en bar jusqu'à tenter le grand voyage jusqu'au Leclerc tout grimé en Hellclerc pour l'occasion, tu portes tout ton barda pour 45 minutes de marche sous un soleil de plomb et tu te tapes 8h de route.

Mais tu ne penses plus qu'au 360 jours d'attente pour la prochaine édition.

4 jours à vivre dans une ambiance hors du commun en dépensant tes deniers durement acquis pour ramener des souvenirs. Une ptite centaine de photos et vidéos pour tenter d'en ramener un peu plus à la maison.

Tu repenses à ces gens que tu as rencontré quelques secondes/heures. Les gars complètement déquerres trop bourré pour profiter des concerts. Les Espagnols un peu bruyants de la tente d'à côté. Les meufs à trois quarts à poils avec des coups de soleil de la mort qui te font mal rien qu'en les regardant. Les quelques punks au loin en train de pisser dans le Kingdom of Muscadet. Le mec à moitié amoureux de tes chaussures pendant sa petite sieste lors d'un concert de Black Metal…

Il y a bien quelques reproches qui sont faits au Hellfest… La programmation qui n'est pas vraiment du goût de tout le monde (me suis un peu fait chier niveau musique le samedi, mais du coup ça fait une ptite pause pour faire un tour de Grande Roue). Et c'est vrai qu'en regardant un peu le débrief Arte … bha … hmmm … il y avait quand même pas mal de rap ! Et puis pourquoi c'est aussi loin dans un bled où on se pèle sévère dès le soleil disparu !? C'est vrai quoi le faire à une heure de chez moi ça serait plus pratique !

Bref.

Maintenant, bha faut retourner au boulot. -___- Retourner à la civilisation normale… chiante. Le supermarché à la déco fadasse. Les gens qui font la gueule dans la rue. Ne plus voir de cheveux longs, kilts, cornes, les tatouages bien planqués.

C'est le blues. Allez plus que 358 jours.

Les us et coutumes d'IRC

IRC est l'un des plus anciens protocoles de chat sur Internet encore très activement utilisé. Malgré une perte d'intérêt de la part du grand public qui se tourne massivement vers les réseaux sociaux ou alors sur les plateformes verrouillées/privatives de Slack, Discord, Telegram, … IRC reste toujours utilisé près de trente ans après sa création et connait même des mises à jour du protocole.

IRC est donc à la fois un protocole mais aussi toute une communauté avec ses traditions, ses codes et ses ptites habitudes.

Morning

Il existe de très nombreux fuseaux horaires utilisés dans le monde mais sur IRC nous avons dépassés ces concepts abstraits. Au lieu de s'appuyer sur UTC pour synchroniser tout ce petit monde, nous nous appuyons sur UGT : l'Universal Greetings Time qui permet de simplifier les rapports :

Quand une personne arrive dans un salon de discussion c'est le matin. Du coup « Good Morning !» , quelque soit l'heure chez soit.

Et quand elle part ? Bah « Bonne Nuit ! ».

C'est super simple et devrait s'appliquer dans le monde physique aussi. Fini de se tracasser et hésiter entre bonsoir ou *bon aprem*…

HL : HighLight

La plupart des clients IRC sont configurés de sorte que lorsque quelqu'un mentionne votre nom, votre client se mette à clignoter/jouer un son/envoi une notif/… bref ça se rate pas. On appelle cela un highlight ou plus communément HL.

Évitez de HL les gens pour rien. Et évitez également de HL pleins de monde (à tord) sur un salon. C'est souvent une bonne occasion de réveiller un bot pour kicker le malotru.

Et tant que j'y suis, pour l'amour de Gnu, si vous mentionnez quelqu'un, foutez pas un @ devant. On est pas sur twitter ou autre, un @ devant un nom signifie que c'est un opérateur et aura même tendance à empêcher le client de HL.

Slaps

MSN a les wizz, Facebook les pokes, IRC les slaps.

Berthe slaps Guigui around a bit with a large trout.

C'est amusant cinq minutes. Mais ça fait bien plus de cinq minutes que l'on est sur IRC…

Don't ask to ask, just ask

Sur les salons de discussions des distributions linux (mais pas seulement), de très nombreux utilisateurs vont et viennent pour avoir un petit coup de main. C'est l'endroit idéal pour ça (mieux que les forums dans la majorité des cas je dirai).

Mais par contre, ne demandez pas la permission pour poser une question. « Can I ask something ? » Biensûr que vous pouvez poser votre question, mais demander si vous pouvez poser la question est une perte de temps pour tout le monde.

Posez votre question tout de suite avec courtoisie et le plus clairement possible. Mais surtout, posez là à votre moteur de recherche favoris avant, ce serait dommage de déranger des gens pour une réponse que l'on obtient en moins de trente secondes par soi-même.

Pas mal de monde traîne passivement sur IRC. Soyez précis, concis et courtois dans vos questions.

XY

Et ne vous ofusquez pas si quelqu'un vous demande « Pourquoi vous tentez de faire telle ou telle chose ? ».

Par habitude on reconnait les questions étranges pour tenter d'obtenir des effets abscons. On est typiquement dans un XY problem, donc ne vous braquez pas et expliquez quel est votre problème global plutôt que « Comment faire ceci ? ».

Et vous aurez probablement des suggestions pour trouver un meilleur angle d'attaque de votre problème.

Bon c'est pas spécifique à IRC mais c'est problème récurrent.

Idle

IRC est une messagerie instantanée certes mais généralement les utilisateurs sont passifs. On est connectés 24/7 mais on est pas forcément devant le terminal 24/7.

N'espérez donc pas une réponse instantanée, surtout un dimanche à 4h du matin. Il n'est pas rare de tomber sur des salons de discussions où rien ne se raconte pendant plusieurs jours et puis d'un coup : PAF ! Une fulgurance, une activité débordante, bref la vie reprend le dessus.

Chacun à un rythme de clavardage différent.

Bref si vous arrivez sur un salon désespérément calme, lancez une phrase ou deux mais surtout ne commencez pas à chouiner que personne ne répond. Et non, HL tout le monde ne vous attirera pas la sympathie des occupants.

Messages d'away

Bon bha maintenant que vous avez envie de rester connecté 24/7 avec votre client irc vous vous demandez : « Mais comment signaler au monde entier quand je suis pas dispo ?! »

Et bha en fait on s'en fout royal. Si vous répondez pas… bha on comprend assez vite que vous n'êtes pas là…

Épargnez-nous les messages d'away et les changements de pseudo.

AMSG

Bon je continue de râler encore un coup. Les amsg sont les messages envoyés à tous les salons de discussions où vous êtes connectés.

Et bha comme pour les messages d'away…

On

s'en

fout.


C'est vrai quoi… Ce n'est généralement que du spam.

Vous êtes toujours là ?

Je vous ai pas dégouté en passant pour un gros con aigri ?

Bon bha du coup venez sur IRC, c'est super sympathique ! Pleins de gens très intéressants (mais aussi des cons comme partout).

Même si la fréquentation est en légère baisse depuis quelques années, les salons de discussions sont toujours pas mal remplis surtout dans la communauté du logiciel libre. En tentant d'aider des gens, on apprend énormément les rouages internes d'un logiciel. Avec des problèmatiques que l'on a pas rencontré personnellement ou autre.

Ce n'est pas un réseau fédéré mais une myriade de réseaux indépendants avec leurs règles et coutumes spécifiques : Freenode est le réseau de référence pour le monde du Libre. Geeknode est un réseau français versé logiciel libre et neutralité du net hébergeant beaucoup de salons francophones dont une bonne partie de la FFDN. Et encore pleins d'autres réseaux IRC…

14ème article d'avancement du Librem 5

Ceci est une traduction libre de cet article concernant les avancées de la société Purism concernant le smartphone Librem 5. L'article original est sous licence CC BY-SA 4.0 tout comme ma traduction.

Ce smartphone a bénéficié d'un crowdfunding et a pour but d'apporter une alternative à Android en proposant un OS basé sur Linux et toutes les briques logiciels opensource qui vont avec. Ils collaborent avec le projet Gnome, le projet KDE, UBPorts et le projet Matrix. Ils sont assez transparents sur leurs avancées et sont reconnus pour leur ligne de laptops.

Bref voilà l'article :


Beaucoup de travail a été abattu sur le projet Librem 5 et même s'il en reste énormément, nous voulions faire un point des avancées réalisées par l'équipe ces deux dernières semaines. Profitez donc de cette brève mise à jour concernant nos effort récents et nos accomplissements.

Le travail logiciel

Cela représente une importante masse de travail pour le Librem 5. Il y a toute l'infrastructure comme l'apparence de l'interface utilisateur et les nouvelles bibliothèques et protocoles. Mais il y a aussi les applications familières qui sont nécessaires.

Sous le capot, notre interface téléphone (phosh) a subit d'importantes améliorations ergonomiques principalement concernant l'écran de verrouillage. Un important changement vient du fait que dorénavant le déverrouillage est délégué à PAM pour mieux gérer le verrouillage de l'appareil via un code PIN. Des ajouts de code ont également ont été fait pour mieux gérer de multiples sorties (écrans). Également, libhandy est notre lib pour l'UI handy (pratique) pour développer des applications GTK+. Il y a eu l'ajout récent d'un widget de flèches (HdyArrows) pour indiquer la direction de balayage de l'écran qui sera très utile pour de nombreuses applications, particulièrement pour l'écran de déverrouillage. Qui plus est, libhandy a eu quelques corrections de bugs et une refonte de la gestion du clavier. Puisque les graphismes sont importants, nous avons ajouté le support d'Etnaviv à weston-simple-dmabuf (un client Wayland pour tester l'implémentation du protocole Linux DMA-BUF). Nous avons aussi completé son support du format NV12. C'est utilisé pour tester l'implémentation de linux-dmabuf de wlroots. Nous aimerions tout particulièrement remercier le projet wlroots et Weston pour leurs revues de code, recommandations et supports.

Puisqu'on peut pas avoir un téléphone qui ne puisse faire d'appels téléphoniques, de grands efforts ont été fait sur Calls qui peut désormais émettre des appels ! (Et si vous l'aviez manqué, nous vous encourageons à lire l'article correspondantFR) En plus de tout le code écrit, les interfaces ont été documentées dans de code. L'empaquetage pour Debian est en préparation et nous taffons pour inclure un paquet Flatpak créé par un membre de la communauté.

Chaque smartphone nécessite un clavier visuel (OSK pour On-Screen-Keyboard), donc des efforts de devs ont été fait en ce sens pour les protocoles nécessaires et les upstreamer (les faire accepter par les mainteneurs des projets amonts). Pour l'instant, le protocole virtual-keyboard a été accepté pour être inclus dans wlroots. Le protocole text-input a été soumis upstream à l'approbation. Pour tester le protocole. virtual-keyboard, nous avons créé un prototype basé sur weston-keyboard. Vous pouvez lire ça plus en détail à propos du dev du clavier visuel dans l'article de DorotaFR.

Le travail matériel

Identifier et tester chaque composant matériel qui seront présent dans le dev kit et éventuellement le téléphone est une tâche non trivial. Après le choix d'un composant potentiel et la réception de quelques échantillons pour tests, il faut souvent modifier ou carrément écrire un module kernel avant même de pouvoir tester. Cela a été le cas pour évaluer et tester des module basse consommation Wifi, ce qui est encore en cours. Les moteurs de vibrations sont aussi en cours d'approvisionnements pour évaluations et les chargeurs de batterie sont testés. Nous sommes aussi en train d'investiguer différentes options pour les caméras.

Construire une communauté

La communauté continue d'occuper nos pensées. Nous avons donc monté un wiki PureOS qui n'est pas encore très étoffé mais qui pourrait devenir un endroit pour trouver de la documentation générale et des informations techniques sur PureOs et les produits Purism. Nous avons corrigé un soucis sur la mailing-list de la communauté pour être de nouveau fonctionnelle et avons ouvert nos salons de discussion Matrix pour que vous puissiez nous rejoindre avec vos Matrix ID existants. Pour plus d'infos à ce propos, jetez un œil à notre page “volunteer”.

Nous sommes heureux de recevoir des propositions de volontariat qui font un travail formidable pour aider à rendre le Librem5 génial. Si vous avez suivi ou contribué à nos dépôts de code, sachez que nous venons de migrer de Gogs à GitLab − la nouvelle adresse est source.puri.sm.

C'est tout les amis. Restez branchés pour de futures nouveautés à venir !


Beaucoup d'avancées logicielles. C'est assez encourageant et on dirait qu'un bon rythme s'est mis en place avec de la collaboration effective avec d'autres projets.

Par contre c'est toujours un peu flippant concernant la partie matos. Les dev kits devraient pas tarder à être finalisés pour être livrés… j'ai du mal à imaginer que la deadline initiale puisse être respectées. On croise les doigts

13ème article d'avancement du Librem 5

Ceci est une traduction libre de cet article concernant les avancées de la société Purism concernant le smartphone Librem 5. L'article original est sous licence CC BY-SA 4.0 tout comme ma traduction.

Ce smartphone a bénéficié d'un crowdfunding et a pour but d'apporter une alternative à Android en proposant un OS basé sur Linux et toutes les briques logiciels opensource qui vont avec. Ils collaborent avec le projet Gnome, le projet KDE, UBPorts et le projet Matrix. Ils sont assez transparents sur leurs avancées et sont reconnus pour leur ligne de laptops.

Bref voilà l'article :


L'importance des claviers visuels

Le rôle des claviers ne doit pas être sous-estimé. Ils sont apparus bien avant les ordinateurs et survivent à l'ère des smartphones. Des millions de gens discutent avec leurs amis en écrivant sur leur cher ordinateur de poche en utilisant la vénérable disposition QWERTY datant de 1873.

C'est dur d'imaginer un smartphone sans dispositif d'entrée de texte. Certains rêvent de mouvement à la Minority Report mais le Librem 5 perpétue la tradition du clavier.

Ces dernières semaines, je suis devenue la spécialiste de l'équipe concernant le clavier. J'ai passé ce temps à m'assurer que toutes les pièces s'emboîtent bien et à prouver que le prototype fonctionne. Le prototype peut être vu dans la vidéo ci-dessous. Il est basé sur rootston (wlroots), GTK et weston-keyboard − notez ces noms, ils auront leur importance plus loin.

photo d'un clavier de machine à écrire en Qwerty

Une machine à écrire “Continental Standard” Photo issue de Wikipedia

Cette tâche s'est avéré un voyage intéressant et enrichissant. Le train Wayland m'a baladé des méthodes d'entrée à l'Asie, à travers les protocoles, ainsi que les communautés FLOSS. Je vais tenter de vous décrire mon histoire.

“Ça doit pas être bien dur, pas vrai ?”

À la surface, un clavier est un appareil simple. C'est un assortiment de boutons attachés à un ordi. Appuyez sur un bouton et l'ordinateur réagit promptement. Placer un clavier à l'écran ne devrait pas être difficile : il suffit de réserver une portion de l'écran pour les touches. Appui : action. Ça ressemble à un clavier de téléphone, non ? Il n'apparait pas à l'écran tout le temps. Et il corrige les erreurs. Pas mal, il y a d'autres différences ?

En fait, les claviers visuels ne sont pas considérés comme des claviers. Ils font partit d'une plus large catégorie appelée : «les méthodes d'entrées». Ces méthodes d'entrées peuvent avoir plus de responsabilités que juste permettre d'appuyer sur des touches. On pourrait avoir une touche pour corriger les erreurs de frappe, ou bien choisir une suggestion depuis un dictionnaire, trouver des synonymes, entrer des phrases complètes que j'utilise fréquemment comme “Ahoy Matey!”. Pour les langues asiatiques, il est quasiment indispensable d'en utiliser pour écrire.

Illustration d'anthy un logiciel de méthode d'entrée pour les langues asiatiques

Écrire en japonais en utilisant la méthode d'entrée Anthy. Image issue de Wikipedia

En général, les méthodes d'entrée permettent à l'utilisateur d'entrée du texte, il existe une grande variété de façon de faire. Elles peuvent afficher un pop-up de suggestions, suggérer des phrases, reconnaître de l'écriture manuscrite or proposer carrément proposer des systèmes comme Dasher.

Arrive Wayland

Pour moi cependant, la première tâche était de parvenir à taper du bon vieil anglais en appuyant sur des boutons sur l'écran. Le Librem5 utilisera des applications Wayland native exclusivement (grâce à GTK3 et Qt5) et c'est un point important pour le clavier. Wayland est en charge des interfaces humaines comme les claviers, souris, écrans tactiles et méthodes d'entrée. Un compositeur Wayland agit en tant qu'intermédiaire entre les appareils et les applications. Il définit comment les applications se partagent ces appareils. Imaginez le boxon que ce serait si toutes les applis écoutaient les clavier en même temps !

Diagramme montrant la relation entre les différents appareils d'entrée, le compositeur au centre, puis les applis à droite à qui le compositeur redirige les entrée

Voilà où la partie technique démarre. Wayland est un ensemble de protocole. Il y en a un, wl_keyboard, définissant comment les applications écoutent les appuis sur le clavier. De la même façon, un autre (text-input) défini comment les applications écoutent les méthodes d'entrées. Encore un autre, nommé input-method, défini comment les application de méthode d'entrée communiquent avec le compositeur. Cela nous donnent trois classes de logiciels qui ont besoin de travailler ensemble pour créer un clavier visuel : application, compositeur et clavier lui même.

Premier réflexe, j'ai regardé comment ces protocoles étaient supportés par les projets existants. La pièce centrale est le projet wlroots sur lequel nous nous basons pour le compositeur du Librem5. Il ne supporte aucun de ces protocole et mon intention d'ajouter leur support a été chaudement apprécié par les mainteneurs. Tout n'est pas aussi rose cependant. Le seul clavier implémentant le protocole input-method est weston-keyboard, qui n'est clairement pas fait pour les téléphones. Le cas du protocole text-input est encore plus intéressant. Voyez-vous, j'ai menti un peu : il y a en vrai trois protocoles pour cela. Qw et KWin se reposent essentiellement sur _v2 et GTK et gnome-shell utilisent gtk_input_method ( tant qu'à digresser, le projet maliit utilise zwp_text_input_unstable_v1). C'est un très mauvaise nouvelle car chaque compositeur devra supporter les deux méthodes pour communiquer les entrées textes pour les applis Qt et GTK.

Le moyen raisonnable de résoudre ça serait de convaincre tout le monde de standardiser un seul protocole. Avant de plonger plus profondément dans les politiques des communautés, j'ai décidé de me salir les mains afin d'avoir une meilleure vue des détails.

Le travail

J'ai choppé rootston, GTK3.22 et weston-keyboard et j'ai codé le support de wlroots. Après l'arrivée de ce code, gtk_input_method a été proposé pour devenir le nouvel zwp_text_input_unstable_v3 officiel. Pendant ce temps, j'ai envoyé une pull reguest à wlroots. De là a émergée une longue série de discussions avec les devs de wlroots. Deux conclusions en sont sorties :

  • text_input_v3 est très proche de ce qu'attend la communauté
  • input-method est à moitié à l'abandon, incomplet et duplique de nombreuses fonctionnalités d'autres protocoles.

En bref, les deux protocoles nécessitent de du boulot.

La bonne nouvelle est que ces discussions étaient très approfondies et impliquaient des gens de différents projets ce qui a clarifié ce qui devait être fait. Pour l'instant, je peaufine des propositions pour chacun de ces protocoles qui seront étudiées en profondeurs et qui seront je l'espère suffisamment propres pour être adoptés et inclus dans les protocoles Wayland.

Avoir de bons protocoles faisant leur job devrait convaincre GTK, Qt et Maliit de s'uniformiser sur une façon de faire afin d'éviter la duplication du code et des efforts.

Vous vous demandez peut-être : “Vous avez déjà une implémentation fonctionnelle, pourquoi se préoccuper des autres projets ?” Dans l'équipe Librem 5, nous réalisons à quel point notre projet sera important dans l'écosystème Wayland. Une fois le téléphone sorti, ça sera la référence pour les projets à venir. Agir dans notre coin, couperai le Librem de certains projets alors que d'autres suivraient le reste du monde. Faire les choses bien et par étape permettra une interopérabilité entre les téléphones Librem et les autres projets sans efforts ce qui améliorera la compatibilité pour tout le monde.

La suite ?

Le travail sur les protocoles se poursuit et leurs implémentations sera proposé pour leur inclusion dans les libs upstreams (les bibliothèques de codes utilisés par les autres projets). À un moment, weston-keyboard devra disparaitre ou être radicalement transformé ce qui signifie plus de travail pour la design team. Les protocoles devraient être standardisés ou presque lorsque nos premières boards arriveront dans les mains du public. Je suis très curieuse des méthodes d'entrées que vous créerez − les idées entendues durant les discussions étaient folles ! Et enfin j'espère être témoin de l'expérience en la matière de la part des asiatiques ;-)

Dorota


Dorota est dans l'équipe de dev mobile de chez Purism.

J'espère que l'unification des protocoles d'entrées de Wayland aura effectivement lieu sinon ça risque d'être assez chiant à l'usage si l'on mixe du gtk et du Qt.

D'ailleurs je connaissais pas du tout le projet Maliit.

J'aimerai bien une réimplémentation libre de MessagEase que j'utilise sur l'android. C'est un clavier qui ne tente pas de mimer un clavier de machine à écrire mais est pensé pour être utilisé sur du tactile.

Trifouillage de firmware de clavier

Je vous ai déjà parlé de mon clavier fait maison il y a bientôt trois ans dans ce premier article. Il est ptet temps de faire la partie 2 ? Ouai mais non c'est trop tard.

Par contre je viens de modifier un peu la disposition du clavier et du coup c'est une bonne occase pour en reparler ! Ça sera un peu la seconde partie en quelque sorte où j'aborderai un peu plus la partie programmation du firmware.

S'y remettre trois ans plus tard

Bon donc ce clavier me sert constamment depuis tout ce temps. Il fonctionne superbement bien malgré son look… particulier.

Photo du clavier au 05/06/2018

Le fameux clavier lors de la rédaction de l'article (admirez le repose poignet à base de SSD et de batterie).

J'ai déjà refait une soudure ou deux qui s'étaient pétées mais bon rien de bien méchant. Ça se refait en moins de cinq minutes montre en main.

Par contre depuis que je réutilise mpd j'ai pas de moyen simple de passer au morceau de musique suivant. J'ai pas de touche multimédia et j'ai pas envie de rajouter un raccourci i3 à base de alt ou autre…

Il me restait toujours deux emplacements de libres sur le clavier mais à des emplacements un peu bâtard du coup pas trop envie d'y toucher, je conserve ce Maj droite et ce GUI (la ptite touche menu à droite de la touche windows droite sur un bon vieil azerty des familles).

Une solution élegante serait de rajouter des touches multimédia par l'intermédiaire de la touche Fn.

Bon bon c'est parti ?

Non !

J'ai bien gardé les sources du firmware du clavier dans un ptit gogs perso. Par contre j'ai plus tout le reste.

Le reste ? Bha déjà il faut le compilateur kivabien, c'est à dire gcc-avr.

Et il faut le ptit outil pour transferer le binaire de l'ordi jusque dans la ptite puce du ptit Teensy.

Propre via Gentoo

Bon bha déjà, ça commence par un emerge arduino avec tout un tas de dépendances des plus effrayantes à base de java et compagnie…

Ça fait un peu chier mais bon faut le faire. A man's got to do what a man's got to do !

Pendant que ça s'installe je vais voir la FAQ PJRC (PJRC est le fabricant du Teensy).

The AVR toolchains provided by Gentoo and Arch are broken. They compile .hex files which simply do not work!

Bon … c'est ptet ancien, je verai le moment venu.

Après arduino, il faut Teensyduino qui est un add-on pour rajouter le support du Teensy à l'IDE arduino. En gros chaque petit appareil a ses spécificités et cet add-on permet d'ajouter tout ce qu'il faut pour que l'IDE soit pleinement compatible avec le Teensy et puisse également transferer les binaires génerés dans le Teensy. Ça se télécharge directement depuis le site officiel de PJRC.

Quand on lance le truc il faut l'installer par-dessus l'install arduino. Bon je lui file /usr/share/arduino mais non, l'installer n'en veux pas…

Bon allez j'ai pas envie de perdre deux heures en dégueulassant ma ptite gentoo pour ça.

Sale via Debian

Bon je créer un chroot jetable donc pas besoin de me faire chier avec de la création d'user et compagnie, je veux juste un environnement basique le plus vite possible.

Donc je choppe l'installer arduino directement depuis le site Arduino parceque ça ne marchera pas avec la version made in Debian… J'untar le fichier téléchargé.

Je re-récupère Teensyduino depuis le site officiel PJRC et je lui donne le dossier où j'ai foutu Arduino. Et ça marche \o/

Je récupère les sources du firmware depuis mon gogs. C'est un bon gros git avec des sources pour tous pleins d'autres claviers également.

Je récupère aussi pour tester le firmware déjà compilé que j'utilise actuellement.

Je teste de le transférer dans le Teensy histoire de m'assurer que tout le bousin est fonctionnel. Et hop ça fonctionne, je peux passer sereinement passer à la suite. Bref le ptit quart d'heure de création de chroot n'aura pas été perdu vu que tout fonctionne comme sur des roulettes.

Le firmware du clavier

Je me base sur un firmware libre assez réputé dans le milieu des bidouilleurs de claviers : TMK. Le firmware est donc un programme qui tourne dans le Teensy qui possède un tout petit CPU à 16Mhz.

Il a plusieurs tâches à effectuer. Il doit comprendre quels boutons sont appuyés, les débouncer, choisir quel signal transmettre à l'ordinateur.

Et comme c'est un logiciel, on peut s'amuser à tripotter tout ces comportements. Bon par contre je suis pas codeur donc c'est un peu tendu de modifier ça mais par chance le code est commenté de partout avec beaucoup de doc sur le Github avec explications des variables et tout. Bref un projet bien sympa pour les bidouilleurs du dimanche soir.

La partie qui m'intéresse particulièrement aujourd'hui est la modification du keymap.

lrd/keymap_lrd.c

Bon donc tout ce qui concerne spécifiquement mon clavier se trouve donc dans le dossier lrd (ouai je lui ai pas trouvé de nom à ce clavier). On trouve plus précisément le keymap_lrd.c qui est utilisé par le firmware (c'est défini dans le Makefile).

Voilà ce qu'on y trouve, c'est plutôt simple.

#include "keymap_common.h"
const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* 0: BÉPO */
KEYMAP(GRV,    1,    2,    3,    4,   5, FN2,   6,   7,   8,   9,   0,MINS, \
       EQL,    Q,    W,    E,    R,   T,RSFT,   Y,   U,   I,   O,   P,LBRC, \
       TAB,    A,    S,    D,    F,   G, DEL,   H,   J,   K,   L,SCLN,QUOT, \
       LSFT,   Z,    X,    C,    V,   B,BSPC,   N,   M,COMM, DOT,SLSH,RBRC, \
       LCTL,RGUI, BSLS, LGUI, LALT, SPC,RALT, ENT,LEFT,  UP,DOWN,RGHT,FN1),
/* 1: Fn1 */
KEYMAP(TRNS,  F1,  F2,  F3,  F4,  F5, ESC,  F6,  F7,  F8,  F9, F10, F11, \
       TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
       TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
       TRNS,TRNS,TRNS,TRNS,TRNS,MPRV,MPLY,MNXT,TRNS,TRNS,TRNS,TRNS,TRNS, \
       TRNS,TRNS,TRNS,TRNS,TRNS,VOLD,MUTE,VOLU,HOME,PGUP,PGDN, END,TRNS),
/* 2: test */
KEYMAP(  NO,   A,   B,   C,  NO,  NO,  NO,  NO,  NO,  NO,  NO,  NO,  NO, \
         NO,  NO,  NO,  NO,  NO,  NO,  NO,  NO,  NO,  NO,  NO,  NO,  NO, \
         NO,  NO,  NO,  NO,  NO,  NO,  NO,  NO,  NO,  NO,  NO,  NO,  NO, \
         NO,  NO,  NO,  NO,  NO,  NO,  NO,  NO,  NO,  NO,  NO,  NO,  NO, \
         NO,  NO,  NO,  NO,  NO,  NO,  NO,  NO,  NO,  NO,  NO,  NO,  NO),
};
const uint16_t PROGMEM fn_actions[] = {
    [0] = ACTION_LAYER_TAP_KEY(1, KC_ESC), // Vers Fn1
    [1] = ACTION_LAYER_TAP_KEY(1, KC_ESC), // Vers Fn1
    [2] = ACTION_MODS_KEY(MOD_LSFT, KC_INS),
};

Bon ça marche par couches, la 0 est donc l'accès direct des touches classiques, la couche 1 correspond aux touches pressées en même temps que Fn1. La couche 2 est un reste d'expérimentations que j'ai pas pris le temps de virer.

Ceux qui ont l'œil affûté verront que bien que le clavier soit bépo il est défini en qwerty. C'est parcequ'il est réellement qwerty mais que c'est ensuite Xorg qui map ça en bépo. En vrai un clavier n'envoi pas les lettres à l'ordinateur mais envoie une valeur numérique et ensuite l'OS se démerder pour transformer ce numéro de touche en une lettre en fonction de la configuration. C'est d'ailleurs pour ça que certains programmes ont toujours les mêmes raccourcis quelque soit la disposition clavier choisie car ils se basent sur le keycode et non le keysym.

Pour ceux qui ont les yeux encore plus affûtés, vous aurez également remarqué que j'ai pas de touche Échap et que j'ai Fn1 et Fn2. Bravo, vous êtes fort (si c'est pas le cas, faites semblant, je peux pas déceler vos mensonges à ce sujet).

Fn1 est donc la touche qui déclenche l'action [1] qui est définie en dessous, c'est-à-dire ACTION_LAYER_TAP_KEY. Cette fonction est G.É.N.I.A.L.E et encore je pourrai insister un peu plus. En gros cette touche a dorénavant deux fonctions :

  1. Passer sur la couche 1 lorsqu'elle est maintenue enfoncée donc Fn.
  2. Faire KC_ESC lorsqu'elle est juste tappée, c'est-à-dire Échap.

Voilà deux touches en une. On a jamais besoin de maintenir Échap appuyé donc on peut très bien l'utiliser de cette façon. En plus, en étant dans le coin tout en bas à gauche, elle est super accessible de la paume de la main sans viser; dans vim (et ses copains) c'est un régal ! Ce système de double touche est plus souvent utilisé avec Espace ce qui lui a donné son nom de SpaceFn mais il m'arrive de jouer de temps à autres donc la touche Espace est déjà bien utilisée…

L'action [2] est la combinaison de touche MOD_LSFT et KC_INS qui s'avère être Majuscule + Inser. C'est un raccourci classique de Xorg pour Coller. Et hop une touche dédiée pour coller du texte !

Les modifs du jour

Bon du coup pour rajouter les touches multimédia, j'ai bidouillé le fichier keymap sur la couche 1. J'ai ajouté MPRV, MPLY, MNXT qui correspondent à Multimedia Previous, Multimedia Play et Multimedia Next. Sous Linux, ces touches sont appelées XF86AudioPrev, XF86AudioPlay et XF86AudioNext.

Bon bha une fois ces modifs faites, comment qu'on compile et on qu'on upload ?

Mise en service

Compilation

C'est tout simple, un simple make va compiler votre nouveau firmware. Ça va générer pas mal de fichiers dont un fichier avec l'extension .hex . Dans mon cas c'est un ptit fichier de 48Ko contenant tout ce qu'il faut.

Ensuite faut l'envoyer.

Envoi

Bon on va filouter.

Normalement l'IDE arduino s'attend à compiler lui même le code et tout mais j'ai déjà compilé par moi même ce qu'il faut avant. On lui indique donc juste quel type de board on veux trifouiller dans le menu Tools/Boards/Teensy 2.0 . (houlà j'ai vraiment pas l'habitude de parler de logiciels graphiques avec des menus…)

Ensuite pour démarrer la ptite applet d'upload on va dans Sketch/Upload Ce qui ouvrira une ptite fenêtre.

capture d'écran de la popup d'upload du binaire

Upload du binaire dans le Teensy

Là on ouvre File/open hex en allant chercher le fichier géneré précédemment.

Et maintenant l'instant stressant : Appuyer sur le ptit bouton du teensy. Et normalement une barre de progression va apparaitre et faire son œuvre.

Test

Tout s'est bien passé ?

Bha… suffit d'essayer d'utiliser le clavier, pas besoin de débrancher/rebrancher ni rien, c'est instantanné. Ça permet d'itérer très rapidement car ça prend moins de 10 secondes entre l'édition et le test.

Conclusion

Avoir un clavier où on peut trifouiller intégralement le firmware c'est trop bien ! C'est un super jouet.

TMK est un super bac à sable et en plus la doc est géniale. Sérieux, regardez comment les actions des touches et les touches elles-mêmes sont super bien documentées. Mais au delà de l'aspect fun c'est vraiment fonctionnel comme un vrai clavier lambda si ce n'est mieux !

En dehors de la phase de préparation de l'environnement qui est un poil chiante et inintéressante (mais bon rapidement mis en place quand même) c'est vraiment super agréable.

Gérer les spamfilters sur UnrealIrcd

Unrealircd est un ircd très populaire qui a près de vingt ans désormais mais à connu un sursaut d'activité ces dernières années pour arriver en version 4. On l'utilise notamment chez Geeknode sur les quelques serveurs du réseau.

Et comme tout réseau IRC qui se respecte, on subit régulièrement des relous qui viennent spammer les salons et les utilisateurs de façon plus ou moins créative. Un groupe particulièrement chiant passe régulièrement pour faire leur propagande en floodant.

Bref un moyen de contrer leur spam est donc d'utiliser la fonction Spamfilter d'Unrealircd.

J'avais un peu survolé les différentes actions que peuvent faire un ircop ici mais là c'est spécifique au spamfilter.

Spamfilter

La syntaxe est à première vue assez simple mais pourtant toujours un peu spéciale.

Lister

Déjà pour lister les filtres déjà existant : /spamfilter. Ce qui vous sortira un listing de ce genre :

10:26:33   geeknode  -- │ F simple cpnNPq kill 0 9842810 86400 "supernets" Lord!Lord@geeknode.fuckyeah :iяс.sцреяиетs.ояg сни sцреявоwl
10:26:33   geeknode  -- │ F posix cpnNPq tempshun 0 25184053 86400 racisme Lord!Lord@geeknode.fuckyeah :*vap0r*freenode*
10:26:33   geeknode  -- │ F posix cpnNPq kill 0 25696998 86400 supernets Lord!Lord@geeknode.fuckyeah :*SUPERNETS*
10:26:33   geeknode  -- │ F posix cpnN tempshun 0 26141654 60 spam Lord!Lord@geeknode.fuckyeah :*www.icq-net.eu*

Ajouter

Bon pour ajouter un nouveau filtre c'est assez simple si l'on suit la doc

/spamfilter add -regex cnNPq kill 0 l0de_spammer \ [lL1][oO0][dD][eE3]\

En y regardant de plus près on voit quelques trucs chiants :

  • Le type de spamfilter commence par un - donc c'est pas juste regex ou simple mais -regex ou -simple. C'est le truc que j'oublie à chaque fois.

  • Ensuite, dans la raison il faut remplacer les espaces par des underscore _ (le «tiret du 8»).

  • Mais surtout dans la regex elle-même, on ne peut pas foutre d'espace, il faut les échapper avec "\ ".

Supprimer

Bon pour l'instant cet article n'apporte pas grand chose de plus que la page du wiki vous me direz. C'est vrai. :-(

Mais mais mais je vais me rattraper tout de suite avec cette astuce de sioux !

En théorie pour supprimer un spamfilter vous devez faire exactement la même commande que lorsque vous en avez mis un en place. Mais c'est pas forcément simple car lorsque vous les listez la syntaxe est pas exactement la meême. C'est vite très chiant à retrouver.

Mais si vous faites /spamfilter del vous aurez un listing mieux foutu :

10:41:56   geeknode  -- │ F simple cpnNPq kill 0 9843733 86400 "supernets" Lord!Lord@geeknode.fuckyeah :iяс.sцреяиетs.ояg сни
                        │ sцреявоwl
10:41:56   geeknode  -- │ To delete this spamfilter, use /SPAMFILTER del 0x7f7421b79b40
10:41:56   geeknode  -- │ -
10:41:56   geeknode  -- │ F posix cpnNPq tempshun 0 25184976 86400 racisme Lord!Lord@geeknode.fuckyeah :*vap0r*freenode*
10:41:56   geeknode  -- │ To delete this spamfilter, use /SPAMFILTER del 0x7f74216e0080
10:41:56   geeknode  -- │ -
10:41:56   geeknode  -- │ F posix cpnNPq kill 0 25697921 86400 supernets Lord!Lord@geeknode.fuckyeah :*SUPERNETS*
10:41:56   geeknode  -- │ To delete this spamfilter, use /SPAMFILTER del 0x7f74216dfe00
10:41:56   geeknode  -- │ -
10:41:56   geeknode  -- │ F posix cpnN tempshun 0 26142577 60 spam Lord!Lord@geeknode.fuckyeah :*www.icq-net.eu*
10:41:56   geeknode  -- │ To delete this spamfilter, use /SPAMFILTER del 0x7f74216dfd30

Et surtout ils donnent une commande avec un id pour le supprimer facilement \o/.

Joie et Félicité.

Bon bha voilà, l'article avait un peu d'intéret quand même (plus pour moi que pour vous car je n'arrive vraiment pas à mémoriser cette syntaxe et ce truc pour virer les anciens spamfilters).

Tiens et tant qu'à y être, pour les curieux qui se demandent à quoi ça ressemble quand un spamfilter se déclenche :

11:16:29   united.geeknode.org  -- │ united.geeknode.org: [Spamfilter] lorddl!lorddl@LFbn-1-7920-9.w92-167.abo.wanadoo.fr matches filter '\ [lL1][oO0][dD][eE3]\ ': [PRIVMSG #testage: 'lode lode lode'] [l0de spammer]

On voit sur quel serveur était connectée la personne, son identité, la regex qui a déclenché, le message qu'elle a envoyée et enfin le message envoyé comme raison.

C'est pour ça que si ça déclenche, vous risquez de voir apparaitre des ircop quelques temps après ;-)

Firefox : Project Fusion - Remplacer le Tor Browser

Ha bha enfin une bonne décision de la part de Mozilla concernant Firefox !

Le Project Fusion est dans la continuité de Mozilla pour rerendre Firefox sexy. Après les perfs en remodelant toute la partie sous le capot, c'est maintenant la sécurité qui revient sur le devant.

Depuis des années il existe le Tor Browser qui est un fork de Firefox avec de nombreuses modifications pour améliorer tout ce qui a attrait à l'anonymat et tout ce qui est protection de la vie privée. Ce fork était geré par l'équipe de Tor depuis des années et représentait une importante masse de boulot pour pouvoir suivre le rythme de Firefox et s'assurer que tout continue de fonctionner tout en ne leakant pas plus de données.

Donc maintenant que Firefox tente de regagner désespérément des parts de marché, ils se sont rendu-compte qu'inclure des fonctionnalités du Tor Browser dans le vrai Firefox serait un argument marketing intéressant. Tant mieux ! Du coup il va y avoir pas mal de collaboration entre les deux équipes. Le but explicite est de rendre le Tor Browser obsolète.

Bref on devrait bientôt avoir pas mal de fonctionnalités assez poussées mais dans un enrobage bien pensé pour les non-techos.

Quelques fonctions à venir :

  • Meilleure résistance aux fingerprintage
  • Intégration à Tor
  • Le private mode sera boosté aux hormones

Bref avec un peu de chance ça sera une très bonne chose pour tout le monde. Avec un peu de bol ils gagneront quelques parts de marché histoire de mieux résister au vilain Chrome.

Voilà l'annonce officielle de la part de Tor.

Utiliser HTTP2 et le PUSH avec Nginx

HTTP2 est une nouvelle version du protocole HTTP qui améliore pas mal de points de l'original.

Tout d'abord la sécurité car la plupart des implémentations ne fonctionne qu'avec une couche de TLS qui était autrefois réservé au HTTPS.

Mais surtout les perfs ont été grandement travaillées. HTTP a été très largement utilisé pendant près de 20 ans avant que le boulot sur son successeur ne commence ce qui a laissé suffisamment de temps pour savoir où ça coinçait et donc comment améliorer le truc.

Optimisations

Compression des headers

Certaines optimisations ont été un peu controversées comme par exemple le fait de compresser les headers. Ça permet d'échanger un peu moins de données mais la contrepartie est que ce n'est plus un vrai protocole texte.

Pour info, un protocole texte échange des données uniquement sous forme de texte ce qui permet à un humain de facilement pouvoir le comprendre contrairement à une machine qui devra bosser un peu plus. L'argument de savoir si un protocole texte est bien provoque de nombreux débats depuis pas mal d'années.

Multiplex

Un autre point d'amélioration de HTTP2 est le multiplexage des données. Auparavant chaque ressource récuperé par le navigateur nécessitait l'envoi d'une requête au préalable dans une nouvelle connexion TCP. HTTP1.1 a ajouté le PIPELINING ce qui a permis de réutiliser la même connexion TCP pour plusieurs requêtes et réponses. Le gain était déjà énorme mais il fallait toujours une requête, avec une réponse distincte pour chaque ressource, le tout dans une seule connexion TCP. Malheureusement cette technique n'était pas utilisé dans tous les cas voire était rare. HTTP2 lui apporte le Multiplex qui permet de faire à peu près pareil mais encore plus efficace. Dans une seule requête, un client peut demander plusieurs ressources différentes et toutes les recevoir dans une seule réponse.

Cette technique a rendu obsolète certains bidouillages mise en place avec HTTP1 tel que le sharding qui consistait à répartir les ressources sur de nombreux domaines différents pour forcer le navigateur à ouvrir plusieurs connexions simultannées. Maintenant, une seule connexion est préferrable plutôt que plusieurs.

Mais pour aller encore un peu plus loin, il existe aussi le PUSH.

Push-toi de là !

Lorsqu'un client va demander une ressource, le serveur web va envoyer le document voulu, mais il peut également en envoyer d'autres qui lui semblent pertinent.

Le client reçoit les données avant même d'en avoir fait la demande ce qui permet (si c'est bien utilisé) de ne pas avoir à demander cette ressource et donc de pouvoir l'utiliser plus vite.

Par contre, vous vous doutez que si le serveur s'amuse à envoyer un fichier inutile, le client n'utilisera pas ce fichier et du coup vous aurez consommé de la bande passante pour pas grand chose…

Et dans le Moteur X ?

H2

Pour utiliser HTTP2, pas grand chose à faire dans votre conf nginx. Dans le block server vous devriez avoir un listen (ou plus). Sur celui concernant le port 443, ajoutez http2.

C'est tout.

PUSH

Nginx sait pusher du contenu depuis la version 1.13.9 sortie en Février 2018. Je me suis empressé de le mettre en place et de faire quelques tests.

Bon du coup dans bloc de type location, depuis l'endroit où vous voulez pusher votre contenu, il va falloir rajouter un simple :

http2_push /css/neodark.css;
    http2_push /favicon.ico;

Et hop votre fichier css et votre favicon seront envoyés.

Si votre site est simple, ça sera vite torché, mais si vous avez pas mal de trucs ça va vite être chiant. Et là vbrandl va vous sauver avec son générateur de conf nginx. Vous lui donnez une page web, vous lui dites quels types de ressources vous voulez push, il vous choppe les liens et vous transforme ça en bout de conf nginx à copier/coller.

Et maintenant pour vérifier que ça marche soit vous utiliser les devtools de chromium qui vous indiques (dans performance) si c'est issu d'une requête ou d'un push. Ou bien si vous voulez un truc plus simple vous avez http2-push qui est un ptit site ouaib permettant de tester une URL.


Voilà vous allez probablement pouvoir grapiller quelques ms sur l'affichage de votre site ouaib avec ça. C'est en place depuis déjà plusieurs jours ici sans soucis, j'ai pas constaté d'augmentation de la conso de bande passante (j'ai été prudent sur les push).


PS :

Comme signalé par Buzut, si vous mettez le push comme indiqué dans l'article, à chaque requête les ressources seront poussées au visiteur ce qui n'est pourtant utile que la première fois. Il est possible de gérer ça en utilisant un cookie et de ne pusher que lorsque le cookie n'existe pas comme c'est montré sur l'article nginx à ce propos.

Ce qu'il se passe quand on envoie un mail

On m'a soufflotté dans l'oreille que ce sujet pourrait être intéressant. Et effectivement ça l'est. Enfin… si on s'y intéresse… Bref…

Quelles sont les étapes qui se passent, par où va transiter les données. Voyons tout ça.

Pour l'exemple, je vais aborder le cas suivant :

Un mail envoyé depuis un client mail type thunderbird via mon serveur auto-hébergé vers un utilisateur gmail.

1 - Rédaction du mail

La partie la plus normale consiste donc à rédiger le texte de votre email. Il s'agit des données à proprement parlé.

C'est un simple texte ce qu'il y a de plus basique ou bien du texte au format HTML. Dès lors que vous ajoutez du formattage à votre texte (du gras/italique/couleur/taille de police/…) c'est du HTML. De lui même, l'éditeur de texte va donc transformer votre texte vers le format HTML pour apporter toutes ces subtilités. Votre destinataire va donc de voir "interprêter" ce texte HTML pour l'afficher avec parfois des résultats différents selon le logiciel.

Au passage, lorsqu'on rédige un mail en HTML contenant des images, celles-ci ne sont pas incluent à proprement parlé il ne s'agit que de liens. Votre lecteur de mail va suivre ces liens pour au moment de la lecture pour vous afficher les images.. C'est un moyen de voir si les mails sont consultés ou non et d'éventuellement vous profiler (en envoyant une adresse unique à chaque mail). Il est donc préferrable de désactiver l'affichage automatique des images dans les mails.

2 - Ajout des pièces jointes

Étape que l'on réalise généralement lors d'un second mail de type “Oups voilà les pièces-jointes oubliées précédemment”.

Le mail est un protocole de type texte. Cela veux dire que toutes les informations transportées le sont sous forme de texte, aussi bien les métadonnées que les données. Il faut donc transformer votre fichier en texte avec le codage base64 qui consiste en 64 caractères alphabetiques permettant de coder n'importe quelles données.

Cependant, c'est loin d'être optimisé :

cat 99-ce-quil-se-passe-quand-on-ouvre-une-page-web.md| base64 | wc -c
23939
cat 99-ce-quil-se-passe-quand-on-ouvre-une-page-web.md| wc -c
17720

Un même fichier une fois passé en base64 est près d'un tier plus lourd que l'original. Cela explique pourquoi certaines fois des fichiers juste en dessous de la limite de taille maximale ne passent pas.

3 - Ajout des méta-données utilisateurs

Bon votre mail contient votre texte et d'éventuelles pièces-jointes, c'est chouette mais ça va pas aller bien loin. Il faut donc un destinataire, voir plusieurs destinataires cachés ou non. Vous allez aussi mettre un sujet à votre mail. Et dans certains cas indiquer quelle est l'adresse d'envoi (si vous en avez plusieurs) et/ou de retour.

Ce sont les méta-données que vous entrez manuellement.

Mais ce ne sont qu'une partie des méta-données du mail puisque votre logiciel va en rajouter ainsi que les différents serveurs qui traiteront votre mail.

4 - Connexion vers le serveur d'émission

Bon bha ça y est vous avez cliqué sur le bouton d'envoi et du coup votre logiciel va commencer à parler à une autre machine !

Votre client mail est appelé un MUA pour Mail User Agent dont le boulot est de converser avec un MTA pour Mail Transfert Agent qui lui est chargé de réellement envoyer/recevoir des mails. Votre client mail donne tout simplement le mail fraîchement préparé au serveur SMTP qui lui a été configuré, en parlant le protocole SMTP (certains logiciels apellent ça serveur d'envoi).

Le protocole SMTP est également un protocole texte assez ancien (plus ancien que le web) mais a connu quelques évolutions comme notamment l'authentification et le chiffrement). Historiquement le port utilisé était le 25 mais c'est généralement le port 587 qui est désormais utilisé dans le cas d'envoi de mail. À l'usage il s'est créé une distinction entre l'envoi de mail et la réception.

Un serveur de mail n'avait pas de notion d'envoi de mail mais juste de transfert, en gros il reçoit un mail sur le port 25 sans savoir si ce mail provient d'un autre serveur de mail ou s'il provient d'un logiciel d'envoi de mail. Avec le temps on a rajouté de l'authentification pour l'envoi de mail ce qui nécessite un traitement différent et donc un port différent.

À noter que certains FAI bloquent les connexions vers le port 25 aussi bien dans un sens que dans l'autre, à des fins de luttes contre le spam. Ce blocage est dans le meilleur des cas débrayable et parfois non, ce qui vous empêche d'utiliser un serveur mail autre que celui de votre FAI.

Dans notre exemple, thunderbird se connecte donc à notre serveur de mail auto-hébergé (dans mon salon, donc sans requête DNS).

4.1 - Connexion TCP vers le serveur d'émission

Mon serveur est configuré de sorte qu'un mail émis depuis une de mes adresses perso ne peut se faire que s'il y a authentification. Il faut donc se connecter au port dit de soumission (puisque on y soumet notre mail) c'est à dire le port TCP 587.

Pour l'instant c'est donc dans mon réseau local. Je ne part pas tout de suite sur le réseau des réseaux. Il s'agit d'une connexion TCP classique en trois parties : “Connexion ?”, “Ok tu peux te connecter.”, “Merci, on est connectés.”.

4.2 - Chiffrement de la connexion

Même s'il s'agit d'une connexion sur mon réseau locale, vu qu'il y aura authentification, je préferre chiffrer la connexion. Déjà parceque ça ne mange pas de pain et ensuite ça permet d'avoir la même chose aussi bien en local qu'en distant via un réseau non sûr.

D'ailleurs de manière globale, ne considérez aucun réseau comme sûr, une machine vérolée volontairement ou non est si vite arrivée…

4.3 - Auth

Bon la connexion est désormais sûre, il ne reste plus qu'à Thunderbird de vous identifier via les identifiants/mot de passe configurés. Cette étape permet au serveur d'émission de n'accepter des mails en votre nom que si les identifiants sont bons pour éviter l'envoi de spam dans votre dos.

Si l'une des deux étapes précédentes échoue, votre serveur vous enverra probablement bouler sans ménagement et coupera la connexion TCP ce qui vous gratifiera d'un joli message d'erreur dans votre Thunderbird.

5 - Vérifs de base antispam avant émission

Internet c'est la jungle et je pense que vous connaissez tous à peu près l'ampleur du spam. Bref tout le monde tente de s'en protéger le plus possible. Ne pas recevoir de spam c'est bien, ne pas en envoyer soi même c'est mieux ! Si votre serveur a la malheur d'en envoyer vous serez très vite blacklisté de partout il vous faut donc vous protéger pour ne pas finir en tant qu'Open relay.

Bon déjà on s'est authentifié, c'est le minimum syndical.

Ensuite il existe tout plein de petits réglages sur le serveur afin de limiter les possibles fuites. Ce sont principalement des ptites restrictions sur les adresses IP autorisées à se connecter ou bien quels domaines sont autorisés à envoyer du mail… Bref rien de bien méchant, c'est du vite vu par le serveur.

Il est même possible de faire passer le mail sortant dans un antispam mais je ne l'ai pas mis en place personnelement mais sachez que c'est possible afin de vraiment s'assurer que ses utilisateurs n'envoient pas de spam. Sur une installation conséquente c'est quasiment indispensable pour ne pas transmettre du spam à la première machine vérolée.

Dans un second temps, le mail va être signé par le serveur d'émission en fonction du domaine d'émission du mail : il s'agit du DKIM le Domain Key Identified Mail. C'est une signature qui atteste que le mail provient bien du serveur de mail autorisé par mon nom de domaine (dans mon serveur DNS, j'ai annoncé que les mails provenant de mon domaine sont signés par telle clé). Contrairement à GPG, cette signature vaut pour tous les mails du domaine, ils ne chiffrent pas le message et ne garantissent pas de l'identité de l'émetteur mais l'identité du nom de domaine d'émission. Toutes les personnes utilisant le même nom de domaine pour émettre leur mail auront la même signature.

Qui plus est cette signature atteste de l'intégrité du mail : il prouve qu'à partir de votre serveur d'émission jusqu'à la lecture, le mail n'a pas été modifié. (Par contre entre le logiciel rédigeant le mail et le serveur d'envoi par contre pas de certitude mais c'est généralement un segment de confiance.)

Bref, cette signature sera placée dans l'entête du mail et sera utilisée par les serveurs intermédiaires et finaux afin de vérifier que votre mail soit bien légitime. Elle ne sert pas directement aux utilisateurs et n'est donc que rarement montrée. Cette signature atteste uniquement de l'authenticité du serveur d'émission et de l'intégrité du mail à partir du serveur d'émission. Elle ne prouve rien concernant l'utilisateur lui même, uniquement le serveur !

Si tout se passe comme il faut, votre mail est donc consideré comme légitime par votre serveur de mail et est donc signé. Votre serveur de mail va donc transferer ce mail au serveur du destinataire

6 - Trouver le serveur de destination

Bon, votre mail est donc prêt à partir, mais à partir où ? Votre serveur de mail va donc trouver quelle machine gère les mails de votre destinataire et qui qui c'est qui doit faire ça ? C'est le DNS !

Bon truc@gmail.com ça veux dire l'utilisateur truc sur le domaine gmail.com, ça devrait être plutôt simple pour le moment. Du coup votre serveur de mail va demander aux serveurs DNS “À quelle machine je dois me connecter pour envoyer des mails pour gmail.com ?” ce qui correspond à “Quels sont les enregistrements MX pour gmail.com ?”

Les MX records sont donc les machines en chargent de la réception du mail : un ptit dig gmail.com in MX

; <<>> DiG 9.12.1 <<>> gmail.com in MX
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 48789
;; flags: qr rd ra; QUERY: 1, ANSWER: 5, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;gmail.com.                     IN      MX
;; ANSWER SECTION:
gmail.com.              3581    IN      MX      5 gmail-smtp-in.l.google.com.
gmail.com.              3581    IN      MX      10 alt1.gmail-smtp-in.l.google.com.
gmail.com.              3581    IN      MX      20 alt2.gmail-smtp-in.l.google.com.
gmail.com.              3581    IN      MX      30 alt3.gmail-smtp-in.l.google.com.
gmail.com.              3581    IN      MX      40 alt4.gmail-smtp-in.l.google.com.
;; Query time: 0 msec
;; SERVER: 10.0.0.254#53(10.0.0.254)
;; WHEN: Wed May 23 15:48:51 CEST 2018
;; MSG SIZE  rcvd: 161

Donc là on voit que pour gmail il y a cinq réponses indiquant donc 5 machines à contacter par ordre de priorité du plus petit au plus grand. Je vais donc devoir tenter de me connecter à gmail-smtp-in.l.google.com. et si cette machine ne répond pas je passe à alt1.gmail-smtp-in.l.google.com. et ainsi de suite. C'est un système qui permet d'avoir plusieurs machines redondantes assez facilement (si seulement un même mécanisme était utilisé pour d'autres protocoles comme le HTTP…).

Bon c'est bien gentil mais c'est une demi réponse ça, il me faut une adresse IP, il faut donc faire une requête DNS pour connaitre l'adresse IP de gmail-smtp-in-l.google.com., ce qui va me donner 74.125.133.27.

Si jamais le domaine à qui vous tentez d'envoyer un mail ne possède pas de MX record, votre serveur tentera de se connecter directement à l'adresse IP rattaché au domaine directement. Mais bon il faut vraiment être un très mauvais administrateur pour ne pas mettre de MX record à un serveur de mail.

Comme d'habitude on peut voir que le DNS est toujours un point sensible pour la confidentialité et que le choix d'un résolveur DNS peut avoir d'importantes conséquences pour le respect de la vie privée.

7 - Interconnexion des serveurs émission/réception

Allez hop, votre serveur d'émission va se connecter donc au serveur de réception pour transmettre votre mail. Une connexion TCP va être établie et parfois ça sera chiffré, parfois non. Globalement le chiffrement progresse énormément ces dernières années au point d'être quasi systématique.

Il va quand même falloir montrer patte blanche pour prouver que vous n'êtes pas un vil spammeur.

La base de la base c'est de parler le protocole SMTP correctement. Certains spammeurs utilisent des logiciels pas très très respectueux du standard et se font repérer et dégager facilement.

Votre serveur va donc transferer votre mail donc avec ses méta-données et les données. Et ensuite bha le serveur de réception fait un peu ce qu'il veut.

7.1 Greylisting

Une méthode très efficace de virer du spam est de faire du greylisting. Le serveur de réception va dire “Je suis pas dispo réessaye plus tard”. Et cinq minutes plus tard votre serveur d'émission va retenter et ça marchera.

La plupart des spammeurs se découragent facilement (ça leur permet de ne pas perdre de temps à retenter…) mais les mails légitimes, eux, retenteront. Cela engendre par contre un délai de quelques minutes dans la réception des mails mais rapelez-vous : Les mails ne garantissent absolument pas de délai de livraison ! Avec un peu de chance ça sera dans quelques secondes mais rien dans le protocole n'empêche de le livrer quelques jours plus tard sans aucun message d'erreur ou autre.

Il me semble que cette technique n'est pas employée par Gmail mais assez courante chez les auto-hébergeurs du fait de son efficacité redoutable.

7.2 Différentes vérifications

Chaque serveur possède des règles différentes pour l'acceptation des mails.

Certains ne font que le strict minimum (c'est à dire vérifier que le destinataire existe bien), d'autres imposent des tailles maximales pour les mails, d'autres utilisent des systèmes de réputation… Chacun fait sa tambouille.

Dans les grands classiques on trouve la consultation de listes noires publiques via le DNS, ce que l'on apelle les DNSBL. On y vérifie que l'adresse IP de votre serveur d'envoi n'est pas présent dans cette blacklist. C'est donc potentiellement encore un endroit potentiel de fuite d'information : votre mail n'est pas envoyé aux fournisseurs de DNSBL, juste l'ip de votre serveur, ce qui peut être couplé avec l'ip du serveur de réception faisant la requête DNS. Le risque est minime cela-dit.

Vous obtiendrez parfois un mail de réponse de la part de Mailer Daemon vous indiquant pourquoi (ou pas) votre mail à été rejeté et ce mail peut prendre jusqu'à une semaine pour arriver…

8 - Fin de l'émission

Bon bha ça y est votre serveur d'émission a fini son boulot et donc maintenant le destin de votre mail n'est plus entre ses mains. Votre serveur peut couper la connexion et se rendormir paisiblement.

Voyons donc ce que fait le serveur de réception désormais.

9 - Antispam

9.1 SPF

Le serveur de réception va faire la vérification du SPF qui permet de s'assurer que le serveur qui a émit le mail est bien autoriser à émettre des mails. Pour cela, le serveur de réception va faire une requête DNS particulière qui lui donnera la liste des serveurs autorisés à émettre des mails pour votre domaine. Si le serveur d'émission ne fait pas parti de cette liste, votre mail sera rejeté pour soupçons de spam. Encore une fois, le DNS va être utilisé.

Il y a encore un potentiel de fuite d'information : le serveur de mail réceptionnant votre mail enverra une requête à son serveur DNS lui indiquant de vérifier quels sont les machines autorisées à envoyer du mail pour tel domaine. Le serveur DNS peut donc deviner que votre domaine à envoyer un mail à tel autre domaine.

9.2 DKIM

Tout à l'heure, votre serveur a ajouté une signature DKIM sur votre mail et maintenant le serveur de réception va la vérifier. Ça permet de s'assurer que le mail reçu provient bien de votre serveur de mail. Donc le serveur de réception regarde le mail, et vérifie que la signature correspond bien à ce qui se trouve dans l'enregistrement DNS du DKIM. Seul votre serveur peut créer une signature valable pour votre domaine.

En gros SPF assure que le serveur a le droit d'envoyer des mails et DKIM prouve que le mail provient bien du domaine. C'est deux technique complémentaires permettant de limiter l'envoi de spam en votre nom.

Si en 2018 vous n'avez pas de SPF et de DKIM fonctionnel, vos mails finiront quasi-systèmatiquement dans les spams, à juste titre. Là encore le DNS joue un grand rôle et se trouve être une potentielle fuite de données.

9.3 Antispam basique

Encore un peu d'antispam mais ce coup-ci ça se base non plus sur le serveur d'émission mais sur les méta-données et les données du mail lui-même.

le mail va être analysé selon pleins de critères variés.

  • Est-ce que la date d'émission est crédible ?
  • Est-ce que ça parle pas un peu trop de pognon ?
  • Est-ce que ça utilise des caractères louches ?
  • Est-ce que les entêtes correspondent bien ?

C'est aussi bien des points techniques que des points plus "humains". À chaque réponse on obtient un score positif ou négatif.

9.4 Filtre Bayésien

Là on pousse encore un peu plus l'antispam en faisant une analyse statistique sur les mots présents dans le mail.

Si votre mail insiste un peu trop sur la longueur des membres, ou bien s'attarde un peu trop sur d'éventuels gains financiers ou tout autre sujet à la mode, le filtre Bayésien va reconnaître des motifs récurrents et encore une fois attribué un score de probabilité.

On cumule ce score à celui précédemment obtenu et à la fin on fait le compte et le résultat final détermine si c'est un spam ou non.

En fonction de ce score le mail sera soit supprimmé, soit placé dans les spams, soit aura le droit d'arriver dans la boîte du destinataire.

Ici le logiciel antispam a accès au mail complet. Cela pourrai poser un soucis de confidentialité cependant ce filtre n'est pas sous-traité à ma connaissance. Bon bha finalement on me signale que si certaines entreprises sont spécialisées dans l'antispam et reçoivent donc les mails en live pour les analyser et délibérer si oui ou non il s'agit d'un spam, donc c'est encore une fois une fuite potentiel pour votre mail.

10 - Livraison locale

Le serveur du destinataire a donc accepté le mail et effectué tous ses tests d'antispam, il faut donc maintenant transférer le mail au LDA, le local delivery agent. Ce logiciel a pour but de ranger et stocker le mail.

Son rôle premier est donc de trouver à qui le mail doit être livré (il peut y avoir des alias ou des redirections par exemple).

Son second rôle ensuite est de ranger le mail au bon endroit en fonction de règles définies par le service mais qui peuvent également être écrites par l'utilisateur. Par exemple le mail va être classé dans les newsletters ou bien vous avez créez une règle pour indiquer que tous les mails en provenance de tel utilisateur doivent être placés dans un dossier prédifini.

Mais n'oublions pas que le mail est à destination de Google. Il est donc fort probable qu'en interne l'architecture de Gmail soit très complexe et ne soit pas un seul petit serveur mais bien une armada complète pour le stockage (redondant et backuppé) avec répartition de la charge pour pouvoir supporter des millions d'utilisateurs mais cette partie est trop complexe pour cet article.

Bon il y a tout de même une étape cruciale encore.

11 - Indexation

Le but de Google est, comme tout le monde sait, d'aider à chercher dans vos mails. Non pas vous aider vous, mais aider les clients de Google. En tant que marchandise vos mails sont donc lus et analysés et un profil est établi en fonction de tous vos mails. Vous êtes donc placé dans différentes cases en fonction de votre courrier.

Vous êtes inscrits sur tel site, vous prenez des vacances à tel endroit, vous conversez avec telle personne, vous vous êtes abonnez à tel newsletter, vous supprimmez systèmatiquement les mails de telle origine, vous effectuez régulièrement des achats sur tel site…

En bonus toutes ces informations permettent à gmail de vous afficher rapidement les résultats de recherche dans votre montagne de mail.

Bref ce service coûte très cher mais par chance est très facilement rentabilisé par Google.

12 - Consultation

Bon bha maintenant votre destinataire va vouloir lire votre mail, Gmail étant un webmail avant tout, votre utilisateur va devoir ouvrir la page avec son navigateur web et se tapper toutes les étapes classiques. Le webmail a le rôle de MUA ici.

Et voilà ! On y est arrivé.

TL;DR

Chemin d'un mail : MUAMTAMTALDAMUA Avec dans quelques cas des risques de fuites de données de votre mail (surtout du côté des DNS et des MTA).

Si vous vous autohébergez, vous pouvez à peu près garantir les deux premières étapes pour la confidentialité de votre mail tout au mieux. Si vous ne vous auto-hébergez pas vous ne pouvez garantir que la première étape au delà … bha … bonne chance.

Si vous voulez mieux, il va falloir chiffrer votre mail ;-)

Remplacer Groovebasin par MPD

Voilà maintenant des années que j'utilise le logiciel Groovebasin pour écouter de la musique. C'est un lecteur audio web. Ça veux dire qu'il faut utiliser un serveur web, et un navigateur web pour pouvoir l'utiliser. Ça a de sacrés avantages tel que la disponibilité de votre bibliothèque numérique de partout. De reprendre la lecture là où vous en étiez, pouvoir contrôler la lecture depuis une autre machine.

Mais au final ça a ses inconvénients : il faut passer par un navigateur web, ce qui est assez lourd. L'intégration dans le reste du système est compliquée : pas facile de faire des hotkeys pour le contrôler à distance. Et puis il ne gère pas les notifications du coup pas moyen de voir le titre de la nouvelle chanson qui démarre sans aller chopper la page web.

J'ai utilisé pas mal d'alternatives : Subsonic qui est très similaire mais moins bien globalement sauf pour la partie application android (qui gère la création d'un cache offline entre autre). J'ai également testé Ampache il y a très longtemps et ça m'avait moyen convaincu. J'ai utilisé quelques temps MOC qui est un player audio en console que j'aimais bien mais du coup on perd toutes les features qu'apporte un player web. Et encore plus longtemps avant j'ai utilisé foobar2K sur windows et encore un peu avant Winamp.

Bon du coup… vers quoi me tourner ?

MPD

Music Player Daemon est un projet qui est maintenant assez connu de part son âge. Il était particulièrement novateur à l'époque dans son concept d'avoir un serveur musical. C'est une approche pas trop éloigné des players web à la différence que c'est pas du web.

On a donc des clients MPD dédiés plus ou moins variés dont un certains nombre en console. On peut donc manipuler le serveur avec de nombreux programmes différents, du plus basique (mpc) à d'autres plus lourdingues avec de vrais interfaces graphiques en GTK+ ou QT… Bref il va forcément y avoir un truc qui va me plaire !

NCMPCPP

Mon premier réflexe a été de chercher un client console. Après tout j'ai l'habitude de manipuler quasiment tous mes softs dans des terminaux désormais et puis bon… jouer de la musique ne nécessite pas d'interface graphique.

Ayant déjà fais mumuse avec la bête il y a quelques années, je me suis retourné vers ncmpcpp qui est l'un des clients consoles les plus réputés.

Et bhé… J'aime pas trop trop. Je trouve l'interface étrange : par défaut on tombe sur la playlist mais du coup si l'on veux rajouter une chanson à la playlist là commence la bataille. Il faut aller dans la bibliothèque. Trois choix possibles, la première c'est Browse / qui affiche l'arborescence de fichier, la seconde est le Search engine et enfin la Media Library. Et c'est là que je commence à râler.

Ptain que l'interface est désagréable ! Si l'on va dans l'arbo de fichier, on cherche une chanson, et si on a le malheur d'appuyer sur Entrée paf ça vous la fout en fin de playlist et ça passe dessus… Mais heuuu pourquoi ce comportement ? Ça serait compréhensible que ça la foute en fin de playlist mais sans la jouer tout de suite, parcequ'une fois la chanson finie bha la playlist est finie. Ou alors ça la fout à la place du morceau courant du coup la