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: 24146 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


1, 2, 3, 4 ··· 10 ··· 18, 19, 20 Suivante
Slyvtt Hors ligne Maître du Puzzle Points: 2276 Défis: 17 Message

Citer : Posté le 29/10/2022 11:03 | #


Alors ça c'est vraiment génial.
En plus, le fait que ce soit toi qui prenne la main sur ce sujet nous garanti que le matériel sera utilisé au top.
J'ai eu un doute à ce sujet en voyant ta réponse hier à Charis Je me suis dis: "un truc se prépare ... il en dit trop ... ".
C'est donc confirmé.
Le rédacteur qui va faire le bilan de l'année 2022 va avoir du taf cette année il y a eu du mouvement sur les Casio cette saison
There are only 10 types of people in the world: Those who understand binary, and those who don't ...
Lephenixnoir Hors ligne Administrateur Points: 24146 Défis: 170 Message

Citer : Posté le 29/10/2022 11:32 | #


Oui j'ai pas été très fin dans les indices haha.

Y'a pas mal de truc qui se passent bien parce que la fxlibc donne un système de fichiers POSIX. Typiquement les imports il y avait une petite fonction à coder (10 lignes) et une option à activer, et pouf ça marche comme un charme. J'ai pas trouvé pour open() encore, mais ce sera sans doute la même histoire. Donc oui, il y aura accès au système de fichiers pour les sauvegardes.

Maintenant que j'y pense j'ai pas surveillé les world switch, woops... je vais peut-être finir par implémenter un auto-world-switch pour le fs qui sera pas efficace mais qui permettra ce genre de ports.

J'ai toujours une ou deux bombes en tête derrière mais je vais commencer par ce qui est plus ou moins garanti de marcher et on verra après.

Bonne nouvelle pour la Graph 90+E : le GC peut accepter plusieurs zones de mémoire, donc on pourra avoir une quantité raisonnable (~600 kio) par défaut (par rapport au 1 Mo de l'appli officielle) et si on pousse jusqu'à utiliser la mémoire extra de la puce, bah comme CGDoom on peut avoir 3.5 Mo. Sur la Graph 35+E II je sais pas encore à quoi ça va se jouer - l'appli officielle donne 100 kio ce qui sera dur à battre sans partir dans des trucs très expérimentaux, surtout que l'appli en elle-même a déjà besoin d'une place non négligeable.
Mon graphe (24 Mars): (gint#27 ; (Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; ...) || (shoutbox v5 ; v5)
Slyvtt Hors ligne Maître du Puzzle Points: 2276 Défis: 17 Message

Citer : Posté le 29/10/2022 11:43 | #


Lephenixnoir a écrit :
Oui j'ai pas été très fin dans les indices haha.


C'est surtout qu'on te connait, tu es pas du genre à avancer des trucs sans avoir un minimum regardé avant.

Lephenixnoir a écrit :
Y'a pas mal de truc qui se passent bien parce que la fxlibc donne un système de fichiers POSIX. Typiquement les imports il y avait une petite fonction à coder (10 lignes) et une option à activer, et pouf ça marche comme un charme. J'ai pas trouvé pour open() encore, mais ce sera sans doute la même histoire. Donc oui, il y aura accès au système de fichiers pour les sauvegardes.

Maintenant que j'y pense j'ai pas surveillé les world switch, woops... je vais peut-être finir par implémenter un auto-world-switch pour le fs qui sera pas efficace mais qui permettra ce genre de ports.


C'est vrai que ce serait potentiellement intéressant pour les ports en fait. Il faudrait être en capacité de savoir si on est déjà dans un world_switch quand on touche au fs avec une fonction, et si pas, l'activer au vol. Pour les portages ça rendrait les trucs vraiment simple. Par contre en perf ça aurait certainement un prix. Je dis ça, mais je sais même pas si ce serait jouable de faire un truc automatique comme ça. Par exemple dans le port d'un programme utilisant la SDL, c'est clairement un truc qu'il faut bien penser dans la réécriture d'un programme, sinon boom !!!

Lephenixnoir a écrit :
J'ai toujours une ou deux bombes en tête derrière mais je vais commencer par ce qui est plus ou moins garanti de marcher et on verra après.


Fais gaffe, tu recommences à en dire trop

Lephenixnoir a écrit :
Bonne nouvelle pour la Graph 90+E : le GC peut accepter plusieurs zones de mémoire, donc on pourra avoir une quantité raisonnable (~600 kio) par défaut (par rapport au 1 Mo de l'appli officielle) et si on pousse jusqu'à utiliser la mémoire extra de la puce, bah comme CGDoom on peut avoir 3.5 Mo. Sur la Graph 35+E II je sais pas encore à quoi ça va se jouer - l'appli officielle donne 100 kio ce qui sera dur à battre sans partir dans des trucs très expérimentaux, surtout que l'appli en elle-même a déjà besoin d'une place non négligeable.


A mon sens il faut utiliser au max ce que chaque machine peut offrir, par exemple sur une CG50 pousser au 3.5Mo et limiter à moins sur le "vieux" matos (CG10/20). Niveler vers le haut en qq sorte quitte à limiter certains trucs sur les vieilles machines.
There are only 10 types of people in the world: Those who understand binary, and those who don't ...
Mb88 Hors ligne Labélisateur Points: 944 Défis: 3 Message

Citer : Posté le 29/10/2022 14:18 | #


Trop cool ! J'attends le port G35+e II avec impatience !
Lephenixnoir Hors ligne Administrateur Points: 24146 Défis: 170 Message

Citer : Posté le 29/10/2022 18:42 | #


SlyVTT a écrit :
C'est vrai que ce serait potentiellement intéressant pour les ports en fait. Il faudrait être en capacité de savoir si on est déjà dans un world_switch quand on touche au fs avec une fonction, et si pas, l'activer au vol. Pour les portages ça rendrait les trucs vraiment simple. Par contre en perf ça aurait certainement un prix. Je dis ça, mais je sais même pas si ce serait jouable de faire un truc automatique comme ça. Par exemple dans le port d'un programme utilisant la SDL, c'est clairement un truc qu'il faut bien penser dans la réécriture d'un programme, sinon boom !!!

Ok, j'entends - on va sans doute essayer ça. C'est pas très dur de détecter si t'es dans un world switch (gint le sait) et ensuite il suffit de passer dedans dès qu'on fait un appel à Bfile. C'est pas parfait mais ça suffira largement.

A mon sens il faut utiliser au max ce que chaque machine peut offrir, par exemple sur une CG50 pousser au 3.5Mo et limiter à moins sur le "vieux" matos (CG10/20). Niveler vers le haut en qq sorte quitte à limiter certains trucs sur les vieilles machines.

Carrément.

Mb88 a écrit :
Trop cool ! J'attends le port G35+e II avec impatience !

Après test il commence à marcher
Mon graphe (24 Mars): (gint#27 ; (Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; ...) || (shoutbox v5 ; v5)
Inikiwi Hors ligne Membre Points: 552 Défis: 8 Message

Citer : Posté le 29/10/2022 18:44 | #


🤔
Je pourrais fusionner avec mon éditeur de texte pour faire KiwiPyEbL.
kiwi Python Extra by Lephe.
Calamari Hors ligne Membre Points: 229 Défis: 0 Message

Citer : Posté le 29/10/2022 20:03 | #


Exciting! If you're taking volunteers, I'd like to volunteer to help with mono support.
Lephenixnoir Hors ligne Administrateur Points: 24146 Défis: 170 Message

Citer : Posté le 29/10/2022 20:43 | #


Inikiwi a écrit :
🤔
Je pourrais fusionner avec mon éditeur de texte pour faire KiwiPyEbL.
kiwi Python Extra by Lephe.

Effectivement je ne pense pas faire un éditeur de texte... donc si ton éditeur peut supporter le Python ça serait cool !

Calamari a écrit :
Exciting! If you're taking volunteers, I'd like to volunteer to help with mono support.

That would be awesome! The core is similar but there are many UI concerns. I'll push the sources with some TODO list of independent tasks, let me know if there's anything you'd like to tackle.
Mon graphe (24 Mars): (gint#27 ; (Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; ...) || (shoutbox v5 ; v5)
Lephenixnoir Hors ligne Administrateur Points: 24146 Défis: 170 Message

Citer : Posté le 29/10/2022 21:47 | #


Pour info j'ai tenté de jouer à utiliser le open() classique style Unix. J'ai poussé ça sur une branche. En jouant un peu ça marche presque :

/home/el/.local/share/fxsdk/sysroot/lib/gcc/sh3eb-elf/11.1.0/../../../../sh3eb-elf/bin/ld: build/py/lexer.o: in function `_mp_lexer_new_from_file':
lexer.c:(.text+0xa1c): undefined reference to `_mp_reader_new_file'
/home/el/.local/share/fxsdk/sysroot/lib/gcc/sh3eb-elf/11.1.0/../../../../sh3eb-elf/bin/ld: build/extmod/vfs_posix.o: in function `_vfs_posix_chdir':
vfs_posix.c:(.text+0x3c0): undefined reference to `_chdir'
/home/el/.local/share/fxsdk/sysroot/lib/gcc/sh3eb-elf/11.1.0/../../../../sh3eb-elf/bin/ld: build/extmod/vfs_posix.o: in function `_vfs_posix_getcwd':
vfs_posix.c:(.text+0x518): undefined reference to `_getcwd'
/home/el/.local/share/fxsdk/sysroot/lib/gcc/sh3eb-elf/11.1.0/../../../../sh3eb-elf/bin/ld: build/extmod/vfs_posix_file.o: in function `_vfs_posix_file_ioctl':
vfs_posix_file.c:(.text+0x188): undefined reference to `__commit'

Il nous manque :

- mp_reader_new_file(), une fonction interne je fais pas trop attention
- La gestion du dossier courant avec chdir() et getcwd()
- Et la fonction _commit() apparaît parce que j'ai un peu triché pour éviter d'avoir à fournir poll()

Donc on n'y est pas tout à fait mais ce n'est pas hors de propos dans le futur.
Mon graphe (24 Mars): (gint#27 ; (Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; ...) || (shoutbox v5 ; v5)
Lephenixnoir Hors ligne Administrateur Points: 24146 Défis: 170 Message

Citer : Posté le 30/10/2022 18:42 | #


J'ai activé le module time. Actuellement on a les modules standard suivants :

  • array
  • builtins
  • cmath
  • collections
  • io
  • math
  • random
  • struct
  • sys
  • time

Ainsi que les modules spécifiques MicroPython/calto suivants :

  • gint (très incomplet, juste un peu de clavier, mais ça vient)
  • micropython
  • gc

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

Citer : Posté le 30/10/2022 19:37 | #


Cool, mais la saisie est un peu pénible.

Je propose que le mode soit alpha par défaut et qu'il faut appuyer dessus pour basculer vers le mode "normal".
Lephenixnoir Hors ligne Administrateur Points: 24146 Défis: 170 Message

Citer : Posté le 30/10/2022 19:38 | #


En effet c'est très chiant pour l'instant. Je planifie d'imiter le mode de saisie de l'appli Python officielle, ce qui accomplira ton idée.
Mon graphe (24 Mars): (gint#27 ; (Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; ...) || (shoutbox v5 ; v5)
Mb88 Hors ligne Labélisateur Points: 944 Défis: 3 Message

Citer : Posté le 30/10/2022 19:39 | #


Oui mais moi je propose quelque chose de différent à la méthode classique : une méthode optimisée pour le python.
Mb88 Hors ligne Labélisateur Points: 944 Défis: 3 Message
Lephenixnoir Hors ligne Administrateur Points: 24146 Défis: 170 Message

Citer : Posté le 30/10/2022 19:40 | #


Il faut que tu précises alors, avec ta seule phrase précédente je ne vois pas tout à fait ce que tu imagines.
Mon graphe (24 Mars): (gint#27 ; (Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; ...) || (shoutbox v5 ; v5)
Parisse Hors ligne Membre Points: 457 Défis: 0 Message

Citer : Posté le 31/10/2022 14:06 | #


Pourquoi ne pas reutiliser des parties de code de l'environnement shell/editeur de KhiCAS?
Il me semble qu'il y a pas mal d'outils qui pourraient servir: coloration syntaxique (ou soulignement sur la 35), parenthese match, line wrap dans l'editeur, touche VARS pour voir les variables definies, shift-INS pour acceder a la table de caracteres, menus rapides pour les commandes les plus frequentes... Aussi le fait de pouvoir tester la syntaxe directement depuis l'editeur avec en cas d'erreur, positionnement du curseur a la ligne de l'erreur ce que je trouve beaucoup plus simple a utiliser que l'environnement Python de l'OS.
Et inversement, nettoyer et optimiser un environnement qui accepte plusieurs interpreteurs pourrait servir a KhiCAS.
Lephenixnoir Hors ligne Administrateur Points: 24146 Défis: 170 Message

Citer : Posté le 31/10/2022 20:45 | #


On pourrait, en effet - pas mal de ces fonctions sont intéressantes. C'est plutôt orthogonal pour l'instant ; je cherche juste à fournir un shell décent et de quoi charger des fichiers, avec un focus sur l'exécution Python en elle-même, pas le développement sur la calculatrice.

De plus, j'aimerais que ce port puisse être maintenu par la communauté sur le long terme, et une passation requiert que le code soit facile à approcher, bien documenté, et puisse recevoir des contributions de façon collaborative sur Git. Ce ne sont pas les points forts de KhiCAS... ce qui nous laisse donc l'option de « nettoyer et optimiser l'environnement », qui est certainement la bonne chose à faire, mais ne passerait définitivement pas dans mon budget initial de cette semaine. x_x
Mon graphe (24 Mars): (gint#27 ; (Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; ...) || (shoutbox v5 ; v5)
Parisse Hors ligne Membre Points: 457 Défis: 0 Message

Citer : Posté le 01/11/2022 08:35 | #


Ok, il y avait une ambiguite sur la fonctionnalite environnement de dev Python sur la calculatrice. Je pense aussi que faire une UI de dev Python sur calculatrices necessite nettement plus qu'une semaine de travail, surtout avec l'environnement de dev sur Casio ou on ne dispose pas d'un debuggueur comme sur la Numworks ou la ti nspire (G. Maia avait d'ailleurs passe beaucoup de temps a peaufiner l'UI d'Eigenmaths qui m'a servi de base pour l'editeur de texte, et la console est basee sur le travail de Mike Smith).

Cloner l'UI de KhiCAS me parait nettement plus facile, en tout cas pour moi je pense que ca doit etre faisable en moins d'une semaine a minima (i.e sans support des modules Micropython de KhiCAS graphic, turtle, matplotl, linalg/numpy, cas). Mais ca n'a d'interet que s'il y a des gens qui l'utilisent ensuite, or je n'ai pas trop l'impression que mon implementation MicroPython pour la 90 ait interesse beaucoup d'utilisateurs, peut-etre par manque d'information. Et sur la 35, le public potentiel me parait encore plus restreint.
Mb88 Hors ligne Labélisateur Points: 944 Défis: 3 Message
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.
1, 2, 3, 4 ··· 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 59 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