Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.
La shoutbox n'est pas chargée par défaut pour des raisons de performances. Cliquez pour charger.

Forum Casio - Projets de programmation


Index du Forum » Projets de programmation » [Bêta] PythonExtra.
Lephenixnoir En ligne Administrateur Points: 24232 Défis: 170 Message

[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


Précédente 1, 2, 3, 4, 5 ··· 10 ··· 18, 19, 20 Suivante
Calamari Hors ligne Membre Points: 229 Défis: 0 Message

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.
Lephenixnoir En ligne Administrateur Points: 24232 Défis: 170 Message

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.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Inikiwi Hors ligne Membre Points: 574 Défis: 8 Message

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.
Lephenixnoir En ligne Administrateur Points: 24232 Défis: 170 Message

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
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Inikiwi Hors ligne Membre Points: 574 Défis: 8 Message

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.
Potter360 En ligne Rédacteur Points: 1221 Défis: 2 Message

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…
Globalement, coder. Mal, mais coder.
Lephenixnoir En ligne Administrateur Points: 24232 Défis: 170 Message

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.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Mb88 Hors ligne Labélisateur Points: 944 Défis: 3 Message

Citer : Posté le 05/11/2022 20:41 | #


Lephenixnoir a écrit :
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 !
Lephenixnoir En ligne Administrateur Points: 24232 Défis: 170 Message

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.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Mb88 Hors ligne Labélisateur Points: 944 Défis: 3 Message

Citer : Posté le 05/11/2022 20:47 | #


Ok !

Est ce que ça sera fix pour la prochaine révision ?
Lephenixnoir En ligne Administrateur Points: 24232 Défis: 170 Message

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.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Lephenixnoir En ligne Administrateur Points: 24232 Défis: 170 Message

Citer : Posté le 06/11/2022 00:12 | # | Fichier joint


Des nouvelles donc ! J'ai bien avancé la GUI, avec :

  • Un explorateur de fichiers qui explore les scripts Python (... mais ne les charge pas encore dans le shell)
  • Un shell bien ajusté notamment avec une police un tant soit peu compacte sur Graph mono (ci-dessous)
  • Une méthode de saisie où ALPHA et SHIFT se bloquent sur un simple appui (détails à venir)

Ça commence à ressembler à quelque chose, et il me reste encore demain avant d'arriver à la fin du planning original.


Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Mb88 Hors ligne Labélisateur Points: 944 Défis: 3 Message

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.
Parisse Hors ligne Membre Points: 484 Défis: 0 Message

Citer : Posté le 06/11/2022 11:46 | #


Lephenixnoir a écrit :
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.
Lephenixnoir En ligne Administrateur Points: 24232 Défis: 170 Message

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 :

  • Il y a 4 niveaux de clavier : normal ("1"), shift ("S" = SHIFT), alphabétique minuscule ("a" = ALPHA) et alphabétique majuscule ("A" = SHIFT + ALPHA). En temps normal le clavier est bloqué dans son niveau, d'où l'icône de cadenas.
  • Appuyer sur SHIFT/ALPHA puis relâcher immédiatement change le niveau du clavier.
  • Maintenir SHIFT/ALPHA puis appuyer sur une autre touche modifie la touche, mais sans affecter le niveau du clavier.

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)

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.

Ç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.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Inikiwi Hors ligne Membre Points: 574 Défis: 8 Message

Citer : Posté le 06/11/2022 17:59 | #


c'est possible de rendre ce python compatible numworks?
Parisse Hors ligne Membre Points: 484 Défis: 0 Message

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.
Mb88 Hors ligne Labélisateur Points: 944 Défis: 3 Message

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.
Lephenixnoir En ligne Administrateur Points: 24232 Défis: 170 Message

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 ?

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.

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...
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Mb88 Hors ligne Labélisateur Points: 944 Défis: 3 Message

Citer : Posté le 06/11/2022 20:34 | #


Lephenixnoir a écrit :
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.
Parisse Hors ligne Membre Points: 484 Défis: 0 Message

Citer : Posté le 06/11/2022 21:19 | #


Lephenixnoir a écrit :

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.
Précédente 1, 2, 3, 4, 5 ··· 10 ··· 18, 19, 20 Suivante

LienAjouter une imageAjouter une vidéoAjouter un lien vers un profilAjouter du codeCiterAjouter un spoiler(texte affichable/masquable par un clic)Ajouter une barre de progressionItaliqueGrasSoulignéAfficher du texte barréCentréJustifiéPlus petitPlus grandPlus de smileys !
Cliquez pour épingler Cliquez pour détacher Cliquez pour fermer
Alignement de l'image: Redimensionnement de l'image (en pixel):
Afficher la liste des membres
:bow: :cool: :good: :love: ^^
:omg: :fusil: :aie: :argh: :mdr:
:boulet2: :thx: :champ: :whistle: :bounce:
valider
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :'(  :here:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
Veuillez donner la réponse en chiffre
Vous devez activer le Javascript dans votre navigateur pour pouvoir valider ce formulaire.

Si vous n'avez pas volontairement désactivé cette fonctionnalité de votre navigateur, il s'agit probablement d'un bug : contactez l'équipe de Planète Casio.

Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 74 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd