Upsilon : firmware successeur d'Omega par sa communauté !
Posted: 12 Jan 2022, 17:44
Omega était un firmware alternatif pour ta calculatrice NumWorks. Basé sur le code source du firmware officiel Epsilon comme la licence l'autorisait, Omega avait pour but de regrouper et mettre en avant les meilleures contributions au code d'Epsilon, en incluant justement celles ignorées ou refusées par le constructeur.
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 :
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
Hélas pour cette rentrée 2021, NumWorks a brutalement pris un virage ultra-sécuritaire. Toute mise à jour en version 16.3.0 ou supérieure verrouille définitivement ta calculatrice NumWorks N0110 contre l'installation de tout code tiers, et ce sans même que tu en sois prévenu(e) sur la page concernée.
En conséquence, nous t'annoncions il y a quelques semaines le cœur serré l'abandon officiel du projet Omega.
En conséquence, nous t'annoncions il y a quelques semaines le cœur serré l'abandon officiel du projet Omega.
Dans un premier temps nous t'annoncions que Bernard Parisse se proposait de reprendre et continuer à maintenir le projet Omega à travers un fork : un nouveau firmware nommé Khi.
Construit à partir du code source de la dernière version d'Omega, Khi reprenait l'intégralité des avantages de ce dernier !
Construit à partir du code source de la dernière version d'Omega, Khi reprenait l'intégralité des avantages de ce dernier !
Toutefois hors fonctionnalités, Khi apportait divers changements clivants qui n'ont pas été du goût de nombre d'utilisateurs et contributeurs historiques de la communauté Omega :
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é.
- 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é.
Nous y sommes donc aujourd'hui ; la communauté des utilisateurs et contributeurs Omega brillamment conduite par Lauryy06 et lolocomotive lance à son tour un nouveau fork qui se veut cette fois-ci être enfin le véritable successeur de l'esprit Omega : Upsilon.
Upsilon qui nous sort donc aujourd'hui en version 1.0 :
Mais Upsilon ne se contente absolument pas de cela loin de là ; découvrons ensemble les nouveautés.
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 topCommençons donc par l'application Paramètres.
Le 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 :
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 :
Le 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 topNous passons maintenant à l'application Python où nous sommes gâtés avec nombre de nouveautés délicieusement croustillantes.
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 :
Déjà avant toute chose. Jusqu'à présent les firmwares disponibles pour ta NumWorks n'offrait que 32K de stockage pour les scripts Python de l'application.
Ce n'est franchement pas beaucoup ; on se sent rapidement à l'étroit notamment lorsque l'on commence à vouloir inclure des images dans ses scripts.
Ce n'est franchement pas beaucoup ; on se sent rapidement à l'étroit notamment lorsque l'on commence à vouloir inclure des images dans ses scripts.
Commençons par la bibliothèque kandinsky. Même si il y a pire, la bibliothèque de tracé par pixels kandinsky n'est pas bien généreuse, son offre se résumant à 4 méthodes dans le firmware officiel Epsilon :
Mais c'était bien peu. La réalisation de projets graphiques nécessitait souvent bien d'autres primitives. Tu avais le choix entre :
.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.
Et bien grande nouvelle, Upsilon nous gâte dans ce contexte !
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 :
Mais ce n'est pas tout. Nous avons aussi de quoi remplir des polygones de formes quelconques :
Outre le paramètre de couleur, cette méthode attend une liste de coordonnées :
Autre ajout, la méthode
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.
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)
Mais comme tu peux le voir ci-contre, elle ne semble pas encore être au point dans la triangulation de la forme à remplir, avec plusieurs lignes horizontales laissées en blanc.
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.
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.
Enfin la bibliothèque ion t'offrait de quoi tester si une touche est enfoncée via sa méthode
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.
.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.
Upsilon nous apporte enfin une alternative mais bizarrement dans kandinsky, la méthode
.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
L'application additionnelle KhiCAS inclut elle-même son propre interpréteur micropython distinct de celui de l'application Python. Un avantage est la présence de bibliothèques supplémentaires comme ulab.
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).
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).
Et bien grande nouvelle entre autres pour les physiciens, avec Upsilon la bibliothèque ulab débarque enfin dans l'application Python intégrée !
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 :
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 topCela commençait à faire longtemps, avec Upsilon nous bénéficions enfin d'une nouvelle application intégrée, une Liseuse.
Il 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 !
La porte est donc maintenant également grande ouverte à tes fichiers de documents scientifiques : formulaires, cours, exercices corrigés, annales et bien d'autres !
Il 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 topAvec Upsilon l'esprit du projet Omega est clairement de retour.
Nous 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 :
Nous 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)