Contrôle intégré de MPD sur la Steam Deck
· ☕ 5 min de lecture

En tant que vétéran (GNU)Linux aguerri et de fan de technos libres, je me suis donné l’occasion d’expérimenter plusieurs programmes dont j’ai développé une dépendance avec certains d’eux, et avec raison. C’est le cas du programme MPD (Music Player Daemon) qui est un programme de lecture de musique roulant en mode serveur. On l’utilise donc normalement en pair avec un client comme mpdevil. Personnellement, j’utilise ncmpcpp et il y a une longue liste de clients pour MPD avec des fonctionnalités variées. Depuis que j’ai reçu ma Steam Deck, j’ai donc bien sûr installé MPD sur celle-ci afin de pouvoir contrôler avec mon téléphone (via MPDroid) la musique qui joue sur ma Steam Deck connectée à ma télé ou à mes écouteurs Bluetooth. Par contre, je n’avais pas encore de moyen de contrôler MPD par la Steam Deck directement autrement qu’en utilisant une app graphique comme mpdevil, mais c’était handicapant considérant le type de contrôle (joystick ou trackpad) à notre disposition. Parfois, on peut se trouver à utiliser la Steam Deck avec une manette bluetooth, donc on n’a pas envie d’une interface qui est prévue pour la souris, quand on n’a qu’un joystick à portée de main.


Transformer sa Steam Deck en Chromecast?
· ☕ 7 min de lecture

J’avais commandé une Steam Deck, un terminal mobile (selon la traduction de l’OQLF) basé sur Archlinux, dès le moment que j’ai appris l’existence de ce projet par Valve. Ce terminal mobile est en fait un ordinateur complet ayant comme principale fonction de fournir une plateforme de jeu portable, mais en réalité il permet une panoplie de choses qui la rend capable de surpasser la compétition.

steamdeck

Pourquoi ? Pour plusieurs raisons, mais principalement parce que je crois que c’est un appareil qui jouera un rôle central dans le cheminement de GNU/Linux vers un statut de système plus populaire chez les gens moins techniques et non initiés.


Transformateurs: composition de monades
· ☕ 13 min de lecture

Dès lors qu’on découvre les monades et leur utilité, on ne peut faire autrement que de les étudier davantage et trouver les occasions pour les utiliser. Après tout, ils sont des concepts clefs dans l’utilisation sérieuse d’un langage fonctionnel comme Haskell. Par exemple, on ne peut pas faire d’opérations d’entrée/sortie si on ne fonctionne pas dans la monade IO.

Une limitation importante prend forme très rapidement sous nos yeux: il devient difficile d’utiliser plusieurs monades ensembles car on doit forcément les développer pour passer d’une monade à l’autre. Ce faisant, on doit choisir entre les propriétés d’une monade ou l’autre et on ne peut donc pas bénéficier des différents monades en même temps. Les transformateurs de monades visent justement à régler ce problème de manière à fournir une écriture finale satisfaisante autant au niveau sémantique que pour l’organisation logique du code.


La monade Maybe
· ☕ 12 min de lecture

Dans cet article, je souhaite introduire le programmeur à la monade Maybe. Je compte le faire en utilisant le langage Haskell puisqu’il s’agit du langage fonctionnel que je maîtrise le mieux et que je le considère très expressif et accessible. Afin de démontrer les bénéfices de la monade et des concepts d’Haskell, je vais comparer ceux-ci aux méthodes usuelles du langage C++.

En une phrase, la monade Maybe peut être vue comme un design pattern de gestion des cas d’erreur ou d’exception. Je vais donc utiliser un exemple fictif et peu réaliste, mais simple, qui permet de capturer l’idée générale. Disons qu’on a une liste de contacts pour lesquels on souhaite exécuter un traitement. Cependant, on décide que, dans la région du programme où on implémente le code associé à cette liste de contact, une opération qui échoue sur un contact devrait arrêter le fil d’exécution du programme.


Calculs hypothécaires
· ☕ 12 min de lecture

Je regarde les maisons et condos depuis un certain temps déjà, histoire de sentir un peu ce que l’achat implique pour un emprunteur. J’ai pris la peine de rechercher différentes informations comme les conditions et les options pour une assurance hypothèque, les frais associés à l’habitation (charge de copropriété, taxe scolaire, etc.) ainsi que les taux d’intérêt associés à un prêt. J’ai donc voulu mettre tout cela en commun afin d’avoir un aperçu de mes paiements par mois ainsi que ce que cela engendre sur une période plus longue comme 5, 10 ou même 25 ans. J’ai ainsi eu l’occasion de faire certains calculs qui seront utiles à plusieurs pour comprendre comment les paiements hypothécaires sont calculés. En particulier, je veux exposer trois calculs clefs dans la prévision des avantages et inconvénients d’acheter une propriété versus louer un logement:


Debian: passer à «testing»
· ☕ 5 min de lecture

Debian est une des distributions de GNU/Linux les plus communes et robustes grâce à son système de publication de version structuré et méticuleux. Les versions passent par différents stades de développement appelés «branches». On peut voir ces branches comme des «versions» de Debian qui ne sont pas figées dans le temps contrairement aux publications de Debian. Par exemple, Buster est le nom de la dernière version publiée par Debian à ce jour et la branche correspondant à Debian est appelée stable. Par défaut, il s’agit de la branche avec laquelle Debian s’installe. Comme le système de paquetage inclut d’abord les paquets dans la branche unstable, puis testing et finalement stable, les versions prennent un certains temps à aboutir. Ce faisant, ceci garantie une stabilité aux utilisateurs (d’où le nom de la branche). Ceci dit, certains utilisateurs plus avancés ayant le désir d’un système plus à jour peuvent configurer leur système afin que celui-ci passe à testing. Ce processus est très commun parmi les utilisateurs avancés et comporte pratiquement très peu d’inconvénients. Pour plus d’information par rapport aux branches, voyez les différents liens ci-après:


fzf: comment optimiser son utilisation de la ligne de commande
· ☕ 12 min de lecture

fzf est un programme filtrant le flux de son entrée standard par mots clefs fournis par l’utilisateur de manière interactive. Le filtre est du type fuzzy (d’où le nom fzf pour fuzzy finder), c’est-à-dire que les termes fournis au programme sont décomposés en sous-mots afin de permettre des recherches approximatives par l’utilisateur. Par exemple, prenons l’entrée suivante:

1
2
3
toto
titi
tutu

Si l’utilisateur fournissait le terme tt, toutes les lignes seraient sélectionnées, puisque les sous-mots t et t se trouvent tous deux dans toutes les lignes. Cependant, avec le terme de recherche oo, seul la première ligne correspondrait avec le mot toto selon le même raisonnement.


Vim peut tout faire
· ☕ 14 min de lecture

Vim est un éditeur de texte et clairement le meilleur qui soit. Je ne dis pas ça sans peser mes mots. Ceci dit, il ne faut pas lui prêter une identité qu’il n’a pas. Vim n’est pas un environnement de développement intégré (EDI ou IDE en anglais) complet. Cependant, plusieurs aspects à son utilisation font sa grande force pour fournir un EDI complet à son usager:

  • un langage de touches permettant aux doigts de faire tout le travail d’édition de texte (couper, effacer, coller, réordonner, formater, etc.). En effet, dans une boîte de texte régulière (comme ce qu’on trouve dans les EDIs populaires) la modification de texte, et non la simple écriture, n’est pas chose facile. Elle demande souvent l’utilisation de la souris, donc la perte de la position des mains déjà en place pour écrire. De plus, cette approche est normalement très lente. Avec Vim, les doigts font le travail. La meilleure comparaison pour comprendre le sentiment est justement celle de l’écriture. On ne pense pas à trouver les touches pour écrire et cela se fait automatiquement. Pour la modification de texte avec Vim, c’est la même chose.
  • un langage de script (VimScript) qui lui permet une haute extensibilité;
  • une intégration de l’interface système (IS ou le shell en anglais). L’utilisation de l’IS est entièrement intégrée à travers VimScript ainsi que les différents modes de Vim (Normal, Visual, CMD, etc.). Je ne peux mettre assez l’accent sur comment ce trait de Vim est si significatif. Ce faisant, de manière totalement gratuite, un utilisateur de Vim bénéficie déjà des fonctionnalités de l’IS dans son éditeur de texte sans avoir recours à l’installation très particulière d’extension par son EDI. On dit souvent que l’IS constitue en réalité l’environnement de développement d’un utilisateur de Vim.
  • une capacité d’intégrer des greffons (plugins en anglais);
  • et une communauté de développeurs très investie dans le partage de code et d’outils qui rendent l’intégration d’outils de développement aisée et facilement personnalisable.

Le tout fait de Vim le choix idéal. Dans ce qui suit, je prends le temps de développer concrètement mon point de vue en m’attardant à des préoccupations très importantes de tout développeur, mais selon ma perspective, bien entendu. Je compte donc explorer le mode Normal de Vim, l’intégration avec l’IS plus en détail, l’intégration de GDB (depuis Vim 8) et les différents greffons permettant une sensation d’EDI complet.


Comment bien assurer la vie privée du clavardage?
· ☕ 8 min de lecture

Lorsqu’on utilise les différents outils de communications habituels de nos jours, il est commun de supposer la garantie de sa vie privée. L’utilisateur moyen ne se pose aucune question lorsqu’il se connecte à des services comme Facebook, Twitter ou Skype. Ou encore, on se rassure tout de suite à l’idée de voir des symboles de “sécurité” comme le suivant.

https

Tous les services susmentionnés sont effectivement munis de protections, mais contre et pour qui? Et sous quelle(s) hypothèse(s)? Il s’avère que les mesures de sécurité des logiciels communiquant sur les réseaux ne protègent réellement que les entreprises derrière les services associés. La vie privée des individus n’est, en majeure partie des cas, pas préservée d’aucune manière.


Haskell: programmation dynamique
· ☕ 11 min de lecture

L’approche de programmation dynamique est souvent associée au remplissage d’un tableau à deux dimensions et à l’écriture explicite de ce procédé sous forme itérative. Dans un langage fonctionnel comme Haskell, on bénéficie de quelques avantages d’expressivité de haut niveau et de lisibilité qu’on ne retrouve pas autrement.

Dans cet article, je commence par explorer deux exemples triviaux de programmation dynamique. Ensuite, je passe sur un problème tout aussi accessible, mais dont l’achèvement optimal demandera l’utilisation d’une structure Data.Array plutôt que la liste conventionnelle.