Symbolibre 0.2 : sources, nouvelles applications, et début de documentation
Posté le 06/12/2020 23:26
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.
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.
À 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.
Voilà de ce côté-là c'est tout.
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.
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.
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).
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.
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.
• 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/
Citer : Posté le 07/12/2020 09:44 | #
ho, contente de voir que le projet continue d'avancer petit à petit~
Citer : Posté le 07/12/2020 13:28 | #
Merci. Pour éviter le risque « à la LibreCalc » que ce projet se termine un jour sans laisser de traces solides, je pense que notre priorité doit être de fournir et documenter la composition matérielle, le procédé de montage, d'installation et de mise en place, pour avoir quelque chose de reproductible rapidement.
Bien sûr on n'a pas l'intention de s'arrêter tout de suite, mais même pour diffuser le projet c'est mieux si ça marche rapidement.
Citer : Posté le 07/12/2020 14:40 | #
C'est ajouté à mon agrégateur RSS favoris !
Merci pour ces nouvelles, c'est très encourageant et vraiment un plaisir de les lire.
Est-ce que le fait de pouvoir tester sur PC a un rapport avec l’icône symbolibre qui s'est invitée au concours de rentrée 2020 ? S'il est déjà possible d'émuler du Python façon symbolibre en compilant le projet sur PC, je comprends bien l'idée d'une version web, sans effort pour l'utilisateur.
Concernant Giac, quel était l'enjeu de ne pas l'exposer ? Si vous avez cherché à le faire, c'est qu'il y avait une raison, peut être simple, mais elle m'échappe ; je croyais que cette partie était déjà compilée.
La Planète Casio est accueillante : n'hésite pas à t'inscrire pour laisser un message ou partager tes créations !
Citer : Posté le 07/12/2020 14:54 | #
Ah c'est super alors, c'est vraiment sympa d'écrire ces articles mais encore mieux quand ça vous plaît.
En fait non ! Je n'ai rien à voir avec la guilde Symbolibre du concours de rentrée, de ce que j'ai compris quelqu'un s'en est déclaré à l'improviste, et Critor l'a gracieusement ajouté. C'est sûr que ça pourrait être sympa d'avoir l'émulateur Symbolibre dans les plateformes du prochain concours de rentrée... mais avoir Python en web (surtout avec les nombreux modules standard qu'on se targue de supporter) serait sans doute encore plus difficile que Giac et Qt. À nuancer donc, peut-être qu'on pourrait fournir MicroPython.
En fait... il y avait plusieurs questions. D'abord une histoire de variables symboliques : dans Giac quand tu tapes x+1 ça donne l'expression symbolique x+1 si la variable n'est pas définie (et la valeur de x à laquelle on ajoute 1 si la variable était définie, puisqu'en général on substitue avant d'afficher le résultat). Il est assez facile de confondre ces expressions avec des fonctions, et on voulait avoir au moins la possibilité de les désactiver (ie de refuser « x+1 » si la variable n'est pas déjà définie) dans un mode « simple » pour ne pas perdre des lycéens dans ces méandres de Giac.
Ensuite il y avait des questions d'extensions. On aimerait par exemple pour écrire dans un script Python une fonction float → float (du genre une fonction inverse_u() qui étant donné x calcule le premier indice n d'une certaine suite (u_n) tel que le terme u_n satisfait une propriété quantifiée par x), et ensuite la tracer dans le graphe ou calculer avec dans l'interpréteur de calculs. Par exemple écrire inverse_u(1.5)².
Et puis d'autres questions, par exemple sur comment on affiche les résultats, qui nous reviennent sous la forme d'objets abstraits Giac, sous leur forme naturelle (pretty-printing), que l'on implémente nous-même. Le fait aussi que pour faire l'affichage pretty-printé pendant l'édition, on veut parser en partie les formules, et on ne peut pas vraiment utiliser le parser Giac pour ça (il ne peut pas parser des formules incomplètes et n'a pas de hooks) donc ça nous oblige à recoder et maintenir quelque chose qui est déjà d'une certaine façon dans Giac.
Toutes ces questions sont un peu difficiles parce que Giac est un gros programme avec relativement peu de documentation, et donc pour faire les choses via Giac il faut passer pas mal de temps à comprendre son comportement (par exemple : quelles sont les formes normales renvoyées par la fonction d'évaluation ?). La question de mettre une interface (qui était surtout mon idée à l'origine) c'était pour voir si on pouvait traiter Giac un peu comme une boîte pour éviter cette complexité. Mais ça ne marchait pas vraiment, donc on a fini par trancher pour prendre le temps de comprendre Giac, soumettre des patchs s'il y a des choses qui nous manquent, et éviter le langage intermédiaire qui apporte son propre lot de problèmes pas faciles à gérer.
Ce n'est que la moitié que j'ai retenue de l'histoire et Nicolas pourrait apporter d'autres détails, mais ça te donne une idée des enjeux.
Citer : Posté le 07/12/2020 14:59 | #
En fait non ! Je n'ai rien à voir avec la guilde Symbolibre du concours de rentrée, de ce que j'ai compris quelqu'un s'en est déclaré à l'improviste, et Critor l'a gracieusement ajouté.
C'etait moi~ ♥
Citer : Posté le 13/12/2020 16:08 | #
Le projet avance si bien!
J'avoue avoir un peu de mal à m'y retrouver parmi toutes ces news (les nombreux tests sut Ti-Planet, les infos du site officiel...), mais ça témoigne tellement de l'ampleur du projet! Bravo Lephenixnoir et toute l'équipe!!
Citer : Posté le 16/12/2020 18:29 | #
Merci ! Il n'y pas tellement de news que ça en fait, mais on y travaille. On vous en dira plus dans les prochaines semaines, ce qui devrait aider à garder le fil.
Citer : Posté le 10/04/2021 12:28 | #
J'ai n'ai pas annoncé les articles sur le site sur Planète Casio précédemment, mais on me l'a fait remarquer plusieurs fois donc voilà une petite mise à jour.
J'ai publié un article sur l'accélération graphique du bureau (X/Wayland) sur le Pi Zero, ce qui n'est au fond pas trop tordu, mais toujours difficile à diagnostiquer. C'est un article technique donc j'ai publié uniquement la version complète en anglais, avec un résumé en français, mais si des détails piquent votre intérêt n'hésitez pas à demander.
Citer : Posté le 10/04/2021 14:25 | #
Bonne lecture, c'était très intéressant. Avec 60 FPS sur ton écran de test, ça va fuser en 320×240 ! Hâte de voir ça.
Est-ce que vous prévoyez une souris virtuelle activée au clavier ? Ça pourrait dépaner
Tu m'as fait découvrir foot indirectement, je l'ai configuré à mes goûts et c'est vraiment sympa (j'aime particulièrement les raccourcis pour ouvrir les URLs). Merci
Citer : Posté le 10/04/2021 14:31 | #
Merci ! Je pense qu'on se limitera à 30 FPS sur l'écran réel, parce que préserver le CPU et la batterie sera plus important (après ça se configure, ce sera juste la valeur par défaut).
Pour la souris virtuelle c'est une bonne question, je ne sais pas encore si ça peut se faire facilement. Effectivement ce serait bien d'avoir accès à un clavier virtuel aussi, histoire d'au moins avoir accès à un TTY ou autre en cas de gros pépin. Éteindre le Pi directement c'est pas top.
Pas de problème pour foot, pour tout te dire j'ai galéré avant de trouver un terminal Wayland qui soit packagé sous Debian, et de ce que j'ai vu c'est le seul. Ouf !