Page 1 of 4

Symbolibre 0.2 : sources, nouvelles applis, début de doc

Unread postPosted: 06 Dec 2020, 23:25
by Lephe
Je suis super excité d'annoncer aujourd'hui une update importante de Symbolibre, avec les sources sous licence libre GPLv3 (github.com/symbolibre), plein de nouveautés sur les applications, et un nouveau site web avec de la documentation (symbolibre.org). Ça reste une release alpha, mais les progrès sont considérables. :D

Image

Pour replacer rapidement le contexte : le but de Symbolibre est de concevoir une calculatrice graphique à assembler et installer à la main, tournant entièrement sur des logiciels libres et avec un système logiciel moderne. C'est un projet Do-It-Yourself qui veut vous inviter à découvrir quelques concepts d'électronique, de systèmes d'exploitation, ou d'informatique en général à travers un objet courant du lycée. ^^

On a déjà eu l'occasion de parler du projet (sur TI-Planet comme sur Planète Casio) quand on l'a commencé il y a deux ans comme projet de Master. Après la fin de l'année on n'en a plus discuté publiquement, parce qu'on n'a avancé que doucement (avec principalement deux contributeurs, Nicolas — qui n'a pas encore de compte ici mais ça finira bien par arriver — et moi). On a fini les demandes pour pouvoir publier les sources en Septembre cette année, et voici donc notre première release officielle du logiciel. :)

Pas mal de choses ont changé depuis, et on a plusieurs articles à publier sur notre site pour raconter le processus de conception, de la structure des applications en applets QML au système mathématique en passant par l'interface utilisateur. Je publierai sans doute d'autre choses ici... mais je ne veux pas inonder, donc avec modération.

Vous pouvez déjà lire l'article de publication sur notre site web. (Il y a même un flux Atom - lien direct.)


Interface utilisateur unifiée



Cette release comporte trois applications qu'on avait déjà pu présenter : l'interprète de calculs, un traceur de fonctions, et un petit IDE pour programmer (pour l'instant) en Python.

Le gros changement dans cette release, en plus de l'ajout de pas mal de fonctionnalités de base dans ces applications, c'est que les outils internes et les interfaces graphiques ont été unifiées (les applications étaient développées quasi-indépendamment pendant le projet de Master). ;)

Sur l'interface utilisateur, on a beaucoup remanié les applications pour intégrer une « barre de fonctions » en bas, dont on peut activer les fonctions avec 5 touches F1...F5. C'est clairement inspiré de Casio.

Image

À l'origine on espérait garder un clavier le plus direct possible avec des labels les plus clairs possibles, mais les actions disponibles dans chaque application étaient trop variées et aucun schéma de nommage des touches ne permettait de les décrire de façon convaincante — on terminait avec des menus un peu partout, et donc des pressions de touches en plus.

Les touches de fonctions F1...F5 sont essentiellement des touches « à label variable », ce qui donne de la liberté pour assigner les fonctions de chaque application. Mais ce n'est pas sans défaut, parce qu'on a vite fait de mélanger plein de choses dans ce concept très large, et il faut explicitement ajouter de la structure pour que ça reste intuitif.

On a pas mal d'idées pour rendre cette interface progressivement plus intuitive, et on compte bien implémenter tout ça dans les prochaines versions. ^^


Systèmes internes : gestion des applications, mathématiques



On a aussi tranché plusieurs questions architecturales délicates. Une d'entre elles concerne le format des applications, avec plusieurs options entre des exécutables indépendants et un seul programme monolithique. Nos applications sont écrites avec le langage QML du framework Qt et leur chargement n'est pas immédiat (ce qui avantage le monolithique en performance), mais on veut aussi supporter des applications externes (ce qui nécessite de pouvoir travailler avec des exécutables indépendants).

On a décidé d'implémenter nos applications comme des applets QML ; essentiellement elles sont installées séparément mais chargées dans le même processus. Des applications externes écrites comme des applets QML peuvent profiter de la bibliothèque Symbolibre, mais d'autres exécutables Qt, SDL ou autres seront aussi supportés (ce qui sera intégré dans l'image OS de base n'est pas encore décidé, mais c'est le plan). ;)

Une autre question délicate concerne le système mathématique. On avait assez vite décidé d'utiliser Giac, mais on n'était pas certains de vouloir l'exposer de façon brute, et on a envisagé d'avoir un langage intermédiaire. On a fini par trancher pour exposer Giac directement, parce que les deux options nécessitent d'utiliser Giac comme une boîte blanche, et l'étape intermédiaire avait trop de complexité ajoutée. Je pense qu'on aura l'occasion d'en reparler !


Traduction des applications



On a intégré le système de traduction au projet, et tout est traduit en français et en anglais.

Image

Voilà de ce côté-là c'est tout. :p


Catalogues de saisie mathématique et Python



On a commencé à intégrer des catalogues de fonctions pour faciliter la saisie. Je ne vous présente pas le concept (y'a rien de nouveau ici), mais on s'attache à le faire soigneusement parce qu'une fonction nommée de façon peu intuitive et sans description n'est jamais facile à utiliser.

Image

La classification des fonctions est arborescente même si idéalement on voudrait éviter d'imbriquer les niveaux là où ce n'est pas intuitif. Pour chaque entrée, on a une description traduite et quelques exemples ; l'équivalent de ce que donne l'add-in HELP sur Casio (soit plus que le catalogue intégré, qui ne donne que les noms, quasiment tous obscurs).

Il y a actuellement deux catalogues de ce type : un pour la saisie des expressions mathématiques, et un pour les fichiers Python dans l'éditeur de code.

Image


Tester sur PC



Vous pouvez tester les applications sur un PC en les compilant depuis le dépôt, il y a des instructions dans le README. On a récemment migré vers CMake au lieu de l'ancien QMake, ce qui a beaucoup simplifié le procédé. Il y a un clavier intégré (en plus des touches de votre clavier physique, qui marchent tout aussi bien).

Image

Pour que ce soit plus facile à tester pour vous, on souhaite compiler une version web du logiciel à la façon de l'émulateur Numworks. C'est loin d'être évident, notamment avec Giac et Qt Quick, mais je promets de tester !


Concernant le montage matériel de la calculatrice



Pour tout ce qui est matériel, on est restés avec le prototype qu'on a construit en Master (ci-dessous). Nicolas et moi n'étions pas les soudeurs de l'équipe, donc je reprends progressivement les informations (et le coup de main au fer à souder) pour concevoir un deuxième prototype.

Image

Le défaut majeur du premier prototype était dans le montage, avec pas mal de fils encore volants dans le boîtier, et des contacts pas assez francs au niveau de l'écran. L'objectif pour le second est de tout router sur le PCB en connectant les composants avec des pin headers, ce qui donne un seul « format » à souder (du THT normalement accessible au plus grand nombre), peut-être évitable avec des pin headers sans soudure, et un minimum de risque de mauvais contacts. :)

On a aussi commandé des écrans plus grands, puisqu'on nous avait fait remarquer (à juste titre) que l'écran original était vraiment petit. L'écran n'effleurera probablement jamais le boîtier d'une façon super design à cause de subtilités de montage, mais ça devrait être un peu plus stylé !


Nouveau site web et documentation



Enfin, on a refait notre site web symbolibre.org ; le nouveau système ressemble au Wordpress qui était avant, à ceci près que si vous étiez abonné·e au flux RSS vous avez certainement re-reçu vos notifications avec le changement.

Quelque chose de vraiment nouveau est la documentation qu'on a commencé à pousser ; rien de transcendant encore, mais des bonnes bases pour le futur du projet. :)

Il y a notamment des notes sur la façon dont on génère des images OS Raspbian pour le Pi Zero, ce qui permettra à terme de créer des images OS personnalisées avec les paquets de votre choix. (Comme le Pi Zero n'a pas de réseau, le plus direct est de générer les images sur le PC puis de les installer ensuite.)


Conclusion et liens



Même si tout s'est produit un peu dans l'arrière-boutique, cette publication contient de l'ordre de 400 commits sur 18 mois, avec une bonne dose d'expérimentations sur le matériel et beaucoup de questions de conception, qu'on est très enthousiastes à l'idée de vous partager. :D

  • Vous pouvez lire et tester nos applications sur le dépôt Github github.com/symbolibre.
  • Vous pouvez lire nos articles et la documentation sur notre site web symbolibre.org.
  • Vous pouvez être notifiés des prochains articles en vous abonnant au flux Atom (celui-ci est en français) avec votre client préféré.

Ce projet a été très bien accueilli par la communauté précédemment, et j'espère vous rendre une partie de cet intérêt avec cette release. Merci à tous ! o/

Re: Symbolibre 0.2 : sources, nouvelles applis, début de doc

Unread postPosted: 06 Dec 2020, 23:39
by Lionel Debroux
C'est super d'avoir des nouvelles du projet, et de voir qu'il continue d'avancer :)
Bon travail.

Re: Symbolibre 0.2 : sources, nouvelles applis, début de doc

Unread postPosted: 07 Dec 2020, 01:20
by critor
Superbe, merci pour toutes ces excellentes nouveautés et nouvelles ! :bj:

Re: Symbolibre 0.2 : sources, nouvelles applis, début de doc

Unread postPosted: 07 Dec 2020, 04:00
by Hamza.S
Content de voir que le projet n'est pas mort, à un moment je me suis demandé si le projet n'avais pas été avorté.

Re: Symbolibre 0.2 : sources, nouvelles applis, début de doc

Unread postPosted: 07 Dec 2020, 10:55
by parisse
Concernant la compilation de giac pour le web, j'ai des versions fonctionnelles de giac en javascript ou en javascript+web-assembly. La version javascript seule est moins a jour et moins performante *mais* a l'avantage de fonctionner sans probleme en local. J'ai deux versions javascript+wasm selon l'emscripten utilise. La version compilee avec emscripten 2 ne marche pas en local, uniquement depuis un serveur.
Je parle ici de l'interface en js pur (fonction caseval qui prend une chaine et renvoie une chaine). On peut aussi compiler giac en une libgiac.a et linker le code C/C++ avec un autre code depuis emscripten.

Re: Symbolibre 0.2 : sources, nouvelles applis, début de doc

Unread postPosted: 07 Dec 2020, 12:14
by critor
Sinon, des nouvelles d'un mode examen sur Symbolibre ?
Comme ça je pourrais l'inclure au classement QCC 2021. ;)

Re: Symbolibre 0.2 : sources, nouvelles applis, début de doc

Unread postPosted: 07 Dec 2020, 13:25
by Lephe
Merci beaucoup pour vos retours très sympa. :)

Hamza.S wrote:Content de voir que le projet n'est pas mort, à un moment je me suis demandé si le projet n'avais pas été avorté.

Il est évident que ne rien publier n'est pas une approche très élégante à cet égard... on a prévu du matériel pour peut-être plusieurs mois à partir de maintenant, je voudrais éviter à tout prix de refaire pareil. ^^

parisse wrote:Concernant la compilation de giac pour le web, j'ai des versions fonctionnelles de giac en javascript ou en javascript+web-assembly. La version javascript seule est moins a jour et moins performante *mais* a l'avantage de fonctionner sans probleme en local. J'ai deux versions javascript+wasm selon l'emscripten utilise. La version compilee avec emscripten 2 ne marche pas en local, uniquement depuis un serveur.
Je parle ici de l'interface en js pur (fonction caseval qui prend une chaine et renvoie une chaine). On peut aussi compiler giac en une libgiac.a et linker le code C/C++ avec un autre code depuis emscripten.

Ah, merci beaucoup ! Je viendrai certainement te voir pour demander des détails. Je pense commencer par m'occuper de compiler notre code avec Qt Quick mais sans Giac, pour m'assurer que la configuration du build vers WebAssembly est correcte.

Si ça ne fonctionne que depuis un serveur ce n'est pas trop grave, en local on pourra sans doute utiliser les binaires quand on en fournira (pour l'instant on n'a pas de binaires parce que ça reste une alpha, et je pense qu'il faut qu'on refasse un tour des licences pour vérifier sous quelles conditions on peut les partager).

critor wrote:Sinon, des nouvelles d'un mode examen sur Symbolibre ?
Comme ça je pourrais l'inclure au classement QCC 2021. ;)

Ah, très bonne question. Une implémentation en logiciel pur serait facile mais pas forcément sécurisée. Ultimement je pense que la sécurité du mode examen reposera sur le fait que l'utilisateur sera connecté sur un compte non admin (sans sudo et sans avoir de mot passe configuré pour root, ce qui empêche du coup de se connecter en root). Je ne sais pas encore à quel point il faut obfusquer la chose pour que ce soit considéré « sécurisé », mais on peut construire un OS satisfaisant les conditions ci-dessus sans s'écarter de la philosophie libre.

Cela n'empêchera jamais quelqu'un de mettre la machine dans son PC, de chroot dedans ou de modifier le fichier de mots de passe en étant root sur son ordinateur portable, ou de générer un nouvel OS, mais dans la mesure où je peux exhiber des contournements encore plus faciles sur Casio (et je suppose qu'il doit y en avoir sur TI vu ce qui est arrivé récemment au bootcode), je pense qu'on n'a pas besoin d'avoir une sécurité foolproof pour annoncer avoir le mode examen.

Bon après je m'avance sur ce sujet, je n'en ai pas parlé avec Nicolas donc c'est juste mon opinion personnelle.

Re: Symbolibre 0.2 : sources, nouvelles applis, début de doc

Unread postPosted: 07 Dec 2020, 17:19
by parisse
Lephe wrote:Si ça ne fonctionne que depuis un serveur ce n'est pas trop grave, en local on pourra sans doute utiliser les binaires quand on en fournira (pour l'instant on n'a pas de binaires parce que ça reste une alpha, et je pense qu'il faut qu'on refasse un tour des licences pour vérifier sous quelles conditions on peut les partager).

La version js+wasm compilee avec emscripten 2.09 ne fonctionne que depuis un serveur (qui peut etre local). J'en ai une version de test ici: https://www-fourier.univ-grenoble-alpes.fr/~parisse/tmp/giacwasm.js et https://www-fourier.univ-grenoble-alpes.fr/~parisse/tmp/giacwasm.wasm, avec une configuration ou les exceptions sont activees. Le source correspondant avec les librairies est ici https://www-fourier.univ-grenoble-alpes.fr/~parisse/giac/emgiac2.tgz
Par contre la version js+wasm compilee avec un emscripten 1 plus ancien fonctionne en local. C'est celle qui est fournie avec Xcas pour Firefox (https://www-fourier.univ-grenoble-alpes.fr/~parisse/xcasfr.html, https://www-fourier.univ-grenoble-alpes.fr/~parisse/giacwasm.js et https://www-fourier.univ-grenoble-alpes.fr/~parisse/giacwasm.wasm

Ceci etant dit rien n'est fige, on peut esperer qu'on aura un jour a nouveau des versions wasm utilisables en local.

Re: Symbolibre 0.2 : sources, nouvelles applis, début de doc

Unread postPosted: 07 Dec 2020, 19:08
by legmask
Wow :bj: superbe projet, par contre j'ai le droit de dire que ca manque de border radius :troll: ?

Re: Symbolibre 0.2 : sources, nouvelles applis, début de doc

Unread postPosted: 07 Dec 2020, 22:18
by Nicolas Chappe
Lephe wrote:avec principalement deux contributeurs, Nicolas — qui n'a pas encore de compte ici mais ça finira bien par arriver — et moi

Voilà qui est fait. J'ai beaucoup lu TI-Planet (et pas que pour préparer mon bac quand j'étais lycéen : ma 84 Plus en est à plus de 400 RAM Clears :D), donc je suis content de pouvoir rendre quelque chose à la communauté avec Symbolibre :)

parisse wrote:Par contre la version js+wasm compilee avec un emscripten 1 plus ancien fonctionne en local.

C'est une bonne nouvelle, la dernière version de Qt en date recommande emscripten 1.39 donc a priori on n'aura pas à nous soucier des limites de emscripten 2.

Lephe wrote:Ah, très bonne question. Une implémentation en logiciel pur serait facile mais pas forcément sécurisée. Ultimement je pense que la sécurité du mode examen reposera sur le fait que l'utilisateur sera connecté sur un compte non admin (sans sudo et sans avoir de mot passe configuré pour root, ce qui empêche du coup de se connecter en root). Je ne sais pas encore à quel point il faut obfusquer la chose pour que ce soit considéré « sécurisé », mais on peut construire un OS satisfaisant les conditions ci-dessus sans s'écarter de la philosophie libre.

Cela n'empêchera jamais quelqu'un de mettre la machine dans son PC, de chroot dedans ou de modifier le fichier de mots de passe en étant root sur son ordinateur portable, ou de générer un nouvel OS, mais dans la mesure où je peux exhiber des contournements encore plus faciles sur Casio (et je suppose qu'il doit y en avoir sur TI vu ce qui est arrivé récemment au bootcode), je pense qu'on n'a pas besoin d'avoir une sécurité foolproof pour annoncer avoir le mode examen.

Bon après je m'avance sur ce sujet, je n'en ai pas parlé avec Nicolas donc c'est juste mon opinion personnelle.

Oui je ne vois pas non plus d'obstacle majeur à un mode examen logiciel basique. De toute façon un mode examen exploitant des restrictions matérielles n'est pas possible car ça ne respecterait pas la licence GPLv3 (et puis c'est pas vraiment dans l'esprit du projet). La seule chose que je vois que l'on pourrait faire de plus c'est un outil pour ordinateur qui vérifierait si le contenu d'une carte microSD correspond bien à un système Symbolibre officiel, à destination des surveillants d'épreuves. Mais ça reste très hypothétique.

LeGmask wrote:Wow :bj: superbe projet, par contre j'ai le droit de dire que ca manque de border radius :troll: ?

Merci ! C'est vrai qu'on s'est pas vraiment attardés sur les couleurs ou les arrondis pour le moment, il faudra qu'on revoie tout ça un jour. On a un thème global maintenant, ça devrait nous simplifier la tâche.