J'étais intéressé par docbook aussi mais les 3/4 des documentations sur lequelles je tombe au moins 10 ans :/
Certes mais elles sont toujours d'actualité puisque le fonctionnement global n'a pas changé.
On utilise toujours les mêmes technologies qui fonctionnent bien depuis plus de dix ans.
Ce n'est donc pas vraiment un problème.
Du coup, je me suis amusé à chercher rapidement un système pour stocker les fichiers DocBook et finalement avec Lux qui est sur une base SolR/Lucene, il y a moyen de faire des requêtes XQuery sur un corpus documentaire.
même s'il n'a pas été écrit à la main, mais généré à partir d'un langage plus haut niveau
De mémoire, il s'agit de la Méthode B et l'outil qui était utilisé était l'Atelier B.
A l'époque, c'était Matra Transport International qui avait effectué une partie du boulot et du coup chez Matra Systèmes & Information où je bossais, des collègues l'avaient aussi utilisé pour un autre projet.
Je me souviens que cela ne semblait pas évident du tout :D
Ce type de technique se retrouve dans les solveurs SMT (Satisfiability modulo theories), comme par exemple l'outil alt-ergo (écrit en OCaml) utilisé, entre autre, par Spark dont a parlé Blackknight.
Spark utilise aussi les SMT Z3 et CVC4 écrits tout deux en C++.
Par contre, j'avoue que je n'y connais rien et que je ne fais qu'utiliser, mon niveau de math étant bien en-deça du pré-requis ;)
DocBook permet vraiment de gérer de grosses bases de documentation et de faire du vrai hypertexte (non seulement des liens, mais aussi de la recherche, des indexs, etc), et de vraiment séparer le rendu du contenu.
On peut même imaginer faire de l'extraction et créer des bases de données sémantiques voire des bases de connaissances :D
Enfin, là, je m'enflamme ;)
Pour les personnes et ISBN je sais pas trop ce que tu veux dire
En gros, il y a des balises XML permettant de saisir ce genre d'information.
Dans le cas de l'ISBN ( International Standard Book Number ) (mais pas que) pour donner l'identifiant d'un ouvrage, on peut utiliser le balise biblioid.
Pour les personnes, la balise person permet de préciser l'adresse, le mail…
J'avais effectivement pensé aussi à Sphinx mais en y regardant de plus près après mon dernier commentaire, je me suis rendu compte que DocBook est beaucoup plus descriptif que les langages Sphinx, Markdown et consorts.
Je trouve ces derniers beaucoup plus bas niveau.
Sphinx décrit la structure en termes de titres, paragraphes et code source là où DocBook peut aussi décrire des entités comme les personnes, les adresses mails, les codes ISBN, les lignes de commande…
Au final, cela pas forcément d'importance sur le rendu mais cela peut permettre comme dit plus haut une meilleure gestion des recherches sur les documents qui portent à la fois de la forme et du sens.
Il s'agit du système utilisé par FreeBSD depuis plus de 15 ans pour toute sa documentation, avec, certes, un passage de SGML à XML (cf la documentation du contributeur).
De ce que j'ai pu voir, NetBSD l'utilise aussi.
Debian utilise DebianDoc dont le format ressemble étrangement à DocBook.
On ne peut pas dire que ce ne soit pas connu.
Personnellement, hormis quelques contributions FreeBSD, je l'ai aussi utilisé au boulot pour pondre une ou deux documentations techniques liées à l'administration système.
J'avais aussi réécrit l'intégralité des articles sur les failles de sécurité de Fred Raynal, Christophe Grenier et Christophe Blaess.
Je trouve que c'est pas mal mais il faut l'environnement pour la rédaction parce que sinon, c'est assez barbant.
A l'époque, j'utilisais le mode Emacs PSGML en raison de l'utilisation de SGML sur la documentation FreeBSD mais il semble exister un mode XML spécifique DocBook que je n'ai pas essayé.
Après, il semble qu'il y ait aussi des plugins pour d'autres éditeurs (cf. là)
J'ai l'impression qu'on navigue à la frontière entre le rôle du compilateur et celui de l'analyseur de statique de code.
Alors, je me suis aussi posé la question et j'ai fini par la poser au bon endroit à savoir sur le newsgroup.
Au final, c'est la norme qui définit la notion d'erreur de compilation et celle-ci ne parle que de validité du code source.
Bon, le compilateur, lui, le sait que ça ne va pas fonctionner mais c'est hors scope d'où le warning plutôt que l'erreur. Ceci dit, en utilisant l'option Warnings as errors à la compilation, ça revient au même ;)
Après, il y a les solutions type AdaControl pour l'analyse statique et Spark pour la preuve de code pour aller plus loin
Je suis plus embêté par le concept de devoir fournir un cas par défaut pour un type comme tu le laisse supposer en commentaire
En fait, c'est normal que cela t'embête puisque c'est faux.
C'est la partie que j'avais laissée à l'appréciation du lecteur quand je parlais de mutabilité et qui se trouve décrite ici.
Lorsque l'on ne précise pas de discriminant par défaut, le type est immuable de facto, il faut définir le discriminant à la déclaration. Il devient alors impossible de changer de discriminant en cours de route et donc, il est impossible d'accéder à un composant qui n'est pas disponible et c'est vérifié à la compilation :)
J'aime bien ces dépêches-là, ça m'oblige à réfléchir comment je ferai ça dans mon langage préféré, qui est… L'Ada :)
J'ai donc tenté de faire les deux exemples.
Attention, il y a peut-être mieux :
L'avantage ici est que, comme en Haskell, il est impossible dans un CASE d'oublier une alternative, le compilateur ne voudra jamais.
De fait, l'ajout d'un élément à l'énumération va forcer le développeur à compléter son record et aussi à compléter la fonction Surface.
J'ai laissé de côté la notion de mutabilité des variants mais pour ceux que ça intéresse, c'est là :)
Pour le deuxième exemple, c'est plus facile, la programmation multi-processeurs fait partie de la norme et la version 2012 du langage a introduit l'annexe Multiprocessors (ça, c'est là)
withSystem.Multiprocessors;useSystem.Multiprocessors;withAda.Text_Io;useAda.Text_Io;procedureMTistypeCPU_CONFSis(TOUS_LES_CPUS,LA_MOITIE_SEULEMENT,AUTRE_CHOSE);subtypeNB_CPUisCPUrange1..Number_Of_CPUs;procedureSetGlobalThreadCount(Config: CPU_CONFS)is-- TOUS_LES_CPUS est comme CPU'Lastbegin-- Quelque chose ici avec des Task et autres joyeusetés-- en fontion de la confcaseConfigiswhenTOUS_LES_CPUS=>Put_Line("Zou, à fond "&CPU'Image(Number_Of_CPUs));whenLA_MOITIE_SEULEMENT=>Put_Line("Mollo "&CPU'Image(Number_Of_CPUs/2));whenAUTRE_CHOSE=>Put_Line("Smart");endcase;endSetGlobalThreadCount;procedureSetGlobalThreadCount(combien: NB_CPU)isbegin-- Un autre truc en fonction du nombre de CPUPut_Line("nb CPU : "&NB_CPU'Image(combien));endSetGlobalThreadCount;beginSetGlobalThreadCount(LA_MOITIE_SEULEMENT);SetGlobalThreadCount(12);endMT;
Number_Of_CPUs étant une fonction dont la valeur n'est pas connue à la compilation, le compilateur ne détecte pas que 12 CPUs, c'est trop… Ça donne une jolie exception CONTRAINT_ERROR qu'il reste à gérer.
Voilà donc ma petite contribution et merci pour le petit exercice et cette petite présentation bien sympa d'exemples de typage statique en Haskell.
Vous auriez été déçu si j'avais réagi pour promouvoir ce langage :)
En Ada, il y a 3 attributs pour faire ça :
- S'Rounding qui renvoie l'entier le plus loin de zéro
- S'Unbiased_Rounding qui ramène au plus proche entier pair
- S'Machine_Rounding dont la norme précise que le retour est spécifique à la machine cible
J'aurai envie de dire : "Les écoulements turbulents sont chaotiques, jusqu'à preuve du contraire…"
Mais, c'est parce que j'ai tendance à penser la science et sa progression comme telles :)
en tout cas peut-être qu'un fail2ban peut éviter ce genre de problème
On peut aussi utiliser les temps entre tentatives de connexion sur le firewall.
Petit exemple avec PacketFilter :
table <ssh-bruteforce> persist file "/etc/pf.table.fail2ban"
block in quick from <ssh-bruteforce>
pass in quick on $ext_if proto tcp from any to ($ext_if) port ssh flags S/SA keep state \
( max-src-conn 100, max-src-conn-rate 3/10, overload <ssh-bruteforce> flush global)
Question sans doute idiote mais pourquoi des hard links ? Perso, je ne me rappelle pas en avoir créé une seule fois en 20 ans :)
Dans quel cadre en utilises-tu ?
Généralement la fréquences des archives diminue avec l'age (quotidien sur la dernière semaine, hebdomadaire sur l'année, mensuel ensuite par exemple avec des durée de rétention limité) ce qui permet de gagner BEAUCOUP de place.
D'ailleurs, c'est le but même des outils comme Bacula.
Va falloir arrêter un peu avec ça ! A chaque fois que l'on parle d'Ada, on y a le droit.
Le langage n'y est pour rien quand il y a décision du développeur de lever les protections sur une variable pour raison de performances.
Par moment, je me demande si Git n'a pas fonctionné en partie grâce au culte de la personnalité autour de Linus Torvalds.
Il y avait déjà de bons outils à l'époque mais, bien entendu, il n'y a pas de meilleur outil que celui que l'on fait soi-même… :)
Non, au tout départ, c'est bien un problème d'exception matérielle dû à un dépassement de capacité (voir l'explication).
Mais au final, c'est un problème de design puisque la centrale inertielle n'était pas supposée fonctionner après le décollage et encore moins sur Ariane 5 :)
Du coup, on est d'accord, le code mort, c'est mal :D
[^] # Re: Pertinence de Ceph ou Gluster
Posté par Blackknight (site web personnel, Mastodon) . En réponse à la dépêche Installation de Ceph Jewel sous Debian Jessie. Évalué à 1.
Ils auraient au moins pu mettre du CodaFS, histoire de pouvoir répartir un peu la charge.
[^] # Re: DocBook n'est plus très populaire
Posté par Blackknight (site web personnel, Mastodon) . En réponse au journal DocBook ou l'art d'écrire de la documentation. Évalué à 1.
Certes mais elles sont toujours d'actualité puisque le fonctionnement global n'a pas changé.
On utilise toujours les mêmes technologies qui fonctionnent bien depuis plus de dix ans.
Ce n'est donc pas vraiment un problème.
[^] # Re: Sphinx
Posté par Blackknight (site web personnel, Mastodon) . En réponse au journal DocBook ou l'art d'écrire de la documentation. Évalué à 3.
Du coup, je me suis amusé à chercher rapidement un système pour stocker les fichiers DocBook et finalement avec Lux qui est sur une base SolR/Lucene, il y a moyen de faire des requêtes XQuery sur un corpus documentaire.
Intéressant tout ça ;)
[^] # Re: Solution à base de types variants en ADA
Posté par Blackknight (site web personnel, Mastodon) . En réponse à la dépêche Sortie de GHC 8.0.2 et une petite histoire de typage statique. Évalué à 2.
De mémoire, il s'agit de la Méthode B et l'outil qui était utilisé était l'Atelier B.
A l'époque, c'était Matra Transport International qui avait effectué une partie du boulot et du coup chez Matra Systèmes & Information où je bossais, des collègues l'avaient aussi utilisé pour un autre projet.
Je me souviens que cela ne semblait pas évident du tout :D
[^] # Re: Solution à base de types variants en ADA
Posté par Blackknight (site web personnel, Mastodon) . En réponse à la dépêche Sortie de GHC 8.0.2 et une petite histoire de typage statique. Évalué à 2.
Spark utilise aussi les SMT Z3 et CVC4 écrits tout deux en C++.
Par contre, j'avoue que je n'y connais rien et que je ne fais qu'utiliser, mon niveau de math étant bien en-deça du pré-requis ;)
[^] # Re: DocBook n'est plus très populaire
Posté par Blackknight (site web personnel, Mastodon) . En réponse au journal DocBook ou l'art d'écrire de la documentation. Évalué à 2.
C'est moins vieux que le C++ ;)
Mais comme il a été dit plus haut, ces formats s'intéressent autant à la forme qu'au fond (voire plus ?).
Enfin, n'allez pas croire que je sois un fan du XML, loin s'en faut mais il s'agit là pour moi d'un des usages les plus intéressants.
[^] # Re: Sphinx
Posté par Blackknight (site web personnel, Mastodon) . En réponse au journal DocBook ou l'art d'écrire de la documentation. Évalué à 2. Dernière modification le 01 février 2017 à 14:10.
On peut même imaginer faire de l'extraction et créer des bases de données sémantiques voire des bases de connaissances :D
Enfin, là, je m'enflamme ;)
[^] # Re: Sphinx
Posté par Blackknight (site web personnel, Mastodon) . En réponse au journal DocBook ou l'art d'écrire de la documentation. Évalué à 1.
En gros, il y a des balises XML permettant de saisir ce genre d'information.
Dans le cas de l'ISBN ( International Standard Book Number ) (mais pas que) pour donner l'identifiant d'un ouvrage, on peut utiliser le balise biblioid.
Pour les personnes, la balise person permet de préciser l'adresse, le mail…
[^] # Re: Sphinx
Posté par Blackknight (site web personnel, Mastodon) . En réponse au journal DocBook ou l'art d'écrire de la documentation. Évalué à 1.
J'avais effectivement pensé aussi à Sphinx mais en y regardant de plus près après mon dernier commentaire, je me suis rendu compte que DocBook est beaucoup plus descriptif que les langages Sphinx, Markdown et consorts.
Je trouve ces derniers beaucoup plus bas niveau.
Sphinx décrit la structure en termes de titres, paragraphes et code source là où DocBook peut aussi décrire des entités comme les personnes, les adresses mails, les codes ISBN, les lignes de commande…
Au final, cela pas forcément d'importance sur le rendu mais cela peut permettre comme dit plus haut une meilleure gestion des recherches sur les documents qui portent à la fois de la forme et du sens.
[^] # Re: Pas très connu ?
Posté par Blackknight (site web personnel, Mastodon) . En réponse au journal DocBook ou l'art d'écrire de la documentation. Évalué à 3.
Comme dit plus haut, ce n'est juste plus à la mode :)
Maintenant, c'est le Markdown et autres format simplifiés qui ont le vent en poupe.
# Pas très connu ?
Posté par Blackknight (site web personnel, Mastodon) . En réponse au journal DocBook ou l'art d'écrire de la documentation. Évalué à 3. Dernière modification le 01 février 2017 à 10:05.
Il s'agit du système utilisé par FreeBSD depuis plus de 15 ans pour toute sa documentation, avec, certes, un passage de SGML à XML (cf la documentation du contributeur).
De ce que j'ai pu voir, NetBSD l'utilise aussi.
Debian utilise DebianDoc dont le format ressemble étrangement à DocBook.
On ne peut pas dire que ce ne soit pas connu.
Personnellement, hormis quelques contributions FreeBSD, je l'ai aussi utilisé au boulot pour pondre une ou deux documentations techniques liées à l'administration système.
J'avais aussi réécrit l'intégralité des articles sur les failles de sécurité de Fred Raynal, Christophe Grenier et Christophe Blaess.
Je trouve que c'est pas mal mais il faut l'environnement pour la rédaction parce que sinon, c'est assez barbant.
A l'époque, j'utilisais le mode Emacs PSGML en raison de l'utilisation de SGML sur la documentation FreeBSD mais il semble exister un mode XML spécifique DocBook que je n'ai pas essayé.
Après, il semble qu'il y ait aussi des plugins pour d'autres éditeurs (cf. là)
[^] # Re: Solution à base de types variants en ADA
Posté par Blackknight (site web personnel, Mastodon) . En réponse à la dépêche Sortie de GHC 8.0.2 et une petite histoire de typage statique. Évalué à 4.
Alors, je me suis aussi posé la question et j'ai fini par la poser au bon endroit à savoir sur le newsgroup.
Au final, c'est la norme qui définit la notion d'erreur de compilation et celle-ci ne parle que de validité du code source.
Bon, le compilateur, lui, le sait que ça ne va pas fonctionner mais c'est hors scope d'où le warning plutôt que l'erreur. Ceci dit, en utilisant l'option Warnings as errors à la compilation, ça revient au même ;)
Après, il y a les solutions type AdaControl pour l'analyse statique et Spark pour la preuve de code pour aller plus loin
[^] # Re: Solution à base de types variants en ADA
Posté par Blackknight (site web personnel, Mastodon) . En réponse à la dépêche Sortie de GHC 8.0.2 et une petite histoire de typage statique. Évalué à 3.
Petite correction, c'est effectivement juste un avertissement mais bon, les warnings en Ada, il vaut mieux les écouter ;)
[^] # Re: Solution à base de types variants en ADA
Posté par Blackknight (site web personnel, Mastodon) . En réponse à la dépêche Sortie de GHC 8.0.2 et une petite histoire de typage statique. Évalué à 2.
Déjà, je me permets de renvoyer vers un excellent commentaire sur ton journal… Le mien :D
En fait, c'est normal que cela t'embête puisque c'est faux.
C'est la partie que j'avais laissée à l'appréciation du lecteur quand je parlais de mutabilité et qui se trouve décrite ici.
Lorsque l'on ne précise pas de discriminant par défaut, le type est immuable de facto, il faut définir le discriminant à la déclaration. Il devient alors impossible de changer de discriminant en cours de route et donc, il est impossible d'accéder à un composant qui n'est pas disponible et c'est vérifié à la compilation :)
# Plus verbeux que le C++
Posté par Blackknight (site web personnel, Mastodon) . En réponse au journal Sortie de GHC 8.0.2 et une petite histoire de typage statique. Évalué à 9.
J'aime bien ces dépêches-là, ça m'oblige à réfléchir comment je ferai ça dans mon langage préféré, qui est… L'Ada :)
J'ai donc tenté de faire les deux exemples.
Attention, il y a peut-être mieux :
L'avantage ici est que, comme en Haskell, il est impossible dans un CASE d'oublier une alternative, le compilateur ne voudra jamais.
De fait, l'ajout d'un élément à l'énumération va forcer le développeur à compléter son record et aussi à compléter la fonction Surface.
J'ai laissé de côté la notion de mutabilité des variants mais pour ceux que ça intéresse, c'est là :)
Pour le deuxième exemple, c'est plus facile, la programmation multi-processeurs fait partie de la norme et la version 2012 du langage a introduit l'annexe Multiprocessors (ça, c'est là)
Number_Of_CPUs étant une fonction dont la valeur n'est pas connue à la compilation, le compilateur ne détecte pas que 12 CPUs, c'est trop… Ça donne une jolie exception CONTRAINT_ERROR qu'il reste à gérer.
Voilà donc ma petite contribution et merci pour le petit exercice et cette petite présentation bien sympa d'exemples de typage statique en Haskell.
# En Ada :)
Posté par Blackknight (site web personnel, Mastodon) . En réponse au journal Cohérence des fonctions d'arrondi. Évalué à 2.
Vous auriez été déçu si j'avais réagi pour promouvoir ce langage :)
En Ada, il y a 3 attributs pour faire ça :
- S'Rounding qui renvoie l'entier le plus loin de zéro
- S'Unbiased_Rounding qui ramène au plus proche entier pair
- S'Machine_Rounding dont la norme précise que le retour est spécifique à la machine cible
Merci pour ce journal rafraichissant en tout cas
[^] # Re: À propos de la version 2D
Posté par Blackknight (site web personnel, Mastodon) . En réponse à la dépêche incompact3d.com fête son premier anniversaire. Évalué à 3.
J'aurai envie de dire : "Les écoulements turbulents sont chaotiques, jusqu'à preuve du contraire…"
Mais, c'est parce que j'ai tendance à penser la science et sa progression comme telles :)
[^] # Re: Peu crédible
Posté par Blackknight (site web personnel, Mastodon) . En réponse au journal Un ransomware tout à fait déloyal ... et inquiétant. Évalué à 3.
On peut aussi utiliser les temps entre tentatives de connexion sur le firewall.
Petit exemple avec PacketFilter :
Ensuite, moi, je rajoute du One Time Password en plus :)
[^] # Re: Hum ?
Posté par Blackknight (site web personnel, Mastodon) . En réponse au journal Mon Backup de backup. Évalué à 2. Dernière modification le 25 juillet 2016 à 16:10.
Question sans doute idiote mais pourquoi des hard links ? Perso, je ne me rappelle pas en avoir créé une seule fois en 20 ans :)
Dans quel cadre en utilises-tu ?
[^] # Re: Hum ?
Posté par Blackknight (site web personnel, Mastodon) . En réponse au journal Mon Backup de backup. Évalué à 4.
D'ailleurs, c'est le but même des outils comme Bacula.
[^] # Re: Assembleur
Posté par Blackknight (site web personnel, Mastodon) . En réponse au journal Code source de Apollo 11. Évalué à 6.
Va falloir arrêter un peu avec ça ! A chaque fois que l'on parle d'Ada, on y a le droit.
Le langage n'y est pour rien quand il y a décision du développeur de lever les protections sur une variable pour raison de performances.
# Province !
Posté par Blackknight (site web personnel, Mastodon) . En réponse au journal Nuit du Hack 2016 & ANSSI. Évalué à 5.
Ah ouais, c'eut été carrément l'horreur que ça se passe en "région" :D
[^] # Re: Incroyable
Posté par Blackknight (site web personnel, Mastodon) . En réponse à la dépêche Bitkeeper essaye de rattraper l'histoire en passant Open Source. Évalué à 3.
Par moment, je me demande si Git n'a pas fonctionné en partie grâce au culte de la personnalité autour de Linus Torvalds.
Il y avait déjà de bons outils à l'époque mais, bien entendu, il n'y a pas de meilleur outil que celui que l'on fait soi-même… :)
[^] # Re: Incroyable
Posté par Blackknight (site web personnel, Mastodon) . En réponse à la dépêche Bitkeeper essaye de rattraper l'histoire en passant Open Source. Évalué à 5.
Si mais surtout il y avait déjà Darcs et Monotone en outils de gestion de versions décentralisé Open Source
[^] # Re: Destructeurs
Posté par Blackknight (site web personnel, Mastodon) . En réponse à la dépêche Crystal, un langage proche de Ruby, en version 0.16. Évalué à 5. Dernière modification le 12 mai 2016 à 13:34.
Non, au tout départ, c'est bien un problème d'exception matérielle dû à un dépassement de capacité (voir l'explication).
Mais au final, c'est un problème de design puisque la centrale inertielle n'était pas supposée fonctionner après le décollage et encore moins sur Ariane 5 :)
Du coup, on est d'accord, le code mort, c'est mal :D