Journal le "style fonctionnel" en vidéos (Nix, NixOS, Haskell)

41
8
jan.
2018

Salut

Si ça intéresse quelqu'un, j'ai fait quelques vidéos sans prétention sur l'utilisation de Nix/NixOS et la programmation en Haskell. Pour l'instant, il n'y en a qu'une dizaine; je pense en faire d'autres plus tard mais… plus tard.

Les vidéos : https://www.youtube.com/watch?v=i6s-G_Hh3s4&list=PLe8vnuC2T7iGE3w_d-MCHw5mLzRAMiCM9

Les résumés + codes : https://github.com/nokomprendo/tuto_fonctionnel

Les sujets des vidéos :
01 : Installation de NixOS
02 : Gestion de paquets avec Nix
03 : Installation de Nix sur Debian
04 : Utilisation des canaux avec Nix/NixOS
05 : Compilation et installation d'un programme avec Nix
06 : Développer en Python avec Nix
07 : Personnaliser un paquet Nix
08 : Exécuter du code Haskell avec Nix (ou pas)
09 : Intro au déploiement web avec Haskell/Nix/Nixops
10 : Configuration utilisateur avec Nix (paquets, vim…)
11 : Introduction au langage Haskell

  • # N'hésite as à partager.

    Posté par . Évalué à 4.

    Excellent!

    Par ailleurs, n'hésite pas à les partager aussi sur la mailing-list officielle (nix-devel).

  • # merci!!!!

    Posté par . Évalué à 4.

    Merci pour les vidéos sur Nix et NixOs j'avais justement envie de tester le gestionnaire de paquet de ce système. L’installation de NixOs me fait pensé à une installation de Slackware :-) Il faut vraiment que je me bouge et essaye.

  • # partions dans le fichier de configuration

    Posté par . Évalué à 3.

    Est-il possible de définir le partitionnement dans le fichier configuration de NixOs?

    Jusque ou est-il possible d'automatiser l'(ré)installation d'un système NixOs en utilisant le fichier de configuration?

  • # Très bonne réalisation !

    Posté par . Évalué à 6.

    Les sujets sont bien segmentés entre eux. La progression est judicieuse.
    Les commentaires vidéos sont également bien choisis et la voix est agréable.

    Que dire de plus. Beau boulot et merci.

    • [^] # Re: Très bonne réalisation !

      Posté par (page perso) . Évalué à 3.

      Oui, très belle réalisation. C'est clair, sans cafouillis, bien segmenté. Bref que du bon.
      Juste une toute petite remarque : tu laisse souvent ton pointeur juste là où il faut regarder, c'est embarrassant.

      Merci, j'ai appris ce qu'est Nix et Nixos. Ça donne envie d'essayer.

      « Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes. »

      • [^] # Re: Très bonne réalisation !

        Posté par (page perso) . Évalué à 3.

        Effectivement, je me rends compte que le pointeur est souvent mal placé, et le curseur aussi d'ailleurs. J'essaierai de faire attention dans les prochaines vidéos. Merci.

  • # Merci pour vos commentaires

    Posté par (page perso) . Évalué à 4.

    Merci pour vos commentaires. J'ai essayé de faire des vidéos "propres" mais il reste quand même quelques coquilles et passages pas très clairs.

    Pour la question du partitionnement avec le fichier de config de nixos, je ne pense pas que ce soit possible, il me semble que c'est du montage uniquement. Par contre c'est peut-être possible avec nixops, il faudrait regarder dans la doc.

    • [^] # Re: Merci pour vos commentaires

      Posté par . Évalué à 8.

      Mis à part une éventuelle motivation financière, pourquoi as-tu choisi le média vidéo plutôt que du texte pour tes présentations ? De mon point de vue j'ai l'impression que la vidéo est le pire medium possible pour ce genre de choses, entre le fait qu'on "t'impose" un rythme, que la navigation soit temporelle, les copy/paste pas vraiment possibles, les hacks dégueus juste pour avoir des liens hypertextes, l'espace disque nécessaire pour avoir une copie locale, que la traduction dans une autre langue soit plus compliquée, etc.

      • [^] # Re: Merci pour vos commentaires

        Posté par (page perso) . Évalué à 10.

        Oui, c'est absolument ça : j'ai passé des heures à faire des vidéos sur nixos et haskell pour avoir 3 milliards de vues et m'acheter un palace sur une ile paradisiaque…

        Plus sérieusement, je ne suis pas fan non plus des vidéos mais ça apporte un côté dynamique et "réel" (dans le sens où on voit vraiment que ça fonctionne). Pour le rythme, j'ai essayé de ne pas être trop lent pour éviter l'ennui et si ça va trop vite tu peux mettre en pause. De plus, toutes les vidéos sont accompagnées d'un résumé + codes sur github (https://github.com/nokomprendo/tuto_fonctionnel). Des blogs et des docs de 3 km difficiles à lire, il y a en déjà plein d'où l'idée de cette forme un peu différente.

        • [^] # Re: Merci pour vos commentaires

          Posté par . Évalué à 1. Dernière modification le 10/01/18 à 12:54.

          Je dirais même plus, des blogs et des docs de 3 km difficiles à lire et des copier/coller de tutoriels sans aucune valeur ajoutée, il y en a déjà plein.

          Merci pour tout ce travail , ces videos dont je suis fan ainsi que la traduction dans ma langue natale, qui m'a permis de redécouvrir cette distribution et en particulier Nix.

          attention chérie ça va moinsser

      • [^] # Re: Merci pour vos commentaires

        Posté par . Évalué à 5.

        J'ai plutôt aimé ses vidéos, non pas pour apprendre et tout savoir sur Nix et le reste mais plutôt pour découvrir de manière un peu plus dynamique. C'est une sorte de visite guidée, tu sais que ça va durer 20 minutes et que tu auras une vue d'ensemble, si tu veux en savoir plus tu vas réellement chercher la doc.

  • # Nix (le gestionnaire) sur d'autres distros.

    Posté par (page perso) . Évalué à 2.

    Bien qu'il semble facile d'installer, utiliser et désinstaller Nix sur une distro autre que Nixos, je n'en perçois pas l'avantage sur le gestionnaire de paquets de base, si ce n'est le fait que l'utilisateur peut gérer lui-même ses paquets.

    Mais où Nix va-t-il chercher les paquets ? Dans les dépôts officiels de la distro ou dans ceux de Nixos, ou bien les deux ? Nix peut-il remplacer apt/dnf … ou n'est-il utilisable qu'en complément pour avoir les paquets de Nixos ?

    « Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes. »

    • [^] # Re: Nix (le gestionnaire) sur d'autres distros.

      Posté par . Évalué à 2.

      je peux répondre partiellement ayant testé Nix sur une Fedora. Il va chercher ses paquets sur les dépôts Nix.

      Le seul intérêt que je vois c'est de pouvoir installer un paquet et que sa version et le contrôle de sa mise à jour soit indépendante du système Fedora de base (un peu comme installer un port sur un BSD).

    • [^] # Re: Nix (le gestionnaire) sur d'autres distros.

      Posté par (page perso) . Évalué à 3. Dernière modification le 10/01/18 à 09:23.

      Utilisateur débutant de Nix je me suis posé les mêmes questions. Pour moi tout l'intérêt de Nix (par rapport au système de gestion de paquets des distributions) est de pouvoir facilement modifier les recettes de constructions avec le concept de derivation. Par exemple, tu peux modifier la construction, mettre à jour, modifier les dépendances d'un logiciel facilement.

      Nix permet la construction avec les commandes de base mais aussi l'installation / publication de constructions sur des dépots appelés channel. Par défaut, il télécharge depuis https://nixos.org/channels/nixpkgs-unstable ; tu peux créer facilement ton propre canal pour distribuer tes binaires (comme AUR, COPR ou PPA).

      Une distribution linux fournit généralement un ensemble moins configurable ; parfois plusieurs versions d'un logiciel existent mais il est difficile d'en modifier la construction ou les dépendances par exemple. En dehors de NixOS, Nix ne vise pas à remplacer apt ou dnf mais plutôt à faciliter l'utilisation et le développement de logiciels utilisateurs. Par exemple, tu peux utiliser une distribution stable pour ton compte utilisateur (avec un système libc, libxml2, libpng, etc… très ancien) mais avoir un compilateur et des librairies récents pour tes propres développements.

    • [^] # Re: Nix (le gestionnaire) sur d'autres distros.

      Posté par (page perso) . Évalué à 7.

      Honnêtement, je ne pense pas que nix/nixos soit interessant pour de l'utilisation pure et dure.

      Par contre, pour de l'admin ou du dev c'est vraiment top. Par exemple, juste en ajoutant un default.nix à un projet, tu définis complètement son environnement logiciel (dépendances, compilation…). Du coup, cet environnement est facilement reproductible et tu peux aussi le déployer et le composer à d'autres environnements facilement.

      Également, si tu développes dans plusieurs langages, tu as souvent pleins de gestionnaires différents à utiliser (npm, pip, gem…) en plus du gestionnaire système (apt, dnf, pacman…) sans compter des environnements virtuels (python-virtualenv…). L'écosystème Nix fournit tout ça en un outil, et peut combiner le tout. En exagérant, tu peux quasiment remplacer les gestionnaires systèmes (apt…), les gestionnaires "langage" (pip…), les environnements virtuels (python-virtualenv…) et même les conteneurs distants ou locaux (docker, flatpack…).

      Et effectivement, tu peux aussi personnaliser les packages proposés (par exemple, si tu utilises opencv en C++, je te déconseille d'utiliser les versions packagées par les OS, cf vidéo 07).

    • [^] # Re: Nix (le gestionnaire) sur d'autres distros.

      Posté par . Évalué à 8.

      As-tu déjà utilisé quelque chose comme virtualenv en python, bundler en ruby, cabal (avec les sandbox) en haskell ou encore bien d’autres pour d’autres langages ? Ils permettent entre autre tous de définir, pour chaque projet, l’ensemble des dépendances dont tu as besoin, et ce, de manière indépendante d’un projet à l’autre. Pour chaque projet, tu peux ainsi générer un environnement correspondant à la définition voulue.

      C’est particulièrement utile si tu as de projets qui utilisent une même dépendance dans des versions différentes, ou si tu as une version de maintenance d’un projet qui utilise une librairie dans une version donnée, et la version HEAD qui nécessite une version plus récente. Tu n’a pas à installer et ré-installer la librairie dans une version et une autre en permanence quand tu bascules d’un projet à l’autre.

      Outre le fait que chaque utilisateur peut effectivement installer ses propres paquets, nix est une solution qui permet de faire exactement ça, mais de manière totalement agnostique du langage de programmation que tu utilises. Qui n’a jamais eu de problème parce que une librairie python / ruby / … nécessite une librairie C ? Le gestionnaire de paquet associé à ton langage gère pas son installation, il suppose qu’elle est là quelque part. Du coup il n’est d’aucun secours pour gérer les éventuelles questions de version de celle-ci.

      C’est de mon point de vue (de dev) le plus gros intérêt que tu pourrais avoir à utiliser nix sur une distribution autre (en plus du fait que chaque utilisateur peut éventuellement installer ce dont il a besoin sans avoir la main sur l’admin du système global).

      Pour les paquets, nix dispose des « recettes » de compilation / installation. Il récupère les sources là où le mainteneur lui dit de les récupérer (généralement les dépôts upstream) et compile. Pour gagner du temps, il y a un cache binaire disponible qui permet de récupérer un paquet pré-compilé si celui-ci a déjà été généré par le serveur d’intégration continue (https://hydra.nixos.org/), mais rien de grave si le paquet est absent (typiquement, si c’est un paquet bien à toi, pas géré par nixpkgs).

      Enfin, nix ne remplacera pas apt/dnf, à moins de passer complètement à nixos. nix vit à côté sons gêner le gestionnaire de paquet présent, et sans que le gestionnaire ne vienne gêner nix (tout ce que nix installe est sous /nix, donc pas de conflit avec les sytèmes « classiques »).

      J’espère avoir répondu à tes questions (même si j’ai plus d’un point de vue de dev que d’utilisateur « lambda »).

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.