
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 :

- 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
Un gros avantage de plus était ici que
KhiCAS et l'ensemble des fonctionnalités rajoutées restaient accessibles en mode examen, de façon parfaitement légale et légitime en France, puisque ces fonctionnalités venaient directement intégrées à des modèles concurrents haut de gamme parfaitement autorisés.

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.


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 !

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 :
- 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
Ce dernier point était bien le problème majeur : si l'application
KhiCAS installée avec
Khi a continué à évoluer de façon très significative, ce ne fut hélas pas le cas du reste du
firmware.
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 :
- 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.
Sommaire1) 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 :
- 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


Dans
À propos nous avons une nouvelle ligne indiquant le voltage ainsi que le pourcentage de charge de la batterie, informations entre lesquelles on bascule avec la touche
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
Nous passons maintenant à l'application
Python où nous sommes gâtés avec nombre de nouveautés délicieusement croustillantes.

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.

Et bien grande nouvelle,
Upsilon fait passer cet espace de stockage à
64K !


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 :
.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
Le
firmware Omega avait grandement amélioré cela en ajoutant
.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 :
.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.

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 .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).


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 :
- linalg : algèbre linéaire
- optimize : optimisation de fonctions (recherche d'extrema ou points d'inflexion)
- signal : traitement de signal
- special

Cela 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 !

- 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 !

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

- @Yaya.Cout (1er contributeur + divers fix assez importants)
- @dl11 (protection usb)
- @Mino#1289 (co-auteur de la liseuse)
Si tu n'as pas encore commis l'erreur de verrouiller ta calculatrice, c'est par ici pour en améliorer les capacités.
Installation :