Des geekeries, de la MAO, de tout et de rien…
Je suis
Charlie

Nouvelles du blog

Icône auteur nah, Icône canondrier 08 mars 2020, Icône commentaire
Mots clés Icône catégorie blog, PluXml
Classé dans Icône catégorie Blog

Ça fait un moment que j'hésitais à lâcher PluXML. Non pas parce que j'aime pas ce CMS (bien au contraire), mais à cause de certains détails agaçant.

Je l'utilise depuis 2010 (quasiment une décennie), mais depuis, ma procédure de rédaction des articles a pas mal évolué.

Mes derniers articles sont rédigés en ReStructuredText (rst), un langage de balisage léger, dans le même style que Markdown ou Textile, via ReText, suivi d'un export au format html, et enfin copier-coller dans l'éditeur html de PluXML.

Cela fait donc plusieurs étapes entre la rédaction et l'aperçu dans le blog, avec la répétition de toute la procédure si je veux éditer ou corriger un truc.

À noter : j'utilise la même procédure pour nv, qui tourne aussi sous PluXML.

Par exemple, la dernière fiction du mercredi a été rédigée en reStructuredText, à partir d'une idée tenant sur une ligne, puis exportée en html, etc.

https://nouvelles.chibi-nah.fr/controle-z-d

Par contre, pour mes pages de docs, j'utilise une procédure totalement différente. Là, je passe par Sphinx-doc, git, et quelques hooks.

Pour la rédaction, j'utilise aussi bien ReText, Geany ou Visual Studio Code (pas de troll, merci).

Je génère les pages en local pour contrôler le contenu. Le suivi des révisions étant géré par git, cela signifie donc que je peux aussi bien bosser avec Ryoko comme avec Yue. Et pour la publication ? Un simple git push, et c'est tout. Les pages sont générées sur le serveur puis copiés vers le répertoire de destination. Pas de copie via ftp ou scp. Pas de prise de tête.

Un processus totalement différent par rapport au blog.

Mon occupation actuelle est de reprendre tous les articles du blog (un peu moins d'une centaine), que j'ai converti en Markdown, via un script python, dont David Revoy a parlé récemment.

https://www.davidrevoy.com/moving-to-markdown

https://github.com/KillianKemps/Pluxml-to-Markdown

Cependant, le contenu du blog étant essentiellement statique (les commentaires étant modérés, voire carrément désactivés), l'intérêt d'un CMS générant dynamiquement les pages est discutable. Je pense m'orienter vers un générateur statique. Pas Sphinx-doc, qui ne correspond pas à mes prérequis pour un blog (pour de la documentation, c'est juste génial). Plutôt Pelican (que je teste en ce moment).

Cela nécessite pas mal de travail. Notamment insérer toutes les métadonnées dans chacune des pages (date de publication, auteur, tags). Et chose importante : essayer de garder les mêmes URL que celles générées avec PluXML.

La migration du blog s'effectuera dans les prochaines semaines, une fois les articles corrigés et le thème mis en place.

Visual Studio, clavier TypeMatrix™ bépo et underscore

Icône auteur nah, Icône canondrier 30 août 2019, Icône commentaire
Mots clés Icône catégorie blog, vrac, Windows, bépo
Classé dans Icône catégorie Blog

Ou comment se prendre la tête pour pouvoir taper le caractère _


Lors de la migration vers les nouvelles versions des outils en environnement professionnel, on peut rencontrer des problèmes complètement inattendus, et non documentés. D’autant plus s’il s’agit de produits Microsoft, où le support est absolument incapable de trouver l’origine du problème. Je ne parlerai pas des “experts” certifiés MSVP¹, pour qui le problème vient du clavier.

Là où c'est amusant, c’est que la touche fonctionne dans le champ de recherche mais pas dans l'éditeur.

J’avais rencontré ce problème avec Microsoft SQL Server Management Studio pour SQL Server 2017 (basé sur vs2015), et mon contournement était de taper l’underscore dans le bloc-note, puis de faire un copier-coller à chaque fois que j’en avais besoin, c’est-à-dire en permanence.

L’utilisant nettement moins souvent dans Visual Studio et ayant également Visual Studio Code (j’utilise plus ce dernier que la solution ultra lourde, d’ailleurs, et la touche underscore fonctionne, elle, sur VS Code), et les recherches de la solution s'avérant infructueuses, j’allais abandonner, jusqu’au moment, où au détour d’un message sur Stack Overflow, quelqu’un en Allemagne semblait avoir un problème similaire, mais avec un autre caractère ; sauf que là, une piste était donnée.


Les raccourcis claviers


Certes, très utiles (enlevez-moi mon Ctrl + B et je pète un câble), mais parfois problématiques.

Après quelques tests stupides que je ne détaillerai pas, il s’avère que VS (depuis 2012 ? 2015 ?) détermine d’abord la séquence de touches, exécute le raccourci-clavier si celui-ci correspond, sinon insère le caractère pouvant correspondre à la même séquence.

Sur un TypeMatrix™ bépo, le caractère underscore _ s'obtient via Alt gr + espace. Sauf que Alt gr sous Windows, c’est un raccourci pour Ctrl + Alt. Donc, le caractère underscore _ correspond donc à Ctrl + Alt + Espace. Vous voyez venir la blague ?

Cette séquence de touches est attribuée à un raccourci clavier dans le mode éditeur. Et donc, prend le pas sur l’insertion du caractère tant désiré. Les raccourcis clavier ne s’appliquant pas dans le champ de recherche, cela explique pourquoi le _ peut être saisi sans aucun problème.

On a maintenant l’explication, du coup, corrigeons le problème.

Les captures d’écrans proviennent de Visual Studio 2017, mais c’est la même démarche dans MS SQL Server Management Studio.

Aller dans le menu « Outils », puis cliquer sur « Options… ».

Dans la fenêtre, cliquer sur « Clavier » sur la gauche.

La liste des raccourcis clavier s’affiche. Comme celle-ci est trop longue, on ne va pas les vérifier un par un.

Cliquer dans le champ texte sous « Appuyer sur les touches de raccourci : » puis appuyer les touches Alt gr + Espace. Cela insère bien le raccourci clavier Ctrl + Alt + Espace, ici en 1 sur la capture d’écran.

Le nom de la commande utilisant ce raccourci clavier apparaît alors sous « Raccourci actuellement utilisé par : », ici en 2 sur la capture d’écran.

Cliquer dans le champ texte sous « Afficher les commandes contenant : ».

Taper ensuite le nom de la commande (même partiellement) pour filtrer l’affichage.

Cliquer ensuite sur le nom de la commande, ici, la sélection en bleu sur la capture d’écran.

Cliquer sur le bouton « Supprimer », ici en 1 sur la capture d’écran.

Vérifier que le raccourci est bien supprimé, ici en 2 sur la capture d’écran.

Cliquer sur « OK », ici en 3 sur la capture d’écran pour valider et fermer la fenêtre.

Essayez de taper le caractère underscore. Cela devrait fonctionner.

Normalement, il y a un seul raccourci clavier avec cette séquence de touches. Si la touche n’est toujours pas reconnue, recommencer les manipulations pour trouver les autres commandes utilisant également cette séquence de touches.




¹ : Il suffit d’apprendre par cœur les annales et de réciter le tout par cœur² pour avoir la certification. Des gamins de 12 ans sont tout à fait capables (et certain·e·s l’ont obtenu).
² : La raison pour laquelle je n’ai pas ces certifications. Celles et ceux me connaissant IRL savent pourquoi.

USB Gadget - ethernet à travers USB

Icône auteur nah, Icône canondrier 16 février 2019, Icône commentaire
Mots clés Icône catégorie linux raspberry pi
Classé dans Icône catégorie Blog, Asrall, Linux

Cet article est aussi présent dans mes pages de documentation.
https://docs.nah.re/raspberry_pi/usb-otg-g-ether.html


Avant-propos

Ceci est un petit tutoriel en français, sur l'intégration de g_ether sur un Raspberry PI Zero.

Un minimum de connaissances de GNU/Linux et de la ligne de commande est nécessaire.

Photo d'un Raspberry PI Zero, dans son boîter blanc.

Un Raspberry PI Zero.

Installation de Raspbian

Premier détail : je n'ai pas copié une raspbian lite ou full sur la microSD, parce qu'on n'a pas du tout la même définition de léger.

Du coup, je suis parti sur raspberrypi-ua-netinst https://github.com/FooDeas/raspberrypi-ua-netinst

L'avantage d'une installation en unattended + netinst, c'est que l'on définit les paramètres dans un fichier de configuration, on branche un câble réseau (via un adaptateur micro USB OTG + une carte ethernet USB), on démarre et on laisse tourner.

Une fois l'installation terminée, je me suis connecté sur le Raspberry PI via SSH (toujours via le réseau).

Intégration de g_ether

Maintenant, on peut s'attaquer à l'intégration du gadget USB Ethernet (g_ether).

Se connecter avec le compte root (peu importe la méthode on va modifier des fichiers et installer des trucs)

Ouvrir /boot/config.txt. Ajouter à la fin du fichier, après [all]

#USB G_Ethernet
dtoverlay=dwc2

Si vous lisez des vidéos avec omxplayer et que celui-ci râle avec le message

COMXAudio::Decode timeout

Ajoutez dans le même fichier (/boot/config.txt)

gpu_mem=128

Enregistrer et fermer.

Ouvrir /boot/cmdline.txt

ajoutez à la fin de la commande.

modules-load=dwc2,g_ether

N'insérez surtout pas de saut de ligne.

La commande pourrait ressembler à ça :

dwc_otg.lpm_enable=0 console=serial0,115200 console=tty3 elevator=deadline fsck.repair=yes root=/dev/mmcblk0p2 rootfstype=ext4 rootwait modules-load=dwc2,g_ether quiet logo.nologo loglevel=3 vt.global_cursor_default=0

Ici, j'ai configuré pour que tout soit silencieux, avec aucun message sur la sortie vidéo. Ne copiez pas bêtement la commande sans savoir à quoi correspond quiet ou vt.global_cursor_default=0. Ce n'est pas le but de ce tuto rapide, je ne détaillerai pas à quoi ça correspond.

Enregistrer et fermer le fichier.

Configuration du réseau

Pour éviter de se prendre la tête avec l'attribution de l'adresse IP une fois la carte branchée sur un PC (ou MAC) en USB, j'installe un serveur DHCP qui fera cette tâche automatiquement.

Installer le paquet isc-dhcp-server

apt install isc-dhcp-server

Activer le service (activer, ne pas démarrer tout de suite) avec systemd

systemctl enable isc-dhcp-server

On configurera le serveur DHCP juste après. On va d'abord configurer le réseau pour g_ether.

Ouvrir le fichier /etc/network/interfaces. Y ajouter :

# Ethernet over USB
allow-hotplug usb0
iface usb0 inet static
address 10.10.10.10
netmask 255.255.255.0
broadcast 10.10.10.255
gateway 10.10.10.10

Ici, j'ajoute une interface usb0, qui a une adresse IP 10.10.10.10. Cette IPv4 étant dans les plages réservées pour un usage privé, cela ne posera pas de problème ni de conflit. usb0 sera créé lorsque le raspberry pi sera branché en USB.

Enregistrer et fermer.

Ouvrir maintenant /etc/dhcp/dhcpcd.conf

Supprimer tout le contenu et insérer :

default-lease-time 600;
max-lease-time 7200;
ddns-update-style none;
authoritative;
log-facility local7;

subnet 10.10.10.0 netmask 255.255.255.0 {
range 10.10.10.11 10.10.10.20;
option routers 10.10.10.10;
option broadcast-address 10.10.10.255;
default-lease-time 600;
max-lease-time 7200;
option domain-name "local";
}

Les cinq premières lignes sont pour le paramétrage du serveur dhcp, les huit lignes en bas correspondent à la configuration du réseau.

Je définis le réseau comme étant sur 10.10.10.0, s'étendant jusqu'à 10.10.10.255 via le masque réseau.

Je définis ensuite la plage allant de 10.10.10.11 à 10.10.10.20 (ce qui me sera suffisant).

J'indique que le routage se fera sur 10.10.10.10, qui correspond à l'adresse du Raspberry PI (que j'ai défini dans /etc/network/interfaces).

Le reste n'est pas vraiment important (durée des sessions dhcp, nom de domaine local).

Enregistrer et fermer.

Ouvrir maintenant /etc/default/isc-dhcp-server

Décommenter les lignes

DHCPDv4_CONF=/etc/dhcp/dhcpd.conf
DHCPDv4_PID=/var/run/dhcpd.pid

Ajouter usb0 dans INTERFACESv4, comme ceci :

INTERFACESv4="usb0"

Enregistrer et fermer.

Tests

Éteindre le Raspberry PI

sudo poweroff

Tout débrancher, puis brancher un câble micro USB (data, pas charge seule) sur le port "USB" du Raspberry (pas sur "pwr IN"), brancher l'autre côté du câble USB sur un PC.

Photo d'un Raspberry PI Zero avec un câble Micro USD branché sur le port USB.

Branchement du câble micro USB.

Après quelques dizaines de secondes, une interface réseau devrait apparaître (sous Windows, il y ait de fortes chances que le pilote rdnis ne s'installe pas automatiquement, il faudra l'installer manuellement via ajouter un pilote, choisir le pilote, type carte réseau, fabricant Microsoft, sélectionner rdnis ou un truc s'en approchant, répondre oui à l'avertissement comme quoi le pilote n'est peut être pas compatible).

Vérifiez si le Raspberry PI est bien reconnu comme une carte réseau.

Sous Windows

ipconfig /all

Sous Mac OS X et autres BSD

ifconfig

Sous GNU/Linux

ip a

Normalement, quelques lignes indiquant

inet 10.10.10.17/24 brd 10.10.10.255 scope global dynamic noprefixroute enp0s19f2u1

ou

inet 10.10.10.17  netmask 255.255.255.0  broadcast 10.10.10.255

ou un truc indiquant qu'il y a une IP commençant par 10.10.10 devrait s'afficher.

Si c'est le cas, taper

ping 10.10.10.10

S'il y a une réponse, cela signifie que cela fonctionne.

PING 10.10.10.10 (10.10.10.10) 56(84) bytes of data.
64 bytes from 10.10.10.10: icmp_seq=1 ttl=64 time=0.504 ms
64 bytes from 10.10.10.10: icmp_seq=2 ttl=64 time=0.543 ms
64 bytes from 10.10.10.10: icmp_seq=3 ttl=64 time=0.539 ms
64 bytes from 10.10.10.10: icmp_seq=4 ttl=64 time=0.542 ms
^C
--- 10.10.10.10 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 111ms
rtt min/avg/max/mdev = 0.504/0.532/0.543/0.016 ms

Il n'y a plus qu'à se connecter dessus.

ssh pi@10.10.10.10

Si vous avez pu vous connecter via ssh à travers la connection USB, félicitations.

Conclusion

Ce n'est pas très compliqué à mettre en place, le problème étant de réunir les différentes informations éparpillées un peu partout sur le net, et souvent en anglais (ce qui ne me pose pas de problème, mais ce n'est pas le cas de tout le monde).

Remerciements

Un gros merci à Albert, pour m'avoir prêté son Raspberry PI Zero.

Ticket GAMOT

Icône auteur nah, Icône canondrier 14 février 2019, Icône commentaire
Mots clés Icône catégorie aucun
Classé dans Icône catégorie Internet

Un petit rappel des définitions.

  • GAMOT : Guichet Accueil Maintenance Opérateur Tiers.
  • TDP : Test De Position. Vérification raccordement plot ASDL, paire, transport.
  • ABS : test requis dans le logement mais Client ABSent.
  • DIA : demande de DIAgnostic de la ligne.
  • ERR : ERReur. GAMOT ouvert mais identifiant de ligne invalide.
  • IPC : Intervention sur le Point de Concentration.
  • RET : RÉTablissement de la ligne.
  • STT : Signalisation Transmise à Tort. Aucun défaut.
  • FIA : FIAbilisation de la ligne.

Bonne année 2019

Icône auteur nah, Icône canondrier 01 janvier 2019, Icône commentaire
Mots clés Icône catégorie blog
Classé dans Icône catégorie Blog

Tous mes meilleurs vœux pour la nouvelle année.

Du coup, j'en profite pour faire un petit bilan de l'année 2018.



Dans les réussites :

  • Garder une instance Mastodon à peu près à jour ;

  • Déplacer l'instance Mastodon sur un nouveau serveur sans perdre de données ;

  • Mettre en place un site où je peux écrire de la documentation, indépendamment du blog ( https://docs.nah.re ) ;

  • Continuer d'expérimenter avec ffmpeg/mpv ;

  • Lâcher Android et passer sous SailfishOS pour mon téléphone principal.



Ce qui était prévu mais qui n'a pas été fait :

  • Écrire plus d'articles sur le blog ;

  • Écrire quelques nouveaux textes (en plus des mercredi fiction) ;

  • Finir la création d'un nouveau thème pour le blog ;

  • Faire du sport (le trajet pour aller au bureau en trotinette, ça ne compte pas).



Ce qui aurait pu être mieux (mais mon temps libre n'est pas extensible)

  • Timer plus de karaokés (Karaoké Mugen) ;

  • Participer plus à la vie associative (Lorraine Data Network) ;



Du coup, ce que je pense prévoir pour 2019 :

  • Vider la liste des karaokés que je dois faire/terminer ;

  • Avancer sur le projet LYAN (depuis 2009, il serait temps…) ;

  • Écrire un client Karaoké Mugen pour SailfishOS. Ça serait un excellent exercice pour me remettre à Qt.

  • Continuer d'écrire de la documentation sur ffmpeg, avec des exemples pertinents.


Ça me semble relativement réaliste. Je ne vais pas prévoir une liste pas possible et qui ne sera pas tenue/suivie.

page 1 sur 20 suivante »