Overblog
Suivre ce blog Administration + Créer mon blog
11 mars 2022 5 11 /03 /mars /2022 04:12
Nébuleuses de synthèse avec Python ou une NFT gratuite!

   Et voici un programme typique années '80s: pas orienté objet du tout et programme graphique de base initialement codé (programmé on disait à l'époque) en Gw-Basic et Q-Basic (QBasic, Quick Basic). J'avais envie de le remettre au goût du jour sous des machines Windows ne comportant plus le MS-DOS (et donc les langages Basic cités ici), et qui a l'avantage de fonctionner également sous Linux et Mac-OS (langage Python, Python 3 ici, oblige).

   Un générateur de nébuleuses simple à utiliser... Aussi un générateur de NFT (oeuvres d'art numériques) gratuites, license CC (BY, NC, SA) = Creative Commons (By Yourself, Non Commercial, Share Alike) oblige...

   Voici le fichier .py (explications par après):

Version revue du 16/03/2022

   En réalisant ce programme récréatif graphique, ce qui m'a surtout plu est de découvrir deux codes nouveaux. En effet, si le passage du turtle en fond noir est expliqué dans le livre de démarrage du Raspberry Pi 400, j'ai découvert deux nouveaux paramètres de turtle.

   D'abord cacher la "tortue" (ou triangle pointeur) par pen(shown=False), ensuite accélérer l'exécution d'un dessin sous turtle au maximum possible par delay(0).

Partager cet article
Repost0
26 janvier 2022 3 26 /01 /janvier /2022 07:20

   Alors, ce 26 Janvier 2022 je vais enfin proposer ce module amélioré dans le blog indiqué dans l'article; ce que je n'avais pas fait primitivement. Une note: ce module, cette classe d'objet score, est dans le fichier proposé ici en UTF-8 et donc ne fonctionne pas sous Visual Studio Code tant qu'on ne l'a pas transformé en texte ASCII...

   À voir aussi en bas d'article un nouveau tutoriel vidéo sur l'usage du module (d'ici une heure: 07:40 AM).

Un module version avec classe de gestion et sauvegarde de scores d'un jeu sous Python

   Qui n'a pas déjà été triste après avoir joué à un jeu, qu'il soit programmé («codé» on dit de nos jours) en C/C++ ou en Python tant module Pygame (le plus courant) que Tkinter (tkinter depuis Python 3), de ne pas avoir la possibilité d'enregistrer son score et son pseudo? À moi, je vous l'avoue, ça m'est arrivé plus d'une fois; au point de me motiver à créer des lignes de code pour gérer un fichier contenant les dix meilleurs scores et le pseudo correspondant des joueurs.

   D'abord présenté sur le blog de www.developpez.net en version très simple, voici ici les lignes de code pouvant soit être utilisées comme module, soit, plus sûr, comme classe d'objet score à ajouter (copier-coller ou bien renommer le fichier et inclure la classe) au début de chaque jeu avant toute autres classes et en tout cas avant le programme principal du jeu lui-même.

   Bref voici le module "scoremanage":

   Évidemment ça s'adresse à ceux qui, comme moi, dès leur jeunesse ont rêvé de programmer eux-mêmes leur propre jeu. Il est clair que lorsqu'on programme un jeu, la base est d'avoir une sauvegarde et un tri des scores obtenus par des joueurs. Vous pourrez me répondre que c'est plus satisfaisant si on programme la classe de gestion de score "soi-même".

   Mais, justement, la logique de l'Open Source n'est pas «do it yourself» mais bien «do it with together», «faites le ensemble»; ce qui compte est de comprendre les lignes de codes et, pourquoi pas?, de savoir améliorer la solution proposée en imaginant d'autres usages ou besoins.

   Sinon autant dire que pour un jeu utilisant le module pygame, «autant reprogrammer soi-même l'ensemble de ce module car cela apporterait plus de satisfaction personnelle»...

   Bref:

   Plusieurs manières de l'utiliser, j'explique ici la plus flexible pour un jeu relativement complexe (2 joueurs):

#D'abord soit l'import du module soit sa copie

from scoremanage import *

#Ensuite définir l'objet

gs=Scoremanage("Zorro_sco")

#où gs n'est qu'un exemple et "Zorro_sco" le nom du fichier

#qui contient la liste des scores pour un jeu.

#Ensuite des variables contiennent les deux scores et noms des joueurs

pseudo1,score1="",1250 #ici le joueur n'a pas entré son pseudo

pseudo2,score2="optimum",3500

#Maintenant on écrit, un par un, les scores

gs.score,gs.gamer=score1,pseudo1

gs.addsco()

gs.score,gs.gamer=score2,pseudo2

gs.addsco()

#La lecture des scores renvoie une liste

scores=gs.lirsco()

#On peut réinitialiser les scores par:

gs.inisco()

#C'est tout!

   Et comme exemple concret d'utilisation un petit jeu, un classique des années fin 1960 - mi 1970 (60's - 70's):

Partager cet article
Repost0
13 décembre 2021 1 13 /12 /décembre /2021 05:54
Programme graphique qui a demandé du temps pour la finition...

   J'ajoute ici une petite modification concernant mon programme graphique "Rosaces 3.3" en "Rosaces 3.3b". Il s'agit d'améliorations de la lisibilité du programme et une fluidification des lignes de codes dans leur succession d'exécution. On pourra comparer avec le programme initial toujours présent plus bas.

   Donc, d'abord le fichier Python 3 (.py) puis sa version texte Unicode pour pouvoir comparer...

Rosaces 3.3b le programme Python 3 retravaillé en 2021.

Le fichier texte Unicode du programme pour affichage direct.

   Alors, si je suis resté au moins trois mois (quatre maintenant) sans mixes c'est que j'étais surtout pris par la programmation. D'abord programmation d'une fusion entre mes programmes graphiques de polygones et d'étoiles, fusion que je présenterai en bas d'article.

   Ensuite un programme rapide à coder, mais dont la résolution de la fluidification "comme dans la vidéo" de l'inventeur du concept a été très longue...

   À ce propos, voici la vidéo de l'inventeur en question; notez bien que son programme n'est pas le même que le miens d'autant que le code-source de son programme n'est pas public.

   Bref ça m'a donné envie de développer mon propre programme basé exactement sur le même concept, en langage Python bien entendu, le voici suivi de son code source en format texte .txt.

   Enfin, pour la fusion de polygones et étoiles; l'un avec le module Turtle, l'autre avec Tkinter. On préfèrera le premier car il laisse voir se dessiner l'étoile dans le polygone inscrit dans un cercle "comme le ferait un humain"; mais la seconde version, plus rapide et avec présence du cercle, n'est pas mal non plus...

Programme graphique qui a demandé du temps pour la finition...
Programme graphique qui a demandé du temps pour la finition...
Partager cet article
Repost0
23 octobre 2021 6 23 /10 /octobre /2021 23:00

   Récemment on apprenait que la Belgique, ses autorités législatives, veut interdire les communications chiffrées vers et à partir de son territoire. À la fois inutile et à la fois faux-cul. Faux-cul car tous nos services de sécurité (police, renseignements généraux [contrôle des partis et groupuscules idéologiques], ministère de l'Intérieur et des Affaires Étrangères [espionage et contre-espionage]) disposent déjà des logiciels leur permettant de casser un échange chiffré, que ce soit par mail, par audio, par texto, etc. Tout ce qui leur faut est évidemment l'autorisation de personnes responsables des services: juge, magistrat, ministre.

   Snowden notait par ailleurs que «interdire le chiffrement des échanges entre individus causerait beaucoup de morts»; j'approuve sauf que j'estime que ces morts ne seraient pas dû aux États mais bien plutôt aux mafias et gangs variés qui naviguent entre la politique et la drogue.

   Car, comme déjà dit, les États disposent déjà de tous les moyens pour déchiffrer ce que nous chiffrons, et le fameux désormais Pegasus en témoigne. Par contre un logiciel même moins élaboré que ce dernier coûte suffisamment cher pour ne pas être à la portée de simples individus mais seulement d'États ou groupes d'états (Union Européenne, OTAN, etc.).

   Du jour où l'on interdira le chiffrement; dès lors regarder dans le slip du voisin ne sera plus qu'un jeu d'enfant à quelques centaines d'euros et donc accessible à tous. Fini les enquêtes de journalistes d'investigation, fini les plaintes de citoyens, fini en fait énormément de choses; du moins "fini sans risques de se faire écraser par une voiture".

   Le législatif belge d'argumenter que «cela facilitera nos enquêtes». Enquêtes sans contrôle de la Justice et des Ministres compétents certes, mais cela ne constitue pas une avancée démocratique. Pour le reste au contraire: un enquêteur sera vite repérable au fait que, lui, dispose d'une application de chiffrement.

   Si j'ajoute à cela que en Belgique, suite aux attentats islamistes, on a fait passer un registre national des numéros de téléphone tant fixes que portables, tant avec abonnement que à cartes prépayées, le risque pour les citoyens ne provient pas vraiment de l'État (qui a déjà les moyens de le surveiller même sur du chiffré comme déjà dit ici) que des différents groupes extrémistes et mafieux.

   Que ce registre des numéros soit piraté et on ne comptera plus les emmerdes subies par les citoyens...

   Bref, il faut sauvegarder notre droit à chiffrer nos communications pour continuer à vivre sous la loi démocratique et non sous la loi des gangs et des mafieux!!!

-----------------

   J'en profite donc pour partager ici un utilitaire de chiffrement de fichiers (tous types de fichiers, mais réellement efficace qu'avec les fichiers pur texte) de ma composition. Il a été programmé initialement sous Linux via Python. Il fonctionne à partir de Python 3, donc pas sous VS-Code qui utilise une version antérieure. Et comme c'est écrit en Python, moyennant la présence de cet interprétateur sur l'ordinateur il peut être utilisé tant sous Linux que Windows que Mac-OS.

   Alors je sais qu'il existe un module Python nommé "cryptography" et dédié à ce genre de choses mais je ne sais pas l'utiliser (je débute à peine en langage Python). C'est donc avec le premier algorithme inventé par les hackers de l'époque de la sortie de MS-DOS et de la programmation BASIC que j'ai effectué les opérations de (dé)chiffrement.

   Fichier Python ici:

Partager cet article
Repost0
9 septembre 2021 4 09 /09 /septembre /2021 08:59

   Je sais que pour programmer des jeux en langage Python, la préférence se porte sur le module "pygame" mais comme il n'est pour l'instant pas disponible en 64 bits, que par ailleurs il n'est pas forcément préinstallé avec le téléchargement par défaut d'un IDE (EDI) Python, et qu'ensuite je ne le maîtrise pas à 100%; j'ai voulu utiliser le module universel tous OS (32 et 64 bits) de Python: tkinter.

   Un petit et bête jeu qui m'aura demandé trois jours pour résoudre le problème suivant: comment remplacer une photo par une seconde photo dans le canevas (Canvas)? Puis un quatrième jour pour la finition, sans compter les nuits (deux) que j'ai passées dessus.

   Bref, tête dans les étoiles, nous rêverons donc, comme Elon Musk, de conquête spatiale et de Mars...

   Dossier zippé et gratuit ici; il contient le programme et deux photos en format GIF, pas de son pour ce programme malheureusement ou tant mieux je sais pas:

Partager cet article
Repost0
29 août 2021 7 29 /08 /août /2021 07:47

   Exercice corrigé et expliqué pour la version Wikipédia Qibla.xls . C'est la version qu'on peut qualifier de "Halal".

Un problème de trigonométrie appliquée: le calcul de la Qibla

   Alors, j'ai continué mon exercice. L'exercice consiste à trouver la direction selon une boussole de la Kaaba (la Qibla donc) depuis un lieu dont on connaît les coordonnées de latitude et longitude.

   La réponse sur Wikipédia (voir fichier Qibla.xls et lien inclus dedans vers l'article) fonctionne parfaitement pour le calcul le plus admis dans le monde entier de la direction de la Qibla. C'est-à-dire qu'il y a une particularité pour, par exemple, les Amériques: ainsi à New-York ce n'est pas vers le Sud-Est mais bien vers le Nord-Est que je dois me tourner pour prier.

   Pour certains résultats qui sembleraient inadéquats (pour le Maroc par exemple) se reporter à l'article https://fr.wikipedia.org/wiki/Qibla qui explique avec un très bon graphique ces semblant d'incohérences. En fait ces incohérences sont dues au fait qu'il s'agit d'angles de boussole, et non de l'angle depuis le lieu où je suis dans l'absolu. C'est-à-dire qu'il faut que ce soit un angle d'un tracé allant entre non deux lieux (celui où je me trouve et la Kaaba) mais bien entre trois lieux: le Pôle Nord, le lieu où je me trouve et la Kaaba! J'y reviens en fin d'article.

   Cette position avait fait débat et a été tranchée par une majorité des autorités religieuses musulmanes; c'est bien ainsi qu'il faut le pratiquer même si une petite dissidence continue de prier au Sud-Est.

   L'équation qu'on peut qualifier de "Halal" est donc bien celle de Wikipédia en Qibla.xls.

   Bref voici le fichier:

Selon Wikipédia

   En fait ces semblances d'incohérences sont dues à ce qu'il s'agit certes d'angles de boussoles mais rapportés sur une sphère! La Terre réelle qui est bien une sphère et donc ces angles obtenus ne sont pas à comparer avec une mappemonde plate surtout projection Mercator comme je l'avais initialement réalisé car, comme moi alors, on ne saurait comprendre l'enjeu de cette sphéricité sur les angles.

   Pour illustration le dessin ci-dessous d'une sphère avec deux méridiens et deux parallèles, l'une au Nord, l'autre au Sud, qui montrent clairement que à mêmes latitudes deux points de longitudes différentes ne se trouvent pas forcément à 90° de boussole; en fait ça dépend de la latitude.

Un problème de trigonométrie appliquée: le calcul de la Qibla

   À cette sphéricité s'ajoute l'origine "naturaliste" de la détermination de la Qibla, qui explique le choix du calcul par le Grand Cercle. Il ne s'agit donc pas d'un argument d'autorité (car ce n'est pas parce que l'on est nombreux à avoir tort que l'on aurait pour autant raison; les arguments d'autorité sont donc des non-arguments) mais bien d'un argument scientifique et raisonné que je vais aussitôt expliquer.

   L'origine "naturaliste" détermine la Qibla non par des calculs mais bien par la définition qui veut que l'on se tourne vers la direction marquée lorsque le Soleil est au zénith de la Kaaba, exactement au-dessus.

   Or lorsque le Soleil est au zénith de la Kaaba, si je prolonge l'axe Soleil-Kaaba j'arrive à l'exact centre de la Terre. Ce qui fait que forcément tout point depuis lequel je me tourne vers la Qibla passe forcément par un cercle dessiné par ce rayon terrestre, définition même du Grand-Cercle!

   Ce qui explique finalement pourquoi si je me place à la même latitude que la Kaaba mais au milieu de la Mauritanie (disons longitude de -10° Ouest) j'obtiendrai un angle non de 90° mais bien de 80,4° de boussole! Et ce résultat bien que surprenant est tout-à-fait exact et halal.

   En effet: je dois prendre en compte non-seulement la déformation des méridiens mais aussi le fait qu'il s'agit du grand-cercle et non d'une simple parallèle à l'équateur (petit-cercle).

Partager cet article
Repost0
22 avril 2021 4 22 /04 /avril /2021 21:33

   Avant de passer une matinée à améliorer ce qui avait déjà été fait (2 modules seulement) et à programmer et déboguer le reste, puis tester, et bien avant tout cela, et après une 50 cl de bière Heineken hollandaise d'Amsterdam, je me suis dit «et si j'enregistrais une minute de silence?» principalement pour tous les dégâts causés par le CoViD-19 sur les démocraties mais aussi les morts dans le monde entier.

   Enregistrer une minute de silence c'est pas si simple qu'il n'y paraît mais pour s'acharner là-dessus faut être un peu con. Mais comme disais Serge Gainsbourg: «la connerie est la décontraction de l'intelligence»; et personnellement j'ajouterai que malheureusement «pour les cons, l'intelligence est une torture»...

   Mais bon. Voici donc la minute de pur silence:

   Alors, du plus sérieux maintenant: parlons programmation en langage Python d'un gestionnaire de QCM (Questionnaire à Choix Multiples) d'évaluation (donc à notation, cotation, points). Grosso-modo je ne vais pas m'étendre sur les explications de la logique des codes-sources des différents modules; je vais juste tenter de présenter un mode d'emploi.

   En premier l'enseignant devra écrire via un éditeur de texte simple mais permettant d'enregistrer au format UTF-8 (ainsi Bloc-Notes sous Windows, MousePad sous Linux ou tout autres, il y en a aussi pour le Mac OS) le QCM à proposer à l'étudiant.

   Là il faut expliquer la logique de l'écriture car il y a un peu de choses du type "hypertexte" à ajouter. On prendra en exemple celui qui m'a servi de test:

   Donc on remarque d'abord des entrées à la ligne manuelles. Très important ça. Aussi des paragraphes, dont celui d'introduction, terminés par une ligne ne comprenant que deux étoiles "**". Ces ** indiquent aux logiciels qu'il s'agit d'un paragraphe de remarque n'appelant aucune réponse autre que la touche [Entrée]. Ce sont des formes de remarques-pauses dans le déroulement du QCM.

   Lorsque des choix arrivent, numérotés à partir de 1, à la fin de ces choix on remarque deux lignes: une premières de double-moins "--" indiquant aux programmes qu'un choix est posé et une suivante avec un numéro qui correspond au nombre de choix laissés.

   Juste après ça reprend. La dernière ligne ne peut être un **, mais doit être laissée vide.

   À noter qu'il n'y a qu'un choix possible. Que le choix zéro (0) est proposé par les programmes et correspondent à «Je ne sais pas / aucune réponse satisfaisante»; ce qui est important car cela signifie que le choix 0 peut très bien valoir des points.

   Après avoir enregistré, dans le même répertoire que le répertoire où se trouvent les modules Python, le fichier texte QCM (pour moi ça a été "cg1A01.txt"), l'enseignant devra exécuter configQCM.py afin de sauvegarder les notes attribuées à chaque réponse de chaque question dans un fichier binaire "points..." (ici "pointscg1A01.txt").

   L'exécution de verifQCM.py sert à générer un fichier pur texte UTF-8 mais dont le format d'entrée de lignes dépendra de l'OS sur lequel on l'aura exécuté (Windows, Linux, Mac OS) qui synthétise l'ensemble des notes attribuées dans le fichier "correct...".

   L'étudiant, lui, ne doit disposer que de trois choses: un numéro ou "matricule" d'étudiant, le logiciel remplirQCM.py, et le fichier de QCM dont je parlais en premier. Il en retire un fichier "r"+"numéro d'étudiant"+"nom du fichier QCM" (tel "r001cg1A01.txt").

   C'est ce fichier "r" qui doit être renvoyé au professeur qui alors exécutera corrigerQCM.py pour chaque matricule d'étudiant et qui génère un autre fichier pur texte "t..." ou "temp..." si je me souviens bien.

   Le résultat, les notes, sont indiqués en points et en pourcentage à une décimale après la virgule près et peut (doit) être intégrée dans un tableur reprenant les notes générales de tous les étudiants.

   Bref voici ces logiciels Libre et Open Source et Gratuits:

Partager cet article
Repost0

Présentation

  • : Town Ground anc. Igor Gorovitch
  • : Créations électroniques d'un dissident du numérique bien intégré. Musique style 90's et (un peu) programmation style années 1980 (80's). Les eighties au cœur.
  • Contact

Recherche