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).

  29/10/2018   04/11/2018   20/11/2018 02/02/2018
DB postgres 26Mo 88Mo 320Mo 1212 Mo
/home/pleroma 144.5Mo 144.9Mo 161.5Mo 256.4Mo

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 suite de la playlist est pas impactée. Bref un choix bien étrange.

Toujours dans la catégorie interface étrange, le Search engine est d'un lourdingue. Là on peut faire une recherche globale ou alors rechercher uniquement dans un tag précis des fichiers (genre que dans les "artists" ou que dans les "albums") ce qui est vraiment bien. Par contre pour lancer la recherche faut descendre tout en bas de la liste de choix possible pour aller sur *Search*… Ptain habituellement les interfaces textes sont tellement plus efficaces. Et encore une fois gare à vous ! Si vous avez le malheur d'appuyer sur Entrée, rebelotte ça vous le fout en bas de playlist et ça passe dessus : la plaie. Si vous voulez l'ajouter dans votre playlist actuelle faut appuyer sur a, là s'ouvre un fenêtre vous demandant dans quelle playlist, puis ensuite une autre fenêtre pour savoir où la placer dans la playlist. Beaucoup trop d'étape pour une action aussi basique.

Et c'est pareil pour la Media library, au moins l'interface est cohérente dans sa lourdeur.

PMS

J'ai vite fait testé un autre client pour MPD du nom de PMS qui est plus récent que le vénérable ncmpcpp et qui est actuellement en train de subir une réécriture en Go. J'ai donc testé la version classique avant réécriture qui est annoncé comme stable et pour l'instant avec plus de fonctionnalité et pour faire vite j'ai pas aimé l'interface non plus. Et puis la doc est … déplorable. Pas réussi à faire ce que je voulais simplement du coup j'ai capitulé en voyant la non-doc.

J'ai un peu trop pris mes habitudes avec Groovebasin. La migration vers autre chose est donc difficile. Va falloir que je me décroute et du coup avec l'aide du Fediverse, j'ai décidé de prendre le taureau par les cornes.

SMPCD

Du coup j'ai fait un ptit cahier des charges :

  1. Je veux pas que la musique s'arrête pour cause de playlist vide
  2. Je veux pouvoir revenir au morceau précédent et ptet celui d'avant aussi et aussi au précédent…
  3. Je veux pouvoir le contrôler via des raccourcis claviers
  4. Je veux des ptites notifs quand ça change de morceau avec le titre/l'auteur
  5. Je veux un truc super léger

Bon bha en fait tout rentre dans un simple script shell. MPD propose MPC qui est une interface en ligne de commande basique mais qui a accès à toutes les fonctionnalités de MPD. Si c'est pas faisable dans MPC, c'est que MPD peut pas faire.

Allez c'est parti pour ce dimanche maussadee !

Vérifier que MPD tourne

CheckMPD(){
  if [ ! $(pgrep -x mpd) ]; then
    timeout 3 i3-nagbar -m "MPD ne tourne pas"
    exit 1
  fi
}

Cette partie est ultra simple, si le daemon ne tourne pas on quitte

La boucle qui fait tout

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

    mpc idle player
    flock -nF /tmp/mpdnotif.lock -c 'mpc current -f "%title% - %artist%" | timeout 8 dmenu -g' &
  done
}

Voilà la bête. Au final c'est ultra simple, d'abord on lance une boucle infinie avec le while true. Dans cette boucle d'abord on lance la fonction décrite précédemment histoire de pas mouliner pour rien.

Ensuite le premier if s'assure que si la playlist fait moins de 30 morceaux de musique d'en rajouter un au hasard depuis la bibliothèque.

Le second if lui veille à ce que si l'on dépasse le quinzième morceau de la playlist de virer le premier morceau de la playlist. Ça évite de garder un historique des morceaux passés trop long.

Après se trouve le mpc idle player qui permet d'attendre que MPD fasse une action au de type player ce qui correspond à passer au morceau précédent/suivant ou juste faire une pause/reprendre. Ça évite de faire un sleep dans la boucle.

Et enfin le flock permet de mettre un vérou (dans /tmp) pour éviter de lancer plusieurs fois simultanément la commande qui suit. Sans ça, lors d'une frénésie de passage à la chanson suivante on se retrouve avec pleins de notifs de morceau suivant. Et pour afficher la notif j'ai rusé, j'ai utilisé dmenu avec la commande timeout. timeout permet de lancer une commande pendant quelques secondes puis de l'interrompre. Dans mon cas je lance un dmenu à qui j'ai passé les informations depuis mpc current.

DMENU MPD

Dmenu est amour et des gens ont déjà bidouillé des scripts pour manipuler MPD via dmenu. Mais globalement c'était soit overkill soit pas tout à fait ce que je cherchais. Du coup j'ai fait mon mien qui est ultra simple :

#! /bin/sh
mpc listall | dmenu -i | mpc insert

Ouai c'est ultra basique. Le but est juste de lister tous les morceaux dispo dans la bibli et de pouvoir en chercher un et de l'ajouter à la playlist. Il suffit d'ajouter un ptit raccourcis pour lancer ça depuis i3 et le tour est joué.

Adaptation de Dmenu

J'adore dmenu, c'est un outil formidable. Je m'en sert pour pleins de trucs comme lancer des commandes, pour récupérer mes mots de passe, pour lancer mes films, pour contrôler la musique et aussi pour les notifs. Le souc c'est que pour les notifs… bha ce couillon il choppe le focus du clavier. Du coup à peine lancé vous vous retrouvez "coincé" dans dmenu.

Du coup au début j'ai fouillé dans la doc i3 pour contrer cette habitude. J'ai aussi demandé sur leur salon irc mais pas de bol c'était l'heure de la sieste. Du coup j'ai cherché plus globalement sur le net mais rien de bien probant.

Et si en fait c'était pas du fait d'i3 mais de dmenu lui même ?

Allons voir un peu le code de dmenu. Je sais que c'est du C et je n'ai que de vagues notions de C mais bon c'est made in Suckless, ça devrait être concis.

Un ptit tour dans /usr/portage/distfiles/ et un cp plus tard et me voilà avec le code de dmenu. 17 fichiers ! Ça va je devrais pouvoir m'y retrouver.

Commençons direct par le dmenu.c qui fait 750 lignes. Bingo, visiblement c'est quasiment tout le code de dmenu qui reste plutôt lisible même pour un noob de mon genre.

Bon va quand même falloir un peu fouiller. Je commence par chercher focus qui n'a que 11 occurrences. Il y a des trucs qui paraissent pas mal et je vois que ça parle de grabfocus(). Intéressant !

Cherchons un peu ce qu'il y a avec grab et ses 12 occurrences. Une fonction grabfocus(void) des plus pertinentes ! Et en plus en toute fin de fichier elle est appelée, à ce qui ressemble le lancement de dmenu.

Bon bha yapuka !

En début de main() il y a le parse des arguments, je rajoute une nouvelle option -g pour ne pas grab le focus, j'initialise la variable juste avant bien entendu. Et je rajoute un ptit (en vrai deux) if pour vérifier la présence de cette nouvelle variable pour ne pas appeler la fonction grabkeyboard() et voilà.

Je make et je teste. Ça marche du premier coup \o/.

Bon j'en profite pour modifier le man, et l'ajouter dans la liste des options et voilà. Je fait génère le patch et je fout ce patch dans /etc/portage/patches/x11-misc/dmenu.

Je réinstalle dmenu à la gentoo avec emerge dmenu -av et quelques secondes plus tard je teste en vrai et ça fonctionne, le man est mis à jour aussi.

Bon bha cette partie a été au final torchée en trente minutes. Finalement le C c'est facile et Gentoo est toujours aussi formidable.

Raccourcis claviers

Bon maintenant je veux pouvoir faire pause/suivant/précédent avec des raccourcis claviers. Pas de bol j'ai pas de touches multimédia sur mon clavier.

Il faudrait que je modifie un ptit coup le firmware du clavier pour en ajouter avec Fn mais j'ai un peu la flemme. Je n'ai pas conservé l'IDE arduino… Bref ça sera pour une prochaine fois.

Pour l'instant me contenterai de créer un raccourcis clavier i3 classique sur des touches non utilisées même si c'est moins propre.

Publication des codes

Pour l'instant je publie pas SMPCD (Shell Media Player Client Daemon) car je pense qu'en l'utilisant quelques jours j'y apporterai des modifs mais je le ferai vous inquiétez pas. Si jamais vous le voulez vraiment n'hésitez pas à demander.

Pour dmenu pour l'instant j'ai annoncé ce que j'avais fait sur le chan irc de Suckless sans trop de réponse donc pour l'instant ça reste chez moi. Pour les intéressés je le fout ici.

Présentation de Calls. L'appli du Librem 5 pour les appels

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 :


Introduction

De loin, la fonctionnalité la plus critique d'un téléphone est la possibilité d'émettre et recevoir des appels via le réseau téléphonique publique en utilisant des numéros de téléphones. Même si chez Purism nous souhaitons implémenter des systèmes de communications permettant plus de sécurité et un meilleur respect de la vie privée que ce que l'on peut attendre via le réseau téléphonique publique, ce moyen est le plus utilisé pour le moment et nous ne pouvons nous permettre de vendre un téléphone ne pouvant pas téléphoner.

Mon boulot a été de coder un dialer (numéroteur) et la gestion des appels. Comme tous nos développements sur le Librem 5, le but est de réutiliser le plus de code existant possible et de viser l'intégration dans la plateforme Gnome qui est utilisée par défaut par notre PureOS. Il n'y a pour le moment pas de dialer dans le projet Gnome donc nous pousserons son adoption.

Idées initiales

Après quelques recherches, le but initial était de réutiliser le framework Telepathy, l'idée étant que nous pourrions un numéroteur utilisant le réseau publique et d'utiliser le dialer SIP car Telepathy possède déjà un gestionnaire de connexion PSTN (réseau publique téléphonique) et SIP. Qui plus est, le gestionnaire de connexion PSTN telepathy-ring est déjà utilisé dans des téléphones sur le marché. Et même si il possède quelques soucis, je trouve Telepathy vraiment génial :-)

Pour aller plus loin, mon collègue François Téchené a écrit un article décrivant un approche basé sur les fonctionnalité plutôt que sur les applications concernant l'expérience utilisateur. Telepathy pourrait fournir les fondations d'une telle approche.

Il est bon de noter cependant que Telepathy n'est pas en odeur de sainteté. De nombreuses voix parmi le projet Gnome préferraient sa mort. Telepathy est un système complexe où le moindre changement est difficile à apporter. Pour se faire, il faut synchroniser ces changements dans les spécifications de l'API D-Bus et dans une multitude de composants divers. Une longue discussion à propos de Telepathy et de son éventuel remplacement a eu lieu dans la mailing-list Gnomes's desktop-devel en Aout et Septembre 2017.

Élargissement du débat

Après avoir commencé quelques travaux préliminaires sur le code de Telepathy, étant donné que notre but est que ça devienne le dialer de Gnome, et que notre intention est d'utiliser le framework contesté qu'est Telepathy, j'ai contacté la fameuse mailing-list pour voir ce qu'ils en pensaient.

La discussion s'est penché sur les soucis généraux et la consolidation des différents systèmes de communication. La première conclusion a été que créé un système à base de fonctionnalité est pour le moins compliqué. Comme lors de la première discussion de 2017, un Telepathy-NG (nouvelle génération) serait la meilleure solution. C'est une future tâche que nous envisageront une fois les fonctions basiques déjà en place. Pour l'instant, il n'y avait aucune réticence à propos d'un dialer PSTN reposant sur Telepathy.

J'ai aussi discuté via IRC avec Robert McQueen, l'un des auteurs originels de Telepathy. Le gestionnaire de connexion telepathy-ring utilise le framework de téléphonie mobile oFono. Étant donné la difficulté d'écrire un client Telepathy, Robert suggera qu'il serait probablement plus simple de créer une interface utilisateur (UI) avec une fine couche d'abstraction implémentant d'abord un backend oFono puis, plus tard, un backend plus complexe sur Telepathy. Nous avons suivi son conseil et notre dialer adopte donc cette approche.

Bienvenue Calls

Capture d'écran montrant l'interface du dialer.

Notre programme s'appelle Calls. Il a une interface utilateur (UI) en GTK +3 et utilise oFono à travers une fine couche d'abstraction. Nous utilisons également notre libhandy pour le widget du numéroteur.

« Peut-il téléphoner ?! » Oui, il peut ! 🙂

Les rouages internes

Le diagramme est représentation à la UML de la couche d'abstraction dans Calls :

Diagramme UML de la couche d'abstraction

Les classes sont des GInterfaces. Pour vous donner une meilleure idées de la sémantique derrière chaque interface, voici un tableau des objets que les implémentations pourront utiliser :

Interface objets d'implémentation
Provider oFono Manager, Telepathy Account Manager
Origin oFono Modem/VoiceCallManager, Telepathy Account
Call oFono VoiceCall, Telepathy Channel

Le nom “Origin” a été choisi puisqu'il s'agit de l'objet à l'origine d'un appel.

La super-interface MessageSource est utilisée pour traiter les messages de l'utilisateur. La couche d'abstraction est une fine couche pour l'UI donc l'implémentation est amenée à afficher des informations, comme des erreurs ou des warnings ou autre, d'une manière appropriée pour l'utilisateur. Même si les méthodes ne renvoient pas d'erreurs d'information mais à la place s'attendent à ce que l'implémentation fournissent des signaux de type messages.

Le code source est disponible dans gitlab Gnome de notre repo community.

Modems, oFono et ModemManager

La démo d'en haut utilise un modem SIM7100E de chez SIMCom que vous pourrez voir monter sur notre board prototype avec la bordure rouge en bas à droite de l'écran. Comme la plupart des modems cellulaires, il supporte à la fois les commandes AT ainsi que les QMI.

Lorsque le SIM7100E a été branché pour la première fois, oFono ne le reconnaissait pas. Cependant, il existe un second framework de téléphonie mobile, ModemManager qui l'a reconnu et pouvait passer des appels, envoyer des SMS et faire des connexions de données out of the box. Nous avons alors considérer de l'utiliser à la place d'oFono mais malheureusement, le support des appels audio est rudimentaire et ne supporte pas les services additionnels comme la mise en attente ou les conférences.

Alors que QMI est préferrable aux commandes AT, oFono ne supporte pas les appels via QMI. Donc pour pouvoir faire des appels vocaux, nous avons besoins d'un nouveau driver pour le SIM7100E utilisant les commandes AT. Ce drive a été upstreamé (partagé à la communauté).

Ensuite

Nous avons abattu un certain travail jusqu'à présent mais il reste de nombreuses tâches à accomplir.

  1. Ajouter des sonneries. Pour le moment le programme ne joue aucun son lors d'un appel entrant. Il va falloir également jouer les tonalités DTMF quand l'utilisateur composera des numéros.
  2. Implémenter un journal d'appel et son intégration avec Gnome Contacts. Pour l'instant Calls ne journalise rien, nous avons donc besoin d'un format de stockage ainsi qu'une UI. Nous devons également être capable de chercher des contacts depuis Calls et ajouter des contact depuis le journal d'appel.
  3. L'UI est simple mais fonctionnelle. Nous sommes bien loin du niveau de finition que nos designers envisagent. De nombreux efforts pour retravailler et polir l'interface seront nécessaires.
  4. Implémenter les réglages téléphoniques dans Gnome Settings. Nous avons besoin d'une nouvelle page pour les réglages spécifiques comme la sélection du réseau mobile et autres.
  5. Gérer les multiples SIM et les connexions des modems. Pour l'instant Calls est une simple interface pour les objets DBus OFono et ne peut qu'utiliser des modems déjà fonctionnels. Nous avons besoin de mécanisme permettant de configurer quel modems doit utiliser Calls et pour les connecter automatiquement quand l'appareil démarre.
  6. Implémenter un backend Telepathy pour avoir un support des appels SIP ainsi que les autres protocoles supportés par Telepathy.
  7. Le choix final des modems n'a pas encore été fait donc nous ne poussons pas trop les efforts vers le SIM7100E, juste assez pour tester Calls. Nous pourrions implémenter le support de QMI dans oFono si nous décidions d'adopter ce modem. À vrai dire, alors que j'écrit cet article il y a une discussion sur leur mailing-list pour le support QMI. Cependant nous pourrions implémenter le support de services supplémentaires dans ModemManager, qui est plus dans l'alignement de la plateforme Gnome.
  8. Ajouter le support des services supplémentaires et les opérations complexes. ModemManager a un support rudimentaire des appels tout comme Calls actuellement. Nous voulons être sûr que notre dialer aura un support complet des standards de la téléphonie mobile.

C'est tout pour le moment, restez branché pour de futurs infos ! 🙂

Une entreprise qui ne sera pas nommé vendait des téléphones basés sur GNU/Linux mais ceux-ci n'étaient pas capable d'émettre des appels téléphoniques quand ils sont sortis. Cinq ans plus tard, j'ai acheté un de ces téléphones et l'ai apporté à mon LUG local. Et biensûr, la première question a été : “Est-ce qu'il peut téléphoner ?! haha!” La réputation n'est plus à faire une fois que l'on vend un téléphone qui ne peux pas téléphoner !


Ça avance petit à petit. C'est pas mal du tout mais ça rassure pas… La deadline approche et bha ça paraît toujours aussi distant pour les fonctions basiques et le choix du matos. Gardons confiance.

Leur collaboration avec l'écosystème existant fait toujours plaisir et augure un bon avenir.

Les maux des GAFAM

Il est de bon ton de critiquer les GAFAM. C'est un sport assez commun. Aussi bien chez les libristes/techniciens qui sont au fait des enjeux techniques de la chose mais également désormais la presse spécialisée voire pas spécialisée du tout.

Bref le discours devient assez connu et commun. C'est bien.

Par contre le remède n'est que très rarement abordé.

Un remède mais pour quelle maladie ?

La maladie en elle-même n'est pas unique. Le terme “GAFAM” c'est déjà trop générique et pourtant ça regroupe des maux radicalement différents.

Et si on essayait de décomposer cet accronyme et voir un peu ce que ça regroupe ? La liste qui suit ne sera pas exhaustive du tout mais donnera un bon aperçu.

G

Google, le fameux moteur de recherche.

Ha le bon vieux temps où ce n'était qu'un moteur de recherche est révolu mais bon qu'est-ce qu'on leur reproche désormais ?

  1. Hégémonie sur la recherche web : ils font la pluie et le beau temps sur la visibilité d'un site web. Si demain ils modifient leur algoritme d'indexation, ils peuvent chambouler la vie d'un site web (en bien ou en mal).
  2. Hégémonie sur le navigateur web : ils font la pluie et le beau temps sur la façon dont le web évolue. S'ils décident d'utiliser de nouvelles balises HTML hors standard bha… tant pis pour les autres. S'ils décident d'ajouter un blocage de pub nativement dans leur navigateur… bha tant pis pour les régie pubs autre que la leur.
  3. Roi de la pub : la pub en elle même n'est pas l'élément génant mais en fait ça veux surtout dire roi de l'espionnage. Ce n'est pas “juste de la pub”. La pub que vend Google à ses clients est ultra ciblée. Et pour cibler le pigeon, il faut le connaître par cœur. Donc on l'espionne constamment partout pour recouper les données et monter non pas un simple profil mais une identité complète.
  4. Omniprésent : ils ont une galaxie de site web (google, youtube, maps, plus, …), une myriade d'appareils (android, chromecast, chromebooks, des enceintes, des thermostats, quelques voitures, …), une petite collection d'OS (android, chromeOS bientôt fuschia). Même hors ligne on sent sa présence permanente.

Ça fait peur. On ne peut absolument pas leur échapper sans être très précautionneux et en ayant des connaissances techniques assez poussées. Et le pire c'est que ça ne va pas s'arranger de si-tôt.

A

Apple, la plus grosse capitalisation boursière actuelle (proche du 18ème PIB mondial).

En quarante ans, ils sont passés d'une entreprise pro-bidouilleurs à une église diabolisant la personnalisation, empêchant la réparation et compliquant la propriété privée.

  1. La forme avant le reste : c'est un reproche assez récurrent. Ils préferrent sortir un produit qui sera plus joli/léger plutôt que réparable/upgradable.
  2. C'est comme ça et puis c'est tout : quand on achète un produit Apple, on utilise un produit Apple comme Apple accepte qu'on l'utilise. Très peu de personnalisation, c'est tout verouillé de partout. Une autre personne avec un produit Apple aura le même que vous. Une chance qu'on puisse changer le fond d'écran !
  3. Vous avez le droit de l'utiliser : quand on achète un produit Apple, on utilise un produit Apple comme Apple accepte qu'on l'utilise. C'est tout juste s'il vous appartient. Vous n'avez pas le droit de l'utiliser différemment. Surtout pas utiliser leurs logiciels sur un autre OS ou leur OS sur un autre matériel. Bref on se retrouve vite enfermé dans toute une philosophie, un écosystème… Bref une religion.
  4. Le culte Apple : Ouai c'est fatigant toute cette ambiance qui règne autour. Non, c'est pas forcément mieux pour un graphiste… À l'inverse, c'est pas forcément beaucoup plus cher à matos de même qualité et même intégration. T'as-tu vraiment besoin de remplacer ton matos toutes les cinq minutes ? Non tu n'utilises pas 50% des perfs de ton téléphone actuel, donc les 15% de perf supplémentaires du nouveau te changeront rien.

Finalement on ne leur reproche pas du tout la même chose que Google. Pas de soucis de vie privée. Pas de pistage intempestif. On me signale qu'en fait leurs produits embarquent un SuperCookie permettant d'identifier leurs utilisateurs. En gros on s'en fout un peu d'eux. Ils posent pas trop de soucis, c'est plutôt leur clientèle qui est toxique.

Le moyen facile pour éviter leurs travers est de ne pas acheter leurs produits et c'est bon vous êtes safe.

On peut se réjouir que le “Don't be evil” s'applique plutôt à eux, car avec les semi-remorques de lingots qu'ils possèdent ils pourraient faire des dégats massifs.

F

Facebook, le grand registre mondial de l'humanité.

Le plus récent des GAFAM et pourtant l'un des plus néfastes mais soit-disant légèrement sur le déclin.

  1. Omniprésence sur le web : il est difficile d'ouvrir une page web sans envoyer une requête vers leur serveur. Partout des scripts, des images, des boutons qui pointent vers leurs machines.
  2. Point d'accès unique : pour de nombreuses personnes l'Internet peut se résumer à Facebook.
  3. Créer des identités vraiment poussées : dans le but de vendre de la pub encore une fois. Un publicitaire peut cibler "les personnes entre 16 et 18 ans de couleur blanche habitant tel quartier à tendance technophile n'aimant pas le rap" et savoir que sa pub atteindra X personnes. Flippant.
  4. Omniprésence qui se répend hors du web : avec le rachat de Whatsapp ils se font une joie de capter les conversations des gens. En sachant que Whatsapp s'est forgé une popularité massive dans les pays en voie de développement grâce à leurs apps tournant sur n'importe quel type de téléphone, le déclin est pas près d'arriver. Et puis ils sont plutôt bien placé dans la VR grâce au rachat d'Occulus. Ha et si vous êtes plutôt Instagram… bha c'est aussi Facebook. Bref…

Là c'est bien moins ragoutant qu'Apple et on a les mêmes travers que Google. Bref pour la vie privée c'est le désastre complet. On a déjà vu/lu des centaines d'articles à ce propos mais c'est réellement un bourbier immense.

A

Amazon, le ptit libraire qui héberge la moitié du net Américain.

Je ne parlerai pas de leur business physique de vente de trucs mais uniquement de leur business informatique.

  1. Tout le monde l'utilise : ils se taillent une belle part de l'hébergement cloud, surtout aux US. Leurs offres de stockage sont également massivement utilisée pour tout et n'importe quoi.
  2. Ils obéissent aux lois US : c'est un reproche à faire également aux autres mais c'est un reproche un point plus génant pour eux dans le sens où en tant qu'utilisateur, on est pas forcément au courant qu'on se retrouve sur leur infra. Et du coup potentiellement on visite un site français mais qui en fait est hébergé par Amazon et du coup potentiellement à disposition de la NSA, CIA, FBI, …
  3. Alexa l'espion à la maison : Bon sur ce point c'est comme le truc de Google. Heureusement personne n'accepterai d'acheter un micro à placer chez soit qui écoute constamment tout ce qu'il se passe à la maison. Hein ! Personne ne ferait ça !

Moins de reproches du fait qu'ils ne sont que prestataire et au final ne touchent pas vraiment les données qu'ils hébergent. D'ailleurs peut-on leur reprocher de se plier aux loi US ?

M

Microsoft, le logiciel mou qui tente désespérément de se faire une place sur l'Internet.

Comme pour Amazon, je ne parlerai que de leurs pratiques concernant Internet/la vie privée.

  1. Leur cloud fait tourner plus de Linux que de Windows : hahahahaahhahahaha. Le plus gros vendeur d'OS proprio qui est l'un des plus gros loueur de Linux. Voilà c'est juste pour les troller.
  2. GAFA, pas GAFAM : ouai pas de bol pour eux, ils se font souvent zapper. Ils existent presque pas sur Internet.
  3. Hégémonie sur les PC : bon allez on va quand même parler de leur position dominante sur les OS grâce à la vente liée et le lobbying massif. Et quand à ça on saupoudre d'un peu d'espionnite dans Win10 et un soupçon de pubs on obtient un OS techniquement en amélioration mais au détriment de l'utilisateur.
  4. Ils chient sur les mails : envoyer du mail chez Microsoft est une plaie. Il faut avoir bonne réputation, mais comment avoir bonne réputation si on peut pas leur envoyer de mail ? C'est simple ! En ouvrant un compte chez eux et en les suppliant de bien vouloir recevoir vos mails. Donc voilà, si vous êtes pas un très gros du secteur bien établi, vous ne pourrez leur envoyer des mails qu'en montrant patte blanche. Appliquer les bonnes consignes des serveurs de mails ne suffira pas.

Bon bha que dire si ce n'est qu'en fait on s'en fout un peu d'eux. Même si ces derniers années ils s'améliorent énormément en découvrant l'Opensource et le Libre, leur faible présence sur le net ne les rend pas trop hostiles en dehors de leur attitude merdique concernant les mails.

Verdict quel est le soucis ?

Bon bha une partie vient de la position dominante dans un domaine.

Donc utiliser des alternatives est déjà un bon moyen de rendre plus inoffensif ces géants.

Ensuite concernant la vie privée, la première chose la plus évidente est d'arrêter de coller nos données ailleurs que chez soit. N'écoutez pas les sirènes du cloud. Le cloud c'est l'ordinateur de quelqu'un d'autre. Et si ce quelqu'un d'autre vous le prête grâcieusement c'est bien pour faire tourner son business et rarement par bonté d'âme (bien que ce soit parfois le cas, hein Framasoft).

Arrêtez de nourrir le cloud !

Ne postez plus vos photos de soirée sur Facebook. S'il vous plaît, épargnez la vie privée de vos enfants qui n'ont pas forcément envie de voir publier leurs premiers instants et les suivants. Cessez de distiller la moindre de vos pensées dans des tweets (tiens j'avais pas parlé d'eux). Je ne vous demande pas de vous couper du monde, juste d'agir plus raisonnablement en le faisant différement et plus posément.

Tout ce que vous poussez dans le cloud sera archivé, stocké, analysé, monétisé et qui sait un jour se retournera contre vous.

Le point Godwin obligatoire

Bon pour enfoncer le clou je me dois de faire cette digression.

Je vais faire court mais si vous voulez plus de détails il existe un livre ainsi que la page wikipedia anglaise qui détaille un peu.

Le régime nazi a travaillé main dans la main avec IBM pour créer une base de donnée (via recensement) de la population allemande dans les années 1930. Cette base de donnée à base de cartes perforées a permis de trier/classer/analyser le recensement avec une précision telle qu'elle a grandement aidé à peupler les camps de concentration.

Il faut bien voir que lors de l'établissement de la base de donnée Hitler n'avait pas encore commencé sa purge massive. Il ne s'agissait que d'un simple recensement utilisant les balbutiements de l'outil informatique. Ce recensement était tout à fait légitime et le monde ne savait pas encore quelle serait l'utilisation de ces données.

Les bases de données de Google et Facebook feraient rêver plus d'un Hitler.

Sachez qu'une fois en leur main, les données qu'accumulent Google et Facebook ne sont très probablement jamais supprimmées. Et gardez en tête que ce qui est légal/normal/admis aujourd'hui ne le sera pas forcément demain.

Montez votre site ouaib !

Plutôt que d'engraisser les vendeurs de vie privée, montez votre blog, votre galerie photo, réfugiez-vous sur une instance Mastodon proche de chez vous. Faites vivre les alternatives que sont les chatons. Utilisez un navigateur web respectueux (non gagner 2ms sur l'ouverture d'une page web n'est pas indispensable).

Alors vous allez vite me dire que ça demande des compétences. Bha oui et non. Vous n'êtes pas obligé d'y aller à fond tout de suite en vous auto-hébergeant et tout. Mais vous pouvez commencer simplement par exemple via l'excellente initiative Framasoft que sont les Framasite.

11è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 :


Salut tout le monde ! Beaucoup d'avancements depuis mon dernier rapport de design. Jusqu'à maintenant je n'ai rapporté que les avancées design sur le plan software, mais nos efforts ne s'y limitent évidemment pas. L'expérience que ressent une personne vis-à-vis d'un appareil physique est également très importante. Cet article résumera les récentes décisions prises d'un point de vue logiciel mais également matériel.

Penser à l'interface physique

Notre but avec le Librem 5 est d'améliorer l'identité visuelle de la lignée Librem tout en restant proche de notre look humble et minimaliste qui nous caractérise.

Le principal challenge d'un design de boitier est un compromis entre l'esthétisme, l'ergonomie, la praticité et les limitations techniques.

Comme vous le savez, le Librem 5 est particulier car contrairement à la tendance actuelle, nous auront un processeur et un chipset distincts. La consommation électrique est un facteur majeur à prendre en compte mais également la capacité de la batterie ainsi que l'arrangement des circuits imprimmés et ne voulons pas sacrifier l'endurance de la batterie pour quelques milimètres d'épaisseurs. Cela-dit :

  • Nous visons désormais un écran d'une taille d'environ 5.5 à 5.7 pouces avec un ration de 18:9 ce qui nous permettrait d'inclure une plus grande batterie sans impacter le format du téléphone.
  • Nous allons également opter pour une forme chanfrein (voir la photo), au lieu de l'habituel bord arrondi. Non seulement c'est élégant, mais ça permettra une meilleure préhension tout en donnant un peu plus d'espace pour les composants internes.
Concept de design du Librem 5 en version 1

Simplification de l'interface utilisateur

Au fur et à mesure de l'avancement du Librem5, nous sommes conscient du planning serré en visant une sortie en Janvier 2019, et sommes donc concentrés sur la robustesse et l'efficacité pour la première version de l'interface mobile ("phosh"), que nous allons pousser pour devenir l'interface mobile de Gnome Shell.

Nous avons donc revus les fonctionnalités et décidé de diviser le design et son implémentation en plusieurs phases.

La Phase 1 définie une interface la plus simple en terme de fonctionnalité et d'utilisation. C'est ce qui sera livré avec le téléphone en Janvier 2019.

Concept des différents éléments d'interface de l'interface phosh.

Cela inclu :

  • Un écran de verrouillage.
  • Un écran de déverrouillage à base de code PIN pour protéger la session.
  • Un écran d'accueil affichant une liste paginée d'applications.
  • Une barre en haut affichant des informations utiles comme l'heure, le niveau de batterie, le volume audio, le niveau de signal réseau.
  • Une barre du bas simulant un bouton de retour (uniquement visible quand une application est ouverte).
  • Un clavier virtuel.
  • Des notifications d'appels entrants.

Le multi-tâche, la recherche ou les notifications ne seront implémentés qu'en phase 2 et donc disponible plus tard.

Même si la “phase 1” ne correspond pas à l'offre pléthorique habituellement proposé, nous pensons que cette interface minimale sera extrèmement simple à appréhender ce qui favorisera une adoption sans heurts. Cela sera un très bon point de départ.

Designer l'application Contacts

L'application *Contacts sera au centre des fonctionnalités de communication. C'est l'application qui aura en charge la gestion des contacts pour les autres applications comme Calls ou Messages.

Pour cela, nous sommes en train d'adapter l'applications Contacts existante en designant son agencement mobile et en ajoutant de nouveaux champs nécessaires pour les différentes applications.

Différents écrans de l'interface de l'appli Contacts à la fois sur ordinateur et sur mobile.

Librem 5 & Fractal team hackfest à Strasbourg

Cette semaine, certains membre de l'équipe Librem 5 (incluant moi-même) seront au Fractal Hackfest 2018 à Strasbourg dans le but d'aider l'équipe Fractal à créer application basée sur Matrix à la fois jolie et sécurisée à la fois sur ordinateur que sur plateforme mobile. J'espère faire un rapport sur les fonctionnalités de communication du Librem 5 dans un futur article où j'aborderai ce qu'il se sera passé au Fractal Hackfest.


Bon bien entendu quand vous lisez "je" dans cet article, ce n'est pas moi mais l'auteur original François Téchené membre de Purism.

Les modifications de concept de design physique sont intéressantes. Mine de rien les modes des smartphone a pas mal changé depuis la création du crowdfunding et ce nouveau design (provisoire) est déjà plus sympa et accuse moins le coup. J'aime beaucoup le fait qu'ils ne cherchent pas à faire le smartphone le plus fin possible. Perso ça ne me gène pas d'avoir un appareil un peu épais, surtout si ça permet d'avoir une meilleure batterie et un téléphone mieux branlé.

Concernant le logiciel, certains vont probablement râler mais bon la deadline est vraiment courte. Même s'ils repartent de briques existantes, le monde GNU/Linux est quand même pas vraiment adapter au téléphone et du coup tout le userspace est à créer ou presque. Bref c'est bien qu'ils annoncent que dans un premier temps ça sera léger. Il y a plus qu'à espérer qu'ils ne s'arrêteront pas à la Phase 2 mais poursuivent les efforts par la suite.

Ce qu'il se passe quand on ouvre une page web

Vous ouvrez très probablement des dizaines voir des centaines de pages web tous les jours. C'est devenu naturel à tel point qu'on ne se rend pas compte de toute la magie à l'œuvre pour nous afficher notre drogue moderne.

Déjà commençons par une petite mise au point : je vais causer principalement de Web mais pas trop d'Internet car souvenez-vous : Web ≠ Internet.

C'est parti !

Comprendre l'adresse

Imaginons que vous vous comportiez bien en utilisant la barre d'adresse (et non la barre de recherche). Vous entrez donc lord.re/posts .

Votre navigateur va devoir transformer ça en une véritable URL.

Donc premièrement il va rajouter le protocole utilisé. Ça veux dire qu'il va rajouter http:// devant pour indiquer Hyper Text Transport Protocol. Peut-être que les navigateurs utiliseront https par défaut bientôt ce qui permettrait d'utiliser une version plus sécurisée du web par défaut mais c'est pas encore le cas.

L'adresse est donc http://lord.re/posts avec les différents composants :

  • http:// étant le protocole
  • lord.re est le nom de la machine sur laquelle vous vous connectez
  • posts est le document que vous voulez voir

À partir de là, le navigateur va pouvoir passer à la suite.

Requête DNS

Bon c'est bien gentil, votre ordinateur sait quel serveur contacter mais il ne sait pas où il se trouve. Votre navigateur ne peut se connecter qu'à des adresses IP, il lui faut donc faire la correspondance entre le nom de la machine et son adresse IP. Ce service est assuré par l'OS et plus spécifiquement le service de résolution de nom couramment appelé DNS.

Votre navigateur demande donc à votre OS : « Quelle est l'adresse IP de lord.re ? »

Votre OS va donc consulter le serveur DNS qui est configuré et celui-ci lui donnera une adresse IP de la forme 92.167.84.9 si c'est une IPv4 ou bien 2001:0db8:1234:4321:1234:4321:1234:4321 en IPv6 (oui c'est beaucoup moins simple à retenir).

Avec un peu de chance cette information ne vous aura nécessité l'envoi que d'un paquet DNS et la réception d'un paquet DNS. On a donc déjà 2 paquets qui ont voyagé. Votre OS transmettra ensuite cette réponse à votre navigateur qui pourra établir la connexion IP et TCP.

Création des paquets IP

Lorsque deux machines se connectent pour ensuite parler, elles le font via le protocole IP (IPv4 ou IPv6). Les données sont tronçonnées en de multiples morceaux. Chaque morceau est placé dans un paquet IP. En gros un paquet IP c'est une enveloppe avec l'entête (écrit sur l'enveloppe) et les données dedans.

Ces entêtes IP contiennent (entre autre) l'adresse IP d'émission du paquet (pour pouvoir revenir) ainsi que l'adresse IP de réception (pour pouvoir atteindre la destination).

Bref le navigateur est désormais capable de joindre le destinataire final en demandant à l'OS de créer des paquets IP. Le réseau se chargera de les amener au bon endroit et de faire le retour également. Mais ça c'est une autre histoire passionnante.

Établissement de la connexion TCP

Si vous voulez parler via le protocole http, alors les paquets sont émis à destination du port 80 si c'est en https, alors ce sera le port 443 et seront émis depuis un port aléatoire de votre ordinateur.

Mais dis-moi Jamie, c'est quoi un port ? La notion de port est ce qui permet à un ordinateur d'établir plus d'une connexion simultanée.

Vous n'allez pas vous connecter juste à un ordinateur en réalité mais à 1 port d'un ordinateur. Un même ordinateur pourra faire tourner plusieurs logiciels simultanément qui attendront chacun des connexions sur des ports différents. De ce fait un seul ordinateur peut à la fois parler http et https mais également faire serveur mail sur le port 25 par exemple et pourquoi pas aussi serveur de discussion via le port 6667…

Les ordinateurs en ont 65535 ce qui leur laisse pas mal de marge de manœuvre (et encore autant en UDP). Un port est donc un point d'entrée et/ou de sortie de votre OS sur le réseau.

Donc reprenons :

  • votre ordinateur va envoyer une demande de connexion tcp vers le port 80 ou 443 du serveur web (TCP SYN).
  • Lorsque le serveur web va recevoir cette demande, s'il est disponible, il enverra un paquet comme quoi il accepte cette connexion (TCP ACK).
  • Et enfin votre ordinateur à la réception de l'acceptation enverra un accusé de réception attestant que la connexion est établie (TCP SYNACK).

Cet échange s'appelle le TCP Handshake ou 3way-handshak ou la poignée de main TCP.

TCP est dit fiable car il s'assure que chaque paquet envoyé est reçu et dans le bon ordre. Si des paquets ne sont pas reçus, TCP le renverra. Ce système fonctionne grâce à des accusés de réception et le fait que chaque paquet est numéroté.

On est donc dans le meilleur des cas à 5 paquets échangés et toujours 0 info à se mettre sous la dent.

Établissement TLS

TLS est la couche de protection qui fait la différence entre le HTTP et le HTTPS. Ce fameux petit s qui veux dire secure.

C'est lui le garant de la sécurité et de la confidentialité de vos données mais malheureusement ce n'est pas infaillible mais je ne pousserai pas dans ces détails. Cette étape n'intervient donc que lorsque l'adresse rentrée est en HTTPS.

Bref maintenant votre ordinateur (le client) va parler SSL/TLS (SSL étant le nom de l'ancien protocole) avec le serveur.

  • Votre client indique quel domaine il veux contacter ( lord.re dans notre exemple) en clair.
  • Il y tout d'abord la négociation de la méthode de chiffrement pour que le client et le serveur puisse utiliser la même.
  • Le serveur envoi son certificat au client.
  • Le client vérifie que ce certificat est de confiance (en regardant qui l'a signé et si ce tiers est de confiance)
  • Si c'est ok, le client choisi une clé de chiffrement temporaire qu'il chiffre via la clé publique du serveur
  • Le serveur web déchiffre cette clé temporaire grâce à sa clé privée
  • Les échanges suivant sont chiffrés via la clé temporaire échangée de manière sécurisée.

Si les rouages sous le capot vous intéresse le bon vieux wikipedia possède une page plutôt pas mal à ce sujet.

Autant vous dire que les méthode de chiffrements sont variées allant du vraiment blindé à la passoire. Sachez que généralement les sites sont plutôt moyens et que généralement les banques sont dans le tout juste passable voir passoire… Le site SSLLabs de Qualys propose un excellent test de niveau de sécurité TLS bien foutu ce qui vous permettra de juger de la sécurité d'un site (mais ça ne fait pas tout).

Bref l'utilisation de TLS a un léger impact sur les performances mais garantie (dans la grande majorité des cas) que les données échangées ne sont pas lisibles par quiconque et ne sont pas non plus alterées, c'est donc indispensable.

Bon bon bon, notre compteur atteint désormais les 11 paquets échangés et toujours pas de données utiles pour votre navigateur mais ça arrive à la prochaine étape. (spoiler pas vraiment mais presque)

HTTP

Bon maintenant que la connexion est établie pour de bon et qu'elle est éventuellement chiffrée, ça va enfin pouvoir parler http.

Votre navigateur (le client web) va donc dire quel domaine il veux contacter, quel document il souhaiterait recevoir ainsi que quelques métadonnées. Voilà un exemple de requête :

> GET /posts/ HTTP/1.1
> Host: lord.re
> User-Agent: curl/7.59.0
> Accept: */*

On y voit quel document je demande, ainsi que la version du protocole que j'utilise, quel hôte (le domaine) je demande, quel est mon navigateur (curl/7.59.0) et quels sont les types de données que j'accepte (/ signifie tous les types).

Une des choses fondamentales à voir est que le navigateur et le serveur se parle en s'envoyant du texte lisible par un humain. C'est donc très facile à débugguer et inspecter pour un humain, ce n'est par contre plus le cas avec HTTP2 qui ajoute de la compression et n'échange plus ces entêtes sous forme textuelle mais binaire.

Cependant cet exemple n'est pas super représentatif car curl n'est pas un navigateur classique mais un logiciel en ligne de commande un peu spécifique. Voyons plutôt à quoi ça ressemble avec un bon vieux Firefox des familles :

> GET /posts/ HTTP/1.1
> Host: lord.re
> User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:61.0) Gecko/20100101 Firefox/61.0
> Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
> Accept-Language: en-US,en;q=0.5
> Accept-Encoding: gzip, deflate, br
> DNT: 1
> Connection: keep-alive
> Upgrade-Insecure-Requests: 1
> If-Modified-Since: Mon, 30 Apr 2018 21:59:32 GMT
> If-None-Match: W/"5ae791c4-21f57"
> Cache-Control: max-age=0

Et là il y a beaucoup plus d'infos dont certaines permettent de vous profiler/espionner/suivre.

Le User-Agent indique quel navigateur vous utilisez et souvent quel OS vous utilisez.

Le Accept est aussi plus spécifique en spécifiant également la langue et quel formats de compression de données vous pouvez gérer.

DNT est là pour indiquer que vous ne souhaitez pas être traqué et n'est généralement pas mis par défaut et rarement pris en compte par les serveurs malheuresement.

Connection indique la façon dont vous voulez que la connexion soit gerée. Ici on indique que l'on reste connecté (au sens TCP) même une fois les données transferées, ce qui permet de réutiliser cette même connexion dans le cas où il y aurait d'autres requêtes par la suite. Bien évidemment au bout de quelques secondes/minutes c'est tout de même coupé.

Upgrade-Insecure-Requests indique que le navigateur web accepte de passer en HTTPS si c'est possible.

Les trois derniers éléments de la requêtes sont relatifs au cache du navigateur qui indique qu'il a déjà des données en cache afin que le serveur s'adapte.

Bref c'est beaucoup plus verbeux que le bon vieux curl mais ça apporte quelques raffinements bien utiles tout de même.

Ce coup-ci de multiples paquets seront nécessaires et contiendront enfin vos vrais données. Maintenant votre navigateur va attendre la réponse du serveur.

Création de la page

Vous voulez désormais recevoir le document demandé mais pas si vite! Tout ne se déroule pas toujours aussi facilement.

Deux cas sont possible, le document est dit statique et de ce fait existe dans un fichier qui vous est transmis ou bien ce n'est pas le cas.

Et là je parle pas d'erreur 404 mais juste que le document que vous demandez doit être généré juste avant l'envoi et que ces données sont volatiles. Elles peuvent être regénérées mais ne sont pas un vrai fichier sur un disque dur quelque part, dans ce cas c'est dit dynamique.

Le serveur reçoit votre requête http et en fonction de celle-ci va créer une page.

C'est par exemple le cas des pages web en PHP utilisés par de nombreux sites (notamment Facebook ou plus simplement les sites utilisant le moteur Wordpress). Les pages sont générées par le serveur à la volée et vous sont transmises. Cette technique est désormais communes et s'est développé peu après le début du web vers la fin des années 90.

Il existe un troisième cas qui est de plus en plus répandu et qui est bien plus récent puisqu'il a débarqué ces dix dernières années où le contenu brut est envoyé au navigateur web mais c'est le navigateur web lui même qui va générer la page. Cette technologie s'appuie largement sur le langage Javascript qui s'exécute dans votre navigateur.

Sachez d'ailleurs qu'il est possible de désactiver Javascript dans votre navigateur ce qui rend ces sites inutilisables. Qui plus est, beaucoup de ces sites posent des problèmes d'accessibilités et parfois de référencement mais que voulez-vous ma petite dame, c'est la mode.

Réception de la page

À l'étape HTTP on a vu la requête envoyée par le navigateur, ici nous allons voir la réponse HTTP reçue :

< HTTP/1.1 200 OK
< Server: nginx
< Date: Fri, 13 Apr 2018 17:29:43 GMT
< Content-Type: text/html
< Content-Length: 134839
< Connection: keep-alive
< Vary: Accept-Encoding
< Last-Modified: Thu, 12 Apr 2018 11:25:23 GMT
< ETag: "5acf4223-20eb7"
< X-Cache-Status: MISS
< Accept-Ranges: bytes

On voit la version du protocole ainsi que le code de retour (200 qui signifie OK, vous connaissez probablement 404 qui signifie document introuvable, 403 interdiction de voir le document, …). On voit quel est le serveur (nginx est l'un des logiciel les plus répandu), la date, le type de donnée du document voulu, sa taille, la dernière modif du document et des informations concernant le cache.

Ensuite, il y a les données, c'est à dire le document demandé.

Lire la page

Votre navigateur vient donc de recevoir votre page web, il va la lire et regarder son contenu.

Une page web ce n'est qu'un fichier texte formatté d'une certaine façon.

Ce fichier texte va donc devoir être transformé en un document plus regardable qu'un simple fichier texte. Le navigateur va afficher les images qui sont liées à la page, appliquer un style définie dans un fichier CSS, placer une/des vidéo ou jouer des sons, pourquoi pas afficher des éléments en 3D.

Pour chacun de ces éléments, votre navigateur va refaire toutes les étapes précédentes avec d'éventuelles subtilités. Par exemple si un document est sur le même domaine que la page actuelle, le navigateur pourra zapper l'étape du DNS et en fonction du protocole utilisé (si c'est du HTTP2 par exemple ou 1.1 avec quelques options) le navigateur pourra réutiliser la connexion TCP en cours ainsi que la session TLS actuelle.

Bref le navigateur va recevoir en premier lieu, à peu près tout le texte de la page (sauf s'il y a filouterie via javascript) puis recevra les autres éléments, mais le navigateur tentera de faire le rendu au plus tôt et le modifiera à chaque fois qu'il recevra de nouveaux éléments.

Par exemple le CSS est un fichier texte s'occupant de styliser la page en y définissant des couleurs, le placement des éléments et tout ce qui a attrait à l'esthétisme. Une même page web peut avoir plusieurs fichiers CSS.

Toujours à ce propos, une même page web peut contenir de nombreuses images (no shit Sherlock) ou de nombreux Javascript. Mais là où ça devient problèmatique, c'est que ces différents contenus ne proviennent pas forcément du site que vous consultez mais de sites extérieurs.

Par exemple tous les boutons de réseaux sociaux, sont très généralement issus de ces fameux réseaux sociaux eux-mêmes ce qui implique que même si vous ne cliquez pas sur ces boutons, les sites en questions collectent tout de même l'information que vous avez consultez telle-page, même sans y être connecté (via un champs referer de la requête http, qui contient l'adresse web de la requête précédente). Bref, un désastre pour les performances mais aussi la vie privée.

Exécuter le javascript

Une fois que votre navigateur a également reçu les javascripts, il va les exécuter. Ce sont des sortes de mini programmes qui à l'origine étaient très limités mais qui au fil du temps ont de plus en plus de possibilités ce qui a amené à la création des web applications.

C'est eux qui permettent par exemple de créer des ptits graphs en live, qui affichent les prix les plus à jour sur les sites marchands, qui rafraîchissent partiellement la page pour afficher le nouveau contenu, bref tout ce qui est un peu dynamique sur une page provient de Javascript.

C'est d'ailleurs souvent un nid à emmerdes dans le sens où certains s'en servent pour chopper quelques données sur vous, pour miner de la crypto monnaie dans votre dos, pour utiliser votre processeur un peu trop intensivement juste pour afficher des effets négligeables… Bref je suis pas un fan inconditionnel de Javascript et je recommande de n'activer Javascript qu'au cas par cas afin de vous épargner (ainsi que votre machine) tout plein d'emmerdes.

Et voilà votre page web est complète et aura nécessité de nombreux aller-retours un peu partout dans le monde. J'ai pas mal insisté sur le nombre de paquets car il faut bien voir que chacun des paquets fais un aller-retour (le paquet fait l'aller, l'accusé de réception le retour), ce qui implique à chaque fois une certaine latence. Ça explique en partie la lenteur d'ouverture de certaines pages.

Le second facteur de lenteur est tout simplement la quantité de données de tous les documents nécessaires à la page web.


Cet article est une nouvelle version d'un article publié sur le site d'Iloth un gentil Fournisseur d'Accès Internet dont je suis membre. Je l'ai réécrit pour l'améliorer et le rendre un poil plus digeste et plus à jour.

Des fissures dans le Fediverse

La popularité récente de Mastodon mais plus largement du Fédiverse est intéressante. Mais. Ouai fallait mettre un "mais". Mais, il commence à montrer quelques signes de fissures.

La fédération

Mastodon s'appuie donc sur du logiciel libre pour créer un réseau social fonctionnant sur le même principe que Twitter. Sauf que contrairement à Twitter, c'est un logiciel libre parlant un protocole ouvert s'appelant ActivityPub et OStatus.

Cette différence peut sembler mineure mais est en fait la force de ce réseau social : le protocole étant ouvert et documenté, il est possible pour plusieurs personnes de monter un serveur qui saura parler avec le reste du réseau.

On est donc sur un ensemble de serveurs parlant le même langages et pouvant donc communiquer entre eux.

C'est un peu comme les mails. Il existe tout plein de fournisseurs de mails qui acceptent de parler entre eux. Vous pouvez donc via votre adresse @gmail.com envoyer un mail à quelqu'un chez @yahoo.fr . Tout comme sur mastodon, sur votre instance @octodon.social vous pouvez tooter votre ami se trouvant sur @mamot.fr .

Les serveurs bossent ensemble et forment un seul et unique grand réseau aggloméré.

Pour que ça soit effectivement le cas il faut donc 1 langage commun + accepter de se féderer. Le langage commun c'est sous le capot, le choix d'un protocole ouvert et normalisé. Par contre accepter de se fédérer c'est de la décision humaine.

Bref maintenant qu'on a vu ce qu'est en gros la fédération voyons les quelques soucis qui émergent en pratique dans le Fediverse.

La mort d'une instance populaire

Le Fediverse est donc peuplé d'environ 2000 instances Mastodon (mais pas que…). Les utilisateurs (Près de 1.5 Millions) sont donc répartis entre ces instances.

Witches.town était l'une de ces instances. Pas la plus populaire mais pas non plus la plus petite des instances. Elle était maintenue par une personne. Une seule personne. Et pas de bol cette personne a décidée d'arrêter et du coup pas mal des sorcières ont dû trouver une nouvelle cabane.

Heureusement tout a été plutôt bien fait avec un long délai avant que ce ne soit effectif et pas mal de bonnes âmes ont proposées des places sur d'autres instances. Mais ça risque d'arriver de façon un peu plus chaotique les prochaines fois.

Il est donc important de bien choisir son instance Mastodon. Et il est même possible de monter sa propre instance perso afin de le gérer au plus proche de ses besoins.

Pleroma vs Mastodon.social

Je vous ai teasé que le Fediverse n'était pas uniquement composé d'instances Mastodon.

On y trouve également d'autres logiciels tels que Gnu.social qui est la suite de status.net qui était la suite d'identi.ca … Bref c'est un projet qui a une vie assez longue désormais et qui est toujours en place. Il me semble que c'est ce logiciel qui a créé le protocole OStatus (tout du moins ses ancêtres de fork).

Mais ce n'est pas tout. Le Fediverse grandit de plus en plus désormais et de nouvelles alternatives émergent régulièrement.

Une qui commence à avoir pas mal le vent en poupe est Pleroma.

Mais pas de chance, l'une des plus grosses instances (mastodon.social) a décidé de silence une instance pleroma ainsi que quelques devs pleroma. Parceque visiblement Pleroma a une vision légèrement différente sur la façon de faire les choses que les mainteneurs de mastodon.social. Bref drama drama drama.

Est-ce que le Fediverse va se scinder avec d'une part un Fediverse avec seulement Mastodon d'un côté et les autres de l'autre ? On ne le sait pas mais peut-être que ça pourrait arriver si la situation ne se désamorce pas.

IRC

Quittons le Fediverse un instant. Il fût un temps où le meilleur des protocoles de chat en ligne (IRC) était un seul et unique réseau féderé.

Vous pouviez vous connecter à n'importe lequel des serveurs existant à l'époque et vous vous retrouviez connecté à tout l'IRC. Tous les chans du monde accessibles en un point. Tout le monde au même point.

Puis il y a eu mésentente et coups-bas, un nouveau réseau parallèle s'est formé pour ensuite tout refusionner. Et ensuite quelque temp après, commencer à se fractionner de partout. En cinq ans on est passé d'un modèle décentralisé fédéré à un modèle multi-centralisé non fédéré. Trente ans plus tard l'IRC est toujours morcellé en de nombreux réseaux.

C'est ce que risque le Fediverse.

Si vous voulez plus d'infos concernant l'histoire d'IRC, la page anglaise de Wikipedia en a un ptit résumé.

Le seul réseau fédéré qui malgré les années l'est encore est le SMTP : les mails. Et pourtant Google et Microsoft s'acharnent à briser cette fédération.

Préserver la fédération

Le meilleur moyen de protéger la fédération est de morceler le plus possible les instances.

Plus les instances sont nombreuses et petites moins elles ont d'intéret à briser la fédération et s'isoler. Au contraire, plus une instance devient importante moins la fédération a d'intéret pour elle.

Mais d'ailleurs pourquoi vouloir à tout point garder la fédération ? Parceque le succès d'un réseau social est directement lié à son nombre d'utilisateur afin de bénéficier de l'effet de réseau.

Pour virer ces crasses que sont Facebook, Twitter et tous les autres réseaux sociaux propriétaires, il faut une alternative crédible et fonctionnelle. Le Fediverse pourrait l'être.

Bon sur ce, je vous laisse, je retourne à la fête du Fediverse.

PS : Tiens wikipedia n'a pas d'article concernant le Fediverse.

PS2 : Ha bha trois heures après finalement il y a un article Fediverse dans le wikipedia FR. Je comptais m'y atteler demain pour fêter le travail mais finalement j'ai été pris de vitesse.

Mes déboires Hardware de ce début 2018

Bon bha ça y est j'en vois le bout.

Gros nordi

Mon ordi de bureau m'a fait quelques misères. Impossible de booter. Ça plantait inlassablement à divers moments du boot, parfois dès le POST, parfois au niveau de grub, par chance je parvenais à booter pour quelques minutes une fois sur Y. Bref de l'aléatoire comme j'aime (keuf keuf).

Bon, je vais voir le bios (j'ai toujours pas pris l'habitude de dire l'UEFI…). Hmmm je fouille, je fais d'ailleurs l'update bios en version 2.0 (wahou ça doit être tellement mieux avec une update majeure).

Bof pareil. Je ClearCmos avec le ptit bouton qui va bien. Suspens. Tiens il se passe plus rien. … Ha bha je suis pas dans la merde. … Ha si ça booot… pas. Erf. On sent qu'ils se passent des trucs pas net quand on clearcmos, ça prend un temps fou à faire on sait pas trop quoi avant de réellement booter (surement l'AMD PSP qui doit booter aussi son ptit OS et faire ses saloperies dans mon dos).

Bon j'enlève les barrettes de ram je les permuttent, je vire les SSD. Rien à faire.

Il y a bien le DrDebug qui est en fait un code à deux caractères hexa affiché sur la mobo pendant le boot pour indiquer les erreurs. Mais ce cher Docteur indique plein de trucs qui alternent sans cesse puis ça part en boucle.

Je fais une ptite vidéo de la carte mère qui agonise et j'envoie ça par mail au support d'Asrock.

Bref après deux jours d'emmerdes et un bon week-end, je contacte Amazon pour un ptit RMA. Comme à leur habitude c'est d'une rapidité déconcertante et je teste donc la nouvelle mobo identique.

Je l'installe dans le boitier, je fous le cpu, toute la ram, la carte graphique, les différents connecteurs, les SSD, le ventirad et c'est parti ! Je vois le logo de la mobo (ce qui est déjà rare). Je vois même mon bon vieux grub violet mochtoque. Et là pouf ça reboot !

-____−

Bon bha c'est pas la mobo déjà une bonne chose. J'ai une réponse d'Asrock et du coup je leur parle pas du RMA pour voir ce qu'ils proposent. Après quelques manips que j'avais déjà effectué, ils me demandent de faire une autre vidéo en virant absolument tout sauf le cpu.

Et là Miracle ça marche, ça ne redémarre plus en boucle.

Bon bha. Heuuu. Je mets la ram. Ça marche. Je fous le GPU. Ça marche. hmmmm Je fous les SSD. Ça marche. Je fous les connecteurs USB et Audio du boitier. Ça marche. Je fous les connecteurs des boutons Power et Reset. Ça déconne.

HOLY SHIT !!!

Cette petite merde de bouton reset qui déconne et qui se déclenche seul de temps à autres.

RAGEQUIT

Ptit nordi

Mon vieux Bender était malade.

Une extinction inopinée le mois dernier dans un mystère le plus total m'avait un peu troublé mais sans plus. J'étais pas spécialement pressé de le réparer car avec l'usage je me rends compte que je suis de moins en moins dépendant envers mon nas. J'utilise désormais Netflix et mon instance Groovebasin comblent mes besoins multimédias. Qui plus est le skeudur de backup étant via usb, j'ai pu le foutre sur une autre machine…

Sauf que là en ayant plus accès à mon gros ordi ça devient un peu plus gênant de plus avoir accès à mes mots de passes (qui sont synchros entre ces deux machines). D'autant plus quand il devient nécessaire de passer voir les impôts, accéder à Amazon et d'autres comptes.

Bref j'ai profité de la convalescence du gros ordi pour tester son alim dans le ptit ordi.

Yatta ça fonctionne.

Bon bha je commande une ptite alim au format SFX et c'est reglé. Bon je prends un ptit skeudur 8To aussi au passage pour éviter d'en commander un dans quelque temp et donc diminuer un poil l'empreinte carbone (on se trouve des excuses).

Et bha pas de bol. Je reçois un 4To -____-

Bon bha je vais le renvoyer aussi et espérer recevoir un 8To assez vite.

Voilà à plus ;-)

Mon environnement auto-hébergé

Ça fait un ptit moment que je voulais faire un point des services autoheberge que j'utilise.

Mails

Allez on commence par les mails. Je vous ai déjà pas mal bassinné avec ça mais bon un ptit point rapide. Vos mails sont une grande partie de votre identité numérique. Ils regorgent d'identifiants, de factures, de conversations, de pièces-jointes…

Bref, ça se refile pas au premier venu qui vous regarde gentiment avec des grands yeux et un grand sourire en vous disant qu'il s'en occupera gratuitement. C'est l'un des services les plus importants à auto-héberger mais c'est aussi le plus chiant.

Avoir un serveur de mail pleinement fonctionnel n'est pas si difficile en soit. Par contre faire en sorte qu'il fonctionne encore dix ans plus tard sans perdre de mail et voir ses mails acceptés partout… ce n'est pas la même affaire. Je ne le recommande donc pas à tout le monde. Pour le webmail j'ai longtemps utilisé Roundcube mais je suis désormais sur Rainloop. L'interface est un poil plus joli que Roundcube et passe mieux sur téléphone.

Et dans le fond j'utilise Postfix, Dovecot, Rspamd, Sisyphus.

RSS

Dans les services web, un dont je suis ultra friand est l'aggrégateur de flux RSS/Atom. Dans mon cas c'est Tiny Tiny RSS. Malgré l'attitude quelque peu particulière du main dev, ce logiciel est excellent et super fiable. Mon instance a soufflée sa 11ème bougie récemment, sa base de donnée s'est déjà fait migrer plusieurs fois et tout fonctionne encore sans aucune prise de tête. Juste de temps à autres une update via l'interface web et hop je le backup même plus tellement je suis inconsc^W mal-habitué.

Les RSS sont ma source principale de news et autres. J'adore le fait de pouvoir chopper des news de blogs très rarement mis à jour sans devoir vérifier constamment. Et contrairement à Fb et compagnie c'est pas filtré, tout le contenu des créateurs est publié sans le faire passer à la caisse.

Musique

Pour la musique j'ai une instance Groovebasin qui tourne. Ça stream de la musique, gère les playlists, sait importer de la musique via youtubedl, ça normalize et surtout ça génère une playlist infinie. Malheureusement c'est maintenant à l'abandon et il n'y a plus de mise à jour ni rien depuis des mois.

Un des reproches est que l'interface n'est pas du tout adaptée aux appareils tactiles (il faut double cliquer et parfois faire un clic droit)… En dehors de ça pas grand chose à reprocher. Je pense qu'il va tout de même falloir migrer si les developpements ne reprennent pas mais j'ai pas encore trouvé vers quoi.

J'ai déjà testé Ampache, Subsonic pour lequel je me suis même pris une licence d'un an, mpd, mais au final j'ai préferé Groovebasin.

Galeries photo

J'en ai deux en parallèle sur la même base de photos. La première basée sur SFPG en PHP mais sans base de donnée ni rien. Pas mal du tout. Ça marche sans broncher mais pas super moderne.

Puis j'ai découvert PhotoFloat qui est par contre bien plus moderne. Plus besoin de rafraîchir la page, ça charge quasi instantanément. Bien plus agréable à utiliser mais c'est en Python, faut générer la galerie à chaque fois qu'on rajoute des photos (générateur de site statique quoi). Pas de bol c'est plus trop maintenu (c'est le dev qui a aussi pondu les excellent Password-store et aussi Wireguard).

Cloud multi-services

Je me suis également monté un instance Sandstorm. C'est une plateforme de cloud assez magique qui vous permet de faire tourner des services web très facilement. Ce qui différencie Sandstorm de toute la concurrence (cozy, yunuhost, cloudron, …) c'est qu'ils ont une approche de la sécurité exotique.

Déjà il n'y a pas de mot de passe, ça fonctionne par tokens temporaires qui sont envoyés par mail. Ensuite ils ont une approche 1 document = 1 instance.

C'est à dire que si par exemple vous avez besoin d'un pad, sandstorm vous démarra une instance etherpad-lite. Si ensuite vous voulez ouvrir un second pad, sandstorm vous démarra une nouvelle instance indépendante d'etherpad-lite. Tout est fortement isolé.

Si vous partagez un document, vous obtiendrez une url unique que vous pouvez bloquer en écriture. Et chaque personne à qui vous partagerez ce grain (c'est le nom des applis) aura une adresse unique. Vous pouvez révoquer ces droits et tout.

C'est vraiment génial. Par contre il y a quelques désavantages : les applis doivent être légèrement modifiées pour s'intégrer dans Sandstorm et le temps d'accès à un document est plus long que la normale vu qu'il faut le temps que la dite appli soit démarrée mais ça reste largement tolérable car de l'ordre de 3/4secondes.

DNS

Avoir un nom de domaine c'est essentiel mais le gérer soit même c'est encore mieux ! J'utilise Knot qui est globalement assez simple et robuste. Il permet de faire du DNSSEC facilement en plus. Pas grand chose de plus à dire. Il sait se faire oublier.

Backup

J'utilise depuis très longtemps Rsnapshot qui permet de faire des backup incrémentaux en utilisant ce bon vieux rsync et de pousser ça via SSH. Mais je dois avouer que je commence à reluquer sérieusement Borg Backup qui sait chiffrer de lui même du coup je couplerai bien ça avec un fournisseur de stockage externe genre Wasabi. C'est dans la catégorie "Pour plus tard” sauf que la mort de mon NAS/serveur bouscule un peu plus les priorités.

Les services abandonnés

Voilà les services que j'ai actuellement. J'en ai eu pas mal d'autres que j'ai stoppé au fil du temps.

À un moment j'ai tenté de croire à xmpp mais au final… bof. J'ai tout de même utilisé ejabberd, prosody, movim. J'ai également fait mumuse avec Identi.ca mais c'était pas ma tasse de thé (bien que je commence à faire mumuse avec Mastodon depuis un an (sur octodon) ).

J'ai eu du Wordpress mais vite largué pour un simple fichier texte puis maintenant Hugo. J'ai utilisé Wok aussi pour faire du site web statique. J'ai presque utilisé Dokuwiki avant de me rendre compte que pour du perso c'est overkill, j'en ai vraiment pas besoin.

J'ai également utilisé très peu de temps un service de localisation qui permet de voir en live (quand une page web était utilisée où se trouvait la personne). Je retrouve pas le nom du service et au final je ne m'en suis servi qu'une fois ou deux.

J'héberge ponctuellement un serveur Quake 3 avec le mod CPMA mais ça ne dure rarement plus de quelques semaines.

J'ai utilisé de l'OpenVPN en perso aussi quelques temps avant de me rendre compte qu'un bête tunnel SSH est bien plus léger et tout aussi bien et avec bien moins de dépendances. Cela dit je pense me tourner vers du Wireguard bientôt.

J'ai essayé d'utiliser Funambol pour synchroniser des contacts et autre merdouilles avec le téléphone mais au final… bha ça me sert à rien. Je fais un backup manuel des contacts du téléphone tous les six mois et voilà… Je dois surement en oublier quelques-un.

J'ai hébergé du Mumble durant ma folle période gamer.

Avant de migrer sur du pur Weechat, j'utilisais ZNC qui est donc un bouncer irc sur lequel je connectais Weechat sur l'ordi et un client irc sur l'Android mais maintenant j'utilise un client weechat sur le téléphone aussi.

Pour les synchro de fichier, j'ai utilisé Syncthing pendant quelques temps mais son fonctionnement un peu trop p2p n'était pas forcément ce que je recherchais le plus mais surtout sa trop grande gourmandise et son côté service de Schrödinger qui marche ou ne marche pas m'a vite saoulé. Cela dit il y a eu un paquet de nouvelles versions désormais ptet que ces reproches n'ont plus lieu d'être.

Facebook Algo Complot

Bon si vous êtes ici, j'imagine que vous n'êtes pas sans savoir que Facebook n'est pas une plateforme neutre dans la distribution de "son" contenu.

Les personnes à qui vous êtes abonnés publient du contenu et Facebook décide d'afficher ou non ce contenu dans votre flux d'information. Ce choix est basé sur des algos fait maison complètement opaques. En cela je ne les blâme pas. C'est leur produit, ils font ce qu'ils veulent. Même si pour les créateurs de contenu ça peut devenir problèmatique, ça peut tout de même poser quelques soucis.

Une IA ça s'entraîne

Ce travail de sélection de contenu n'est bien évidemment pas fait à la main mais par un algorithme.

Cet algorithme tend de plus en plus vers une Intelligence Artificielle (bha oui c'est la mode). Facebook investit énormément dans l'IA d'ailleurs.

Donc une IA est tout de même un peu bête, pour fonctionner il faut lui donner des billes et lui dire si c'est bien ou pas. Bref de l'apprentissage.

Petite digression : Avez-vous déjà joué aux jeux Black&White, ils reposent sur le principe que vous êtes un dieu avec une créature que vous devez éduquer. Cette créature sera le reflet de l'apprentissage que vous lui procurerez et sera donc gentille ou méchante en fonction de vos choix.

Bref c'est un principe assez basique des IA.

Et si Facebook créait une IA diabolique ?

Facebook abreuve ses utilisateurs de contenu ciblés par l'IA. Mais quel est le but de Facebook ? Vendre des encarts publicitaires. Plus vous voyez ces pubs plus ils engrangent de pognon.

Et si l'IA se rendait compte que certains contenus génère bien plus d'activité sur le site, il y a fort à parier que l'IA favorise ce contenu à l'avenir (c'est son taff après tout). Et si ce contenu c'était un évènement malheureux comme un suicide ? Facebook se retrouve en ébullition pour transmettre tous les messages de soutiens et d'indignation. Le compteur de nombre de vue s'affolent.

L'IA pourrait se dire que ça augmente la rentabilité et que c'est bon pour le business.

Et si l'IA se rendait compte qu'en abreuvant certains de ses utilisateurs les plus populaires de messages déprimants et en isolant les gens de leurs amis réels les probabilités de suicide augmentent ainsi que le trafic ?

Ouai c'est un peu poussé mais est-ce que franchement faut écarter tout de suite cette théorie ? Ils ont déjà tous les outils techniques pour mettre en place un tel système.

Plus de trolls == plus de vues == plus de pognon

Sans aller aussi loin, on peut imaginer que le système pousserai juste les gens à se diviser.

Avoir des discussions enflammées sur Facebook génère bien plus de trafic que Tata Yvette racontant son dernier rêve durant la sieste.

Donc le réseau pousserait plus que de raison les contenus trolligènes afin que les gens se frittent plutôt que le contenu plus banal faisant moins réagir les gens.


Ha au fait, c'est pas uniquement valable pour Facebook mais aussi pour tous les autres réseaux sociaux à la mord-moi-le-nœud.

Quelques liens sur le sujet

La demoscene vol.3

C'est parti pour notre troisième excursion dans le monde de la demoscene après un ptit tour sur les textmodes.

Et comme d'habitude, si vous cliquez sur les images vous serez amené sur la vidéo Youtube de la démo mais regarder l'original est toujours mieux. Aujourd'hui pas de sujet précis mais juste une ptite sélection de démo que j'aime beaucoup.

La Revision 2018 s'est déroulé lors du week-end de Pacques mais je n'ai pas pu voir ce qui s'y est passé mais je serai à l'affût je vous promet.

Masagin

Commençons tout de suite avec une chouette démo.

Capture d'écran on l'on voit deux moines bouddhistes en dessin stylisé

Masagin by Farbrausch & Neuro

Cette démo est une invitation pour la NVScene 2008. C'est un type de démo pour annoncer une démoparty et donc inviter de nombreux groupes à y venir.

Elle est assez particulière car réalisée entièrement à base de SVG ce qui est assez rare dans le milieu. C'est d'autant plus surprenant que la NVScene est une démoparty à l'initiative de nVidia habitué à vendre des cartes graphiques pour leurs performances en 3D.

Elle sort donc vraiment du lot et sa musique est bien prenante. Et en fouillant le ouaib j'ai réussi à retrouver un ptit making-of.

Malgré ses dix ans son esthétique est toujours agréable de part son côté technique atypique.

Medium

Celle-là est déjà bien plus vintage mais à toujours une ptite place dans la liste de démos que j'adore.

capture d'écran de Medium montrant des formes abstraites

Medium by Einklang

Il y a vingt ans c'était une sacré bête avec sa synesthésie assez poussée et sa 3D pas dégueue. Et lorsque j'ai changé de PC à l'époque je me souviens que ça a été le premier truc un peu costaud que j'ai fait tourner dessus pour évaluer la puissance de la bête. C'est d'ailleurs surement pour ça qu'elle me marque autant celle-ci.

A Mind Is Born

Cette petite est à première vue assez moche mais en fait c'est un tour de force hallucinant.

Déjà elle tourne sur Commodore 64 une belle vieillerie sortie en 1982 cadencé à près d'1Mhz. Mais surtout elle ne pèse 256 octets. 256 octets. 256 Octets !

Le paragraphe dédié à cette démo est déjà 4 fois plus lourd !

Certes cette démo n'est pas très belle mais déjà la vidéo et l'audio sont synchro mais en plus l'audio est pas déplaisant, ça se laisse plutôt bien écouter.

Capture d'écran où l'on voit des caractères textuels représentant des formes abstraites

A Mind Is Born by Linus Åkesson

Elle est toute récente et on trouve même son making-of. Elle mérite clairement sa première place lors de la Revision 2017 dans la catégorie Oldskool 4K Intro.

Through The Cracks

capture en noir et blanc de formes rectilignes abstraites

Through the Cracks byy Still

3ème lors de la Revision 2016 dans la catégorie pc demo, cette vidéo est le cauchemar des codecs vidéos bien que n'étant qu'en noir et blanc. Déjà la première démo de cette sélection a une tendance à faire méchamment souffrir les encodeurs pendant une certaine séquence, celle-ci c'est l'intégralité.

Autant vous prévenir, le rendu made in Youtube est un sketch. Si vous le pouvez, mattez l'original.

Still est un groupe que j'apprécie particulièrement. Beaucoup de leurs démos sont vraiment propre avec toujours de la musique bien posée à forte ambiance. C'est souvent assez minimal et là c'est effectivement encore le cas avec tout un jeu sur le moiré.

10è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 et le projet Matrix. Ils sont assez transparents sur leurs avancées et sont reconnus pour leur ligne de laptops.

Bref voilà l'article :


Chez Purism, nous sommes tout autant excités que vous concernant les boards de devs qui seront distribuées cet été. Quand quelqu'un recevra sa board, leur première question sera «C'est chouette ! Maintenant qu'est-ce que j'en fait ?». Et pour anticiper ce besoin d'aide technique, notre effort de documentation technique a démarré. Vous pouvez déjà voir l'état actuel de la doc à l'adresse developer.puri.sm.

But de la doc

La doc pour dev sert de guide pour qu'un nouveau dev soit prêt à démarrer et s'amuse ! Cela inclura de nombreux exemples qui vous aideront quelque soit votre but.

Il y aura des instructions pas-à-pas accessible à la fois aux débutants mais aussi aux devs Debian. Le but de la doc est de vous accueillir et éclairer votre chemin via des exemples et des liens vers des docs externes. Ces exemples iront du déballage de votre board jusqu'à la conception et le déploiement d'applications flatpak dessus et pourquoi pas leur inclusion dans PureOS. Vous pourrez également y trouver des exemples d'utilisation de certains outils comme flatpak, les IDE utilisés pour les applications flatpak ainsi que des outils pour vous aider à designer les interfaces utilisateurs de vos applications. Le design des interfaces du Librem 5 seront également abordés dans les moindres détails afin de vous fournir une vue d'ensemble des recommandations pour les interfaces avec les humains qui seront appliquées par les applications fondamentales. Consultez la doc pour apprendre les mouvements que vous pourrez utiliser sur le téléphone. Les applications que vous créerez ou porterez pourront utiliser ces mouvements également.

Prenez tout de même en compte que cette documentation n'est pas un tuto exhaustif sur l'utilisation de tous les outils nécessaires au dev. Il existe déjà de nombreuses docs concernant chacun des outils donc il n'y a pas lieu de réinventer la roue. Cependant, vous serez redirigé vers celles-ci le cas échéant.

Nous accueillons volontiers les tests et autres efforts de devs que des volontaires sont prêts à fournir. En ce sens nous fournirons des informations sur la façon de participer à la communauté Purism en général.

Work in Progress

La doc est en mouvement permanent. Du contenu est ajouté chaque jour et des réorganisation ont lieu de temps à autre. Si une page vous semble avoir disparu, cherché là car il y a des chances qu'elle ait juste déménagée ailleurs plutôt que d'être réellement supprimée. Le but est d'écrire une documentation qui aide tout en étant intuitive donc il est important que le chemin le plus intuitif soit mis en place. La doc est toute neuve mais se remplie assez rapidement afin que vous puissiez l'utiliser décemment dès que vous recevrez votre board en Juin !

Il y aura une annonce dans les prochaines semaines pour un appel à volontaire. Tenez vous prêt !


La doc est un poil capital inexistant chez les entreprises de smartphone. Ils s'appuient beaucoup sur la communauté pour créer un environnement logiciel satisfaisant et du coup savent que la doc tient un rôle prépondérant sur ce point.

L'écosystème Linux actuel n'est pas trop adapté aux smartphone donc de nombreux logiciels vont devoir être créé pour cela.

Trois astuces pour Hugo

J'ai apporté encore quelques modifs sur mon thême Hugo (ouai j'en cause un peu trop souvent désolé mais ce coup-ci c'est plus une astuce qu'autre chose !). Une des modifs récente est l'ajout d'un lien vers un article aléatoire.

Pas de bol cette fonction n'existe pas de base mais c'est assez facile à bricoler via les quelques fonctions internes d'Hugo.

J'ai aussi généré une page contenant absolument tous les articles à l'image de l'ancienne version du site. C'est assez simple à faire.

Je publie désormais les brouillons des articles avant leur publication officielles mais je voulais les exclure du site pour pas que ce soit mélangé.

Chopper un article aléatoire

Hugo possède de nombreuses fonctions et surtout ces fonctions peuvent être chaînées à la manière du | dans le shell.

Du coup on va avoir besoin d'une fonction pour mélanger un array (un tableau) : shuffle.

Une fonction pour générer cet array à partir de critères définis : where.

Et une fonction pour chopper juste le premier élément de l'array : range first.

Le but exact de la fonction est de chopper tous les articles de la section "posts" dans la langue actuelle, les mélanger, extraire uniquement le premier.

{{ range first 1 (shuffle (where .Site.RegularPages "Section" "posts")) }} <a href="{{ .Permalink }}">{{ .Title }}</a>{{ end }}

La ptite astuce c'est que range est en fait une boucle qui doit donc être terminée par un end mais surtout qu'à l'intérieur le scope est définie par l'objet en question. Ça veux dire que .Permalink et .Title sont donc propre à l'itération actuelle de la boucle. Vous aurez donc bien le permalink et le titre de l'élément en cours de la boucle et non de l'article en cours de rédaction.

Voilà, maintenant vous aurez un lien aléatoire sur chacune de vos pages.

Par contre bien entendu ce lien changera à chaque nouvelle génération de votre site…

Générer une page avec le contenu de tous les articles

Avant d'utiliser Hugo, j'étais sur une simple page web faite à la main avec absolument tous les articles. Une seule grosse page.

J'aimais bien ce système pour pouvoir facilement rechercher un terme précis. Du coup j'ai recréé ça sur Hugo.

C'est finalement assez simple puisqu'il suffira de définir une nouvelle section du site.

Donc on créer layouts/mono et dedans on y colle un un list.html.

Là le but est de mimer l'allure de la home page mais avec les articles en entiers.

Donc on copie-colles le layouts/index.html et on modifie {{ .Summary }} par un {{ .Content }}. Bien entendu, on vire le ptit encart pour lire l'article entier.

Et hop ça donne ça.

Publier ses brouillons sans interférer avec le reste du site

Depuis quelques temps maintenant j'ai décidé de rendre public les brouillons d'articles non finalisés. Au lieu de traîner uniquement sur mon ordi, je me suis dit que ça pourrait éventuellement intéresser certaines personnes qui me font parfois des retours avant publication.

Donc pour ça on créer une nouvelle section avec un ptit mkdir content/drafts et dedans on y pose les brouillons.

Par contre, pas de bol quand on fait ça, les brouillons se retrouvent également dans la homepage ce qui n'est clairement pas désiré. Du coup le but est de les exclure de la homepage. Pour ça pas mal de solution possibles, perso j'ai opté pour l'arme lourde.

Premièrement j'ai créé une nouvelle variable dans config.toml

[params]
  sectionsInHomepage = ["posts","fast-posts"]

Là on a donc défini quelles sections seront sur la homepage.

On édite maintenant le template des RSS pour ne pas y publier les brouillons : layouts/_default/rss.xml . Il faut remplacer {{ range .Data.Pages }} par un {{ range where .Data.Pages "Section" "in" .Site.Params.SectionsInHomepage }} .

Voilà ça c'est bon, on fait la même modif sur layouts/index.html et ça devrait être bon.

Bon il ne reste plus qu'à affecter un template à nos drafts, j'ai juste copié celui de la section posts en rajoutant une petite phrase expliquant que ce sont des brouillons.

On obtient donc une section drafts.

Verrouiller le fichier /etc/resolv.conf sur Openwrt

OpenWRT me gonfle !

Ouai c'est une intro brute mais vraie. À chaque fois que je dois me plonger dans leur interface web ça me saoûle. Je suis plus habitué à gérer un nunux classique via ssh plutôt que leurs interfaces bizarre.

Rien que définir un résolveur DNS est compliqué dans leur système.

Ma connexion Internet m'est fournie via du DHCP or ce protocole vous envoi votre conf IP, votre route par défaut ET le résolveur DNS à utiliser.

Sauf que j'ai pas besoin de ce généreux service de mon FAI vu que j'utilise mon propre résolveur de mon côté. Et ce joyeux luron qu'est OpenWRT n'est manifestement pas des plus compréhensif à mon égard.

Ni une ni deux, je SSH sur le bousin et je tente un ptit chattr +i /etc/resolv.conf.

chattr: Operation not supported while reading flags on /etc/resolv.conf

O___o hmmm bizarre

Ha bha tiens, c'est un lien symbolique vers /tmp/etc/resolv.conf . Bon pourquoi pas.

Je tente le chattr +i sur ce fichier là du coup.

Pas mieux.

GRRRRRRR JE DÉTESTE TOUTES CES MAGOUILLES D'OPENWRT !

On inspire

rm /tmp/etc/resolv.conf

rm /etc/resolv.conf

Et on expiiiiiiiire

crontab -e

* * * * * printf "#SET VIA CRONTAB\nnameserver 10.2.0.1\nnameserver 10.2.0.2\n" > /etc/resolv.conf

On patiente une minute.

Et si le fichier est bien comme il faut.

chattr +i /etc/resolv.conf

Et voilà.

Plus d'emmerdes à ce niveau.

J'ai l'impression de me battre contre la distro mais c'est aussi ça nunux, on peut toujours le plier à sa volonté le manchot !

Cette technique c'est « ceinture + bretelles » mais au moins je suis à peu près sûr de plus être emmerdé.

Le deal derrière 1.1.1.1

Cloudflare a réussi sa communication concernant le lancement de son service de Résolveur DNS ouvert. Ils proposent donc désormais aux Internets de récupérer les adresses IP associés à un nom de domaine. Et c'est maintenant un jeu (limité à peu de joueurs) de proposer le service avec l'ip la plus simple : 1.1.1.1 .

Google propose son fameux 8.8.8.8 et IBM est récemment rentré dans la partie avec 9.9.9.9 .

Les IP (Bén|Maud)ites

En étant aussi simples, ces IP valent une petite fortune. Le résolveur DNS est le seul service que vous n'utilisez que via son adresse IP (forcément puisque c'est lui qui vous permet de vous en passer par la suite).

Bref disposer d'une adresse simple à retenir est la condition sine qua none pour être utilisé par tout le monde. Même moi qui n'aime pas dépendre de Google, il m'arrive régulièrement de foutre leur DNS car je ne connait pas d'autres adresses de mémoire…

Mais le problème de ces adresses IP est que de nombreux appareils et autres réseaux ne sont pas configurés proprement et traitent ces IP de façon particulière. Le service de Google est présent depuis quelques années déjà et a donc fait son trou. Mais visiblement Cloudflare se heurte à pas mal d'étrangetés de la part des FAI et équipementiers à travers le monde mais tout ça était attendu.

Le deal avec l'APNIC

Les fameuses adresses IP 1.1.1.1 et 1.0.0.1 appartiennent à l'APNIC qui est l'organisme attribuant les adresses IP et AS (on en discutera une prochaine fois) pour la zone Asie/Pacifique. L'APNIC a donc consentie à céder ces adresses à Cloudflare à des fins de recherches. En gros l'APNIC aimerait avoir une meilleure vision de la nature des requêtes DNS : est-ce que c'est un trafic réseaux plus pour des humains ou d'autres machines. ? Est-ce qu'il y aurait moyen de détecter les attaques de grande envergure en amont ?

Initialement le bloc d'adresse 1.0.0.0/24 (ce qui veux dire toutes les adresses entre 1.0.0.0 et 1.0.0.255) ainsi que 1.1.1.0/24 (donc de 1.1.1.0 à 1.1.1.255) étaient uniquement à but de recherche. Pendant des années le traffic y était étudié (parfois même conjointement avec Google) puisque ces adresses de part leur mnémotechnie facilitée étaient fortement sollicitées.

L'APNIC s'engage donc à être respectueux de la vie privée (privacy est quand même mieux comme terme m'enfin) et ne s'intéressera qu'aux statistiques et supprimera donc toutes les requêtes DNS une fois comptabilisées et les données ne seront pas revendues. Bref on ne peut que les croire mais contrairement à pas mal d'entreprises, l'APNIC ne fait pas son beurre sur les données personnelles et est une organisation respectable (tout du moins pour l'instant). On verra donc où mènera cette collaboration.

Fun facts

Il y a plusieurs exemples de réseaux mal branlés ou juste squatteurs.

Hamachi a été un des plus gros à faire des saloperies. Leur service de vpn magique n'était en fait qu'un squat de 5.0.0.0/8 sans ménagement. Et un peu plus tard ils ont récidivé avec 25.0.0.0/8.

Dans le genre truc bizarre il y a chez certains FAI US des routeurs qui étaient joignables via 1.1.1.1. Parceque c'est bien trop compliqué pour leurs clients d'entrer 192.168.1.1 … autant squatter une plage d'adresse IP publique. Avant d'être attribuée cette adresse était ce que l'on apelle un bogon mais ce n'est désormais plus le cas et du coup Comcast a dû modifier leur bousin.

Je savais pas trop où le mettre mais il y a une chose que vous devez savoir ! Vous pouvez pinguer 1.0.0.1 en tappant uniquement ping 1.1 . Et ça même sous windows ! Et d'ailleurs ça marche avec pleins d'autres. À la maison mon lan est en 10.0.0.0/8 et du coup je peux ping 10.254 pour pinguer 10.0.0.254 .

Liens

PS 05/04/2018

Je n'ai pas été suffisamment clair.

L'APNIC a conclu ce deal à des fins de recherches pour analyser l'allure du traffic DNS mais également pour tout le reste du trafic qui y passe.

Selon leurs dires, ces adresses écopent d'environ 50Gbps ce qui est vraiment massif.

Donc Cloudflare s'engage à fournir le service de DNS et d'anonymiser ce traffic, produire des stats et supprimmer les données en 24h et aussi de faire la même chose pour tout le reste du trafic en vrac qui passe.

Auparavant, Google était déjà en partenariat avec l'APNIC pour ça, ce nouveau deal remplace Google par Cloudflare et pousse l'expérience un peu plus dans le sens du DNS histoire d'étudier du vrai trafic DNS à grande échelle.

Qutebrowser per Domain Settings

Dans sa version 1.2, Qutebrowser a ajouté une fonctionnalité toute sympa :

Les réglages en fonction du domaine

En gros vous avez donc vos réglages habituels (globaux) mais sur certains sites vous pouvez avoir de nouveaux réglages spécifiques. Ça permet enfin de pouvoir désactiver globalement le javascript et de ne l'activer qu'au cas par cas.

En faisant ça la navigation sur les interwebs devient bien plus agréable. Tout est plus réactif, moins de risque de salopage dans votre dos par le premier site venu. Bon ça ne remplace pas un uBlock Origin ou uMatrix mais c'est tout de même bien mieux qu'avant.

La syntaxe de la config est par contre pas jolie jolie. MAIS, oui il y a un mais majuscule ! Il y un nouveau raccourci tout bien foutu pour ça.

Donc on désactive globalement javascript avec :set content.javascript.enabled false . Ensuite sur chacune des pages autorisées à faire du javascript, vous faites tSh qui va réactiver javascript pour le domaine du site que vous consultez et recharger la page.

Si par contre vous voulez autoriser que ponctuellement sans sauvegarder dans la config, il faut faire un tsh (donc sans majuscule).

Et hop c'est bon.

Les prochaines versions ?

Il s'agit de la première version des régagles spécifiques à un domaine. De futurs améliorations sont prévues. Un but à long terme est de répliquer les fonctionnalités d'uMatrix donc on aura très surement une meilleure granularité et plus de réglages possibles.

Dans mon cas je ne m'en sert que pour le js mais il est également possible de faire la même chose pour les images, les plugins et pas mal d'autres réglages.

Web ≠ Internet

Il y a des trucs qui m'agacent.

Pour certaines c'est le point médian de l'écriture inclusive, pour d'autres c'est la digitalisation en lieu et place de numérisation ou bien la mise en exergue de blockchain pour apporter la disruption, mais pour moi c'est d'utiliser “Web” et “Internet” de façon interchangeable.


Web ≠ Internet

Vous voulez savoir pourquoi ça m'énerve ?

Parceque ce sont deux choses différentes !

Internet est un réseau de réseaux

Internet ce sont différents réseaux parlant une même langue et que l'on a interconnecté. Un grand réseau mondial parlant le langage IP qui veux dire Internet Protocol.

Le Web est un protocole d'échange de données

Le Web ou World Wide Web est un système permettant d'échanger (bien que principalement toujours dans le même sens) des documents Hypertexte. Hypertexte c'est le système qui permet de lier plusieurs documents entre eux via des liens.

Ça ← c'est un lien hypertexte. Il vous permet d'aller lire un autre document sans avoir besoin de finir celui-là. On pourrait d'ailleurs considérer Les livres dont vous êtes le héros comme étant des livres en Hypertexte puisque vous êtes enjoint à briser la linéarité du format papier pour le lire.

Bref je m'égare.

Les deux peuvent être indépendants

Internet ça a été créé en 1983 avec l'adoption du protocole IP (même si ça existait en fait à partir des années 60).

Le web ça a été créé en vers 1990 soit biennnnn plus tard mine de rien.

Avant le web, existait déjà le mail mine de rien. C'est quand même le plus ancien réseau social de l'Internet encore utilisé !

Il est tout à fait possible de faire du web sans Internet : vous pouvez monter un serveur web et mettre des site web inaccessible de l'Internet. C'est d'ailleurs devenu courant pour des appareils de fournir une page web servant pour la configuration sans pour autant être relié au Net.

Vous faites constamment de l'Internet sans faire du web. Quand vous voulez ouvrir une page web, vous faites au préalable une requête DNS (daté de 1983 aussi, donc bien avant le web). Si vous faites du mail, il y a des chances que ce ne soit pas via le web. Lorsque vous chattez sur IRC vous utilisez Internet mais pas le web. Lorsque vous jouez à un jeu vidéo en réseau, vous utilisez Internet mais pas le web.


Web ≠ Internet

Même si ces dernières années il y a une forte tendance à tout foutre dans HTTP (le protocole du web, le Hyper Text Transport Protocol), ce n'est pas une raison pour interchanger les mots quand on parle de l'un ou de l'autre.

AV1 est de sortie

Vous l'attendiez pas et pourtant il arrive quand même. AV1 est un nouveau codec vidéo. Un de plus sauf que lui est fait par AOMedia.

AOMedia : Alliance for Open Media

AOMedia est un organisme assez récent qui a pour but de créer un codec sans royalties. Ça peut paraître con mais jusqu'à présent la grande majorité des codecs vidéos étaient sous la houlette de MPEG-LA, une entreprise faisant son beurre sur la revente de licence pour ses codecs. AOMedia regroupe de très nombreuses entreprises ayant ras-le-cul de payer pour ça.

On y retrouve Google, VideoLan, Nvidia, Netflix, Mozilla, Xiph, Facebook, Cisco, Arm, AMD, Microsoft, Intel et bien d'autres.

AV1

Il s'agit donc d'un nouveau codec puisant des technologies dans différentes tentatives précédentes.

Xiph avec Mozilla étaient en train de bosser sur Daala.

Cisco bossait sur Thor.

Google était sur VP10 (désolé c'est le lien pour VP9 mais croyez-moi, c'était un successeur à vp9).

Et donc, ils se sont tous entendu pour foutre la nique à MPEG-LA. Ce codec peut donc être utilisé sans débourser un radis gratuitement partout dans le monde.

Si tout se passe bien ça va se démocratiser assez vite (vu les noms derrière ça devrait se faire sans trop de soucis). Les performances devraient être au moins du niveau de H265. Il y a fort à parier que ça devienne le codec pour le web également dans une prochaine révision de html5 pour remplacer le vp8 et vp9.

Le code source vient d'arriver ici et Gstreamer 1.4 a déjà un support expérimental ainsi que le récent VLC3.

Il me tarde de le tester un peu voir s'il tient ses promesses et si c'est utilisable sans (en|dé)codeur hardware.

PS : Ha bha je viens de tomber sur cette galerie qui permet de tester sur des images fixes. Le rendu est effectivement à la hauteur si ce n'est meilleur que celui d'h265.

D'ailleurs en théorie, Firefox Nightly est en mesure de lire les vidéos en AV1 mais pas de bol chez moi ça ne fonctionne pas.

Examen d'un spam #1

Il y a quelques astuces pour reconnaitre un bon vieux spam tentant de vous arnaquer de l'ivraie mail (ouai pas le meilleur jeu de mot mais je le garde tout de même).

La première chose, dès qu'un mail n'est pas en texte pur mais est plutôt joli, il faut augmenter votre niveau de méfiance. Et ensuite regarder les sources du mail pour y mener l'enquête.

Prenons un cas concret

Return-Path: <bounces+45739-c346-lord=lordtoniok.com@sendgrid.net>
X-Original-To: lord@lordtoniok.com
Delivered-To: lord@lordtoniok.com
Received: from o1678974x241.outbound-mail.sendgrid.net (o1678974x241.outbound-mail.sendgrid.net [167.89.74.241])
(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
(No client certificate requested)
by zapp.lord.re (Postfix) with ESMTPS id 96D0937A17AC
for <lord@lordtoniok.com>; Sat, 24 Mar 2018 22:01:59 +0100 (CET)
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=sendgrid.me; 
h=mime-version:from:to:subject:content-type:content-transfer-encoding; 
s=smtpapi; bh=y3xMdntpEBfP51yju0Z1DtULfXs=; b=a0+PaMVc8rP3hQ5zX9
MLkNvySebfRH1UcTSdkmPdOr6oAXMiHy0NfH//1YGwF0Vg6dvQvZaNwUJS7LXnf5
psldtb0GZrHdmHSs7Jz+qkWnNZg9dL/VYz2WASjn5uCDHZZyNKANEqYYQnMP/KXt
D2JU1wM0VY4RjmSjsqvgXB9Fc=
Received: by filter0610p1las1.sendgrid.net with SMTP id filter0610p1las1-21544-5AB6BC0D-18
2018-03-24 20:58:53.846285796 +0000 UTC
Received: from EtracSP (unknown [52.143.141.39])
by ismtpd0004p1lon1.sendgrid.net (SG) with ESMTP id Ji-9QvLnSl2bux_zRpgMnQ
for <lord@lordtoniok.com>; Sat, 24 Mar 2018 20:58:53.436 +0000 (UTC)
MIME-Version: 1.0
From: Spotify <noreply@spotify.ca>
To: lord@lordtoniok.com
Date: Sat, 24 Mar 2018 20:58:54 +0000 (UTC)
Subject: Spotify Premium : Payment Failed
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: base64
Message-ID: <Ji-9QvLnSl2bux_zRpgMnQ@ismtpd0004p1lon1.sendgrid.net>
X-SG-EID: ujb9mvUjVs4ifSCsYYNDLtD/z0w00wdSJh87rMmMAeUcQ8j2EBJKf6fHfkeRnMl7f1dZUqrJ3idbM3
kQxOhCAYpn6ygWZ8MkoB5use3mUgU/zHMr55D0WCPT6qRQ3EPvLFaJqZqcXZX4aE3svITjhx7V+8GJ
h10q6h2m4GiZSAf6WciZTBJds2Qb1zao5AypaYRM2xZyDI5z49Y9m4rZLg==
X-Rspamd-Queue-Id: 96D0937A17AC
X-Spamd-Result: default: False [2.48 / 10.00]
RCVD_NO_TLS_LAST(0.00)[]
ARC_NA(0.00)[]
MIME_HTML_ONLY(0.20)[]
FROM_HAS_DN(0.00)[]
FORGED_SENDER(0.30)[]
TAGGED_FROM(0.00)[45739-c346-lord=lordtoniok.com]
R_SPF_ALLOW(-0.20)[+ip4:167.89.0.0/17]
FROM_NEQ_ENVFROM(0.00)[noreply@spotify.ca,bounces@sendgrid.net]
ASN(0.00)[asn:11377, ipnet:167.89.64.0/19, country:US]
TO_DN_NONE(0.00)[]
HTML_SHORT_LINK_IMG_1(2.00)[]
RCPT_COUNT_ONE(0.00)[1]
DMARC_NA(0.00)[spotify.ca]
TO_MATCH_ENVRCPT_ALL(0.00)[]
URIBL_BLOCKED(0.00)[t.co.multi.uribl.com]
R_DKIM_ALLOW(-0.20)[sendgrid.me]
BAYES_SPAM(0.38)[70.93%]
MIME_BASE64_TEXT(0.00)[]
PREVIOUSLY_DELIVERED(0.00)[lord@lordtoniok.com]
RCVD_COUNT_THREE(0.00)[3]
X-Rspamd-Server: mail

Je ne vous met que les entêtes, le reste on s'en fout dans un premier temps.

Vous remarquerez que Postscreen l'a laissé passé et que Rspamd également avec un score de 2.48/10 (quand ça atteint 10 c'est officiellement un spam).

La loucherie

Le Return-Path et le Received from ne correspondent pas du tout à l'Émetteur du mail (le champs From: Spotify). L'antispam l'a remarqué et vous le signale avec FROM_NEQ_ENVFROM.

Il y a deux types d'entêtes mails. Ceux écrits "manuellement" par l'utilisateur et ceux que l'on appelle les Envelope Headers qui sont écrit par les logiciels.

Évidemment les spammeurs vont manuellement mettre des entêtes bidons pour faire croire qu'ils sont légitimes (From: Spotify) mais le serveur mail lui envoi la vérité (en vrai il envoi son adresse IP qu'il ne peut pas vraiment modifier et le serveur de réception faire une requête DNS pour traduire cette adresse en nom).

Si jamais le doute persiste concernant la nature du mail, voyons à quoi il ressemble.

Le mail en HTML

Non je n'ai pas affiché les images (et vous ne devriez pas non plus)

Bon déjà This message was sent to …, c'est pas de bol c'est pas moi.

Ensuite une petite astuce de sioux : passez la souris sur les liens et regardez vers quelles adresses ça mène voilà des points à observer :

  • S'ils ne pointent pas explicitement vers le site en question
  • Si tous les liens pointent vers la même adresse
  • S'ils utilisent un raccourcisseur d'url

Chaque fois que vous avez répondu "Oui" vous pouvez augmenter votre niveau de suspicion.

Ha au fait, si ça parle de pognon c'est rarement bon signe. C'est obvious mais visiblement pas tant que ça…

Et dernier point, si vous n'avez pas de compte chez un tiers et que celui-ci vous contacte et vous annonce un soucis de paiement sur votre abonnement… c'est un des points les plus évidents.

Évitez également de charger les images dans les mails. À partir du moment où vous chargez les images, votre navigateur se connectera au serveur du spammeur et pourra commencer à vous traquer. Cela leur permet déjà de savoir que le mail envoyé a été reçu et que donc votre adresse est encore fonctionnelle et lue. Qui plus est, ils peuvent chopper des infos sur votre client mail et éventuellement y trouver des failles.

Voilà pour cette fois.

Panne de ce bon vieux Bender

Vous l'avez peut-être remarqué mais le site a eu des ptits soucis : certaines pages étaient inaccessibles.

Mon pauvre Bender (mon serveur/nas) était HS vendredi en rentrant du boulot.

L'onduleur couinait du fond du placard. Étrangement je vais voir le disjoncteur qui effectivement a fait son boulot.

Bon dans le doute je remonte le disjoncteur. Je rebranche le serveur à l'onduleur et pouf pareil…

Well well well. Je le branche en direct sans passer par l'onduleur et relève le disjoncteur.

Ça tient mais pas pour autant que ça démarre. Bon bha la machine est HS.

J'imagine que l'alim est en cause et que le reste de la machine va bien ou alors c'est de la faute de Systemd ? (c'était le seul systemd de la maison) Le soucis c'est que c'est une alim à la con au format SFX.

Bref après environ 7 ans et demi de fonctionnement l'alim flanche.

Du coup j'ai remonté le bastringue sur un ptit odroid c2 moins énergivore et bien plus petit. Mais par contre j'ai pu y foutre que le skeudur de backup en usb dessus…

J'espère que les autres disques durs sont intacts. D'ailleurs j'hésite à chopper une nouvelle alim pour refaire fonctionner Bender ou bien trouver un moyen de foutre les skeudurs sur le ptit odroid qui est largement suffisant niveau perfs… Je trouve pas grand-chose pour branche 5 skeudurs (voir 6) sur un seul USB et qui ne fasse pas de trucs chelou genre du RAID et autre.

Bref j'y pense et je vous tiens au courant.:w

Peertube et l'impossible challenge de remplacer Youtube

Ça y est dans le cercle des libristes la nouvelle fait grand bruit ! Peertube débarque. Tout du moins en beta. Techniquement ça a l'air de fonctionner. J'ai pu regarder quelques vidéos hébergées ça et là sur diverses instances.

Peertube est donc une plateforme web de streaming de vidéo s'appuyant sur le p2p pour diffuser ses vidéos et sur la fédération de multiples instances. Un savant mélange de PopCorn Time et Mastodon.

Quelques réticences sur la technique

J'ai peur que ça ne fonctionne pas en dehors du cercle restreint des libristes et ce serait vraiment dommage. Peertube ne pourra pas concurrencer un site de vidéo grand public à mon avis. En partie à cause des problèmes d'hébergement.

La praticité de Youtube a mal habitué les gens

Youtube représente bien les maux des Gafam : centralisation, enfermement dans une plateforme, espionnage constant, matraquage publicitaire, … Mais Youtube s'appuie sur Google et son savoir-faire en matière de Web et aussi un portefeuille en forme de corne d'abondance. La plupart des autres plateformes d'hébergement de vidéos sont à même de témoigner de la difficulté technique et financière que ça représente.

Youtube a habitué les gens à consommer de la vidéo en grande qualité, mauvaise qualité, sur mobile, sur ordi, sur téloche et sans attente (ou presque) … Toituyau (Youtube) a aussi également habitué les gens à envoyer des vidéos sans se soucier de la durée, le format de l'image, le codec vidéo, le format de fichier ni même du framerate de leur production. Sur ce point j'ai peur que Peertube ne se vautre.

Comment se comportera Peertube ?

“ Veuillez envoyer votre vidéo en format désentrelacé en vp8, opus dans un webm avec un bitrate de moins de XMbps ? ” et à ce compte on perd une bonne partie des petits créateurs qui veulent juste envoyer leur vidéos de ce qu'ils viennent de filmer avec leur téléphone.

Ou alors Peertube demandera aux hébergeurs de réencoder des vidéos et à ce compte là personne ne sera en mesure d'héberger une instance publique recevant de multiples vidéos par jour sans devoir investir sur une infra conséquente pour le réencodage vidéo.

Youtube fonctionne grâce à une infrastructure démentielle

Concernant l'hébergement et la bande passante, comment ça va se passer ?

Qui sera à même d'accepter de multiples vidéos pour les stocker à long terme et les redistribuer inlassablement ? Le P2P c'est bien gentil mais il faut toujours au moins un seeder. Qui pourra se permettre d'héberger une vidéo ne faisant que très peu de vue à long terme ? Vous avez déjà essayé de télécharger un fichier torrent peu populaire datant de plus d'1 an (voir cinq ans, mais je suis prêt à renchérir sur dix ans !) ?

Et la bande passante même si elle sera répercutée sur les spectateurs sera tout de même conséquente : est-ce que les gens continueront de partager la vidéo une fois celle-ci visionnée ? Un visiteur aura vite fait de changer de vidéo et pouf la vidéo précédente ne sera plus partagée… bref je suis sûr que ça va vite poser soucis.

Pouvoir seeder les vidéos sans passer par un navigateur mais via un client torrent classique sera déjà une première marche (mais ça ne dépend pas de peertube).

Et d'ailleurs sur mobile où l'aspect p2p est pas forcément (compris) voulu par les utilisateurs ? Ça va que les forfaits de données sont de plus en plus généreux mais ce n'est pas le cas partout dans le monde et même en France, le débit sur mobile n'est pas toujours des plus adapté. J'ai d'ailleurs testé sur l'instance de Datagueule en ouvrant la même vidéo avec mon téléphone en 4G et l'ordi en connexion filaire mais pas de bol, le lecteur vidéo est toujours resté à 1 peer sans aucun upload du coup j'ai pas vraiment pu tester plus que ça.

Mais bon la technique peut toujours évoluer et ce qui n'était possible que dans un datacenter hier est faisable dans une poche aujourd'hui… Bref ça évoluera et je suis confiant sur ce point. Nous ne sommes que sur une première beta et force est de constater que le tour de force est réussi.

Le soucis de l'effet de réseau

Une rengaine de plus en plus fréquente des Youtubeurs concerne les règles imposées par Toituyau. Certains “sujets sensibles” sont hors des clous de Youtube mais pas trop non plus, ce qui mène au fait qu'une vidéo est démonétisée mais pas non plus supprimée de la plateforme. Du coup des Youtubeurs râlent.

Google est le roi des algorithmes et s'amuse régulièrement à les modifier. Ce qui fait que du jour au lendemain les critères pour être dans les vidéos mises en avant par la plateforme changent. D'un coup d'un seul un créateur peut disparaître des radars. Du coup les Youtubeurs râlent.

Les internautes lassés du bombardement cosm^W publicitaire se foutent un quelconque adblock et profitent désormais tranquillement de Youtube en tout quiété. Du coup des Youtubeurs râlent.

Bref les Youtubeurs râlent parcequ'ils basent leur business model sur la grande mansuétude d'un Google prêt à partager une partie des profits publicitaires avec les créateurs de contenu. Mais si les visionneurs sont les cochons nourris avant l'abbatoir, les Youtubeurs ne seraient-ils pas les poissons nourris dans leur bel aquarium ? On leur fait un aquarium des plus jolis, avec une bonne température d'eau, une nourriture de qualité mais ça reste une prison. Le toituyauteur a le droit à peu d'argent, une bonne visibilité, parfois même un ptit trophée et pourquoi pas un hommage en fin d'année dans une vidéo toute pimpante et pour les plus chanceux même le droit d'utiliser un studio professionnel mais tout ça enfermé dans un cadre rigide au possible et sans possibilité de contester quoi que ce soit.

Les Youtubeurs profitent d'un service extrèmement coûteux. Un Youtube c'est avant tout une plateforme ultra fiable aux performances sans concurrence. Les pannes sont rares (de tête, je ne me souviens pas de panne globale de Youtube), le stockage est illimité, la bande passante est illimitée (sauf ponctuellement envers certains FAI), de nombreux services sont ajoutés (création de communauté, de la diffusion live, tous les appareils modernes savent lire de la vidéo issue de Youtube, …).

Dans un monde sans GAFAM, ce service se paierai probablement très cher.

Et du coup revenons à ce sous-titre : l'effet réseau. Est-ce que vous pensez que les Youtubeurs qui tentent tant bien que mal de vivre de leurs création iront héberger leur contenu sur une instance Peertube ?

Malheureusement j'en doute. Youtube est un eldorado où l'on peut gagner (pour quelques élus) sa vie en faisant des vidéos. Si l'on enlève l'aspect lucratif d'une plateforme concurrente, aussi fiable/rapide/respectueuse/fonctionnelle/attractive soit-elle, elle n'attirera pas les vidéastes.

L'éthique c'est bien, mais pouvoir remplir sa gamelle c'est quand même mieux ! Je ne les blâmerai pas sur ce point.

Du coup sans vidéaste à succès est-ce que ça peut dépasser la ptite sphère libriste ? Mouai.

I Want To Believe

En bref la monétisation est à mon avis le point bloquant numéro un. Bon qu'est-ce qui pourrai changer la situation ?

Hmmm j'ai pas de solution. Mais le problème n'est pas propre à Peertube, mais la solution pourrait venir de Peertube. Deux trois idées qui mériteraient d'être réfléchies/débattues/testées mais rien de sûr.

Une instance privée avec abonnement payant

J'imagine que ça pourrait être le cas.

Imaginons une instance où les spectateurs payent X€/mois et que sur ce pognon une partie soit utilisée pour payer l'infra et que le reste soit redistribué aux vidéastes. Je pense que c'est de plus en plus envisageable, surtout pour ceux ayant un public déjà établi.

Twitch, montre que des gens sont prêt à payer pour du contenu "amateur". Pour ceux ne connaissant pas, c'est une plateforme spécialisée dans le streaming de joueurs de jeux vidéos où les visionneurs sont encouragés à laisser un pourboire en échange de quoi, traditionnellement, le pseudo est écrit en live et le vidéaste remercie la personne en citant le pseudo. Bref cette plateforme montre que de nombreuses personnes sont prêtes à ouvrir leur cœur (bon certe, c'est le portefeuille mais c'est pareil !) pour remercier le boulot derrière une vidéo.

Cela risque par contre d'exclure les moins fortunés (souvent des jeunes mineurs). Je pense que ce modèle est plus envisageable pour d'actuels Youtubeurs connus ayant un public déjà bien établi.

Une intégration avec Liberapay pourrait être intéressante avec un système comme intègre Brave. Imaginons qu'on s'alloue un budget de X€/mois et ces X€ seraient redistribués aux auteurs des vidéos réellement vues.

Une instance publique financée par de la pub

Ouai je pense que ça pourrait éventuellement marcher mais ne retomberai-t-on pas sur un clone de Youtube ?

Un peu si, mais on peut imaginer un modèle plus éthique.

Rappelez-vous ces moyens cinémas ; ceux diffusant des blockbusters mais tout de même indépendant, diffusant des pubs cheap de commerces locaux. Je vois bien un truc un peu similaire. Une instance spécialisée au niveau d'une métropole par exemple. Diffusant des pubs des commerçants locaux et autres attractions locales. Bon par contre pour le contenu, pourquoi pas l'office de tourisme local qui nous présente les alentours, des vidéastes locaux, une école de graphisme exposant les créations de ses élèves, des salles de concert qui mettent des extraits des évènement passés, des visites de monuments, des informations locales.

Je me doute que ça resterait à petite échelle, mais c'est aussi le but de Peertube : fédérer de nombreuses petites instances. On peut même pousser le vice à imaginer l'hébergeur de l'instance subventionner des vidéastes populaires pour créer du contenu attirant un public étranger sur leur instance très ciblée à des fins de pub numérique pour attirer des gens physiques sur leur territoire (j'm'emporte un peu ptet).

Je sais, j'ai critiqué la pub plus haut, mais là si la pub est non ciblée (mais pourtant pertinente car locale) je suis déjà moins gêné.

C'est plus du sponsoring que de la pub pure.

Une instance publique avec envoi payant

Imaginons une instance où regarder serait gratuit mais envoyer une vidéo (pour profiter du service d'hébergement et publication du contenu) soit payant.

Hmmm ça risque d'être dur. Très dur.

Le seul cas que je parviens à imaginer serait une instance très populaire avec donc un important public qui servirait aux vidéastes peu connus pour promouvoir leur création. Le dit vidéaste posterait un échantillon de son contenu histoire de se faire remarquer puis continuerai l'aventure ailleurs.

C'est tordu mais pourquoi pas ? Après tout on arrive bien à louer annuellement quelques lignes dans un fichier texte !

Une instance publique qui rémunère chaque envoi de vidéo

Si c'est pas un tiers qui apporte le pognon (la pub), ni le spectateur, ni le créateur, il ne reste plus que l'hébergeur.

Bon bha voilà la blague est faite.

Alors là même mon imagination me fait défaut…

Et la conclusion ?

Bha j'en ai pas ! À l'avenir on verra bien ce qu'il va se passer.

J'aimerai vraiment que ce modèle de fédération/acentralisation bouscule un peu l'ordre des choses. Peertube en l'état montre que techniquement c'est faisable (fait).

Mais pour ne pas se limiter à une niche d'utilisateurs, il va falloir trouver comment ajouter le pognon dans l'équation sans retomber dans les travers de Youtube.

Voilà voilà.

Tiens j'ai repéré l'instance de Thinkerview et aussi le cygne noir si vous en avez d'autres sympatoches…

Sisyphus l'antispam mignonnet

Je vous ai déjà fait part à maintes reprises de ma stack mail. J'ai rajouté il y a quelques mois un antispam supplémentaire.

  • J'ai donc Postscreen en première ligne (presque avant Postfix) qui vire environ 80% de spam avant le traitement par le reste.
  • Ensuite j'ai un Rspamd qui agit après Postfix avant Dovecot et qui vire encore une grosse partie de merde (il retire encore 19% de spam).
  • Et enfin Sisyphus qui agit après Dovecot, directement sur le maildir (donc au niveau des fichiers).

Ouai c'est ptet overkill. Je vous ai chanté les louanges de Postscreen et Rspamd pour ensuite vous annoncer que j'en ai un troisième, je sais.

Pourquoi trois antispams ?

Bha en fait, disons que Postscreen écrème la grosse majorité du spam bête. Les trucs absolument pas ciblés, mals branlés qui constituent vraiment un flood massif. Il permet surtout d'épargner le reste du système de tout traitement. C'est le minimum syndical à mettre en place. Je pourrai m'en passer car Rspamd filtrerait sans soucis ces merdes mais Postscreen nécessite bien moins de ressources : le mail n'est pas traité par postfix, il est pas écrit en mémoire ni sur le disque, ne consomme pas de cpu pour l'analyse ni même de réseau car il est bloqué avant même d'être récuperé.

Ensuite Rspamd bha lui c'est un vrai antispam. Il sera plus à même de virer du spam plus travaillé et ciblé. Il est cool, avec tous pleins de règles configurables et tout. Mais j'ai pas envie de me prendre la tête plus que ça à le configurer. Dans sa conf par défaut il n'a pas de faux positifs et ça c'est le plus important. Il a par contre parfois des faux négatifs malgré le fait d'avoir diminué le score nécessaire pour se faire rejeter. Et là quand je dis exceptionnelement ça veux dire un mail ou deux par semaines qui passe dans l'Inbox au lieu du spam. Je pourrai ajuster les règlages un peu mieux ajouter des conditions, modifier des scores mais j'avoue que j'ai pas trop la patience ni une ma