[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 04/11/2022 00:38 | #
I had some exciting (in my own life) things happen, and it seems like the TODO items I planned to work on are already underway in the meantime (nice!). I'll step back for now so I don't duplicate efforts.
“They call me the king of the spreadsheets, got 'em all printed out on my bedsheets.” — “Weird Al” Yankovic
Citer : Posté le 05/11/2022 14:18 | #
De mon côté je me suis fait distraire deux jours par une opportunité inratable (et totalement inattendue) de faire de la musique, puis happer par du travail sur un papier en approche de deadline (du boulot même en vacances, damn). Bref, de retour.
@Mb88 J'ai testé ton add-in, c'est presque exactement ce que j'avais en tête (et un peu déjà testé dans JustUI) : en particulier SHIFT/ALPHA qui sont permanents, je pense que ça marche beaucoup mieux. J'ajouterai que si tu appuies sur SHIFT/ALPHA et ensuite une autre touche sans relâcher SHIFT/ALPHA (comme Shift sur un PC) alors ça ne compte que pour une touche. La disposition des caractères est à tester, j'avais une idée plus élaborée pour éviter d'avoir des caractères arbitraires sur toutes les touches.
J'ai presque fini d'intégrer la GUI propre à l'add-in, notamment pour lancer des scripts Python depuis le système de fichiers. L'UI n'ira pas hyper loin, le but c'est juste d'avoir un shell décent et de quoi lancer les programmes. Comme précédemment évoqué, je laisse la partie développement à (1) d'autres add-ins, (2) le PC, ou (3) d'autres contributeurs.
Citer : Posté le 05/11/2022 15:13 | #
Je suis vraiment occupé en ce moment mais j'essayerais d'ajouter ton python et la jvm a kiwisuite. Et ensuite la coloration de syntaxe.
Citer : Posté le 05/11/2022 17:14 | #
Ce serait cool ! De l'interaction entre plusieurs add-ins ça n'arrive pas tous les jours ça :o
Citer : Posté le 05/11/2022 18:05 | #
c'est pas de l’interaction. pour kiwisuite j'ai 1 code source unique. il y a juste des bouts de code désactivé avec des #ifdef, et avec ça je peux activer/désactiver des fonctionnalités à la compilation, ce qui permet par exemple de retirer 200ko de lua et uniquement garder l'éditeur de texte et l’explorateur.
pour lua et la jvm je ferait comme lua.
Citer : Posté le 05/11/2022 18:11 | #
Nan mais quand il parle d’interaction, il veut dire que c’est pas « chacun dev son add-in dans son coin », par exemple là on réutilise le code de certains pour en faire un autre mieux etc…
Citer : Posté le 05/11/2022 18:12 | #
Et puis tu peux avoir un bouton "exécuter" dans ton éditeur qui appelle PythonExtra, et inversement moi je peux avoir un bouton "éditer" qui appelle ton add-in.
Citer : Posté le 05/11/2022 20:41 | #
J'ai presque fini d'intégrer la GUI propre à l'add-in, notamment pour lancer des scripts Python depuis le système de fichiers. L'UI n'ira pas hyper loin, le but c'est juste d'avoir un shell décent et de quoi lancer les programmes. Comme précédemment évoqué, je laisse la partie développement à (1) d'autres add-ins, (2) le PC, ou (3) d'autres contributeurs.
J'attends le commit avec impatience ! D'ailleurs PythonExtra m'a lock un fichier, je ne peux plus le modifier et c'est un peu énervant !
libMicrofx : https://www.planet-casio.com/Fr/forums/topic17259-2-libmicrofx-remplacez-fxlib-pour-faire-des-add-ins-tres-legers.html !
Racer3D : https://www.planet-casio.com/Fr/programmes/programme4444-1-racer3d-mb88-jeux-add-ins.html
Citer : Posté le 05/11/2022 20:43 | #
C'est presque prêt, ça arrive ce soir avec un peu de chance !
Aïe le fichier lock ça veut dire que l'add-in ne l'a pas fermé avant de quitter ! Tu peux optimiser la mémoire de stockage pour le libérer je pense. Ou alors modifie-le sur le PC peut-être.
Citer : Posté le 05/11/2022 20:47 | #
Ok !
Est ce que ça sera fix pour la prochaine révision ?
libMicrofx : https://www.planet-casio.com/Fr/forums/topic17259-2-libmicrofx-remplacez-fxlib-pour-faire-des-add-ins-tres-legers.html !
Racer3D : https://www.planet-casio.com/Fr/programmes/programme4444-1-racer3d-mb88-jeux-add-ins.html
Citer : Posté le 05/11/2022 20:49 | #
Je ne suis pas sûr de savoir d'où ça vient. :x Je pense que si gint traque les fichiers ouverts je dois pouvoir le corriger. Mais ce qui serait super utile si tu y arrives ce serait de trouver un moyen de reproduire le problème.
Citer : Posté le 06/11/2022 00:12 | # | Fichier joint
Des nouvelles donc ! J'ai bien avancé la GUI, avec :
Ça commence à ressembler à quelque chose, et il me reste encore demain avant d'arriver à la fin du planning original.
Citer : Posté le 06/11/2022 11:31 | #
Superbe ! Et le lock des fichiers ?
EDIT :
Désolé j'avais pas vu ton message d'au dessus.
libMicrofx : https://www.planet-casio.com/Fr/forums/topic17259-2-libmicrofx-remplacez-fxlib-pour-faire-des-add-ins-tres-legers.html !
Racer3D : https://www.planet-casio.com/Fr/programmes/programme4444-1-racer3d-mb88-jeux-add-ins.html
Citer : Posté le 06/11/2022 11:46 | #
Une méthode de saisie où ALPHA et SHIFT se bloquent sur un simple appui (détails à venir)
Pour bloquer le mode alpha en minuscules dans le shell de KhiCAS (y compris donc avec l'interpreteur MicroPython), j'utilise juste la touche F5, ce qui est compatible avec la facon de faire de Casio. Du coup pour bloquer en mode alpha majuscule on a le choix entre shift ALPHA ou F5 F5.
Citer : Posté le 06/11/2022 17:27 | # | Fichier joint
Screenshots sur Graph 90+E :
Vous pouvez voir l'indicateur des modifieurs en bas à droite. Voici comment ça marche, pour ceux qui voudraient tester et pas se caser la tête pour la saisie :
Par exemple, si je veux taper gint.getkey() comme sur le screenshot :
- J'appuie sur ALPHA pour passer en mode alphabétique minuscule ("a" + cadenas)
- Je tape "gint"
- Je maintiens ALPHA, j'appuie sur "." puis je relâche ALPHA (ce qui désactive le mode alphabétique pour juste une touche)
- Je tape "getkey"
- Je maintiens ALPHA, j'appuie sur "(" et ")" puis je relâche ALPHA (désactive temporairement alpha pour deux touches)
Ça pourrait valoir le coup d'avoir un système d'entrée compatible... j'attends d'avoir un peu de feedback pour savoir si c'est nécessaire.
Citer : Posté le 06/11/2022 17:59 | #
c'est possible de rendre ce python compatible numworks?
Citer : Posté le 06/11/2022 19:08 | #
Le MicroPython de KhiCAS (pour la 90) a un module kandinsky compatible Numworks, de meme que matplotl et turtle (qui sont plus ou moins standard). Par contre il n'y a pas de module ion, mais critor a une bibliotheque de compatibilite entre calculatrices. Je suis en train de regarder pour la 35eii, j'ai pas mal avance sur le portage du shell/editeur de KhiCAS avec l'interpreteur MicroPython (en remplacement de Xcas). Pour les modules, arit/graphic/kandinsky/casioplt ne posent pas de problemes, pour turtle et matplotl le plus simple est probablement de ne pas utiliser mes modules natifs (qui actuellement font appel a Xcas), mais les memes modules texte que Casio, a base de casioplt.
Citer : Posté le 06/11/2022 20:23 | #
J'aime beaucoup le superinput-like, mais il manque certains caractères, et on ne peut pas naviguer dans la saisie. J'ai eu un plantage en naviguant dans les fichiers. J'attends le scrolling avec impatience et gint.dpixel, gint.dline etc.
libMicrofx : https://www.planet-casio.com/Fr/forums/topic17259-2-libmicrofx-remplacez-fxlib-pour-faire-des-add-ins-tres-legers.html !
Racer3D : https://www.planet-casio.com/Fr/programmes/programme4444-1-racer3d-mb88-jeux-add-ins.html
Citer : Posté le 06/11/2022 20:27 | #
Si par "rendre compatible Numworks" tu entends "lancer des scripts écrits pour Numworks sur Graph Casio dans PythonExtra", alors oui sans doute dans une certaine mesure. KhiCAS le fait déjà après tout. Faut voir quels modules sont à supporter, mais pour le dessin (kandinsky) ça devrait aller, pour tout ce qui est calcul ou autres modules internes de la Numworks probablement pas.
Si tu entends à la place "avoir une appli PythonExtra sur la Numworks", alors je ne sais pas si c'est possible compte tenu des contraintes de mémoire et d'installation des applications ; si ça l'est je ne suis pas qualifié pour le faire.
J'ai codé (mais pas encore testé) une première version de casioplot. Pour l'instant j'ai tout dans le module sauf les différentes tailles de police pour draw_string() et le fait que show_screen() est supposé être appelé automatiquement à la fin de l'exécution.
Parisse j'ai tenté de chercher ton implémentation mais il n'y a apparemment pas de code MicroPython dans ton giacbf.tgz. Tout ce que j'ai trouvé c'est un gros libmicropy.a et même celui-là ne contient que du code standard. Où est-ce que je suis supposé regarder ?
Merci ! Oui il manque plein de caractères, pour ça je pense faire un menu plus sérieux (tout éparpiller sur le clavier ça me paraît pas très facile à prendre en main). Le plantage dans les fichiers c'est peut-être l'absence de world switch, je fais ça un peu comme un cochon. Pour les fonctions de dessin ça devrait arriver bientôt.
Potentiellement si tu veux aider tu peux regarder (1) reproduire le problème de fermeture de fichiers, si tu y arrives, ou (2) préparer des scripts/jeux Python à tester dans l'add-in, vu que pour l'instant j'ai pas mal codé mais quasiment rien testé.
Ah et j'ai un import de fichier qui marche quand on sélectionne dans le navigateur. Je pousse ça bientôt...
Citer : Posté le 06/11/2022 20:34 | #
Ah et j'ai un import de fichier qui marche quand on sélectionne dans le navigateur. Je pousse ça bientôt...
Super !
Je vais essayer de refaire le bug.
libMicrofx : https://www.planet-casio.com/Fr/forums/topic17259-2-libmicrofx-remplacez-fxlib-pour-faire-des-add-ins-tres-legers.html !
Racer3D : https://www.planet-casio.com/Fr/programmes/programme4444-1-racer3d-mb88-jeux-add-ins.html
Citer : Posté le 06/11/2022 21:19 | #
Parisse j'ai tenté de chercher ton implémentation mais il n'y a apparemment pas de code MicroPython dans ton giacbf.tgz. Tout ce que j'ai trouvé c'est un gros libmicropy.a et même celui-là ne contient que du code standard. Où est-ce que je suis supposé regarder ?
Dans giacbf il y a l'interface 90 mais pas micropython qui est dans l'archive https://www-fourier.univ-grenoble-alpes.fr/~parisse/casio/micropy.tgz. Le port est dans le repertoire fxcg, en particulier le fichier graphic.c contient l'essentiel des modules natifs scientifiques (sauf ulab), dont une partie (matplot, turtle, linalg, cas) ne sera pas utilisable tel quel car linkes a du code Xcas (via des callbacks C). turtle devrait etre assez facile a implementer en natif, matplotl moins facile, par contre linalg serait plus dur, et cas impossible (sauf si on sait faire un appel inter-addins!). Mon idee pour l'instant c'est de les laisser avec des callbacks bidons ou peut-etre de recompiler libmicropy.a sans support pour ces modules.
La version de micropython est 1.12, j'y ai fait quelques modifs pour par exemple savoir si un mot est reconnu comme une variable/fonction Python, ou pour avoir la liste des variables definies, ou pour avoir le numero de ligne d'erreur du parseur.