Red Nose Hacker

français

Guile Logo

J'ai pris l'habitude de faire environ 30 minutes de Code Kata chaque matin. Je pratique ces Kata suivant la méthode du développement dirigé par les tests (TDD).

Guile est distribué le module SRFI-64 : un framework de test unitaire. Dans cet article, je t'explique comment l'utiliser et comment le configurer.

Lire la suite...

Guile Logo

Le Carnet du Hacker Guile suit le style du Test Driven Learning pour illustrer des fonctionnalités du langage de programmation Guile. Des apartés sur les outils et les techniques sont apportées pour aider le hacker a devenir plus productif.

Dans ce chapitre, le hacker manipule les booléens. Il en profitera pour documenter son code source avec ce que l'on appelle des docstrings.

Le chapitre est accessible à l'adresse suivante : https://jeko.frama.io/fr/booleans.html.

Profitons de cette article pour jouer un peu avec tout ça !

Lire la suite...

Guile Logo

Dans cet article, je vais te présenter Hall, un outil dont le but est de t'assister dans le développement et la distribution de programmes Guile. Je ne couvrirai pas toutes les fonctionnalités de Hall. Juste de quoi te donner envie d'essayer. ;–) Tu verras comment créer un projet Guile à partir de zéro, comment construire le projet, comment le tester, enfin, comment le distribuer !

Lire la suite...

Logo Guix

Sommaire :

En plus de ton profil par défaut (~/.guix-profile), tu peux créer autant de profils que tu le souhaites (si tu trouve ça utile). Par exemple, j'ai un profil dédié à la programmation avec le langage Guile, dans lequel j'ai installé la dernière version du langage, des extensions d'Emacs, et quelques bibliothèques que j'utilise fréquemment.

Lire la suite...

Logo Guix

Définitions

Le dépôt de paquêts

Guix est un gestionnaire de paquets logiciels. Il gère donc un dépôt de paquets, situé dans /gnu/store (par défaut). C'est l'endroit où sont stockés tous les paquets de logiciels que l'on ajoute au système via Guix.

Le dépôt de paquets est commun à tous les profiles de tous les utilisateurs.

Lire la suite...

Le dernier test ajouté (et tous les autres) passent, place au réusinage ! Je me concentre dans cette session sur les tests.

Tu peux retrouver le code source du projet et autres croustillants détails sur son dépôt !

Bon screencast !

Lire la suite...

Logo Guix

Cette série de billets de blog est une invitation à voir comment quelqu'un peut apprendre comment empaqueter des logiciels pour Guix sans connaissance préalable à propos de Guix ou même de l'empaquetage de logiciel. Je te montre de quelles ressources j'ai besoin et comment je les utilise. Ma méthode est axée sur la pratique. L'exécution des commandes rythme mes itérations, leurs retours guident le code que je produis et l'utilisation de ressources externes (documentation, code source, communauté).

Lire la suite...

#guix #package #screencast #français Logo Guix

Cet article s'inscrit dans la lignée de ma série sur la découverte de l'empaquetage (communément appelé packaging) de logiciel pour le gestionnaire de paquet Guix. J'y documente ma façon d'apprendre. Tu peux y voir les difficultés auxquelles je fais face et les options que j'ai pour m'aider à les surmonter. Dans cet article, je poursuis le travail de l'article précédent.

Si tu préfères le format vidéo, je te met à disposition le screencast de cette session!

Pour démarrer cette nouvelle session de travail, je prend le réflexe de me placer dans un environnement de développement isolé :

$ guix environment --pure guix

Je reprends les commandes de la dernière étape de l'article précédent :

[dev]$ echo '(use-modules (guix packages) (guix build-system emacs) (guix licenses)) (define-public ac-geiser (package (name "") (version "") (source (origin (uri (git-reference (url "") (commit ""))) (method git-fetch) sha256)) (build-system emacs-build-system) (synopsis "") (description "") (license bsd-3) (home-page "")))' > /tmp/emacs-ac-geiser.scm
[dev]$ ./pre-inst-env guix build -f /tmp/emacs-ac-geiser.scm
/tmp/emacs-ac-geiser.scm:1:137: error: sha256: invalid field specifier

N'ayant aucune idée de comment spécifier sha256, je vais voir ce que me dit la documentation à ce sujet. Malheureusement, je ne trouve pas beaucoup d'informations sur comment utiliser sha256. J'ai donc regarder l'exemple du paquet hello de la documentation pour me débloquer (c'est le joker de la session). Je peux maintenant modifier ma définition en conséquence.

[dev]$ echo '(use-modules (guix packages) (guix build-system emacs) (guix licenses) (guix git-download)) (define-public ac-geiser (package (name "") (version "") (source (origin (uri (git-reference (url "") (commit ""))) (method git-fetch) (sha256 (base32 "")))) (build-system emacs-build-system) (synopsis "") (description "") (license bsd-3) (home-page "")))' > /tmp/emacs-ac-geiser.scm 
[dev]$ ./pre-inst-env guix build -f /tmp/emacs-ac-geiser.scm
guix build: error: #<unspecified>: not something we can build

Maintenant, Guix ne comprend plus rien. Je bloque, je réfléchis, le temps passe et j'arrive à la fin du temps imparti pour la session !

Je pense que la prochaine s'annonce déjà comme étant riche en action... Je solliciterai quand même l'aide de la communauté des Guixters pour comprendre ce qui ne va pas.

Voici la définition obtenue à ce stade :

(use-modules
 (guix packages)
 (guix build-system emacs)
 (guix licenses)
 (guix git-download))

(define-public ac-geiser
  (package
   (name "")
   (version "")
   (source
    (origin
     (uri
      (git-reference (url "") (commit "")))
     (method git-fetch)
     (sha256
      (base32 ""))))
   (build-system emacs-build-system)
   (synopsis "")
   (description "")
   (license bsd-3)
   (home-page "")))

Merci beaucoup d'avoir lu cet article ! N'hésites pas à me donner ton avis, proposer une idée d'amélioration, laisser un commentaire, ou poser une question via :E-mail: jeremy AT korwin-zmijowski DOT frMastodon: @jeko@framapiaf.orgPeertube: @jeko@video.tedomum.netTwitter: @JeremyKorwin Abonnes-toi pour ne pas manquer les prochains :articles via Mastodon @jeko@write.as et RSSscreencasts via Peertube jeko@video.tedomum.net et RSS

Et encore plus important, partages ce blog et dis à tes amis que c'est le meilleur blog de l'histoire du logiciel libre ! Sans dec'

#guix #package #screencast #français Logo Guix

Je documente ici la poursuite du travail de l'article précédent. Ces articles font partie d'une série sur l'empaquetage de logiciels pour le gestionnaire de paquet Guix.

Pour démarrer cette nouvelle session de travail, je me replace dans un environnement de développement isolé :

$ guix environment --pure guix

Je reprends les commandes de la dernière étape de l'article précédent :

[dev]$ echo '(use-modules (guix packages) (guix build-system emacs) (guix licenses)) (define-public ac-geiser (package (name "") (version "") (source origin) (build-system emacs-build-system) (synopsis "") (description "") (license bsd-3) (home-page "")))' > /tmp/emacs-ac-geiser.scm
[dev]$ ./pre-inst-env guix build -f /tmp/emacs-ac-geiser.scm
guix build: error: origin: source expression failed to match any pattern

À priori, cette portion de la définition pose problème (source origin). Je vais voir ce que me dit la documentation à ce sujet. Effectiovement, origin est un objet et pas un symbole. Je modifie la définition pour coller avec ça :

[dev]$ echo '(use-modules (guix packages) (guix build-system emacs) (guix licenses)) (define-public ac-geiser (package (name "") (version "") (source (origin)) (build-system emacs-build-system) (synopsis "") (description "") (license bsd-3) (home-page "")))' > /tmp/emacs-ac-geiser.scm
[dev]$ ./pre-inst-env guix build -f /tmp/emacs-ac-geiser.scm
/tmp/emacs-ac-geiser.scm:1:137: error: (origin): missing field initializers (uri method sha256)

Guix m'indique que l'objet origin est au moins constitué de trois champs obligatoires : (uri method sha256). Je vais les passer brutalement à origin et voir ce que Guix me dit :

[dev]$ echo '(use-modules (guix packages) (guix build-system emacs) (guix licenses)) (define-public ac-geiser (package (name "") (version "") (source (origin uri method sha256)) (build-system emacs-build-system) (synopsis "") (description "") (license bsd-3) (home-page "")))' > /tmp/emacs-ac-geiser.scm
[dev]$ ./pre-inst-env guix build -f /tmp/emacs-ac-geiser.scm
/tmp/emacs-ac-geiser.scm:1:137: error: uri: invalid field specifier

uri n'est pas spécifié. Je vais vérifier dans la documentation de origin comment spécifier ce champ. Il s'agit d'une chaîne de caractères. Essayons ça :

[dev]$ echo '(use-modules (guix packages) (guix build-system emacs) (guix licenses)) (define-public ac-geiser (package (name "") (version "") (source (origin (uri "") method sha256)) (build-system emacs-build-system) (synopsis "") (description "") (license bsd-3) (home-page "")))' > /tmp/emacs-ac-geiser.scm
[dev]$ ./pre-inst-env guix build -f /tmp/emacs-ac-geiser.scm
/tmp/emacs-ac-geiser.scm:1:137: error: method: invalid field specifier

Bingo, maintenant, je peux avancer avec le deuxième champ : method. La documetation me dit que c'est une procédure qui va récupérer les sources du logiciel soit depuis une URL, soit depuis un dépôt git. Dans mon cas, ce sera un dépôt git. Ce que me dit aussi la documentation, c'est que pour un dépôt git, uri doit être un objet git-reference et pas une chaîne de caratère comme je l'ai spécifié à l'étape d'avant. Je vais reprendre ça avant d'avancer sur method.

[dev]$ echo '(use-modules (guix packages) (guix build-system emacs) (guix licenses)) (define-public ac-geiser (package (name "") (version "") (source (origin (uri (git-reference (url "") (commit ""))) method sha256)) (build-system emacs-build-system) (synopsis "") (description "") (license bsd-3) (home-page "")))' > /tmp/emacs-ac-geiser.scm
[dev]$ ./pre-inst-env guix build -f /tmp/emacs-ac-geiser.scm
/tmp/emacs-ac-geiser.scm:1:137: error: method: invalid field specifier

La construction de mon uri semble convenir Guix. Maintenant, je vais m'occuper du champ method. La documentation me dit que method, pour récupérer les sources d'un logiciel via git doit prendre la valeur git-fetch :

[dev]$ echo '(use-modules (guix packages) (guix build-system emacs) (guix licenses)) (define-public ac-geiser (package (name "") (version "") (source (origin (uri (git-reference (url "") (commit ""))) (method git-fetch) sha256)) (build-system emacs-build-system) (synopsis "") (description "") (license bsd-3) (home-page "")))' > /tmp/emacs-ac-geiser.scm
[dev]$ ./pre-inst-env guix build -f /tmp/emacs-ac-geiser.scm
/tmp/emacs-ac-geiser.scm:1:137: error: sha256: invalid field specifier

Cool, la spécification de champ method est OK pour Guix.

Mais je m'arrête là pour aujourd'hui. Je me pencherai dessus dans un prochain article. Voici la définition obtenue à ce stade :

(use-modules 
 (guix packages) 
 (guix build-system emacs) 
 (guix licenses)) 

(define-public ac-geiser 
  (package 
   (name "") 
   (version "") 
   (source 
    (origin 
     (uri (git-reference 
	   (url "") (commit "")))
     (method git-fetch) 
     sha256))
   (build-system emacs-build-system) 
   (synopsis "") 
   (description "") 
   (license bsd-3) 
   (home-page "")))

Merci beaucoup d'avoir lu cet article ! N'hésites pas à me donner ton avis, laisser un commentaire, ou poser une question via :e-mail: jeremy AT korwin-zmijowski DOT frMastodon: @jeko@framapiaf.orgTwitter: @JeremyKorwin Abonnes-toi pour ne pas manquer les prochains articles :via une plateforme fédérée (ex: mastodon) @jeko@write.asvia RSS https://jeko.write.as/feed/

Et encore plus important, partages le blog et dis à tes amis que c'est le meilleur blog de l'histoire du logiciel libre ! Sans dec'

#guix #package #français

Logo Guix

Je documente ici la poursuite du travail de l'article précédent. Ces articles font partie d'une série sur l'empaquetage de logiciels pour le gestionnaire de paquet Guix.

Pour démarrer cette nouvelle session de travail, je me replace dans un environnement de développement isolé :

$ guix environment --pure guix

Je reprends les commandes de la dernière étape de l'article précédent :

[dev]$ echo '(use-modules (guix packages) (guix build-system emacs)) (define-public ac-geiser (package (name "") (version "") (source origin) (build-system emacs-build-system) (synopsis "") (description "") license home-page))' > /tmp/emacs-ac-geiser.scm
[dev]$ ./pre-inst-env guix build -f /tmp/emacs-ac-geiser.scm 
/tmp/emacs-ac-geiser.scm:1:81: error: license: invalid field specifier

Je cherche à corriger l'erreur que me signal Guix, à savoir : le champ license qui n'est pas spécifié.

Dans la documentation, je trouve peu d'informations concernant la façon de spécifier le champ license. J'ai pu voir, dans l'exemple donné pour le logiciel hello la valeur gpl3+, or, pour l'instant, je recherche quelque chose de plus proche d'une valeur nulle, à défaut d'avoir la valeur qui convient directement à mon cas. Je pourrai essayer de bidouiller au hasard (par exemple essayer bsd3) jusqu'a tomber sur la bonne valeur, mais ce serais pas assez scientifique comme démarche, à mon goût. Je décide donc d'aller chercher dans le code source. La documentation stipule que le champ license doit être valorisé (ou spécifié) avec les valeurs tirées du module (guix licenses). Un petit tour dans le dépot git de Guix me permet de trouver le fichier source de ce module, logiquement : guix/licenses.scm .

Dans ce fichier, je vois que le module exporte le symbole bsd-3 (et non, ce n'était pas bsd3), qui conviendrait à mon paquet. Je vais donc modifier la définition que je suis en train de construire pour importer le module (guix licenses) et ainsi pouvoir spécifier le champ license avec le symbole adéquat :

[dev]$ echo '(use-modules (guix packages) (guix build-system emacs) (guix licenses)) (define-public ac-geiser (package (name "") (version "") (source origin) (build-system emacs-build-system) (synopsis "") (description "") (license bsd-3) home-page))' > /tmp/emacs-ac-geiser.scm
[dev]$ ./pre-inst-env guix build -f /tmp/emacs-ac-geiser.scm
/tmp/emacs-ac-geiser.scm:1:97: error: home-page: invalid field specifier

Guix ne me renvoit pas d'erreur avec ces modifications, donc je peux passer au dernier champ encore non spécifié : home-page. Facile, celui-ci attend une chaîne de caractères.

[dev]$ echo '(use-modules (guix packages) (guix build-system emacs) (guix licenses)) (define-public ac-geiser (package (name "") (version "") (source origin) (build-system emacs-build-system) (synopsis "") (description "") (license bsd-3) (home-page "")))' > /tmp/emacs-ac-geiser.scm
[dev]$ ./pre-inst-env guix build -f /tmp/emacs-ac-geiser.scm
guix build: error: origin: source expression failed to match any pattern

Visiblement, on en a fini avec la spécification des champs obligatoires de package. La nouvelle erreur va nous faire rentrer dans le détail de l'objet source, plus précisément, l'objet origin qui sert à le valoriser.

Mais je m'arrête là pour aujourd'hui. Je me pencherai dessus dans un prochain article. Voici la définition obtenue à ce stade :

(use-modules
 (guix packages)
 (guix build-system emacs)
 (guix licenses))

(define-public ac-geiser
  (package
   (name "")
   (version "")
   (source origin)
   (build-system emacs-build-system)
   (synopsis "")
   (description "")
   (license bsd-3)
   (home-page "")))

Merci beaucoup d'avoir lu cet article ! N'hésites pas à me donner ton avis ou laisser un commentaire. Abonnes-toi pour ne pas manquer les prochains articles :via une plateforme fédérée (ex: mastodon) @jeko@write.asvia RSS https://write.as/jeko/feed/

Et encore plus important, partages le blog et dis à tes amis que c'est le meilleur blog de l'histoire du logiciel libre ! Sans dec'