[Bêta] PythonExtra.
Posté le 29/10/2022 09:49
PythonExtra est un add-in Python alternatif pour (à ce stade) Graph 35+E II, Prizm et Graph 90+E. L'objectif est de fournir plus de fonctionnalités : modules standard,
getkey(), fonctions de dessin plus performantes, etc.
Version Bêta 0.2
Graph 35+E II / Prizm / Graph 90+E : PythonExtra-pe-0.2.0-beta.zip
Aperçu de PythonExtra sur Graph 90+E. (Cliquez pour agrandir)
Description sommaire des fonctionnalités :
- Compile pour Graph 90+E (fx-CG 10/20/50) et Graph 35+E II (fx-9860G III)
- Peu de RAM sur Graph 35+E II (c'est difficile d'en trouver sur ce modèle)
- Un shell pas trop mal (saisie rapide, scrolling) avec de bonnes performances
- Plein de modules standard
- array, builtins, cmath, collections, io, math, random, struct, sys, time
- Le module spécifique CASIO : casioplot (fidèle à part sur les polices)
- Un nouveau module gint avec les fonctionnalités avancées de gint :
- Pour l'instant, une bonne partie de <gint/display.h> et <gint/keyboard.h>
- Donc getkey() (attente de touche) ainsi que keydown() (test instantané) !
- Et des fonctions de dessin rapides comme dline() ou drect()
Le plan actuel :
- Être sensiblement compatible avec l'appli Python officielle.
- Pousser les fonctionnalités ajoutées pour vraiment relever le niveau de Python !
- Si du temps de développement se débloque : support autres Graph mono (pas de promesses).
Updates et screenshots à venir. Je n'ai pas l'intention d'implémenter un million de fonctionnalités, juste ce qu'il faut pour s'assurer que ça ne finisse pas mal documenté et non maintenu comme CasioPython.
Dépôt Git :
https://gitea.planet-casio.com/Lephenixnoir/PythonExtra
PythonExtra est notamment possible grâce à l'aide précieuse de
Mb88.
Comparaison directe
Dans l'exemple ci-dessous (
réalisé par Mb88), un Flappy Bird déjà bien optimisé (dessin partiel etc, à gauche) est accéléré un bon gros coup en utilisant PythonExtra et le module
gint pour le dessin (à droite).
Contexte historique
Aux
journées APMEP 2022, redgl0w racontait comment le port MicroPython pour Numworks n'était finalement pas super difficile. Moi je parlais de comment un port maison résoudrait le problème de
getkey(), et Critor m'a convaincu d'essayer sur-le-champ.
En fin de compte, j'ai clôné MicroPython Dimanche à midi et à 1 heure du matin j'avais un port fonctionnel avec
getkey() sur ma Graph 90+E (que j'ai d'ailleurs montré à CASIO Lundi, pour la démo). Comme quoi, des fois ça marche tout seul !
(Enfin, le début marche tout seul. Faire une bonne UI et gérer tous les détails ensuite c'est une autre paire de manches !)
Fichier joint
Citer : Posté le 31/01/2024 07:08 | #
On pourrait en théorie mais personnellement je ne comprends pas du tout l'intérêt. Ça fait plein de fichiers à installer en plus, le chargement + décodage serait relativement lent, et ça oblige à passer par le système de fichiers plein de fois au démarrage...
Citer : Posté le 31/01/2024 08:30 | #
Je suis en phase avec Lephé. Sur calculatrice, en python, je n'y vois pas un grand intérêt non plus. En C, pour un add-ins que l'on veut rendre customisable OK (mais pas de manière générale) ou avoir des ressources embarquées dans le code via une conversion avec fxconv, c'est cool.
Perso, je verrais bien une moulinette sur ordinateur qui génère les data d'une image donnée et qu'on copie dans le code python (à l'image de l'exemple de Lephé). Eventuellement sous forme d'un script externe qu'on pourrait importer histoire de pas avoir un code trop spaghetti ou trop long.
Citer : Posté le 31/01/2024 09:15 | #
Pour info complémentaire, voilà mon taf de ces quelques dernières soirées : faire tourner des scripts NW en natif dans PythonExtra. On est au stade du PoC. Pour info le support est un jeu que développe Afyu appelé Orlog. C'est basé sur un mini jeu dans Assassin Creed Valhalla.
https://www.youtube.com/shorts/imMv7OzrOp8
C'est un format Shorts alors ça passe pas en vidéo.
Citer : Posté le 31/01/2024 09:18 | #
Ahh ok je comprends mieux, et en plus, les images vont prendre beaucoup de place. Mais sinon je be comprends pas cette partie:
Merci
Tuper
Citer : Posté le 31/01/2024 09:23 | #
Ce sont les data qui constituent l'image. Le code couleur de chacun des pixels constituant l'image.
L'image fait 79 pix * 12 pix et ensuite tu as l'ensemble des données consitutant cette image monochrome.
Ici chaque pixel est représenté par 1bit particulier de la série d'octets que tu passes à la fonction.
Citer : Posté le 31/01/2024 10:01 | #
Ce sont les data qui constituent l'image. Le code couleur de chacun des pixels constituant l'image.
L'image fait 79 pix * 12 pix et ensuite tu as l'ensemble des données consitutant cette image monochrome.
Ici chaque pixel est représenté par 1bit particulier de la série d'octets que tu passes à la fonction.
Merci encore une fois
Tuper
Citer : Posté le 31/01/2024 10:09 | #
C'est de l'hexadecimal. Les bits sont regroupé par lots de 4, donc chaque octet est composé de 2 digits en hexadecimal, entre x00 et xFF.
Les digits en hexadecimal sont au nombre de 16 et vont de 0 à 9 + A à F.
Citer : Posté le 31/01/2024 10:13 | #
Ahh oui j'avais oublié désole ^^"
Merci!
Citer : Posté le 31/01/2024 10:39 | #
Edit : Il est passé où ton avatar Ptitjoz ? :'-
à la trappe...
Sinon pour revenir à tout cela, je pense que le code hexa des images devrait être généré avec un script sur pc.
On ne va pas s'amuser à envoyer un bmp ou png sur la calculatrice pour lui demander de faire le boulot ; ça n'a pas trop d'intérêt selon moi. Sur Tip il y a déjà un outil qui fait cela (à voir si ça pourrait convenir)
Je pense qu'on ne va pas demander à PythonExtra trop de choses, le principal étant déjà là ou alors dans les tuyaux. Merci à Lephe et PapySly
Pour info, je ne rencontre plus de bugs sur PE
Bien à vous
https://joz.alwaysdata.net/info/
Citer : Posté le 31/01/2024 12:04 | #
Si il y aura le support du fs dans PE, ont peut même imaginer un script pour générer les images
Après ptet que faire un addin ça sera mieux, et surtout pourra être fait dès maintenant
Caltos : G35+EII, G90+E (briquée )
Citer : Posté le 02/02/2024 20:06 | #
Salut ! Juste, comment utiliser la fonction getkey() dans python extra, j'avoue ne pas trop comprendre, par exemple comment désigner les différentes touches de la calculatrice ?
Cordialement
Citer : Posté le 02/02/2024 20:18 | #
Coucou ! Tu appelles getkey() et la programme est en pause jusqu'à une pression. Tu récupères un "événement", qui est un petit objet te disant quelle touche a été pressée, quand et quelques autres détails. Les noms des touches sont gint.KEY_* comme dans <gint/keycodes.h>. Par exemple :
ev = getkey()
if ev.key == KEY_EXE:
print("EXE!")
Citer : Posté le 02/02/2024 20:19 | #
getkey() renvoie une classe avec différents attributs, dont la base est définie ici (Enfin c'est le struct en C de gint, mais les membres sont les mêmes et ici c'est expliqué)
L'attribut dont tu veux te servir est "key", qui retourne un code de touche dans ceux ci (encore la même chose qu'a dessus).
Par exemple pour récupérer la touche "shift" :
a = gint.getkey()
if a.key == KEY_SHIFT :
print("la touche shift a été pressée")
Plus compactement, tu peux aussi faire
à la place
PS : Désolé pour le double post sur le sujet, je n'ai pas été assez rapide on dirait
Caltos : G35+EII, G90+E (briquée )
Citer : Posté le 02/02/2024 20:20 | #
Merci Fcalva d'avoir pris le temps de répondre. Juste un détail : tu ne peux pas détecter KEY_SHIFT comme ça parce que ça servirait comme modifieur.
Citer : Posté le 02/02/2024 20:21 | #
Ah oui j'ai l'habitude de keydown()
Caltos : G35+EII, G90+E (briquée )
Citer : Posté le 02/02/2024 22:48 | #
Merci beaucoup, je pense avoir compris mais si je veux par exemple utiliser ça dans un flappy bird, si j’ai bien compris, Key met en pause le programme jusqu’à un événement, donc comment faire ?
Citer : Posté le 02/02/2024 23:01 | #
Ah, et je viens d’essayer, peut être ai-je fait quelque chose de mal mais lorsque que je fais un fichier pour tester tout ça, et que je veux le sauvegarder, il y a une pop-up qui m’en empêche avec marquée : « Donnée est protégée »
Citer : Posté le 02/02/2024 23:44 | #
C'est un bug du programme, dans cette situation la solution la plus sûre est d'appuyer sur le bouton "reset" au dos de la calculatrice
Et oui, getkey() met en pause le programme, si tu veux un moyen de récupérer une entrée sans bloquer, il faut utiliser keydown()/keyup()
Lephenixnoir l'a expliqué ici
Caltos : G35+EII, G90+E (briquée )
Citer : Posté le 03/02/2024 08:18 | #
Normalemenr le bug "donnée est protégée" est corrigé.
Assurez-vous que vous avez bien la dernière version de PythonExra.
Dans le shell vous devriez y lire cette information : "2024-01-07".
https://joz.alwaysdata.net/info/
Citer : Posté le 03/02/2024 09:19 | #
Merci beaucoup pour l’information, mais, je ne trouve vraiment pas où la dernière version est-elle accessible ?
Citer : Posté le 03/02/2024 09:23 | #
Tu peux la trouver dans le lien de téléchargement dans le premier post du fil.
Si ça marche pas, dis nous on buildera une version plus à jour avec tous les trucs en statut de développement (et y'a du lourd )