Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.

Forum Casio - Projets de programmation


Index du Forum » Projets de programmation » [Bêta] PythonExtra.
Lephenixnoir En ligne Administrateur Points: 22876 Défis: 149 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.1
Graph 35+E II : PythonExtra.g1a
Prizm / Graph 90+E : PythonExtra.g3a


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


Iard Hors ligne Membre Points: 5 Défis: 0 Message

Citer : Posté le 12/12/2022 18:33 | #


Hello, sorry for not writing this in French. I can understand it but I'm not so sure about being able to make myself understood...

I've managed to build PythonExtra and while I very much like the way it looks, I have some questions about it:
- Is input() available? I tried a simple program a=input("A: ") and it seems to freeze with a sort of cog icon, both on calc and on Manager
- On Manager I couldn't find a way to type anything in the shell, initially the status icon can change from 1 to S,or to A, and back, but after trying to input any character it sort of freezes. I can go to Menu if I press it twice

PS: feel free to reply in French, if you want
Thank you
Mb88 En ligne Labélisateur Points: 537 Défis: 0 Message

Citer : Posté le 12/12/2022 18:40 | #


Le input ne s'affiche que après qu'on appuie sur EXE pour le valider et la saisie marche différemment que l'input de CASIO.
Lephenixnoir En ligne Administrateur Points: 22876 Défis: 149 Message

Citer : Posté le 12/12/2022 18:44 | # | Fichier joint


English is fine, no worries! Thanks for your interest in PythonExtra. I realize the project state isn't well described in the main post, I'll update that.

Anyway, input() is available, but was untested so far. It works but the screen doesn't update until you type EXE to submit the input, which I should look into.

I'm a bit unsure about Manager, I tested fx-CG Manager and input works fine, see below.


Edit: Updated main post.
Iard Hors ligne Membre Points: 5 Défis: 0 Message

Citer : Posté le 12/12/2022 19:16 | #


Mb88 a écrit :
Le input ne s'affiche que après qu'on appuie sur EXE pour le valider et la saisie marche différemment que l'input de CASIO.

Merci
Iard Hors ligne Membre Points: 5 Défis: 0 Message

Citer : Posté le 12/12/2022 19:46 | #


@Lephenixnoir thank you!
Maybe it's because I'm running Manager with Wine under Ubuntu, but here it is how it looks.

When I run it it the screen stays like this

I tried using EXE after a character but it isn't doing anything.
The shell on Manager is also stuck after inputing the first character.


What's more, it takes two MENU presses to exit, weird. On calc the EXE works as you said, must be the fact that I run Manager on Linux.

Thanks again for your help, and for everything that you do here!

[Edit] I just noticed there's a difference between your version of the program and mine... I will rebuild it
Lephenixnoir En ligne Administrateur Points: 22876 Défis: 149 Message

Citer : Posté le 12/12/2022 22:01 | #


I'm also using fx-CG Manager within Wine on Linux (Arch), so it should be working! I'm hoping using the latest commit will work for you. Otherwise please send me the g3a so I can see if it also fails for me.

You're welcome, I'm happy that this Python tangent is of value outside of this small community!
Iard Hors ligne Membre Points: 5 Défis: 0 Message

Citer : Posté le 12/12/2022 23:09 | # | Fichier joint


I've rebuilt it, still doesn't display the MicroPython version, like in your screenshot.

I think I've got it, in the Manager it works only when using the mouse to press the keys, nothing from the keyboard works after the first Shift press. Also, the 1/S/A/a icon doesn't change, so no way to know what you're typing.
Same thing for both Files and Shell. Still takes two MENU presses to exit.
This doesn't matter much, though, important thing is that it works on calc.
I'm attaching my g3a here anyway.
Thanks
Iard Hors ligne Membre Points: 5 Défis: 0 Message

Citer : Posté le 18/12/2022 00:20 | #


@Lephenixnoir great work, now input() works as expected on my CG50
Lephenixnoir En ligne Administrateur Points: 22876 Défis: 149 Message

Citer : Posté le 22/12/2022 01:20 | #


PythonExtra commence à bien marcher ! J'ai publié en haut du topic une version bêta avec une mise à jour du post principal.

Avec les fonctions supplémentaires du module gint - getkey(), keydown(), dline(), drect() pour nommer les plus utiles - on peut déjà faire des jeux très sympa, avec des bons contrôles mais aussi avec de bien meilleures performances.

Je vous invite à tester vos programmes favoris, faire remonter les bugs, et si ça vous inspire contribuer un petit retour aussi. Enjoy! o/
Dark storm En ligne Labélisateur Points: 11579 Défis: 176 Message

Citer : Posté le 22/12/2022 08:37 | #


Le passage du mode shell au mode graphique se fait comme en Basic ?
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Lephenixnoir En ligne Administrateur Points: 22876 Défis: 149 Message

Citer : Posté le 22/12/2022 08:40 | #


Plus ou moins ; il n'y a pas vraiment deux modes, le shell et le graphique se partagent la même VRAM. Si tu print() ou input() çe repasse en mode shell, si tu casioplot.show_screen() ou gint.dupdate() ça repasse en mode graphique.

Il n'y a que deux subtilités :

1. Contrairement au Python officiel, si tu input() tu es obligé de redessiner ton prochain frame graphique de zéro
2. Le shell se met à jour 10 fois par seconde de façon régulière ; pour éviter les interférences, si tu veux passer au mode graphique juste après un print() il faut faire show_screen() ou dupdate() avant de commencer à dessiner ton premier frame (pour indiquer que tu t'appropries la VRAM).
Mb88 En ligne Labélisateur Points: 537 Défis: 0 Message

Citer : Posté le 22/12/2022 11:43 | #


Il y a aussi les modules micropython, gc, sys qui sont très utiles pour coder des jeux bien optimisés.

Pour l'instant ça marche très mal, mais avec PE_DEBUG à 1 on peut avoir accès à 200Ko de RAM sur Graph 35+e II, mais il y en aura sûrement moins quand ça marchera correctement car il y a des SysERROR
Captainluigi Hors ligne Membre Points: 808 Défis: 1 Message

Citer : Posté le 22/12/2022 20:11 | #


Hello , je viens juste de tester la bêta fournie, et ça donne très très bien!
Du coup avec ce petit test j'ai remarqué 2/3 trucs

-> Lors de "l'exécution" d'un fichier via le menu files, le shell est réinitialisé à chaque fois... et surtout le fichier est importé sous la forme d'un module (et non pas comme prévu logiquement intégralement avec tout son contenu ( j'avoue que mon lexique utilisé est pas très adapté )
-> Lorsqu'on quitte l'app avec menu ( on revient au menu, quoi ) et qu'on revient sur l'app à nouveau, l'écran n'est pas entièrement re dessiné, (on voit la bande en haut avec l'icone de batterie notamment, et ça ne disparaît qu'après un rafraichissement si on utilise le clavier )

Voilà , c'est tout pour l'instant, et encore thanks for that extremely fast made stuff !
Les bons artistes copient, les grands artistes volent. Picasso
Synthwave/Musique électro 80s sur ma chaine Youtube

Jouez à Mario sans arrêt sur votre Casio !
Cliquez pour découvrir
Cliquez pour recouvrir
Lephenixnoir En ligne Administrateur Points: 22876 Défis: 149 Message

Citer : Posté le 22/12/2022 23:08 | #


-> Lors de "l'exécution" d'un fichier via le menu files, le shell est réinitialisé à chaque fois... et surtout le fichier est importé sous la forme d'un module (et non pas comme prévu logiquement intégralement avec tout son contenu ( j'avoue que mon lexique utilisé est pas très adapté )

Oui donc on peut faire from X import * au lieu de import X comme actuellement, ça pas de souci. La réinitialisation c'est normal sinon tu ne pourrais pas lancer le même fichier plusieurs fois !

-> Lorsqu'on quitte l'app avec menu ( on revient au menu, quoi ) et qu'on revient sur l'app à nouveau, l'écran n'est pas entièrement re dessiné, (on voit la bande en haut avec l'icone de batterie notamment, et ça ne disparaît qu'après un rafraichissement si on utilise le clavier )

C'est une limitation de gint (sans rapport avec MicroPython), mais qui grâce à un travail récent de Dr-Carlos pourra peut-être être levée bientôt.

Content que ça plaise !
Mb88 En ligne Labélisateur Points: 537 Défis: 0 Message
Mb88 En ligne Labélisateur Points: 537 Défis: 0 Message

Citer : Posté le 23/12/2022 13:06 | # | Fichier joint


Le flappy bird original (pour comparer) :


Quand j'ai pris ces deux vidéos ma calculatrice n'était pas overclockée.
Lephenixnoir En ligne Administrateur Points: 22876 Défis: 149 Message

Citer : Posté le 23/12/2022 20:33 | #


Hop, ajouté au post principal, merci
Critor Hors ligne Administrateur Points: 2332 Défis: 18 Message

Citer : Posté le 25/12/2022 19:52 | #


Après l'avoir vu naître, bien content de voir que PythonExtra atteint un état aussi avancé.
Avec enfin un getkey() entre bien d'autres choses, voilà donc quelque chose qui nous sera grandement utile pour les prochaines années.

Désolé, je n'ai pas trouvé dans les posts précédents.

Est-ce que le code de la version gint de Flappy Bird est disponible quelque part, histoire que je me familiarise avec cette nouvelle bibliothèque ?
Merci.
Mb88 En ligne Labélisateur Points: 537 Défis: 0 Message

Citer : Posté le 25/12/2022 19:54 | #


Oui, dans le dépôt dans ports/sh/examples/flappyCG2.py ou ports/sh/examples/flappyFX3.py
Critor Hors ligne Administrateur Points: 2332 Défis: 18 Message

Citer : Posté le 25/12/2022 19:57 | #


J'avais trouvé un dossier examples mais ce n'était clairement pas le bon.
Merci pour le bon chemin, je me plonge là-dedans.
Captainluigi Hors ligne Membre Points: 808 Défis: 1 Message

Citer : Posté le 26/12/2022 18:32 | #


Hello again, où en est actuellement le support de la fonction open() ?
Dès qu'on l'appelle, on a une erreur comme quoi on doit fournir comme argument un tuple, et non une chaine , du coup j'ai mis tous mes arguments en un tuple :
open( ("fichier.py","r") )
, et ça ne renvoie rien , ça affiche juste 1 et une sorte d'adresse mémoire ...
Les bons artistes copient, les grands artistes volent. Picasso
Synthwave/Musique électro 80s sur ma chaine Youtube

Jouez à Mario sans arrêt sur votre Casio !
Cliquez pour découvrir
Cliquez pour recouvrir

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 v42 © créé par Neuronix et Muelsaco 2004 - 2023 | Il y a 76 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