Limitation des requêtes externes

Je me plains souvent de toutes ces requêtes externes qu’effectuent les sites que j’ai l’occasion de consulter. J’utilise bien entendu un certain nombre d’extensions pour tenter de limiter au maximum les requêtes non indispensables à l’affichage des informations qui m’intéresse sur une page web.

Pour être cohérent, j’avais donc commencé à faire la chasse aux requêtes externes sur Unicoda, en commençant par arrêter de récupérer la police d’écriture sur les serveurs de Google et en décidant de modifier la façon d’intégrer une vidéo pour proposer un lien plutôt que de charger tous les scripts nécessaires à la lecture par défaut.

Il restait sur Unicoda des requêtes vers Gravatar, c’est ce que l’on peut reprocher à WordPress: intégrer des services externes par défaut, sans proposer la possibilité de désactiver la fonctionnalité. Pour éviter dans la mesure du possible les requêtes externes vers Gravatar, j’ai donc ajouté l’extension Harrys Gravatar Cache, afin de disposer d’une copie locale des images pour une durée de 4 semaines. En théorie, plus aucune requêtes vers Gravatar, sauf pour renouveler le cache périodiquement, ce que font d’ailleurs très bien les robots parcourant le web. Petit point négatif, l’extension ne semble pas fonctionner pour les images présentes dans l’interface d’administration…

La prochaine étape pour Unicoda consistera certainement en la mise en place d’une redirection du flux HTTP vers HTTPS. Cela fait plusieurs années que j’ai mis en place le flux HTTPS, l’initiative Let’s Encrypt ayant grandement facilité tout le processus de mise en place et de gestion. Le premier problème que j’identifie pour le moment se situe du côté du header Strict-Transport-Security et son paramètre max-age, qui pourrait poser problème si le flux HTTPS devenait inopérant (faible probabilité, mais pas impossible. En cas de besoin, il semble possible de désactiver la fonctionnalité en indiquant la valeur 0 pour max-age). Le second concerne l’impact de la redirection sur les flux RSS. Et bien sûr, en parallèle, je continue de réfléchir à l’automatisation de la sauvegarde du site.

[i3] Gestion du volume au clavier

Mon clavier actuel dispose d’une molette permettant de régler le volume. Après plusieurs essais infructueux visant à faire varier le volume via la molette dans i3, j’ai repris dernièrement le problème du début, pour enfin arriver à une configuration fonctionnelle.

Je me suis donc replongé dans la documentation d’i3 qui indique d’utiliser xev pour capturer les informations sur les touches que l’on souhaite configurer. Installation donc avec pacman sous Arch Linux : pacman -S xorg-xev. Il est ensuite possible de démarrer le programme via la commande xev. Si je fais bouger la molette vers le bas, j’obtiens les événements suivants dans xev:

MappingNotify event, serial 33, synthetic NO, window 0x0,
    request MappingKeyboard, first_keycode 8, count 248

KeyPress event, serial 33, synthetic NO, window 0x2a00001,
    root 0x2a4, subw 0x0, time 14668027, (482,-109), root:(486,1198),
    state 0x10, keycode 122 (keysym 0x1008ff11, XF86AudioLowerVolume), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyRelease event, serial 34, synthetic NO, window 0x2a00001,
    root 0x2a4, subw 0x0, time 14668030, (482,-109), root:(486,1198),
    state 0x10, keycode 122 (keysym 0x1008ff11, XF86AudioLowerVolume), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

Tout ceci n’est pas très lisible ici, mais nous pouvons tout de même isoler les informations intéressantes en particulier keycode 122 et XF86AudioLowerVolume. Pour ma part, je choisis d’utiliser le keysysm XF86AudioLowerVolume, et utiliserai donc bindsym, pour utiliser le keycode, on utilisera bindcode (non testé). En résumé, pour diminuer le volume XF86AudioLowerVolume, pour l’augmenter XF86AudioRaiseVolume et pour couper le son XF86AudioMute.

Il faut maintenant s’intéresser à la commande à effectuer dans les différents cas. Pour le contrôle du volume, je décide de passer par pactl, abréviation de PulseAudio Control. La commande est de la forme :

pactl set-sink-volume SINK VOLUME

Le paramètre SINK correspond à la sortie sonore que l’on souhaite contrôler. Pour être en mesure de déterminer son numéro, j’utilise la commande pactl list. Parmi les informations renvoyées, il faut chercher les lignes suivantes Carte #0, Carte #1, … Dans mon cas, la carte 0 indique « HDMI Audio Controller », il s’agit donc de la sortie sonore du port HDMI de mon ordinateur. Pour la carte 1, c’est déjà mieux puisqu’il est affiché « Audio interne ». Pour des informations plus concises, on utilise pactl list sinks short et on sélectionne la carte portant la mention RUNNING.

Petit test rapide, casque sur les oreilles, fond musical, j’exécute la commande suivante dans mon terminal : pactl set-sink-volume 1 -5%. Bingo ! Le volume diminue. J’en profite tout de suite pour tester la commande permettant de couper le son : pactl set-sink-mute 1 toggle. Cela fonctionne. J’ouvre donc le fichier de configuration d’i3 pour y ajouter les lignes suivantes :

bindsym XF86AudioLowerVolume exec pactl set-sink-volume 1 -5%
bindsym XF86AudioRaiseVolume exec pactl set-sink-volume 1 +5%
bindsym XF86AudioMute exec pactl set-sink-mute 1 toggle

Rechargement de la configuration.

Trois lignes de configuration qui me permettent désormais de contrôler le volume directement au niveau de mon clavier, sans avoir à le modifier dans l’application diffusant le flux audio. Pour simplifier la mise en place d’une telle configuration, on essayera de toujours procéder en trois étapes. En premier lieu, validation de la commande que l’on souhaite appeler, puis test de la prise en compte de la touche sur une commande fonctionnelle connue, et enfin réunion des étapes précédentes pour configuration finale. L’essentiel étant surtout de ne pas se hâter (« Ne soyez pas si hâtif, maître Meriadoc ! ») pour éviter de se retrouver, après configuration, sans effet visible ou audible et, de ne pas pouvoir alors, isoler immédiatement la source du problème.

Comment fermer une fenêtre dans Unity3D ?

Aujourd’hui nous allons essayer de fermer une fenêtre ouverte dans Unity3D. Pour cela il faut une fenêtre ouverte (panel) dans un Canvas.

Problématique :

  • Nous ne voulons pas fermer cette fenêtre (InventoryWindows) d’une quelconque manière mais en appuyant simplement en dehors de celle-ci.
  • Il faut que la fermeture de la fenêtre puisse s’exécuter aussi sur mobile (soit sans curseur de souris).

Dans un premier temps je n’ai pas pensé à adapter cette fonctionnalité à l’utilisation d’un écran tactile. Or, mon premier réflexe a été d’ajouter un contrôle sur un booléen (mouseIsOut), si mouseIsOut vrai alors fermer la fenêtre, sinon ne rien faire. J’ai mis le tout dans la fonction LateUpdate() de la classe définissant la gestion de ma fenêtre. Quand la souris sors du Panel (Event Trigger –  PointerOut) alors on met mouseIsOut à vrai. Au contraire, à l’ouverture du panel ou l’entrée de la souris dans le panel on met mouseIsOut à faux.

Avec cette méthode qui marche très bien sur PC on rencontre bien vite un problème quand on passe sur un écran tactile. En effet, l’écran tactile ne considère pas de curseur tant que notre doit n’est pas en contact avec la surface. On ne peut donc pas détecter la sortie du curseur du Panel à l’aide de l’Event Trigger en mode PointerExit… (Sauf si l’utilisateur déplace son doigt sans le lever de l’intérieur à l’extérieur du panel.

Recherche d’une autre solution :

Pour palier à ce problème j’ai trouvé une solution facile à mettre en œuvre.

  • Faire d’un panel un bouton quitter géant et situé à l’arrière de notre fenêtre.

En bleu (écran + objet actif) vous pouvez voir le panel sur lequel j’ai ajouté un Event Trigger et le script permettant de mettre mouseIsOut à True si il y a détection de clic sur ce panel.

Il vous suffit alors de mettre mouseIsOut à false quand vous ouvrez la fenêtre (ici l’inventaire) et le tour est joué.

Note : vous pouvez aussi détecter si votre fenêtre est active (isActive = true) pour économiser l’utilisation d’un booléen.

[git] Retenir temporairement les infos d’authentification

Une configuration que je trouve plutôt utile, lorsque je modifie un dépôt git sur une machine où je ne souhaite pas mettre en place de clé ssh. A partir de la version 1.7.9 de janvier 2012 de Git, il est donc possible de demander la mise en cache des informations d’authentification (login, mot de passe), afin de ne pas avoir à les ressaisir en permanence.

La configuration s’effectue via la commande suivante, qui aura pour effet de conserver les infos en cache pour une durée de 15 minutes :

git config --global credential.helper cache

Si on désire augmenter la durée de cache, à une heure par exemple, on ajoute le paramètre timeout :

git config --global credential.helper "cache --timeout=3600"

Source: git-crendential-cache

Migration

Bonne nouvelle, la migration d’environnement commencée mardi 24 octobre en début de soirée s’est bien déroulée, et le visiteur averti n’aura constaté que quelques différences dans la dernière note de service. C’est une très bonne chose de faite, puisque je réalise dans la foulée un passage de Debian 7 à Debian 9. Il était temps !

Évoquons un peu le serveur: au final Unicoda reste chez OVH. Le site quitte un serveur Kimsufi pour un VPS SSD simple. Suite au changement, je crois détecter une accélération globale du chargement des pages. Par ailleurs, petite anecdote, Unicoda se rapproche de nous en étant désormais hébergé à Strasbourg.

On profite du changement pour déployer un Fail2ban plus récent et profiter de l’ajout d’un grand nombre de règle d’exclusion permettant de protéger Apache. Les robots pirates devraient donc voir leur IP bloquée plus souvent qu’auparavant.
Petit nettoyage rapide du côté de la base de données et des fichiers afin de supprimer des reliquats de plugins mal désinstallés.

Il va maintenant falloir régler une bonne fois pour toutes la question de l’automatisation de la sauvegarde, réaliser quelques tests des différents outils disponibles et déterminer le processus adéquat.