Le seul ordinateur qui me reste sous Windows fonctionne avec Windows 2000. Une antiquité donc. Ayant besoin d’installer Latis Pro 5.6.25.0 (qui ne fonctionne que sous Windows), je me suis résolu à l’installer sur mon vieux système. Et là patatras, j’ai un message qui m’indique que la bibliothèque de liaisons dynamique gdiplus.dll est introuvable. Après une trop longue recherche sur Internet, j’ai résolu le problème en mettant le fichier en question (issu du patch de sécurité WindowsXP-KB975337-x86-ENU) dans le répertoire LatisPro (C:\Program Files\Eurosmart\LatisPro). L’installation du logiciel en version gratuite se fait avec la clé « LTP 111 222 333 » (sans limitation de temps ; les acquisitions ne sont toutefois pas possibles).
Turbo Pascal : BGIDriv et BGIFont
Dans un de mes programmes écrit avec Turbo Pascal, plus de 20 ans après, je ne savais plus d’où sortaient les unités BGIDriv et BGIFont alors j’ai tout repris à zéro :
Créer un répertoire C:\TEMP (mkdir temp dans DOSBox).
Copier dans ce répertoire les fichiers BGIDRIV.PAS, BGIFONT.PAS, BGILINK.PAS, BGILINK.MAK qu’on trouve dans ~/DOSBox/TP7/EXAMPLES/BGI.
Copier dans ce même répertoire tous les fichiers .CHR et .BGI qu’on trouve dans ~/DOSBox/TP7/BGI.
Modifier BGILINK.MAK en remplaçant BGI = ..\..\bgi par BGI = \TEMP
Dans DosBox, taper :
cd temp
make -fbgilink.mak
BGIDRIV.TPU et BGIFONT.TPU sont alors créés.
Les copier dans ~/DOSBox/PERSO/TP7/BUILD/.
On peut ensuite supprimer C:\TEMP.
Seules GothicFont (GOTH.CHR), SmallFont (LITT.CHR), TriplexFont (TRIP.CHR) et SansSerifFont (SANS.CHR) sont intégrées dans l’unité BGIFONT.TPU.
Pour BoldFont (BOLD.CHR), EuroFont (EURO.CHR), ComplexFont (LCOM.CHR), SimplexFont (SIMP.CHR), ScriptFont (SCRI.CHR) et TriplexScriptFont (TSCR.CHR), il faut utiliser InstallUserFont de l’unité Graph. J’en parlerai plus tard…
C282
C282 est un programme que j’ai écrit en 1996 avec Turbo Pascal 6 (Pascal + Assembleur). Paru une première fois dans la revue de poésie expérimentale Doc(k)s / Alire 10, il ne disposait pas à l’époque de régulateur de vitesse. La capture vidéo qui suit concerne une version de 2000 :
Merci Internet : Grâce à SWAG Archive, j’ai pu remettre la main sur des bibliothèques que j’avais perdues :
High Resolution Timer de TurboPower Software (Unit TpTimer),
Palette Manipulation de David Dahl (Unit Palette).
Turbo Pascal et DOSBox
J’ai adoré en son temps programmer avec Turbo Pascal. Aujourd’hui, je souhaite m’y replonger pour diverses raisons. J’ai installé il y a quelques jours DOSBox (sous Debian). Au tour de Turbo Pascal… avant d’aller voir peut-être du côté de Free Pascal.
Dans mon répertoire ~/DOSBox, j’ai créé un répertoire TP7 dans lequel j’ai décompressé l’archive tp7.zip téléchargeable après inscription sur le site Developpez.com ou directement depuis leur ftp.
Dans la console, taper :
nano ~/.dosbox/dosbox-0.74-2.conf
et modifier le fichier dosbox-0.74-2.conf :
[autoexec]
mount C ~/DOSBox
path=/TP7/BIN
C:
Pour accéder à Turbo Pascal, il ne reste plus qu’à taper turbo dans DOSBox.
Pour basculer entre le mode fenêtré et le mode plein écran, presser Alt-Entrée. Pour libérer le curseur de la souris, presser Ctrl-F10.
File > Change dir…
Options > Directories
EXE & TPU directory: C:\PERSO\TP7\BUILD
Unit directories: C:\TP7\UNITS;C:\PERSO\TP7\SRC\LIB
Options > Save
Quelques Liens :
Les manuels de Borland sur le Turbo Pascal (en pdf)
Turbo Pascal 7.0 : Différents types de variables
SWAG : SourceWare Archive Group => allswags.zip (29/11/1997)
https://turbo-pascal.developpez.com
https://github.com/johangardhage/dos-tpdemos
Snap Circuits
Voici un excellent kit d’expérimentation pour initier un enfant à l’électronique : il s’agit de Snap Circuits d’Elenco. Le produit est en langue anglaise mais quelques livrets sont traduits en français.
Les boîtes de base :
Projets 1-101 (en français)
Projets 102-305 (en français)
Projects 306-511 (en anglais)
Projects 512-692 (en anglais)
On peut trouver les kits Snap Circuits sur ce site :
https://www.robotshop.com/eu/fr/snap-circuits-fr.html
En plus des boîtes de base, il y a quelques boîtes à thèmes dont :
Snaptricity (en anglais)
Light (en français)
Sound (en anglais)
Motion (en anglais)
Arcade (en français)
STEM (en anglais)
Green (en anglais)
Understanding Logic Gates & Circuits (en anglais)
On peut aussi fabriquer ses propres modules en s’inspirant de cette vidéo (impression 3D et boutons pression anorak de 12 mm).
Installation de DOSBox sous Debian 10
DOSBox est un émulateur simulant un environnement compatible MS-DOS dans le but d’exécuter des programmes développés autrefois pour ce système. Il se trouve que j’ai besoin de faire tourner certains de mes vieux programmes…
Dans la console :
sudo apt-get install dosbox
mkdir ~/DOSBox (ou un autre chemin)
nano ~/.dosbox/dosbox-0.74-2.conf
Modifier le fichier dosbox-0.74-2.conf :
[cpu]
cycles=max (à la place de cycles=auto)
[dos]
keyboardlayout=fr (à la place de keyboardlayout=auto)
[autoexec]
mount c ~/DOSBox (pour un chemin qui contient des espaces, mettre le chemin entre guillements : " ")
Lancer DOSBox depuis la console :
dosbox
Dans DOSBox :
c:
dir
Pour basculer entre le mode fenêtré et le mode plein écran, presser Alt-Entrée. Pour libérer le curseur de la souris, presser Ctrl-F10.
Complément personnel à mettre dans le fichier dosbox-0.74-2.conf dont il est question ci-dessus :
[autoexec] # Lines in this section will be run at startup. # You can put your MOUNT lines here. mount c "/media/eric/Fichiers Eric/Programmation/DOSBox/" c: ### OPEN WATCOM 1.9 ### path=%path%;c:\watcom\binw set include=c:\watcom\h set watcom=c:\watcom set edpath=c:\watcom\eddat set wipfc=c:\watcom\wipfc ### TURBO PASCAL 7.0 ### path=%path%;c:\tp7\bin ### NASM 2.15.05 ### path=%path%;c:\nasm
Puissance 4 en Python : Création d’une nouvelle IA
Etant donné les résultats de la compétition précédente concernant IA3 et IA7 (7 victoires chacune) et le faible score d’IA6 alors qu’entre IA6 et IA7 il n’y a qu’une inversion (B2PH et A2PH), je vais introduire une nouvelle IA (IA10) avec comme priorités : A4PH / B4PH / B3PH / B2PH / A3PH / A2PH / PH. Il s’agit donc d’une IA offensive. Elle reste cependant facile à battre pour un humain (Les alignements « troués » ne sont toujours pas pris en compte).
Présentation des résultats :
Sur 1 million de parties, les résultats bruts sont :
IA10 / IA0 / Nulles : 984 590 / 14 607 / 803
IA10 / IA1 / Nulles : 670 273 / 0 / 329 727
IA10 / IA2 / Nulles : 883 310 / 116 690 / 0
IA10 / IA3 / Nulles : 201 453 / 157 344 / 641 203
IA10 / IA4 / Nulles : 710 937 / 210 235 / 78 828
IA10 / IA5 / Nulles : 400 016 / 390 242 / 209 742
IA10 / IA6 / Nulles : 1 000 000 / 0 / 0
IA10 / IA7 / Nulles : 166 433 / 112 602 / 720 965
IA10 / IA8 / Nulles : 555 897 / 314 420 / 129 683
IA10 / IA9 / Nulles : 507 615 / 4 644 / 487 741
IA10 / IA10 / Nulles : 178 886 / 179 550 / 641 564
Yann Le Cun : Quand la machine apprend
Yann Le Cun, prix Turing 2018, publie ce mois-ci chez Odile Jacob un livre qui explique à travers son parcours de chercheur les bases de l’apprentissage par la machine.
Création d’un canal public sur la messagerie Telegram
En complément de ce site, je viens de créer un canal public sur la messagerie Telegram. Pour y accéder, suivre le lien : https://t.me/s/entropie_org.
Puissance 4 en Python : Réactualisation de la compétition entre IA (0 à 9)
Suite à l’introduction d’une faible part d’aléatoire dans le codage des IA (voir article précédent), une mise à jour s’impose.
Présentation des résultats :
Sur 1 million de parties, les résultats bruts sont :
IA0 / IA0 / Nulles : 498 749 / 498 630 / 2 621
IA1 / IA0 / Nulles : 877 813 / 122 165 / 22
IA2 / IA0 / Nulles : 970 751 / 29 249 / 0
IA3 / IA0 / Nulles : 963 172 / 26 350 / 10 478
IA4 / IA0 / Nulles : 986 385 / 13 601 / 14
IA5 / IA0 / Nulles : 984 896 / 15 012 / 92
IA6 / IA0 / Nulles : 988 261 / 11 645 / 94
IA7 / IA0 / Nulles : 986 483 / 13 095 / 422
IA8 / IA0 / Nulles : 969 613 / 30 376 / 11
IA9 / IA0 / Nulles : 944 008 / 55 872 / 120
IA1 / IA1 / Nulles : 469 129 / 468 488 / 62 383
IA2 / IA1 / Nulles : 1 000 000 / 0 / 0
IA3 / IA1 / Nulles : 533 878 / 0 / 466 122
IA4 / IA1 / Nulles : 583 322 / 416 678 / 0 **
IA5 / IA1 / Nulles : 979 151 / 0 / 20 849
IA6 / IA1 / Nulles : 500 000 / 500 000 / 0
IA7 / IA1 / Nulles : 752 809 / 0 / 247 191
IA8 / IA1 / Nulles : 749 970 / 250 030 / 0
IA9 / IA1 / Nulles : 513 791 / 402 861 / 83 348 **
IA2 / IA2 / Nulles : 500 000 / 500 000 / 0
IA3 / IA2 / Nulles : 738 376 / 190 170 / 71 454 **
IA4 / IA2 / Nulles : 1 000 000 / 0 / 0
IA5 / IA2 / Nulles : 1 000 000 / 0 / 0
IA6 / IA2 / Nulles : 958 403 / 41 597 / 0
IA7 / IA2 / Nulles : 708 737 / 291 263 / 0
IA8 / IA2 / Nulles : 407 473 / 592 527 / 0 **
IA9 / IA2 / Nulles : 333 884 / 666 116 / 0
IA3 / IA3 / Nulles : 180 253 / 179 288 / 640 459
IA4 / IA3 / Nulles : 210 562 / 711 181 / 78 257
IA5 / IA3 / Nulles : 390 837 / 399 848 / 209 315 **
IA6 / IA3 / Nulles : 0 / 749 868 / 250 132
IA7 / IA3 / Nulles : 113 404 / 166 407 / 720 189
IA8 / IA3 / Nulles : 314 354 / 555 529 / 130 117 **
IA9 / IA3 / Nulles : 143 539 / 106 110 / 750 351
IA4 / IA4 / Nulles : 499 900 / 500 100 / 0
IA5 / IA4 / Nulles : 1 000 000 / 0 / 0
IA6 / IA4 / Nulles : 125 486 / 125 397 / 749 117
IA7 / IA4 / Nulles : 624 828 / 0 / 375 172 **
IA8 / IA4 / Nulles : 116 529 / 883 471 / 0
IA9 / IA4 / Nulles : 53 125 / 874 902 / 71 973
IA5 / IA5 / Nulles : 500 107 / 499 893 / 0
IA6 / IA5 / Nulles : 0 / 1 000 000 / 0
IA7 / IA5 / Nulles : 523 509 / 434 870 / 41 621 **
IA8 / IA5 / Nulles : 727 853 / 272 147 / 0 **
IA9 / IA5 / Nulles : 0 / 746 805 / 253 195
IA6 / IA6 / Nulles : 0 / 0 / 1 000 000
IA7 / IA6 / Nulles : 1 000 000 / 0 / 0
IA8 / IA6 / Nulles : 244 349 / 744 638 / 11 013 **
IA9 / IA6 / Nulles : 500 000 / 500 000 / 0
IA7 / IA7 / Nulles : 166 210 / 166 396 / 667 394 **
IA8 / IA7 / Nulles : 858 227 / 133 496 / 8 277
IA9 / IA7 / Nulles : 0 / 635 147 / 364 853 **
IA8 / IA8 / Nulles : 499 861 / 500 139 / 0
IA9 / IA8 / Nulles : 250 253 / 749 747 / 0 **
IA9 / IA9 / Nulles : 381 972 / 381 387 / 236 641
Bilan (Nombre de victoires) :
IA0 : 0
IA1 : 1
IA2 : 4
IA3 : 7
IA4 : 5
IA5 : 6
IA6 : 3
IA7 : 7
IA8 : 5
IA9 : 2
Quelques paradoxes :
IA6 bat très largement IA2 ; IA2 écrase IA1 et pourtant on n’arrive pas à départager IA6 et IA1. IA5 écrase IA4 ; IA4 bat largement IA8 et paradoxalement IA8 bat IA5. IA7 écrase IA6 ; IA6 bat largement IA8 et paradoxalement IA8 bat largement IA7.
Code source sur GitHub.