Difficile de tout citer ici mais voici déjà par exemple un des fantastiques ajouts d'Omega. La NumWorks travaille en interne sur des arbres de calcul, mais n'accepte que des valeurs numériques. Omega étendait ces arbres en autorisant également des lettres / inconnues, ce qui nous donnait ainsi un moteur de calcul littéral. De quoi même dériver, du jamais vu à seulement 80€ !
Il y avait aussi un tableau périodique des éléments, ou encore 100K de mémoire heap pour tes projets Python au lieu de 32K !
Outre ce qu'il intégrait, Omega offrait également l'avantage de pouvoir installer à chaud des applications. Plusieurs applications de très haute facture furent développées, on peut citer entre autres :
- KhiCAS, une formidable application intégrée de Mathématiques et de Sciences par Bernard Parisse, enseignant-chercheur à l'Université de Grenoble, qui étendait gratuitement les capacités de ta calculatrice au niveau d'une HP Prime. L'application intégrait le moteur de calcul formel GIAC développé pour le logiciel Xcas du même auteur pour des possibilités en calcul encore plus étendues. Étaient également inclus un tableur, une bibliothèque de constantes physiques, un convertisseur d'unités, un tableau périodique des éléments et bien d'autres choses encore. Le tout était en prime programmable en Python, avec une collection de modules importables bien plus étoffée que celle de l'application Python officielle, et surtout ici de façon intégrée, tes scripts Python pouvant en effet faire appel au moteur de calcul formel GIAC par l'intermédiaire du module cas.
- Nofrendo, un émulateur de console de jeux Nintendo NES par zardam
- Peanut-GB, un émulateur de console de jeux Nintendo GameBoy par M4x1m3
- Periodic, un tableau périodique des éléments par M4x1m3
En conséquence, nous t'annoncions il y a quelques semaines le cœur serré l'abandon officiel du projet Omega.
Construit à partir du code source de la dernière version d'Omega, Khi reprenait l'intégralité des avantages de ce dernier !
- abandon du support du modèle intial NumWorks N0100 de la rentrée 2017
- une interface d'installation en ligne n'ayant absolument rien à voir avec celle qu'Omega proposait
- pas de simulateur en ligne
- pas d'interface en ligne pour choisir les applications à installer ainsi que les fichiers ROMs pour accompagner les applications d'émulation
- et surtout à la différence, pas de disponibilité du projet Khi sur la plateforme GitHub, cassant ainsi les habitudes des nos jeunes contributeurs, notamment le caractère public des contributions ainsi que des suites leur étant apportées ou pas
Le firmware Khi semble ne pas avoir bénéficié d'une ambition autre que celle d'être un moyen de lancer l'application KhiCAS.
Ce n'est pas un problème en soit, c'est un choix qui se défend, mais nombre d'utilisateurs et contributeurs Omega se sont ainsi sentis mis de côté.
Upsilon qui nous sort donc aujourd'hui en version 1.0 :
- est basé sur le code du firmware Espilon officiel dans sa version 15.5.0 ; toutes les nouveautés annoncées depuis ne pouvant être incluses suite au changement de licence
- apporte bien évidemment entre autres toutes les nouveautés et ajouts développés dans le cadre d'Omega jusqu'à l'arrêt du projet
Mais Upsilon ne se contente absolument pas de cela loin de là ; découvrons ensemble les nouveautés.
Sommaire
1) Nouveautés application Paramètres
Go to topLe paramètre Police Python est renommée en Python est permet maintenant de changer plusieurs choses relatives à cette application.
Outre la taille de police, il permet de désactiver deux choses disponibles par défaut :
- l'auto-complétion qui selon les habitudes de chacun peut perturber la saisie
- la coloration syntaxique qui n'arrange pas forcément tout-le-monde
OK.
Enfin, un nouveau paramètre USB permet de configurer une protection de ta calculatrice, activée par défaut.
Lorsque activé, ce paramètre empêche toute installation d'un firmware officiel Epsilon et donc tout verrouillage définitif de ta calculatrice, enfin !
(à noter toutefois que la protection ne fonctionne que si le firmware Upsilon est en fonctionnement ; elle n'est pas active si tu passes par le mode de récupération de la machine)
Toute tentative d'installation d'un firmware non souhaité entraînera une déconnexion immédiate de la calculatrice.
Lorsque la protection est activée, tu as le choix entre :
- autoriser la seule installation de firmwares basés sur Upsilon
- autoriser la seule installation de firmwares basés sur Omega (ce qui inclut Khi selon nos tests)
- n'autoriser aucune installation de firmware
2) Nouveautés application Python
Go to topCe n'est franchement pas beaucoup ; on se sent rapidement à l'étroit notamment lorsque l'on commence à vouloir inclure des images dans ses scripts.
.set_pixel(x, y, couleur)
pour allumer un pixel.fill_rect(x, y, largeur, hauteur, couleur)
pour remplir un rectangle.draw_string(..., x, y)
pour écrire
.draw_line(x1, y1, x2, y2, couleur)
pour tracer un segment.Mais c'était bien peu. La réalisation de projets graphiques nécessitait souvent bien d'autres primitives. Tu avais le choix entre :
- Utiliser des scripts Python codant des bibliothèques graphiques les fournissant
- Les écrire toi-même.
Ce n'est pas forcément une mauvaise chose, mais selon le niveau cela pouvait nécessiter une étude mathématique préalable (trigonométrie pour le tracé de cercles, triangulation pour le remplissage de formes...), chose qui pouvait être décourageante.
Et dans tous les cas, la NumWorks souffra par rapport à la plupart de la concurrence d'une mémoire de tas (heap) à l'exécution relativement faible en Python, et un codage non optimal de ces ajouts amputant d'autant la capacité restant pour exécuter le reste du code de ton projet.
La bibliothèque graphique kandinsky nous rajoute en natif plusieurs méthodes essentielles, et donc sans consommation supplémentaire de heap. Nous avons déjà autour des cercles :
.draw_circle(x, y, rayon, couleur)
pour tracer un cercle.fill_circle(x, y, rayon, couleur)
pour remplir un disque
- Code: Select all
from kandinsky import *
SCREEN_W, SCREEN_H = 320, 222
r = min(SCREEN_W, SCREEN_H) // 2
fill_circle(SCREEN_W - r, r, r, (0, 0, 255))
draw_circle(r, r, r, (255, 0, 0))
Mais ce n'est pas tout. Nous avons aussi de quoi remplir des polygones de formes quelconques :
.fill_polygon(..., couleur)
.Outre le paramètre de couleur, cette méthode attend une liste de coordonnées :
- Code: Select all
from math import ceil
from kandinsky import *
SCREEN_W, SCREEN_H = 320, 222
def mod(l):
x_min, y_min = l[0]
x_max, y_max = 0, 0
for k in range(len(l)):
x_min = min(x_min, l[k][0])
y_min = min(y_min, l[k][1])
x_max = max(x_max, l[k][0])
y_max = max(y_max, l[k][1])
fx = max(1, (x_max-x_min)/SCREEN_W)
fy = max(1, (y_max-y_min)/SCREEN_H)
for k in range(len(l)):
l[k][0] = ceil((l[k][0]-x_min)/fx)
l[k][1] = ceil((l[k][1]-y_min)/fy)
l = [
[0,200],
[400,200],
[400,250],
[450,150],
[0,200],
[2,62],
[223,236],
[253,222],
[274,236],
[350,184],
[121,2],
[2,62]
]
mod(l)
fill_polygon(l, (255, 0, 0)
Comparons, il ne semble pas y avoir ce problème avec les méthodes natives équivalentes sur la concurrence TI-83 Premium CE Edition Python ou TI-Nspire CX II :
On se rend compte en poussant la chose que la méthode .fill_polygon() est malheureusement limitée, n'acceptant au maximum que 32 couples de coordonnées.
Voici ci-contre un simple morceau du logo Texas Instruments à cause de cette limitation, avec les écarts de remplissage qui empirent, non seulement des lignes horizontales laissées en blanc mais également plusieurs lignes horizontales tracées hors de la forme.
Mais pire que cela, le tracé ci-contre bloque la calculatrice et force alors à effectuer un reset.
Autre ajout, la méthode
.palette()
te retournant un dictionnaire avec les différentes couleurs des éléments de l'interface utilisateur Upsilon.Tu as donc de quoi créer des scripts graphiques dont l'affichage s'adaptera automatiquement au thème graphique, notamment pour les utilisateurs qui choisissent d'installer Upsilon avec un thème autre que celui par défaut.
.keydown(code_touche)
.C'était quand même bien embêtant dans le cas de projets s'attendant à des appuis sur un large éventail de touches : jeux, menus, ou encore pire éditeur de texte.
Tu te devais donc d'interroger une par une l'intégralité des touches clavier via une bouche, ce qui n'est pas négligeable en temps, et pouvait ainsi te faire rater quelques appuis bref ou quelques subtilités comme des appuis simultanés sur plusieurs touches.
.get_keys()
qui te retourne la liste de l'ensemble des touches actuellement pressées.Passons donc maintenant justement à la bibliothèque ion.
Nous y trouvons plusieurs nouvelles méthodes permettant d'interroger l'état de la batterie directement depuis tes scripts :
.battery()
pour connaître le voltage de la batterie.battery_level()
pour avoir le niveau de la batterie, soit le nombre d'éléments de charge à dessiner dans l'icône en haut à droit de l'écran (de 0 pour l'état critique à 4 pour une batterie chargée).battery_charging()
pour savoir si la batterie est en cours de recharge
Toutefois, même dans le cadre du firmware Khi, ces ajouts n'avaient malheureusement pas été dupliqués pour l'application Python intégrée.
L'application Python intégrée a pourtant un net avantage pour les projets les plus gourmands, avec un heap de 100K lorsque tu utilises les firmware Upsilon, Khi ou Omega, contre seulement 64K via l'application KhiCAS (et pour référence seulement 32K avec le firmware Epsilon officiel).
Nous avons droit à ses deux sous-bibliothèques ; d'une part numpy pour le calcul scientifique optimisé sur les tableaux ou matrices.
D'autre part donc scipy qui fédère elle-même divers sous-bibliothèques de calcul scientifique :
- linalg : algèbre linéaire
- optimize : optimisation de fonctions (recherche d'extrema ou points d'inflexion)
- signal : traitement de signal
- special
3) Nouvelle application Liseuse
Go to topIl s'agit donc d'un lecteur de fichiers texte.
Tu va pouvoir lire tous les romans que tu souhaites sur ta calculatrice.
Et bien mieux que ça encore, car les expressions LaTeX sont reconnues !
- Code: Select all
Ce fichier est un test pour %r%LaTeX%\r%
$\frac{1}{12}+\sqrt[7]{4}-\floor{n+1}+\ceil{n-1}$
$u_{\phi(n)} = u_{2n+1} = (-1)^{2n+1} = -1$
$\times\forall\pm\partial\exists\div\infty\approx\neq\equiv\leq\geq$
$\leftarrow\uparrow\rightarrow\downarrow\leftrightarrow\updownarrow\Leftarrow\Uparrow\Rightarrow\Downarrow$
$\alpha\beta\gamma\delta\epsilon\zeta\eta\theta\iota\kappa\lambda\mu\nu\xi$
$o\pi\rho\sigma\tau\upsilon\phi\chi\psi\omega$
$\Alpha\Beta\Gamma\Delta\Epsilon\Zeta\Eta\Theta\Iota\Kappa\Lambda\Mu\Nu\Xi$
$\Omicron\Pi\Rho\Sigma\Tau\Upsilon\Phi\Chi\Psi\Omega$
La porte est donc maintenant également grande ouverte à tes fichiers de documents scientifiques : formulaires, cours, exercices corrigés, annales et bien d'autres !
Conclusion
Go to topNous sommes heureux de retrouver un bouillonnement d'idées et formidables nouveautés comparable à ce dont a bénéficié Omega !
Un grand merci et bravo à Lauryy06, lolocomotive, ainsi qu'à tous les contributeurs et testeurs, entre autres :
- @Yaya.Cout (1er contributeur + divers fix assez importants)
- @dl11 (protection usb)
- @Mino#1289 (co-auteur de la liseuse)