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 Hors ligne Administrateur Points: 24673 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 ··· 10 ··· 13, 14, 15, 16, 17, 18, 19, 20, 21, 22 Suivante
Lephenixnoir Hors ligne Administrateur Points: 24673 Défis: 170 Message

Citer : Posté le 03/02/2024 16:27 | #


Nope. Fais voir ton code ?
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Le_masque Hors ligne Membre Points: 88 Défis: 0 Message

Citer : Posté le 03/02/2024 16:54 | #


Voila :

import gint
b=True
print("Pressez une touche")
while b :
a=gint.getkey()
if a.key == gint.KEY_EXE :
  print("La touche EXE")

if a.key == 0x92 :
  print("La touche F2")
  
if a.key == 0x93 :
  print("La touche F3")
  
if a.key == 0x94 :
  print("La touche F4")
  
if a.key == 0x95 :
  print("La touche F5")
  
if a.key == 0x96 :
  print("La touche F6")
if a.key == 0x96 :
  print("La touche F6")
Lephenixnoir Hors ligne Administrateur Points: 24673 Défis: 170 Message

Citer : Posté le 03/02/2024 17:01 | #


Aaah, c'est pas ta faute. Le problème est le suivant. Le nouveau texte dans la console est bien ajouté instantanément. Mais quand tu print(), PythonExtra n'affiche pas immédiatement (sinon ça serait hyper lent quand tu print beaucoup). À la place, il se note d'afficher 100 ms plus tard. Sauf que pour l'instant (et c'est là le problème) il ne fait l'affichage qu'entre deux lignes de code donc il faut attendre que le getkey() suivant soit fini avant que le texte ne se voie.

Je vais voir pour corriger ce problème. Il ne devrait rien y avoir à changer dans ton code.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Tuper4 Hors ligne Membre Points: 889 Défis: 19 Message

Citer : Posté le 03/02/2024 17:02 | #


tu peux le réduire en ca:
from gint import *
b=True
print("Pressez une touche")
while b :
a=getkey().key
if a == KEY_EXE :
  print("La touche EXE")

if a == KEY_F2 :
  print("La touche F2")
  
if a == KEY_F3 :
  print("La touche F3")
  
if a.key == KEY_F4 :
  print("La touche F4")

sinon je ne vois pas le probleme

EDIT: bien joué Lephe'
When the doorbell rings at three in the morning, it’s never good news. -Anthony Horowitz
Le_masque Hors ligne Membre Points: 88 Défis: 0 Message

Citer : Posté le 03/02/2024 18:03 | #


Juste au cas où, le flappy bird pour g90, dans le dossier exemples, il y a un petit souci avec l’affichage du score quand on perd, il ne s’affiche rien du tout
Lephenixnoir Hors ligne Administrateur Points: 24673 Défis: 170 Message

Citer : Posté le 03/02/2024 20:49 | # | Fichier joint


@Le_masque Voici ci-joint une version de PythonExtra dans laquelle ton problème de getkey() devrait être corrigé. Peux-tu tester et me confirmer ? Tu peux aussi essayer le fichier ex_getkey.py du dossier examples qui fait quelque chose de similaire.

S'il y en a qui veulent tester les images et tout le bordel annoncé récemment sont aussi dans ce build.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Ptitjoz Hors ligne Membre Points: 274 Défis: 10 Message

Citer : Posté le 03/02/2024 20:54 | #


Lephenixnoir a écrit :
[..]Pour le dessin concurrent as-tu confirmé s'il y a bien un dupdate() ou équivalent entre le dernier print() et le début du dessin du frame graphique ?[..]

Apparemment , non il n'y avait pas de dupdate().

Dans mon cas, les print() étaient pour avoir des informations de debugage et je n'avais pas pensé à mettre à jour l'affichage car naïvement je pensais que ça ne s'appliquait qu'aux objets graphiques.
Un peu poète, un peu geek, un peu rêveur, un peu écolo.

Lephenixnoir Hors ligne Administrateur Points: 24673 Défis: 170 Message

Citer : Posté le 03/02/2024 20:56 | #


C'est plus ou moins le cas. Le dupdate() ici ne sert pas à mettre à jour le shell. Il sert à indiquer (implicitement) au shell que tu reprends le contrôle du dessin, ce qui évite au shell de dessiner en même temps que toi.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Le_masque Hors ligne Membre Points: 88 Défis: 0 Message

Citer : Posté le 04/02/2024 00:37 | #


@Lephenixnoir , j’ai teste la nouvelle version et c’est bon le problème est résolu

Juste, est ce normal qu’il n’y ait écris « 490376 » devant le curseur dans le shell ?
Lephenixnoir Hors ligne Administrateur Points: 24673 Défis: 170 Message

Citer : Posté le 04/02/2024 07:15 | #


Excellent ! Oui le 490376 c'est la quantité de mémoire qui reste dans la zone de mémoire principale. C'est juste du debug pour moi ça me sert sur 35+E II pour surveiller si la mémoire se vide
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Lephenixnoir Hors ligne Administrateur Points: 24673 Défis: 170 Message

Citer : Posté le 04/02/2024 18:32 | #


Update : en voulant prendre des screenshots pour faire la doc j'ai remarqué que PythonExtra crashe au démarrage sur 35+E II quand j'active les fonctions de debug. En fait il apparaît que la consommation mémoire au démarrage (principalement durant la recherche des fichiers .py) est limite limite, si bien qu'avec les variables de debuggage en plus (... i.e. tout le driver USB !) ça passe plus.

Je m'attaque donc à une réduction de la consommation mémoire. Faut faire un truc là. J'ai plusieurs idées, je vous dirai...
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Tuper4 Hors ligne Membre Points: 889 Défis: 19 Message

Citer : Posté le 04/02/2024 19:28 | #


J'ai une question a propos de gint, a quoi sert getkey_opt?
When the doorbell rings at three in the morning, it’s never good news. -Anthony Horowitz
Lephenixnoir Hors ligne Administrateur Points: 24673 Défis: 170 Message

Citer : Posté le 04/02/2024 19:32 | #


C'est une version généralisée de getkey() avec plus d'options. En gros tu peux contrôler si SHIFT/ALPHA sont autorisés, si tu as le droit de revenir au menu, modifier le rétroéclairage, ou éteindre la calto. Et tu peux aussi spécifier un délai maximal après lequel la fonction retourne si l'utilisateur ne fait rien. Je l'ajouterai à la doc bientôt...
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Tuper4 Hors ligne Membre Points: 889 Défis: 19 Message

Citer : Posté le 04/02/2024 19:34 | #


Lephenixnoir a écrit :
C'est une version généralisée de getkey() avec plus d'options. En gros tu peux contrôler si SHIFT/ALPHA sont autorisés, si tu as le droit de revenir au menu, modifier le rétroéclairage, ou éteindre la calto. Et tu peux aussi spécifier un délai maximal après lequel la fonction retourne si l'utilisateur ne fait rien. Je l'ajouterai à la doc bientôt...
et il y a un autre "code" pour une touche sélectionné avec le SHIFT ou ALPHA? Merci pour ta réponse rapide
When the doorbell rings at three in the morning, it’s never good news. -Anthony Horowitz
Lephenixnoir Hors ligne Administrateur Points: 24673 Défis: 170 Message

Citer : Posté le 04/02/2024 19:35 | #


L'événement renvoyé par getkey() a des champs .shift et .alpha en plus du .key. Ces deux champs indiquent si SHIFT ou ALPHA étaient utilisés. Tu peux voir quelques détails par ici dans la doc : https://gitea.planet-casio.com/Lephenixnoir/PythonExtra/src/branch/dev/docs/sh/modgint-fr.md#%C3%A9v%C3%A9nements-clavier
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Lephenixnoir Hors ligne Administrateur Points: 24673 Défis: 170 Message

Citer : Posté le 04/02/2024 23:11 | #


Lephenixnoir a écrit :
Je m'attaque donc à une réduction de la consommation mémoire. Faut faire un truc là. J'ai plusieurs idées, je vous dirai...

Bon du coup c'est pas mal. J'ai fait les premières choses que j'avais en tête. D'abord j'ai ajouté de quoi surveiller la consommation en mémoire quand le mode debug est activé, ce qui sort sur le log USB ce genre de lignes au démarrage :

main: _uram[used=3172 free=5712] pram0[used=0 free=163740]
console: _uram[used=3232 free=5644] pram0[used=2400 free=161336]
upy: _uram[used=3232 free=5644] pram0[used=2400 free=161336]
prompt: _uram[used=3372 free=5496] pram0[used=2400 free=161336]
ui: _uram[used=4296 free=4524] pram0[used=2400 free=161336]

Assez explicite je crois, y'a deux arènes, plus used est petit et plus free est grand mieux c'est.

Une bonne partie du gain mémoire a été de déplacer un tableau pré-alloué de 200 lignes vides pour le shell de la RAM principale (_uram) vers une nouvelle arène dans PRAM0 (pram0). PRAM0 est immense par comparaison avec le reste (160 kio) mais pour des raisons dans lesquelles je ne rentre pas ici on ne peut s'en servir que pour stocker des types de données explicitement prévus pour. J'ai modifié le type des lignes pour qu'il soit stockable dedans, et pouf ça fait 2400 octets virés du tas principal.

À cela je crois encore pouvoir ajouter un chouille de RAM à grapiller et diverses optimisations consistant à rendre certaines données plus compactes. Je vous dirai.

Comme c'est une side-quest de ma tentative de prendre un screenshot (qui marche maintenant), dans le but de faire de la doc, je n'ai pas encore mergé la PR de Sly avec les modules Numworks.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Ptitjoz Hors ligne Membre Points: 274 Défis: 10 Message

Citer : Posté le 05/02/2024 10:21 | #


Lephenixnoir a écrit :
Excellent ! Oui le 490376 c'est la quantité de mémoire qui reste dans la zone de mémoire principale. C'est juste du debug pour moi ça me sert sur 35+E II pour surveiller si la mémoire se vide

Je viens d'essayer sur l'émulateur et il n'y a pas beaucoup de mémoire, mais je ne sais pas si ça veut dire grand-chose sur l'émulateur.


Sinon, en faisant faire cohabiter sur la machine physique deux ou plusieurs versions de PythonExtra (en ayant eu soin de renommer les fichiers *.g?a) cela ne semble pas poser de problème et cela permet d'isoler le PE fonctionnel de ceux de test et de pouvoir comparer.
Le seul petit ennui, c'est la même icône, mais comme c'est par ordre d'arrivée, ce n'est pas gênant.

Bien à toi
Un peu poète, un peu geek, un peu rêveur, un peu écolo.

Tuper4 Hors ligne Membre Points: 889 Défis: 19 Message

Citer : Posté le 05/02/2024 11:53 | #


Tu peux utiliser l'add in Icone pour changer les icônes des add-ins
When the doorbell rings at three in the morning, it’s never good news. -Anthony Horowitz
Lephenixnoir Hors ligne Administrateur Points: 24673 Défis: 170 Message

Citer : Posté le 05/02/2024 14:44 | #


Je me note de regarder si je peux ajouter une option pour les builds expérimentaux qui change d'icône.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Ptitjoz Hors ligne Membre Points: 274 Défis: 10 Message

Citer : Posté le 05/02/2024 14:51 | #


Lephenixnoir a écrit :
Je me note de regarder si je peux ajouter une option pour les builds expérimentaux qui change d'icône.
c'était un peu l'idée, mais je n'avais osé demander directement...

Lephenixnoir a écrit :
Alright, j'ai fini de tester/valider le rendu d'images sur Graph mono. Voilà un exemple final qui démontre plusieurs images, montre qu'on a de la transparence en plus du noir et blanc, qu'on peut afficher des morceaux d'images, et enfin montre que si on crée l'image avec un bytearray on peut ensuite modifier les pixels.[..]

lien du post
j'ai importé ton script sur l'émulateur, voila ce que ça donne (la même chose évidemment).


Merci pour les exemples de code concrets que tu nous fournis, ça aide à mieux comprendre les mécanismes
Un peu poète, un peu geek, un peu rêveur, un peu écolo.

Tuper4 Hors ligne Membre Points: 889 Défis: 19 Message

Citer : Posté le 07/02/2024 09:29 | #


Bug trouvé: quand j'allume PE, je vais dans un dossier et que je sélectionne mon jeu de flappy bird, tout se passe bien. Je joue un peu, et quand je clique sur QUIT dans le menu du jeu, le jeu se termine comme prévu. Quand je revient sur File en appuyant sur F1, et que je appuie sur EXIT pour quitter le dossier et aller a la racine de la calculatrice, il me met Système ERROR et je doit appuié sur EXIT et ça restart la calculatrice. Je ne sais pas si j'ai été clair, si non, dite le moi

Sinon, j'ai une question, PE est codé en C ou en C++? Car j'aimerais bien contribuer au code maintenant que je maîtrise le C a 70%. Si c'est en C++, je ne pourrai pas le faire maintenant car je suis en train de l'apprendre .

Bonne journée
Tuper
When the doorbell rings at three in the morning, it’s never good news. -Anthony Horowitz
Précédente 1, 2, 3 ··· 10 ··· 13, 14, 15, 16, 17, 18, 19, 20, 21, 22 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 78 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