

Le projet fut abandonné brutalement contre l'avis de la communauté début 2015, dès les premières rumeurs d'introduction du mode examen, évoquant un manque d'intérêt de la part des enseignants, ainsi qu'une soi-disante impossibilité de rester sur un projet ouvert dans le contexte du mode examen. Deux arguments que la NumWorks a largement infirmés depuis.
A notre avis ce qui plombait réellement fin 2014 encore toute chance de succès de la LibreCalc, c'est qu'au-delà de son matériel et de son système d'exploitation Linux, elle n'avait rien à offrir, n'apportant strictement rien à l'enseignement. Les vidéos de démo mettaient tristement en avant ce qui était présenté comme un "simulateur de TI-82 Stats", mais qui bizarrement reproduisait au pixel près l'interface très inférieure de la TI-81, son ainée de 14 ans... C'était bien la pleine de se donner le mal de passer sur du matériel ouvert et du code libre, pour reproduire en moins bien ce que faisait déjà Texas Instruments. Sans compter que dans le contexte d'une commercialisation, le constructeur historique n'aurait certainement jamais laissé passer ça.


Symbolibre est donc le projet d'étude de l'équipe de pas moins de 29 personnes qu'ils ont formée avec leurs camarades étudiants et pilotée, en première année de Master Informatique fondamentale à l'ENS (Ecole Normale Supérieure) de Lyon.
Nous en profitons pour remercier l'équipe Symbolibre d'avoir bien voulu s'adapter à nos disponibilités en nous permettant de découvrir la calculatrice Symbolibre en avant-première, soit avant la présentation publique du projet.
- une calculatrice électronique Pocket Computer PC-1430 de 1985 par le constructeur Sharp, plus précisément une calculatrice scientifique programmable en Basic
- une calculatrice mécanique manuelle Curta par le constructeur liechtensteinois Continenta AG Mauren, plus précisément la Curta type II de 1954 puisque l'on y note la possibilité d'entrer des nombres ayant jusqu'à 11 chiffres significatifs au lieu de 8 sur la Curta type I
- une calculatrice mécanique électrique C116/2 de 1957 par le constructeur allemand Olympia Werke AG
De quoi nous mettre en bonne condition pour ce qui va suivre.



Quelle émotion, mon coeur bat la chamade. Cela me rappelle quand j'enseignais encore en collège jusqu'en 2011, avec les petits Sixièmes qui après leurs recherches Internet racontaient que j'avais inventé une calculatrice. C'était mignon... Mais là pour le coup c'est une véritable invention, et nous sommes tout excités à l'idée d'assister pour la première fois à une telle naissance.
Et nous voici maintenant enfin arrivés auprès de la bête, nous allons donc pouvoir voir quels enseignements l'équipe a tirés de l'échec du projet LibreCalc, et ce qu'elle a à nous proposer avec Symbolibre.
Sommaire :Go to top
1) Tour du propriétaire :
Go to topMais il reste parfaitement fonctionnel, et en cas de besoin tu pourras revenir te référer aux images d'illustration ci-dessous :
Notons juste que l'on commence très fort niveau adéquation à l'enseignement scolaire français, puisque le clavier dispose enfin de touches dédiées aux instructions de programmation les plus courantes. Plus besoin de s'embêter à aller les chercher dans des sous-menus !

Nous n'avons pas emporté notre balance, mais l'ensemble nous paraît relativement léger, donc il doit y avoir belle une marge d'amélioration possible. Il faudra juste doser le tout correctement afin de conserver aussi bas que possible le risque de casse dans le contexte scolaire hostile. Une autre possibilité serait aussi d'opter pour un écran plus grand.
Nous notons sur la tranche supérieure un interrupteur d'alimentation, ainsi qu'un port micro-USB.
2) Démarrage et Linux :
Go to top
On peut aussi si tu préfères maintenir une touche pendant le démarrage pour réobtenir l'écran texte et voir un petit peu mieux ce qui se passe lors du démarrage de cette distribution Linux Gentoo choisie sous la direction de Nicolas :
free
nous précise que la calculatrice ne manque pas de mémoire de travail, avec pas moins de 430,36 Mio libres pour une capacité de 479,54 Mio. 
Matériellement, on peut donc conjecturer 512 Mio de capacité RAM (mémoire vive).
3) Affichage et applications intégrées :
Go to top
On apprécie la finesse du pixel. Niveau qualité de l'écran on regrettera par contre qu'il ne soit pas anti-reflets contrairement à certains excellents écrans de la concurrence.
L'écran d'accueil nous présente donc 5 applications que nous allons explorer ensemble :
- Calcul
- Graphique
- IDE
- Paramètres
- Éteindre
Un bon début, même si manqueront encore à ce jour pour la France quelques essentiels, comme statistiques, probabilités et suites numériques.
4) Application Calcul :
Go to top

Mais cela ne veut pas dire pour autant qu'il n'y a pas eu du travail conséquent. Notons en effet que nous y disposons déjà d'un historique des calculs, que les expressions et leur simplification sont affichées en écriture naturelle ce qui n'est pas un problème simple, et même la saisie des expressions à évaluer s'effectue déjà en écriture naturelle ce qui est encore moins simple !

Bref, une très belle interface pour GIAC ! 

5) Application Graphique :
Go to top


On peut toutefois regretter que l'onglet actif ne soit pas toujours visuellement évident avec les couleurs choisies.

Par exemple nous avons des étiquettes numériques venant expliciter les graduations tout le long de chaque axe.

Notons aussi que les graduations restent affichées en bordure si jamais l'origine tombe hors fenêtre, ce qui évite à l'utilisateur de se retrouver perdu comme sur d'autres modèles.

Mais ce n'est pas tout, il ne faut pas croire que tout ce qu'il y a de bon a déjà été inventé pour les calculatrices graphiques. Tu te souviens de l'aberration d'autres modèles où lorsque tu as le curseur sur un graphe, tu dois taper
↓pour passer au graphe suivant, et ce même si le graphe suivant est au-dessus ? De façon ici beaucoup plus intuitive, les touches
↑et
↓te permettront de basculer le curseur non pas vers le graphe précédent ou suivant, mais vers le graphe qui se situe au-dessus ou en-dessous du graphe courant !

Et puisque nous y sommes, le curseur de graphe nous permet de constater la formidable puissance de la machine, le défilement de la fenêtre graphique étant parfaitement fluide, sans le moindre indice visible de retraçage des graphes lorsque le curseur sort de la fenêtre !

De même, la fenêtre graphique peut être défilée horizontalement ou verticalement et même zoomée en toute fluidité !

Une application Graphique qui arrive encore à innover après plus de 30 ans de calculatrices graphiques, bravo ! 

6) Application IDE :
Go to top
Créons un nouveau fichier, l'application nous propose alors d'en choisir le type :
- Texte
- Python
- OCaml
- TI Basic
- Casio Basic



7) Application Paramètres :
Go to top

8) Python :
Go to topSelon la commande
help("modules")
, nous avons droit à un Python exhaustif. Avec pléthore de modules ici illustrés seulement jusqu'à la la lettre G, il distance toute la concurrence avec au mieux sa petite 10aine de modules ! 
On pourra par contre regretter de ne trouver aucun module graphique, ce qui aurait été bien utile pour le nouveau programme de Physique-Chimie Seconde rentrée 2019.
- 147+ modules : Symbolibre
- 13 modules : module externe TI-Python pour TI-83 Premium CE (firmware tiers)
- 8 modules : TI-83 Premium CE Edition Python + NumWorks + Casio Graph 35+E II / 35+E/USB / 75/85/95 / fx-9750GII / fx-9860G/GII + TI-Nspire (application MicroPython) + module externe TI-Python pour TI-83 Premium CE
- 3 modules : Casio Graph 35+E II / 90+E / fx-CG50
- Symbolibre + NumWorks + Casio Graph 35+E II / 35+E/USB / 75/85/95 / fx-9750GII / fx-9860G/GII (application CasioPython) + TI-Nspire (application MicroPython) + module externe TI-Python pour TI-83 Premium CE (firmware tiers) avec nombres et fonctions complexes
- Casio Graph 35+E II / 90+E / fx-CG50 avec nombres complexes
- TI-83 Premium CE Edition Python + module externe TI-Python pour TI-83 Premium CE
Regardons maintenant plus précisément le contenu de ces différents modules, à l'aide du script suivant :
- Code: Select all
def sstr(obj):
try:
s=obj.__name__
except:
s=str(obj)
a=s.find("'")
b=s.rfind("'")
if a>=0 and b!=a:
s=s[a+1:b]
return s
def isExplorable(obj):
s=str(obj)
return s.startswith("<module '") or s.startswith("<class '")
def explmod(pitm,pitmsl=[],reset=True):
global curline
if(reset):
curline=0
pitmsl=[sstr(pitm)]
hd="."*(len(pitmsl)-1)
spath=".".join(pitmsl)
c=0
for itms in sorted(dir(pitm)):
c=c+1
try:
itm=eval(spath+"."+itms)
print(hd+itms+"="+str(itm))
if isExplorable(itm):
pitmsl2=pitmsl.copy()
pitmsl2.append(itms)
c=c+explmod(itm,pitmsl2,False)
except:
print(hd+itms)
if c>0:
print(hd+"Total: "+str(c)+" item(s)")
return c
explmod(math)
, on obtient pas moins de 55 élements, soit nettement plus que les au mieux 41 de la concurrence ! 
- 55 éléments : Symbolibre
- 41 éléments : NumWorks + Casio Graph 35+E II / 35+E/USB / 75/85/95 / fx-9750GII / fx-9860G/GII (application CasioPython) + TI-Nspire (application MicroPython) + module externe TI-Python pour TI-83 Premium CE (firmware tiers)
- 28 éléments : TI-83 Premium CE Edition Python + module externe TI-Python pour TI-83 Premium CE
- 25 éléments : Casio Graph 35+E II / 90+E / fx-CG50
explmod(builtins)
, on ne trouve bizarrement que 152 éléments, soit nettement moins que la concurrence. Nous avons toutefois omis de prendre note de ce qui pouvait bien manquer.- 218 éléments : TI-Nspire (application MicroPython)
- 204 éléments : Casio Graph 35+E II / 35+E/USB / 75/85/95 / fx-9750GII / fx-9860G/GII (application CasioPython) + TI-Nspire (application MicroPython)
- 192 éléments : TI-83 Premium CE Edition Python
- 191 éléments : module externe TI-Python pour TI-83 Premium CE (firmware tiers)
- 190 éléments : module externe TI-Python pour TI-83 Premium CE
- 188 éléments : NumWorks
- 175 éléments : Casio Graph 35+E II / 90+E / fx-CG50
- 152 éléments : Symbolibre
explmod(sys)
. Malheureusement la commande finit par partir en récursion infinie.
- 85 éléments : Symbolibre
- 15 éléments : TI-83 Premium CE Edition Python + TI-Nspire (application MicroPython) + module externe TI-Python pour TI-83 Premium CE
- 12 éléments : Casio Graph 35+E II / 35+E/USB / 75/85/95 / fx-9750GII / fx-9860G/GII (application CasioPython) + TI-Nspire (application MicroPython)
- 0 élément : NumWorks + Casio Graph 35+E II / 90+E / fx-CG50
sys.maxsize==2**31-1
, les nombres entiers sont donc codés nativement sur 32 bits (1 bit de signe). Et que comme sys.maxsize+1
ne retourne pas d'erreur, le support des entiers longs est donc actif.Intéressons-nous maintenant à la mémoire de travail à l'aide du script suivant :
- Code: Select all
def sizeenv():
s=0
import __main__
for o in dir(__main__):
try:s+=size(eval(o))
except:pass
return s
def size(o):
s,t=0,type(o)
if t==str:s=49+len(o)
if str(t)=="<class 'function'>":s=136
if t==int:
s=24
while o:
s+=4
o>>=30
if t==list:
s+=64
for so in o:s+=8+size(so)
return s
def mem(v=1,r=1):
try:
l=[]
try:
l+=[r and 793+sizeenv()]
if v*r:print(" ",l[0])
l+=[0]
l+=[""]
l[2]+="x"
while 1:
try:l[2]+=l[2][l[1]:]
except:
if l[1]<len(l[2])-1:l[1]=len(l[2])-1
else:raise(Exception)
except:
if v:print("+",size(l))
try:l[0]+=size(l)
except:pass
try:l[0]+=mem(v,0)
except:pass
return l[0]
except:return 0
Malheureusement, le processus Python se voit assassiné à peine terminée l'allocation de son premier bloc mémoire. Cela nous permet toutefois une estimation, nous disposons donc au moins de 268,435 Mo pour l'exécution de nos scripts, quantité astronomique par rapport à la concurrence !

- 268,435+ Mo : Symbolibre
- 2,049 Mo : TI-Nspire (application MicroPython)
- 1,033 Mo : Casio Graph 90+E / fx-CG50
- 257,63 Ko : Casio Graph 35+E / 35+USB/75/95 SH4 / fx-9750/9860GII SH4 (application CasioPython)
- 100,554 Ko : Casio Graph 35+E II
- 31,893 Ko : Casio Graph 35+E II / 35+USB/75/85/95 SH3 / fx-9750GII SH3 / fx-9860G/GII SH3 (application CasioPython)
- 22,914 Ko : module externe TI-Python pour TI-83 Premium CE (firmware tiers)
- 19,918 Ko : module externe TI-Python pour TI-83 Premium CE
- 19,550 Ko : TI-83 Premium CE Edition Python
- 16,233 Ko : calculatrice NumWorks
Enfin, terminons en voyant les performances. Commençons dans le cadre des nombres entiers avec le script suivant :
- Code: Select all
try:
from time import *
except:
pass
def hastime():
try:
monotonic()
return True
except:
return False
def genseed(ndigits):
nmax,s,k=5*10**(ndigits-1),0,1
while s<nmax:
s+=k
k*=2
return s
def genarr(ndigits):
sd,arr=genseed(ndigits),[]
for k in range(1,ndigits):
for j in range(ndigits):
t=sd%10**k
arr.extend([t,-t,10**k-t,t-10**k])
sd=sd//10+(sd%10)*10**(ndigits-1)
arr.extend([sd,-sd])
return arr
def sortarr(arr,sdiff):
segs=[0,len(arr)-1]
while len(segs):
iref=segs[0]
for k in range(segs[0],segs[1]+1):
if sdiff*(arr[k]-arr[iref])>0:
t=arr[iref]
arr[iref]=arr[k]
arr[k]=arr[iref+1]
arr[iref+1]=t
iref+=1
if iref>=segs[0]+2:
segs.extend([segs[0],iref-1])
if iref<=segs[1]-2:
segs.extend([iref+1,segs[1]])
segs.pop(0)
segs.pop(0)
return arr
def test(l,n):
timed=hastime()
start,stop,sdiff,arr=0 or timed and monotonic(),1,-1,[]
arr.extend(genarr(l))
for k in range(n):
arr.extend(sortarr(arr,sdiff))
sdiff=-sdiff
stop=timed and monotonic() or 1
return stop-start,len(arr),arr[0],arr[len(arr)//2-1],arr[len(arr)//2],arr[len(arr)-1]
test(9,2)
se termine en 2,04s et explose presque toute concurrence ! 
- 1,41s : TI-Nspire (application MicroPython) (32 bits : ARM9/ARMv5 @120MHz)
- 1,56s : TI-Nspire CM / CX révisions A-V (application MicroPython) (32 bits : ARM9/ARMv5 @132MHz)
- 2,04s : Symbolibre (?)
- 2,40s : TI-Nspire CX révisions W+/CR4+ (application MicroPython) (32 bits : ARM9/ARMv5 @156MHz)
- 3,74s : NumWorks (32 bits : Cortex/ARMv7 @100MHz)
- 4,75s : Casio Graph 90+E / fx-CG50 (32 bits : SH4 @118MHz)
- 8,81s : HP Prime G2 (32 bits : Cortex/ARMv7 @528MHz)
- 9,56s : Casio Graph 35+E/75+E / 35+USB/75/95 SH4 / fx-9750/9860GII SH4 (application CasioPython) (32 bits : SH4 @29,5MHz)
- 10,19s : Casio Graph 35+E II (application CasioPython) (32 bits : SH4 @59MHz)
- 12,99s : Casio Graph 35+USB/75/85/95 SH3 / fx-9750GII SH3 / fx-9860G/GII SH3 (application CasioPython) (32 bits : SH3 @29,5MHz)
- 14,93s : Casio Graph 35+E II (32 bits : SH4 @59MHz)
- 20,73s : HP Prime G1 (32 bits : ARM9/ARMv5 @400MHz)
- 23,20s : module externe TI-Python pour TI-83 Premium CE (32 bits : Cortex/ARMv7 @48MHz)
- 26,60s : TI-83 Premium CE Edition Python (?)
- 33,48s : module externe TI-Python pour TI-83 Premium CE (firmware tiers) (32 bits : Cortex/ARMv7 @48MHz)
- 60,71s : application KhiCAS sur Casio Graph 90+E / fx-CG50 (32 bits : SH4 @118MHz)
- 116,93s : application KhiCAS sur Casio fx-CG10/20 (32 bits : SH4 @59MHz)
Passons maintenant aux nombres flottants avec le script suivant :
- Code: Select all
try:
from time import *
except:
pass
def hastime():
try:
monotonic()
return True
except:
return False
def seuil(d):
timed=hastime()
start,stop,n,u,l,d=0 or timed and monotonic(),1,0,2.,1,d**2
while (u-l)**2>=d: u,n=1+(1/((1-u)*(n+1))),n+1
stop=timed and monotonic() or 1
return [stop-start,n,u]
seuil(0.005)
se termine en seulement 0,815s, atomisant cette fois-ci toute concurrence ! 
D'où le classement suivant dans le contexte des calculs en virgule flottante :
- 0,815s : Symbolibre (?)
- 0,962s : HP Prime G2 (32 bits : Cortex/ARMv7 @528MHz)
- 1,08s : TI-Nspire CM / CX CR3- (application MicroPython) (32 bits : ARM9/ARMv5 @132MHz)
- 1,29s : TI-Nspire (application MicroPython) (32 bits : ARM9/ARMv5 @120MHz)
- 1,61s : TI-Nspire CX CR4+ (application MicroPython) (32 bits : ARM9/ARMv5 @156MHz)
- 2,036s : NumWorks (32 bits : Cortex/ARMv7 @100MHz)
- 3,068s : HP Prime G1 (32 bits : ARM9/ARMv5 @400MHz)
- 8,94s : Casio Graph 90+E / fx-CG50 (32 bits : SH4 @118MHz)
- 9,68s : module externe TI-Python pour TI-83 Premium CE (32 bits : Cortex/ARMv7 @48MHz)
- 10,38s : TI-83 Premium CE Edition Python (?)
- 10,68s : Casio Graph 35+E II (application CasioPython) (32 bits : SH4 @59MHz)
- 11,26s : Casio 35+E/75+E / 35+USB/75/95 SH4 / fx-9750/9860GII SH4 (application CasioPython) (32 bits : SH4 @29,5MHz)
- 11,46s : module externe TI-Python pour TI-83 Premium CE (firmware tiers) (32 bits : Cortex/ARMv7 @48MHz)
- 13,87s : Casio Graph 35+USB/75/85/95 SH3 / fx-9750GII SH3 / fx-9860G/GII SH3 (application CasioPython) (32 bits : SH3 @29,5MHz)
- 19,98s : application KhiCAS sur Casio Graph 90+E / fx-CG50 (32 bits : SH4 @118MHz)
- 25,19s : Casio Graph 35+E II (32 bits : SH4 @59MHz)
- 35,55s : application KhiCAS sur Casio fx-CG10/20 (32 bits : SH4 @59MHz)
L'équipe prévoit de rajouter le module giacpy afin de pouvoir faire également du calcul exact / littéral / formel en Python. Mais les conséquences vont bien au-delà de ça. En effet sur la concurrence actuelle, l'application Python est toujours cloisonnée dans son coin, incapable d'échanger la moindre information avec le reste des applications, et ne pouvant donc pas jouer pleinement sont rôle dans la résolution d'un problème. Cet ajout permettra donc au Python de sortir de sa bulle, faisant ainsi appel au moteur de calcul de l'application Calcul directement depuis l'application IDE !

9) Application Éteindre :
Go to top
10) Matériel :
Go to top
Plusieurs éléments nous apparaissent :
- une carte Raspberry
- une carte clavier
- une carte écran
- une carte Adafruit
- une batterie


Nous disposons donc :
- d'un processeur ARM1176JZF-S cadencé à 1 GHz, un 32-bits de la famille ARM11/ARMv6, soit de génération supérieure aux ARM9/ARMv5 équipant encore de nos jours les TI-Nspire CX II !
- d'une mémoire RAM très confortable de 512 Mio, ce qui valide notre conjecture faite plus haut !
- d'un lecteur de carte mémoire microSD, permettant ici d'amorcer sur la carte de 8 Gio contenant le système d'exploitation Symbolibre
- de deux ports au format micro-USB, l'un des deux étant dédié à l'alimentation et l'autre étant un port OTG
- d'un port mini-HDMI


Le rôle de cette carte interface Adafruit PowerBoost 500C est en fait de gérer la recharge de la batterie.
11) Connectivité et périphériques :
Go to top
Mais comme nous venons de le voir, la Symbolibre dispose d'un port micro-USB OTG standard. De quoi par exemple connecter un clavier USB une fois sorti le bon adaptateur.
Le clavier ainsi rajouté permet parfaitement de naviguer à travers les différentes interfaces de la calculatrice Symbolibre.
Il permet également de contrôler la console Linux ainsi que l'éditeur de l'application IDE tout en profitant de toutes les touches supplémentaires qu'il apporte, notamment la possibilité de sélectionner du texte !

Un superbe confort de saisie !


De quoi vidéoprojeter facilement la calculatrice en classe !

Même si avant ça, il faudra toutefois commencer par régler le problème de la résolution qui comme tu peux voir ne s'adapte pas au périphérique de sortie vidéo.
Toutefois, précisons que ces deux possibilités extraordinaires ne sont pas encore d'actualité. En effet, pour le moment, les connecteurs micro-USB OTG et mini-HDMI sont internes, et donc inaccessibles sans démonter la calculatrice.
Pour pouvoir les exploiter il faudra :
Pour pouvoir les exploiter il faudra :
- soit revoir l'ensemble de la conception et déplacer la carte Raspberry Pi pour acoller ces connecteurs à l'une des tranches du boîtier
- soit exporter ces connecteurs vers les tranches du boîtier à l'aide de câbles prolongateurs, ce qui aura un coût
Conclusion :
Go to topMême si divers points restent à améliorer, la calculatrice Symbolibre est un formidable projet très prometteur avec des points forts monumentaux :
La connectivité standard de la Symbolibre pourrait enfin permettre d'utiliser librement les périphériques de son choix peu importe leur marque, au moins déjà pour tout ce qui standard !
Mais avec la Symbolibre, nous obtenons au prix du milieu de gamme du matériel aux capacités haut de gamme, qui devrait bien être capable à la différence de survivre à bien des révolutions scolaires pendant nombre d'années !
Toutes nos félicitations à l'équipe Symbolibre, en espérant que le projet pourra continuer maintenant qu'il n'est plus contraint par l'ENS. Nous souhaitons à l'équipe force et courage pour maintenant corriger divers détails évoqués et viser les phases de production et commercialisation. A très bientôt donc, on espère...
- un système d'exploitation non seulement libre mais aussi répandu (Linux)
- de remarquables innovations niveau intuitivité et facilité de lecture, particulièrement dans le cadre des graphes de fonctions
- une application Calcul qui n'a absolument rien à envier à la concurrence, bien au contraire
- et qui en prime donne accès des fonctionnalités que la concurrence réserve habituellement au haut de gamme (calcul formel)
Niveau connectivité, les constructeurs historiques nous ont habitués à des périphériques propriétaires, conçus ou sélectionnés par le constructeur en partenariat avec d'autres entreprises, sans véritable concurrence qui puisse donc jouer dans l'intérêt de l'utilisateur, et donc forcément à des périphériques en pratique très rares et très chers. 

La connectivité standard de la Symbolibre pourrait enfin permettre d'utiliser librement les périphériques de son choix peu importe leur marque, au moins déjà pour tout ce qui standard !

Niveau capacités matérielles maintenant, mis à part pour le haut de gamme, la concurrence nous a régulièrement fourni jusqu'à présent le strict minimum nécessaire. Avec comme conséquence des modèles d'entrée et de milieu de gamme qui, à chaque changement significatif des textes réglementaires (mode examen à diode depuis la rentrée 2015, Python depuis la rentrée 2017, ...), doivent être remplacés et sont donc bons pour la poubelle. Quel gaspillage tous les deux ans pour les enseignants ou fratries ! 

Mais avec la Symbolibre, nous obtenons au prix du milieu de gamme du matériel aux capacités haut de gamme, qui devrait bien être capable à la différence de survivre à bien des révolutions scolaires pendant nombre d'années !

Toutes nos félicitations à l'équipe Symbolibre, en espérant que le projet pourra continuer maintenant qu'il n'est plus contraint par l'ENS. Nous souhaitons à l'équipe force et courage pour maintenant corriger divers détails évoqués et viser les phases de production et commercialisation. A très bientôt donc, on espère...

Merci à tous ceux qui ont aidé à notre déplacement pour cette naissance ! 
Une pensée envers, entre autres :

Une pensée envers, entre autres :
- nos donateurs VIP++ : Adriweb, Persalteas, noelnadal, grosged, darthvader, TheMachine02, parisse, Paneth, MateoConLechuga, Dubs, jacobly, telpe51, nbenm, hdi93600, STaa, NumWorks
- nos donateurs VIP+ : rtomczak, mathys057, Inspire5960, Barrere, majestyofgaia
- nos donateurs VIP : blanchette831, arthuralbertini279, gersonvmartinez, Klego, Natou844, quentho
Référence : https://symbolibre.org/