bortzmeyer

https://www.bortzmeyer.org/

I did not follow the political reasons behind this censorship but apparently, as of 2024-08-02, Instagram is officially banned in Turkey. We can see with RIPE Atlas probes that blocking is partially deployed, and through lying DNS resolvers:

% blaeu-resolve --requested 100 --country TR --type A instagram.com
[157.240.238.174] : 7 occurrences 
[157.240.0.174] : 1 occurrences 
[195.175.254.2] : 4 occurrences 
[157.240.234.174] : 1 occurrences 
Test #76490190 done at 2024-08-02T14:56:30Z

Most of the IP addresses are legitimate Facebook addresses, meaning that either the censorship is too recent, or some Internet access providers did not comply (or that many users are used to alternative DNS resolvers). But 195.175.254.2 belongs to Turk Telekomunikasyon so there is clearly a lie here.

L'Académie Française communique sur l'Internet surtout avec le nom de domaine academie-francaise.fr. Mais elle détient aussi un nom de domaine à l'orthographe correcte, académie-française.fr. Sur le Web, l'adresse http://académie-française.fr/ redirige vers l'adresse https://www.academie-francaise.fr/ . Cette dernière utilise HTTPS (donc sécurisé par la cryptographie) et le nom de domaine sans les caractères composés (é et ç). Le certificat envoyé par le serveur, dans ce cas, a été émis pour le nom www.academie-francaise.fr (ainsi que pour academie-francaise.fr) et signé par l'autorité de certification RapidSSL/DigiCert. Mais qu'en est-il de académie-française.fr, le nom avec les caractères composés (on parle d'IDN pour Internationalized Domain Name) ? Si on s'y connecte en HTTPS, via l'adresse académie-française.fr, ou bien www.académie-française.fr, on tombe sur un certificat auto-signé (le titulaire du certificat est également le signataire), par la société SdV Plurimedia. Ces certificats auto-signés (« j'affirme que je suis moi ») ne permettent aucune authentification et sont donc typiquement rejetés par les clients HTTP, notamment les navigateurs Web. Dommage, cela empêche de communiquer avec HTTPS en utilisant le nom correct. Cela montre que l'Académie, quoique ayant pensé à réserver le bon nom, ne l'utilise pas réellement.

Outils techniques utilisés

  • curl -v https://www.academie-francaise.fr/
  • gnutls-cli www.academie-francaise.fr
  • openssl s_client -showcerts -connect www.academie-francaise.fr:443 | openssl x509 -text Et idem avec le nom IDN.

Geoff Huston published a long explanation about why, in his view, we should give in DNSSEC and consider it a failure. As he says himself, there is a lot of provocation in this article, also a lot of interesting thinking about the end-to-end principle vs. the infrastructure, but also some points I want to address.

Governance

An important argument in the article is a comparison of TLS vs. DNSSEC. He writes that TLS is a complete success (every Internet connection, more or less, uses it) and he compares it to DNSSEC which is still, many years after, not universal. But he explains this mostly by technical reasons while forgetting an important one: TLS was adopted because a few key companies (he mentions “the tightly knit community of browser developers [actually, company management, not individual developers] and web content server platform vendors”) decided to force it on everyone. Nothing similar occured for DNSSEC. Unlike some presentations of technoilogye adoption, where the cvhoice it the result of many indicidual and local dezcisions, the current state of the Internet is that a few big organisations have more power, not on the development of technologies (or their standardisation), but on their adoption. So, the issue of wether DNSSEC is a good or bad technology is not settled here, unless you considere that, by definition, the winner is always right.

Certificate issuance

Huston recognizes that, at the begining, certificate issuance for TLS was a problem (“a period of exorbitant pricing for the issuance of domain name x.509 certificates”) but regards it as over: it is now “a freely available commodity through the use of free domain name certificates”. But there is only one, just one organisation issuing these free certificates. Unlike the decentralized DNS, the certificate system is quite brittle: if Let's Encrypt were to disappear, or simply to change its policy, we would be back to the time of “exorbitant pricing”.

Certificate security

Anyway, the whole argument that, since we have TLS, DNSSEC is redundant and useless, is questionable: how do you prove to the Certificate Authority that you control a domain? Yes, you get it, through DNS… (Huston mentions this but does not draw the conclusion.)

Depuis dimanche 12 mai 2024, dans la soirée, plusieurs personnes signalent sur les réseaux sociaux une « panne du site impots.gouv.fr ». Il s'agissait d'un problème DNS (Domain Name System) lui-même dû à un problème de routage ou bien à une attaque par déni de service. Le problème n'affectait que certains utilisateurs. Il s'est terminé vers 14:45 UTC. Les résolveurs DNS répondaient avec le code SERVFAIL (Server Failure) et, s'ils fournissaient les EDE (Extended DNS Errors), précisaient quelque chose comme « NO_REACHABLE_AUTHORITY ». impots.gouv.fr n'a que deux serveurs faisant autorité, ce qui est clairement insuffisant pour un domaine aussi critique et, pire, tous les deux sont dans le même AS (Autonomous System), le 34177 (l'opérateur Celeste). Un problème de routage entre l'opérateur où se trouve votre résolveur DNS et Celeste et paf, plus d'impots.gouv.fr. Vu par les sondes RIPE Atlas, voici la situation au matin du lundi 13 mai :

% blaeu-resolve --requested 200 --country FR --ipv4 --type A  impots.gouv.fr
[145.242.11.100] : 125 occurrences 
[ERROR: SERVFAIL] : 61 occurrences 
Test #71358106 done at 2024-05-13T06:48:09Z

On voit qu'environ le tiers des sondes RIPE Atlas en France avaient un problème à résoudre ce nom. Certains résolveurs DNS publics y arrivaient, mais pas tous, selon la chance et la façon dont ils sont connectés. Ici, celui de Cloudflare (notez l'EDE) :

% dig @1.1.1.1 impots.gouv.fr A
…
;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 19564
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags: do; udp: 1232
; EDE: 22 (No Reachable Authority): (at delegation impots.gouv.fr.)
;; QUESTION SECTION:
;impots.gouv.fr.		IN A

;; Query time: 8 msec
;; SERVER: 1.1.1.1#53(1.1.1.1) (UDP)
;; WHEN: Mon May 13 11:03:26 CEST 2024
;; MSG SIZE  rcvd: 78

Un examen des mesures effectuées par les sondes RIPE Atlas indique que le problème ne semblait pas lié à l'AS (à l'opérateur). Par exemple, aussi bien chez Free, AS 12322, que chez Orange, AS 3215, certaines sondes Atlas arrivaient à résoudre le nom et d'autres pas. Cela peut être dû au fait qu'elles n'utilisaient pas le même résolveur (aussi bien Free que Orange en ont plusieurs, et certains résolveurs, pour compliquer davantage les choses, avaient peut-être l'information dans leur mémoire) ou bien que certaines utilisaient un résolveur autre que celui par défaut ou encore qu'il ne s'agissait pas d'un problème de routage mais d'une attaque par déni de service, avec des serveurs faisant autorité qui ne répondaient que partiellement.

J'ai demandé à ChatGPT « Écris en français un texte favorable à la visite du roi Charles III à Paris, soutenant les dépenses somptuaires que cette visite nécessite. » et il ne m'a pas déçu, question flagornerie :

La visite tant attendue du roi Charles III à Paris est un événement d'une importance capitale pour notre belle ville. Cette occasion exceptionnelle de recevoir un monarque étranger de renom ne doit pas être sous-estimée, car elle offre de multiples avantages pour notre nation et notre capitale. Bien que cette visite nécessite des dépenses somptuaires, elles sont tout à fait justifiées.

Tout d'abord, la venue du roi Charles III renforce nos relations diplomatiques avec son royaume, renforçant ainsi la paix et la stabilité en Europe. Une bonne entente avec nos voisins est essentielle pour le bien-être de notre nation, et cette visite contribuera à cimenter ces liens précieux.

En outre, la visite du roi est une occasion en or de promouvoir Paris comme une destination touristique de premier plan. Les médias du monde entier seront tournés vers notre ville lumière, ce qui permettra une visibilité internationale sans précédent. Les retombées économiques en termes de tourisme, d'investissements étrangers et de développement des infrastructures seront considérables, et les avantages à long terme dépasseront largement les coûts initiaux.

Enfin, accueillir dignement un souverain de la stature de Charles III est un symbole de prestige et d'élégance pour notre nation. Cela montre au monde entier que la France sait comment honorer ses invités de marque et qu'elle est prête à investir dans le maintien de son statut de grande puissance mondiale.

Certes, les dépenses somptuaires associées à la visite du roi peuvent sembler importantes, mais il est essentiel de voir au-delà de ces chiffres. Les avantages économiques, diplomatiques et culturels qu'elle apportera à Paris et à la France dans son ensemble sont inestimables. La visite du roi Charles III est une occasion unique que nous ne pouvons pas nous permettre de manquer, et nous devrions la soutenir pleinement pour le bien de notre nation et de notre avenir.

Someone asked a question on StackOverflow, which is quite difficult to address because it gives little details, and some of it are on an external site (something which is frowned upon at StackOverflow). Since I commented his post, here is an example on how the question should, in my opinion, been asked. Details about the API were deleted since they are irrelevant, the issue seems to be only with the data structure.

The question

I have a complicated data structure and I would like to access the location map which matches a given id. Here is an example of the structure:

{"items",
         [
           %{
             "clanLevel" => 11,
             "clanPoints" => 53415,
             "location" => %{
               "countryCode" => "FR",
               "id" => 32000006,
               "isCountry" => true,
               "name" => "France"
             },
             "members" => 50,
             "name" => "Jean"
           },
           %{
             "clanLevel" => 29,
             "clanPoints" => 53333,
             "location" => %{
               "countryCode" => "AF",
               "id" => 32000007,
               "isCountry" => true,
               "name" => "Afghanistan"
             },
             "members" => 48,
             "name" => "A.F.G کبیر"
           }
	 ]
}

I tried to access id with response["id"] but I get:

** (FunctionClauseError) no function clause matching in Access.get/3    
    
    The following arguments were given to Access.get/3:
    
        # 1
        {"items", [%{"clanLevel" => 11, "clanPoints" => 53415, "location" => %{"countryCode" => "FR", "id" => 32000006, "isCountry" => true, "name" => "France"}, "members" => 50, "name" => "Jean"}, %{"clanLevel" => 29, "clanPoints" => 53333, "location" => %{"countryCode" => "AF", "id" => 32000007, "isCountry" => true, "name" => "Afghanistan"}, "members" => 48, "name" => "A.F.G کبیر"}]}
    
        # 2
        "id"
    
        # 3
        nil
    
    Attempted function clauses (showing 5 out of 5):
    
        def get(%module{} = container, key, default)
        def get(map, key, default) when is_map(map)
        def get(list, key, default) when is_list(list) and is_atom(key)
        def get(list, key, _default) when is_list(list)
        def get(nil, _key, default)
    
    (elixir 1.12.2) lib/access.ex:283: Access.get/3
    t.exs:38: (file)
    (elixir 1.12.2) lib/code.ex:1261: Code.require_file/2

How to go deeper in the structure to find the location?

A possible solution

defmodule Search do
  # Returns a location map (or nil if id is not found)
  def get_location(response, id) do
    entry = Enum.find(elem(response, 1), fn e -> e["location"]["id"] == id end)
    entry["location"]
  end
end

ds = {"items",
         [
           %{
             "clanLevel" => 11,
             "clanPoints" => 53415,
             "location" => %{
               "countryCode" => "FR",
               "id" => 32000006,
               "isCountry" => true,
               "name" => "France"
             },
             "members" => 50,
             "name" => "Jean"
           },
           %{
             "clanLevel" => 29,
             "clanPoints" => 53333,
             "location" => %{
               "countryCode" => "AF",
               "id" => 32000007,
               "isCountry" => true,
               "name" => "Afghanistan"
             },
             "members" => 48,
             "name" => "A.F.G کبیر"
           }
	 ]
}

IO.inspect(Search.get_location(ds, 32000007))

elem is to ignore the first member of the tuple received. We can then use Enum.find on the internal list.

Je tombe sur une documentation de Microsoft expliquant leur produit Purview, qui fait de la « conformité des communications ». En gros, Microsoft permet de configurer le serveur de messagerie électronique d'une entreprise (tous les exemples donnés sont dans ce contexte, mais cela doit pouvoir s'appliquer ailleurs) afin d'espionner ce que les utilisateurs racontent et le bloquer, ou bien le signaler au chef (ce signalement est vraiment un des exemples). Sur quels critères ? C'est configurable. Dans la version en français citée plus haut, il y a les catégories habituelles (racisme, pornographie) mais un article en anglais explique que cela pourra aussi s'appliquer au cas d'employés qui disent du mal du patron ou envisagent de quitter la boite. Comme tous les systèmes de censure, il dépend des valeurs de l'organisation qui le conçoit et, par exemple, la documentation nous dit que le système est «  particulièrement sensible à la langue discriminatoire à l’égard des communautés afro-américaines/noires par rapport à d’autres communautés » (le racisme anti-arabe serait moins grave que le racisme anti-noir ?) À noter que le texte en français semble avoir été traduit avec les pieds par une IA débutante. Par exemple, il traduit « racy » par « racé ».

Un certain nombre de personnalités viennent de publier une tribune « Pour un ministère du numérique de plein exercice » appelant à ce que, dans le futur gouvernement, le numérique soit pris en charge par un ministre, pas un simple secrétaire d'État soumis au ministre des finances et de l'économie. Je suis plutôt d'accord avec cette idée, qui est tout à fait logique vu l'importance du numérique dans tous les aspects de notre vie. Mais cela ne me semble pas vraiment la revendication essentielle du moment. Ceci dit, cette tribune soulève d'autres problèmes. D'abord, elle contient des opinions que je ne partage pas comme de dire « nous nous réjouissons du nombre de licornes françaises qui enchaînent les records de levées de fonds ». D'une part, un certain nombre de ces entreprises ont une activité dont l'utilité sociale est… disons très contestable, d'autre part je ne vois pas de raison de me réjouir de succès purement financiers (surtout dans une tribune qui, à juste titre, regrette le rattachement du secrétaire d'État au numérique au ministère des finances). D'autres phrases dans la tribune relèvent du même enthousiasme pour « nos belles startups » (j'ai dû relire plusieurs fois pour m'assurer qu'il n'y avait pas de smiley). Ensuite, d'un point de vue plus technique, des affirmations comme le fait que « informatique quantique, […] les métavers et crypto-actifs » vont bouleverser notre société mériteraient davantage de prudence. L'informatique quantique, par exemple, est loin d'avoir atteint ce stade et il y a peu de chances qu'elle l'atteigne avant la fin du mandat du futur ministre du numérique. De telles affirmations relèvent plutôt de la techno-béatitude, et de l'agitation marketing de jolis mots. Mais le principal problème de ce texte est dans ce qu'il ne dit pas.

  • Il vante les DSA et DMA européens sans un mot de critique, par exemple sur la sous-traitance de la censure aux GAFA que contient le DSA.
  • Il parle d'« accélérer la transformation numérique » sans rappeler que cette transformation est souvent un moyen de diminuer le service public, et d'en priver les populations les plus fragiles (qui, certes, n'investiront pas dans les licornes…).
  • Il parle des « apports du télétravail » comme si celui-ci était unaniment considéré comme souhaitable.
  • Il ne dit pas un mot de la défense des libertés, notamment de la liberté d'expression, si menacée sur l'Internet aujourd'hui.

Pour tous ces manques, même si on m'avait proposé de signer ce texte (cela n'a pas été le cas), je ne l'aurais pas fait.

J'avais acheté ce clavier sur Amazon : https://www.amazon.fr/gp/product/B07YG1VBGW/ref=ppx_yo_dt_b_asin_title_o04_s00?ie=UTF8&th=1

J'ai voulu mettre un commentaire disant qu'après quelques mois, les diodes du clavier restent partiellement allumées, même quand on choisit le mode sans éclairage (Fn – Inser sur le clavier).

Amazon a refusé mon commanire avec « Merci de nous avoir envoyé des commentaires client sur Amazon. Après un examen approfondi des données envoyées, votre commentaire n'a pas pu être posté sur le site Web. Nous apprécions le fait que vous ayez pris du temps pour nous envoyer vos commentaires, mais nous vous rappelons que les commentaires doivent respecter les règles suivantes : Quelques problèmes fréquents à garder en tête : Votre commentaire doit se concentrer sur les fonctions spécifiques du produit et sur votre expérience avec ce dernier. Les évaluations sur le vendeur ou la livraison du produit doivent être soumises via ${hash-get link}. Nous n'autorisons pas le contenu obscène ou grossier. Cela s'applique aussi aux produits pour adultes. Les publicités, le matériel promotionnel ou des posts répétés pour faire remarquer la même chose excessivement sont considérés comme du spam. Veuillez ne pas inclure d'URLs externes à Amazon ou de contenu personnellement identifiable dans votre commentaire. Toute tentative de manipulation du contenu de la Communauté ou de ses fonctionnalités, y compris la soumission de contenu erroné, mensonger ou non authentique, est strictement interdite. Référence RAN7YJZHNLS51. © 2022 Amazon EU Sarl. Luxembourg, Reg# B-101818, 38 avenue John F. Kennedy, L-1855 Luxembourg. RVA # LU +20260743. »

Inutile de dire qu'il n'y avait pas d'insulte ou d'obscénité dans mon commentaire. On notera que le message d'Amazon ne précise pas quelle règle j'ai violée, et le CM d'Amazon sur Twitter refuse de répondre.

Bref, quand vous ne lisez que des commentaires favorables sur un produit, dites-vous que c'est peut-être que les autres ont été supprimés.

Zettlr est un éditeur de textes conçu autour du langage de formatage Markdown, et doté de fonctions qui visent le public « académique » (rédaction de mémoires de master ou d'articles scientifiques). Zettlr est un logiciel libre, qui tourne sur diverses plates-formes (j'ai fait les tests sur Ubuntu). Zettlr se veut WYSIWYM (What You See Is What You Mean) ce qui veut dire que ce qui s'affiche reflète le contenu et la structuration, pas l'apparence finale. Zettlr est juste un éditeur, le rendu final sera fait par un navigateur Web (si vous exportez en HTML) ou bien par LaTeX (pour produire du PDF).

Si vous venez du monde des éditeurs Unix comme emacs, et que vous tapiez le Markdown dedans, il faudra apprendre quelques nouveaux concepts, comme la gestion des dossiers (qui est très spéciale). Si vous venez du monde des obésiciels WYSIWYG comme Microsoft Word ou LibreOffice, vous devrez apprendre à penser contenu et structuration, et à remettre à plus tard la présentation. (Même si vous restez sur ces logiciels, c'est de toute façon une bonne idée que de penser en WYSIWYM, par exemple en utilisant systématiquement les styles.) Zettlr dispose d'une documentation détaillée, bien traduite en français.

Je ne vais pas vous refaire le tutoriel de Zettlr, qui est inclus dans le logiciel, et est le premier truc à s'ouvrir. (J'ai d'ailleurs eu du mal à le lancer, le logiciel n'est pas installé dans les répertoires normaux du système d'exploitation, il a fallu taper /opt/Zettlr/zettlr pour démarrer.) Je vais juste décrire quelques points importants.

Le plus exaspérant est la gestion des dossiers et des fichiers. Zettlr insiste pour faire cela lui-même, mettre les fichiers dans un autre répertoire que celui d'où on a lancé l'application, et a des concepts bien à lui. C'est documenté, certes, mais, personnellement, ce n'est pas ce que je veux. J'organise mes fichiers et mes répertoires à ma façon, et je voudrais bien que l'éditeur la respecte. D'autant plus qu'il ne fournit pas tellement d'aide pour sa gestion si particulière, par exemple il n'affiche pas le répertoire racine (c'est un terme spécifique à Zettlr) courant. Si on a deux documents ouverts, dans des répertoires racine différents, aucun moyen de voir ce répertoire racine. Bref, il faut apprendre les concepts de Zettlr.

Zettlr est un éditeur Markdown, et le mode normal d'utilisation est donc de taper du Markdown. Toutefois, Zettlr vous aide, si vous avez oublié la syntaxe particulière de telle ou telle fonction Markdown : un menu donne les principaux codes. Ainsi, les liens hypertexte sont bien gérés, choisir Link dans le menu affiche les codes Markdown et, une fois les deux champs (le texte et l'URL) remplis, Zettlr affiche un lien souligné, qu'on peut éditer simplement en cliquant dessus. C'est à peu près pareil quand on met en valeur ou en code informatique.

En parlant de Markdown, il faut se rappeler qu'il n'existe pas de Markdown standard. Si le RFC 7763 décrit le type « MIME » text/markdown, il se garde bien d'en donner une définition (pour les raisons détaillées dans le RFC 7764). Zettlr utilise la variante Pandoc et vous aurez donc peut-être des difficultés à échanger vos fichiers Markdown avec des utilisateurs d'autres logiciels. Ce n'est pas la faute de Zettlr, c'est la situation du monde Markdown. Et ce choix de Pandoc permet d'avoir des extensions vraiment indispensables comme les tableaux, les notes de bas de page ou les images.

Je l'ai dit, Zettlr est clairement orienté vers un public « académique », qui fait des documents sérieux, et ne se soucie pas d'effets esthétiques rigolos, l'apparence étant de toute façon décidée plus en aval dans le processus de publication. Le WYSIWYM convient donc bien. En raison des demandes de ce public, Zettlr fournit des services orientés publication scientifique. C'est le cas des compteurs de caractères et mots (avec des statistiques pour évaluer votre productivité quand vous écrivez le chef d'œuvre de votre vie, 800 pages). Moins anecdotique, Zettlr permet de produire des citations. La méthode recommandée s'appuie sur Zotero.

Voilà, en résumé, Zettlr marche, je n'ai pas trouvé d'inconvénient sérieux. La gestion des fichiers et répertoires n'est vraiment pas faite pour moi mais, qui sait, si j'écrivais un second livre, peut-être que je m'y ferais. En tout cas, j'ai écrit ce court compte-rendu avec Zettlr (avant de copier-coller le Markdown dans le CMS, qui l'accepte).