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.

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.

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.

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.

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.

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.

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. Tous les services susmentionnés sont effectivement munis de protections, mais contre et pour qui?

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.