Voici les fichiers sources des petits programmes publiés (en partie ou en entier) dans Linux Magazine France. Ils sont normalement disponibles sur le CD-ROM d'accompagnement mais il peut être défectueux ou perdu... J'ai publié plusieurs articles dans le passé mais les fichiers sources de cette page commencent par la série "Introduction à la compression des signaux".
Février 2006 : Le CD-ROM n'est plus inclus dans Linux Mag. Ce site devient donc l'unique endroit pour obtenir les fichiers d'exemple, ce qui est dommage. Mais comme je suis une grosse feignasse, et que je mets cette page à jour tous les 42èmes du mois, je ne me suis pas penché sur la présentation du site. En tous cas, voici une archive pour ceux qui n'ont pas le courage de charger chaque fichier indépendament.
Première partie : validation d'un benchmark libre (GLMF n°73 de juin 2005) taille nom 880 xy.c Crée un histogramme du champ stéréophonique d'un fichier Deuxième partie : mise en évidence de l'entropie (GLMF n°74 de juillet 2005) taille nom 929 nb_bits.c Compte le nombre de bits significatifs d'échantillons signés sur 16 bits. 1959 stats_o0-s16.c Histogramme (statistiques d'ordre 0) pour un fichier de nombres signés sur 16 bits 1781 stats_o0.c Histogramme (statistiques d'ordre 0) pour des octets non signés 1992 stats_o1-1024.c Statistiques d'ordre 1 2230 stats_o1-s16.c Statistiques d'ordre 1 pour un fichier de nombres signés sur 16 bits 1600 stats_o1.c Statistiques d'ordre 1 pour un fichier d'octets Intermède : Optimisation d'un "filtre UNIX" sous Linux (GLMF n°75 de septembre 2005) taille nom 2585 copie.c 1275 ecriture.c 2092 filtre_simple.c 3926 filtre_thread.c utilisé pour les autres articles par la suite 1299 lecture.c 3615 pb.c "Pipe Buffer", utilitaire généraliste 229 playbz2 script bash, application de l'utilitaire ci-dessus Intermède 2 : Conception et optimisation d'un algorithme de CRC (GLMF n°78 de décembre 2005) http://www.unixgarden.com/index.php/programmation/realisation-du-crc-pour-le-conteneur-mds taille nom 974 chrono.sh script pour chronomètrer les différentes versions du code de CRC16 1329 chrono.c 1645 lfsr4.c LFSR 32 bits basé sur une table, fournissant 4 bits par appel [dupliqué dans lm93] 23253 mds_crc16.c Collection de routines de CRC 16 bits, avec des optimisations variées 3778 mds_crc16_tst.c Programme de validation du CRC, avec injection de fautesIntermède de l'intermède 2 : Générateurs de nombres pseudo-aléatoires (GLMF n°81 de mars 2006) http://www.unixgarden.com/index.php/comprendre/comprendre-les-generateurs-de-nombres-pseudo-aleatoires taille nom 9411 gfsr32.c (fichier un peu fourre-tout mais pratique pour bricoler)
Erratum Dans l'article, le code tronqué est celui-ci :
%assign LFSR_POLY0 080000057h %assign LFSR_POLY1 ((LFSR_POLY0>>1)|(LFSR_POLY0<<31)) & 0FFFFFFFFh %assign LFSR_POLY2 ((LFSR_POLY1>>1)|(LFSR_POLY1<<31)) & 0FFFFFFFFh %assign LFSR_POLY3 ((LFSR_POLY2>>1)|(LFSR_POLY2<<31)) & 0FFFFFFFFh align 4 LFSR_TABLE: dd 0 dd LFSR_POLY0 dd LFSR_POLY1 dd LFSR_POLY0^LFSR_POLY1 dd LFSR_POLY2 dd LFSR_POLY0^ LFSR_POLY2 dd LFSR_POLY1^LFSR_POLY2 dd LFSR_POLY0^LFSR_POLY1^LFSR_POLY2 dd LFSR_POLY3 dd LFSR_POLY0^ LFSR_POLY3 dd LFSR_POLY1^ LFSR_POLY3 dd LFSR_POLY0^LFSR_POLY1^ LFSR_POLY3 dd LFSR_POLY2^LFSR_POLY3 dd LFSR_POLY0^ LFSR_POLY2^LFSR_POLY3 dd LFSR_POLY1^LFSR_POLY2^LFSR_POLY3 dd LFSR_POLY0^LFSR_POLY1^LFSR_POLY2^LFSR_POLY3 ....... mov eax,ebp ; ebp est alloué statiquement pour le LFSR and eax,byte 0Fh ; isole les 4 LSB xor ebp,[LFSR_TABLE + eax*4] ; accède à la table et applique les polynômes combinés ror ebp,4 ; rotation .......Deuxième intermède de l'intermède 2 : Propriétés et dérivés des CRC et LFSR (pseudo-CRC) (GLMF n°85 de juillet/août 2006) http://www.unixgarden.com/index.php/comprendre/comprendre-les-generateurs-de-nombres-pseudo-aleatoires taille nom 869 cycles.c (fait tourner un CRC pour trouver les cas pathologiques) 1691 avalanche.c (affiche la répartition des bits et la propagation d'une erreur dans le registre) 1483 positif.c (étudie la génération des "faux positifs" pour un CRC et un pseudo-CRC) 934 gene16.c (cherche un trinôme générateur dans GF(2^16)) 3917 primitifs.c (Cherche tous les poly générateurs dans GF(2^x), avec x entre 3 et 31) Suite de l'intermède de l'intermède 2 : conception de l'algorithme CRC16-64 (première partie : le scanner/balayage à haute vitesse) (GLMF n°93 d'avril 2007) taille nom 13075 crc16-64.c (Le code source de l'algorithme de balayage CRC16-64) 3237 def64.h (fichier de définitions pour l'utilisation "transparente" du MMX et autres joyeusetés, en 64 bits et bi-endian) 1759 lfsr4.c (voir lm78, dupliqué ici aussi) 2760 machine.c (Petit programme de détection de l'architecture, qui génère machine.h) 1293 machine.h.template (Exemple de fichier à modifier si machine.c ne fonctionne pas) 1424 README.txt (à lire) 364 README.unix (à lire pour autre chose que GNU/Linux) 2804 runme.sh (script pour plateformes GNU) 2153 runme.unix.sh (script générique pour machines non-GNU) 4106 test_crc16-64.c (programme pour tester crc16-64.c) 25978 testcrc.ref.BE (empreintes de référence Big Endian) 25978 testcrc.ref.LE (empreintes de référence Little Endian) Intermède tout court : Personnalisation (un peu brutale) du système de login et des terminaux virtuels (GLMF n°94 de mai 2007) taille nom 378 modifs.sh (Fichier de commandes générales, qui modifie le système) 267 esstab.sh (Script qui ajoute des entrées bien utiles dans /etc/fstab) 461 .bash_logout (à installer dans le répertoire /root, recherche les VT ouverts et switche dedans) 1120 inittab (exemple de /etc/inittab utilisant vtpool) 2616 profile (exemple de /etc/profile, ajoute des fonctions essentielles au système de vtpool) 279 rc.local (contient juste la commande chvt 2, à mettre dans /etc/rc.d/) 251 vtpool (Script qui lance un nouveau terminal dans un VT inutilisé, si on appuie sur Entrée) (Toujours sur les CRC) tGFSR32x4 : un nouvel algorithme pour la signature de données (GLMF n°96 de juillet/août 2007) taille nom Introduction : 34274 lookup3.c (Miroir de http://burtleburtle.net/bob/c/lookup3.c) 9411 gfsr32.c (Voir plus haut GLMF n°81) Mesure des longueurs de cycles 1830 tGFSR32x4.c (Mesure de la période du tGSFR pour différents MMUL et 3 ou 4 mots) 166 test_cycles_3regs.sh (Périodes pour tGFSR32 à 3 registres) 1350 balaye_3regs (Résultat du script ci-dessus) 152 test_cycles_4regs.sh (Périodes pour tGFSR32 à 4 registres) 1374 balaye_4regs (Résultat du script ci-dessus) Mesure de vitesse 366 runme.sh (Script de collecte des informations sur le système à tester) 2938 time_tgfsr32x4.c (code source du chronométrage) Test d'initialisation 986 test_init3.c (Teste 256 valeurs d'initialisation) 1210 test_init5.c (Teste les constantes d'initialisation standard) Topologie de l'espace d'état 1863 cycles.c (Le programme d'exploration des cycles) 628 cycles.out (Le résultat du programme) Linéarité 2023 linearite.c (Cherche un contre-exemple de la relation linéaire entre la donnée et sa signature) Effet d'avalanche 1133 avalanche.c (code source) 40982 avalanche.out (sortie du programme) 1118 avalanche2.c (pareil mais pour sortie "bytemap") 33000 avalanche2.out (sortie du programme) (La suite) Prologue et épilogue de l'algorithme de signature rapide tGFSR32x4 (GLMF n°98 d'octobre 2007) note : j'ai trouvé un ou deux petits problèmes sur plateformes "true 64 bits" après la parution de l'article. taille nom 3398 machine/machine.c (Source du programme qui génère le contenu de machine.h) 1456 machine/machine.h.template (Configuration manuelle des paramètres, si machine.c n'arrive pas à générer machine.h) 918 machine.sh (Script de détection des paramètres du processeur, nouvelle mouture) 88 clean.sh (Pour effacer les fichiers générés par runme.sh) 1057 def32.h (Définitions pour travailler en 32 bits) 3704 def64.h (Définitions pour travailler en 64 bits, nouvelle mouture !) 1759 lfsr4.c (Le même générateur pseudo-aléatoire que les autres mois) 170 runme.sh (Script qui compile et lance le test) 16076 test_LE.out (Ce que devrait donner le test sur une machine Little Endian) 1186 test_tGFSR32x4.c (Programme qui donne des octets à signer à la routine) 6774 tGFSR32x4.c (La routine de signature dont il est justement question dans tous ces articles) (Interlude) Algorithme de fragmentation pour MDS (GLMF n°99 de novembre 2007) Retrouvez cet article sous licence CreativeCommons sur UnixGarden.com ! 802 algo1_naif.c (algorithme naïf) 1025 algo2_division.c (algorithme à divisions successives) 1607 algo3_pow2.c (algorithme à décalages successifs) 1692 algo4_simple.c (algorithme amélioré) 1909 algo5_general.c (algorithme final) (Rien à voir) Accéder aux fichiers en JavaScript (ou le Cross-Site Scripting utile) (GLMF n°105 de mai 2008) 1469 save_as_open_window.html (sauve des données en les envoyant dans une nouvelle fenêtre) 5750 loopback.php (script serveur qui transforme une requête POST en fichier à télécharger) 2536 save_lb.html (script client qui utilise le loopback ci-dessus) 1198 load.html (application simple de XMLHttpRequest();) 963 exemple_iframe.html (idem mais en redirigeant le résultat vers une IFRAME) 1254 css1.html (page mère pour intercommunication entre pages) 315 css2.html (page fille qui communique avec css1.html) 5430 saveload.html (Tout dans une seule page, avec d'autres techniques intéressantes) (Autre chose encore) Introduction à la programmation graphique avec le framebuffer (GLMF n°106 de juin 2008) 1036 rectangle.c (trace un rectangle à l'écran avec les fonctions POSIX) 2865 fb_test.c (idem mais avec l'accès direct à la mémoire de l'écran) 8686 vesalist_20080519.tgz (utilitaire en assembleur à copier sur un secteur de boot pour lister les modes graphiques avec l'interface VBE3)
Erratum du 4 avril 2006 La suite des nombres pour lesquels le trinôme xn+x+1 est primitif est fausse (Bruce Schneier écrirait-il des conneries ???). Pour n<=30, c'est primitif pour
4, 6, 7, 15, 22 (vérifiés par mes soins après la parution de l'article, sur objection d'un lecteur attentif)(où est le deuxième article sur le framebuffer ?)
(vraiment rien à voir) Un algorithme additif et itératif pour construire les Nombres Premiers (GLMF n°121 de novembre 2009) http://www.unixgarden.com/index.php/programmation/un-algorithme-additif-et-iteratif-pour-construire-les-nombres-premiers 2183 premiers.html (Page en JavaScript qui génère quelques nombres premiers avec le "crible inverse") Un mini serveur HTTP pour dialoguer avec des applications interactives (partie 1 : les sockets réseau) (GLMF n°141 septembre 2011) 2552 serv_1_simple.c 2898 serv_2_reuseAddr.c 3667 serv_3_nonblock.c 4730 serv_4_FSM.c 7171 serv_5_IPv6.c Comment contrôler les GPIO du Raspberry Pi par HTTP en C (OpenSilicium n°6, mars-mai 2013) 6996 serv_echo.c Serveur qui renvoie le paquet et ferme la connexion 7593 serv_6_1ou0.c serveur qui reçoit une commande dans l'URL 7625 serv_7_on-off.c Serveur qui allume la LED en fonction de l'URL 7650 serv_7_on-off__old.c Ancienne version telle que publiée 3076 PI_GPIO.c Fonctions spécifiques à RPi (2 bugs en moins que dans le magazine !) Pour RPi2 ou RPi3, voir la version mise à jour de PI_GPIO.c à https://hackaday.io/project/17066-c-gpio-library-for-raspberry-pi Pour le serveur HTTP et HTTaP, voir https://hackaday.io/project/20042-micro-http-server-in-c D'autres fichiers publiés autour de sept. 2014 sont dans Pi. Voir aussi (attention aux liens brisés) http://ygdes.com/GHDL/ http://www.unixgarden.com/index.php/gnu-linux-magazine/quelques-techniques-d-optimisation-en-c http://www.unixgarden.com/index.php/gnu-linux-magazine/adieu-a-uqbar-le-supercluster-vectoriel-de-l-idris http://www.unixgarden.com/index.php/programmation/algorithme-de-fragmentation-pour-mds http://connect.ed-diamond.com/GNU-Linux-Magazine/GLMF-121/Un-algorithme-additif-et-iteratif-pour-construire-les-Nombres-Premiers http://www.unixgarden.com/index.php/comprendre/comprendre-les-generateurs-de-nombres-pseudo-aleatoires http://www.unixgarden.com/index.php/programmation/realisation-du-crc-pour-le-conteneur-mds http://www.unixgarden.com/index.php/gnu-linux-magazine/sciencestheorie-de-l-information-proprietes-et-derives-des-crc-et-lfsr