π
<-
Chat plein-écran
[^]

Script qui refuse de s’exécuter sur la Numworks N0100

Re: Script qui refuse de s’exécuter sur la Numworks N0100

Message non lude critor » 07 Sep 2019, 18:11

cent20 a écrit:
critor a écrit:Il faut réduire le nombre de lignes, utiliser des noms de fonctions/variables courts, éviter les commentaires, factoriser le code... et encore ça ne suffit pas toujours.


On a déjà épuisé le stock de possibilité ... Raccourcir tous les noms fut la première chose qu'on a fait, c'était tellement trivial que je ne l'ai pas précisé.


Il y a d'autres possibilités que le renommage pour raccourcir du code Python, notamment concernant la belle collection d'instructions conditionnelles ou de chaînes qui diffèrent à de petits détails près. Par contre elles nuisent plus ou moins à la lisibilité du code et donc à sa compréhension et maintenance.

Voici une version du même code très sauvagement compressée (toutes mes excuses) à seulement 2,5Kio :
Code: Tout sélectionner
from math import sqrt
a,b,c=0,0,0
def dct():
    global a,b,c,d,e,nb,x,y,x1,x2
    while a==0:a=o(float(input('a=')))
    b,c=o(float(input('b='))),o(float(input('c='))),
    d,e,x,y=o(float(b**2-4*a*c)),o(float(a*(-b/2/a)**2-b*b/2/a+c)),o(-b/2/a),o((sqrt(abs(b**2-4*a*c)))/2/a)
    nb,x1,x2=2-(d==0),o(min(x+y,x-y)),o(max(x-y,x+y))
def h():
    o(9,br=1)
    print("Polynome (equation) de degre 2",a==0 and "\nP(x)=ax^2+bx+c(=0)" or "\nP(x)={}{}{}(=0)".format(o(a,ap="x^2",r=4),o(b,p=1,ap="x",r=4,naf=1),o(c,p=1,r=4,naf=1)))
def p():
    s=d<0 and "<0" or d>0 and ">0" or ""
    print("1)Changer les valeurs a,b,c","\n2)Discriminant={}{}".format(d,s))
    if d<0:print("3)Racines complexes conjuguees:2","\nz1={}+{}i".format(x, y),"\nz2={}-{}i".format(x, y))
    elif d>0:print("3)Racines reelles distinctes:2","\nx1={}".format(x1),"\nx2={}".format(x2))
    elif d==0:print("3)Racine reelle double:1","\nx1=x2={}".format(x))
    s=a<0 and "-" or "+"
    print("4)Signe:"+(d<0 and s or d>0 and s+"-+"[a<0]+s or s+"0"+s),"\n, extremum:"+"mM"[a<0],"\n5)Factorisation dans les "+(d<0 and "complexes" or "reels"),"\n6)Quitter")
def r(i):
    global a,b,c,d,x,y
    if i==1:
        a,b,c=0,0,0
        h()
        dct()
    elif i==2 or i==3 or i==6:pass
    elif i==4:
        h()
        s=a<0 and "-" or "+"
        print(d>0 and "  x |    x1  -b/(2a)  x2",a>0 and "\nP(x)|  "+s+"  0  -  m  -  0  "+s or "\nP(x)|  "+s+"  0  "+"+-"[a<0]+"  M  "+"+-"[a<0]+"  0  "+s or "  x |        -b/(2a)\nP(x)|     "+s+"     m     "+s,"\nExtremum:","\n(",o(-b/2/a,r=4),";",o(e,r=4),")")
    elif i==5:
        if d==0:print("P(x)=a(x-(-b/2a))^2",x1 and o(-x1,"\nP(x)={}(x".format(a),")^2",p=1) or "\nP(x)={}x^2".format(a))
        elif d>0:print("P(x)=a(x-x1)(x-x2)",o(-x2,o(-x1,"\nP(x)={}(x".format(a),")(x",p=1,naf=2,r=4),")",p=1,naf=2,r=4))
        else:print("P(z)=a(z-z1)(z-z2)\nAvec:",o(-x,"\n(z-z1) = (z",o(y,ap="i",r=4,naf=1)+")",r=4,naf=2),o(-x,"\n(z-z2) = (z",o(-y,ap="i",r=4,naf=1)+")",r=4,naf=2))
    if (i-6)*(i-1):input()
def o(v,av="",ap="",p=0,r=8,naf=0,br=0):
    if br==0:
        if v==0:return naf==1 and "" or naf==2 and str(av)+str(ap) or str(av)
        v=v==int(v) and int(v) or round(v,r)
        if av=="" and ap=="" and p==0:return v
        if p==1 and v>0:v="+"+str(v)
    return str(av)+str(v)+str(ap)
def m(w=""):
    h()
    p()
    if w!="":print(w)
    s=0
    while s==0:
        try:s=int(input())
        except:
            s=0
            m(">>saisir un entier entre 1 et 6!")
    r(s)
    if s!=6:m()
o(9,br=1)
r(1)
m()


Et elle marche :
Image

Je dirais à la louche qu'il reste en prime un bon 1Kio de marge sur NumWorks pour compléter/embellir ce code sans erreur de mémoire à l'exécution, donc une belle marge pour obtenir un code fonctionnel qui fasse moins peur aux élèves. :)
Image
Avatar de l’utilisateur
critorAdmin
Niveau 19: CU (Créateur Universel)
Niveau 19: CU (Créateur Universel)
Prochain niv.: 42.2%
 
Messages: 41493
Images: 14577
Inscription: 25 Oct 2008, 00:00
Localisation: Montpellier
Genre: Homme
Calculatrice(s):
MyCalcs profile
YouTube: critor3000
Twitter/X: critor2000
GitHub: critor

Re: Script qui refuse de s’exécuter sur la Numworks N0100

Message non lude Lionel Debroux » 07 Sep 2019, 21:17

Le manque de RAM disponible sur les machines NumWorks tournant l'epsilon habituel est dû à deux énormes éléments dans la section .bss:
*
Code: Tout sélectionner
Poincare::Init::pool
, ici 0xD558 octets;
*
Code: Tout sélectionner
AppsContainer::sharedAppsContainer()::appsContainerStorage
, ici 0x183C0 octets.
Rien de nouveau, au moins cette deuxième variable a déjà été pointée, avec plus de détails, par Jean-Baptiste Boric dans un des autres topics.

C'est dans cette deuxième qu'est stocké le tas Python passé à MicroPython::init(): Code::App:m_pythonHeap (dans apps/code/app.h).
Comme Jean-Baptiste l'avait écrit, l'application la plus gourmande en stockage n'est pas Code. Avec epsilon Git HEAD, on peut augmenter Code::App::k_pythonHeapSize de 16384 à 32768 sans changer la taille prise en RAM par appsContainerStorage. On ne peut pas aller significativement plus loin: k_pythonHeapSize = 40960 (+0x2000) fait passer la taille d'appsContainerStorage à 0x19db0, ce qui représente donc une augmentation assez proche de 0x2000.

Peut-être que ça permettra de tourner des programmes un peu plus complexes, mais ça ne changera rien au fait qu'il n'y ait pas plus de 16 KB de stockage pour les scripts. Ca doit être Ion::staticStorageArea (0x400C octets). Les machines n'ont pas assez de RAM pour utiliser ce style de programmation, on le sait, et je pense que c'est une grosse erreur de ne pas avoir remédié à ce point en concevant la N0110...

Comment est-ce qu'on fait un build pour N0100, déjà ? EDIT: `make MODEL=n0100`, on dirait. EDIT2: ou peut-être mieux, `make build/device/n0100/epsilon.bin` ?
Membre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
Avatar de l’utilisateur
Lionel DebrouxSuper Modo
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Prochain niv.: 11.2%
 
Messages: 6859
Inscription: 23 Déc 2009, 00:00
Localisation: France
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: -
GitHub: debrouxl

Re: Script qui refuse de s’exécuter sur la Numworks N0100

Message non lude parisse » 08 Sep 2019, 07:09

D'ailleurs, quelqu'un sait a quoi sert cette variable pool? Peut-on reduire sa taille de moitie par exemple?
Avatar de l’utilisateur
parisseVIP++
Niveau 12: CP (Calculatrice sur Pattes)
Niveau 12: CP (Calculatrice sur Pattes)
Prochain niv.: 77.8%
 
Messages: 3511
Inscription: 13 Déc 2013, 16:35
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile

Re: Script qui refuse de s’exécuter sur la Numworks N0100

Message non lude cent20 » 08 Sep 2019, 07:30

critor a écrit:Il y a d'autres possibilités que le renommage pour raccourcir du code Python, notamment concernant la belle collection d'instructions conditionnelles ou de chaînes qui diffèrent à de petits détails près. Par contre elles nuisent plus ou moins à la lisibilité du code et donc à sa compréhension et maintenance.

Voici une version du même code très sauvagement compressée (toutes mes excuses) à seulement 2,5Kio :

(...)

Je dirais à la louche qu'il reste en prime un bon 1Kio de marge sur NumWorks pour compléter/embellir ce code sans erreur de mémoire à l'exécution, donc une belle marge pour obtenir un code fonctionnel qui fasse moins peur aux élèves. :)


C'est quand même assez impressionnant de diviser la taille d'un script ainsi en seulement 1h20 :~o .
Si je ne connaissais pas le script d'origine j'aurais quand même bien du mal à le lire celui là !

Merci beaucoup en tout cas , je vais étudier les différentes astuces utilisées et retenir la limite de 4ko pour les scripts suivants.

Code: Tout sélectionner
print("...",a==0 and "..." or "..")


est très intéressant, tout comme :

Code: Tout sélectionner
s=d<0 and "<0" or d>0 and ">0" or ""


C'est vraiment ultra flexible python, ces tests au sein d'une égalité ou d'un print n'étaient pas évident à comprendre et encore moins à deviner.

Bon du coup comme tu as aussi coupé il a quelques éléments du menu qui sont désactivés, c'est le prix à payer pour l'exécuter j'ai l'impression.

A voir si avec 1ko de marge on réussit à les réintégrer.

Pour ceux qui veulent le tester sur l'émulateur numworks : polynome_degre2_zip.py
Image
Enseignant de mathématiques et d'informatique. Spécialité NSI : Des projets, des tutos, mais aussi de l'art
Calculatrice NumWorks : Des applications et des jeux, scripts, 📙 Découvrir la NumWorks
Avatar de l’utilisateur
cent20VIP++
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Prochain niv.: 46.1%
 
Messages: 1013
Images: 64
Inscription: 17 Mai 2012, 09:49
Localisation: Avignon
Genre: Homme
Calculatrice(s):
MyCalcs profile
Twitter/X: nsi_xyz

Re: Script qui refuse de s’exécuter sur la Numworks N0100

Message non lude Lionel Debroux » 08 Sep 2019, 07:47

@parisse: le pool est fait pour stocker les TreeNode utilisés un peu partout comme opérande et résultat d'opération d'epsilon.

En pièce jointe à ce post, un build d'epsilon pour N0100 avec k_pythonHeapSize = 32768, ainsi que -Wl,--gc-sections dans les flags de build ( https://github.com/numworks/epsilon/pull/1062 ). Il a été obtenu par `make build/device/n0100/epsilon.bin`, et critor l'a testé tôt ce matin: il a pu flasher la calculatrice avec succès - j'ignore quel outil il a utilisé, peut-être un WebDFU ? - et son script habituel d'obtention de la taille de la mémoire rend 32204 plutôt qu'une valeur inférieure à 16 KB.
@cent20: peut-être que ce changement ça permettra de tourner des scripts un peu moins pas complexes sans avoir à rendre le code source moche ?

Si ça augmente la complexité des scripts qu'on peut traiter sous Epsilon, je fais une pull request pour ce one-liner, en linkant ce topic.
Fichiers joints
epsilon.bin
epsilon pour N0100 avec k_pythonHeapSize = 32768
(728.35 Kio) Téléchargé 77 fois
Membre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
Avatar de l’utilisateur
Lionel DebrouxSuper Modo
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Prochain niv.: 11.2%
 
Messages: 6859
Inscription: 23 Déc 2009, 00:00
Localisation: France
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: -
GitHub: debrouxl

Re: Script qui refuse de s’exécuter sur la Numworks N0100

Message non lude cent20 » 08 Sep 2019, 07:57

Lionel, tu comptes en hexadécimal ? :#roll#:

Lionel Debroux a écrit:Le manque de RAM disponible sur les machines NumWorks tournant l'epsilon habituel est dû à deux énormes éléments dans la section .bss:
*
Code: Tout sélectionner
Poincare::Init::pool
, ici 0xD558 octets;


54616 octets donc 54 ko de réservé. OK

Lionel Debroux a écrit:*
Code: Tout sélectionner
AppsContainer::sharedAppsContainer()::appsContainerStorage
, ici 0x183C0 octets.


99264 octets donc 99 ko de réservé. OK

Lionel Debroux a écrit:Rien de nouveau, au moins cette deuxième variable a déjà été pointée, avec plus de détails, par Jean-Baptiste Boric dans un des autres topics.


C'est bien de lui dont je parlais quand je disais que peu réussissais à compiler la ROM de la calculatrice.

Lionel Debroux a écrit: Comme Jean-Baptiste l'avait écrit, l'application la plus gourmande en stockage n'est pas Code. Avec epsilon Git HEAD, on peut augmenter Code::App::k_pythonHeapSize de 16384 à 32768 sans changer la taille prise en RAM par appsContainerStorage.


C'est exactement ce que je voulais faire en compilant la ROM sauf que je n'ai jamais réussi à arriver au terme... :?

Lionel Debroux a écrit:
On ne peut pas aller significativement plus loin: k_pythonHeapSize = 40960 (+0x2000) fait passer la taille d'appsContainerStorage à 0x19db0, ce qui représente donc une augmentation assez proche de 0x2000.


Ce qui m'inquiète dans cette histoire, c'est que je ne suis pas sur qu'en passant de 16ko à 32ko de mémoire pour pythonHeapSize l'on puisse exécuter des script de 8ko (c'est à dire 2x plus gros que les 4ko recommandé par critor)

Le script test_memory_size.py que j'ai trouvé sur ce forum montre (si j'ai bien compris) que la mémoire est fragmenté et que le plus gros bloc fait 4ko. Or si le script est chargé entièrement en mémoire cette taille du premier bloc est vraiment bloquante.

D'ailleurs en créant des scripts bidons effacés depuis, en dépassant 5 ko environ ils plantaient dès le lancement. Si la taille maximale d'un script est de 4ko cela doit être marqué en clair dans la documentation !

Lionel Debroux a écrit:
Peut-être que ça permettra de tourner des programmes un peu plus complexes, mais ça ne changera rien au fait qu'il n'y ait pas plus de 16 KB de stockage pour les scripts. Ca doit être Ion::staticStorageArea (0x400C octets). Les machines n'ont pas assez de RAM pour utiliser ce style de programmation, on le sait, et je pense que c'est une grosse erreur de ne pas avoir remédié à ce point en concevant la N0110...


Ma question sera naïve, mais est-on obligé d'éxécuter le script depuis la RAM ?

Le modèle N0110 ayant 8 mo de mémoire, ne serait'il pas souhaitable (possible, envisageable) de permettre à l'utilisateur de choisir ou exécuter le script ?

Encore mieux, si le script dépasse 4ko il pourrait être exécuté dans / depuis la mémoire ROM de manière automatique.

Et s'il ne peuvent pas (ou ne veulent pas pour ne pas dégrader les performance) ne suffirait-il pas qu'ils décident de vider un peu la RAM lorsque l'on rentre dans le menu python ?

Lionel Debroux a écrit:
Comment est-ce qu'on fait un build pour N0100, déjà ? EDIT: `make MODEL=n0100`, on dirait. EDIT2: ou peut-être mieux, `make build/device/n0100/epsilon.bin` ?


Excellente question ! j'ai déjà vu passer make MODEL=n0100 mais jamais dans la documentation officielle qui mériterait un bon refresh.
Image
Enseignant de mathématiques et d'informatique. Spécialité NSI : Des projets, des tutos, mais aussi de l'art
Calculatrice NumWorks : Des applications et des jeux, scripts, 📙 Découvrir la NumWorks
Avatar de l’utilisateur
cent20VIP++
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Prochain niv.: 46.1%
 
Messages: 1013
Images: 64
Inscription: 17 Mai 2012, 09:49
Localisation: Avignon
Genre: Homme
Calculatrice(s):
MyCalcs profile
Twitter/X: nsi_xyz

Re: Script qui refuse de s’exécuter sur la Numworks N0100

Message non lude Lionel Debroux » 08 Sep 2019, 08:12

Lionel, tu comptes en hexadécimal ? :#roll#:

En général, non, c'est juste que je ne me suis pas amusé à convertir en décimal la sortie d'arm-none-eabi-objdump ^^

C'est exactement ce que je voulais faire en compilant la ROM sauf que je n'ai jamais réussi à arriver au terme... :?

C'était plus simple quand Epsilon ne gérait que la N0100; maintenant, c'est la N0110 qui est ciblée par défaut.

Le modèle N0110 ayant 8 mo de mémoire, ne serait'il pas souhaitable (possible, envisageable) de permettre à l'utilisateur de choisir ou exécuter le script ?

Encore mieux, si le script dépasse 4ko il pourrait être exécuté dans / depuis la mémoire ROM de manière automatique.

Je suis à peu près sûr que MicroPython a besoin de RAM pour stocker des infos sur le script et permettre une exécution moins lente.

Si la taille maximale d'un script est de 4ko cela doit être marqué en clair dans la documentation !

En effet...

j'ai déjà vu passer make MODEL=n0100 mais jamais dans la documentation officielle qui mériterait un bon refresh.

Comme je l'ai appris hier soir, make MODEL=n0100 ne suffit pas pour obtenir un binaire directement flashable, il faut suivre par quelque chose comme `make build/device/n0100/epsilon.bin`, que j'ai dû fouiller dans les Makefile pour trouver.

A la suite du post auquel tu as répondu, j'ai fait un autre post qui contient le binaire produit par le build, qui peut t'intéresser. Tu l'as peut-être déjà vu le temps que je réponde à ton post. Je ne peux pas tester moi-même, j'ai fait tout mes développements sur epsilon sans avoir de N0100/N0110.
Membre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
Avatar de l’utilisateur
Lionel DebrouxSuper Modo
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Prochain niv.: 11.2%
 
Messages: 6859
Inscription: 23 Déc 2009, 00:00
Localisation: France
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: -
GitHub: debrouxl

Re: Script qui refuse de s’exécuter sur la Numworks N0100

Message non lude cent20 » 08 Sep 2019, 08:16

Un testeur de la CASIO Graph 35+E II sur le forum https://www.planet-casio.com (consulter le topic) précisait il y a quelques mois :

Cela n'est pas surprenant, car l'ancien tas faisait 48 ko et c'est assez peu pour un interpréteur Python. Casio a certainement commencé à exploiter la deuxième moitié de RAM à sa disposition pour satisfaire les besoins de Python. Les scripts de Critor révèlent que le nouveau tas fait environ 90 ko, quasiment deux fois plus que l'ancien.


Le reste de la page est très intéressant.

Pourquoi CASIO passerait-il de 48 ko à 90ko de mémoire dédiée pour l'éxécution des script python si cela n'était pas nécessaire ?

Code: Tout sélectionner
Calculatrice : Rom (disponible utilisateur) / Ram (disponible utilisateur) en ko
TI 83 Prenium CE edition Python : 4096 (  3072 ) / 256 (150)
Casio 35+E II                   : 8192 (  3072 ) / 512 (090)     
NumWorks                        : 1024 (  0016 ) / 256 (016)


Mais si tous les utilisateurs se contentent silencieusement de 16ko de mémoire et d'une taille maxi de 4ko pour un script, cela ne les incitera pas beaucoup à bouger.

J'ai l'impression que les 16ko ont été décidé d'après cette page :

Yet it is compact enough to fit and run within just 256k of code space and 16k of RAM


Pour faire tourner windows 10 32 bits, il suffit d'avoir un PC avec un processeur 1ghz, 1go de mémoire, 16 go de DD dur

Je suis curieux de voir qui arrive à utiliser windows 10 cette configuration... :troll:
Image
Enseignant de mathématiques et d'informatique. Spécialité NSI : Des projets, des tutos, mais aussi de l'art
Calculatrice NumWorks : Des applications et des jeux, scripts, 📙 Découvrir la NumWorks
Avatar de l’utilisateur
cent20VIP++
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Prochain niv.: 46.1%
 
Messages: 1013
Images: 64
Inscription: 17 Mai 2012, 09:49
Localisation: Avignon
Genre: Homme
Calculatrice(s):
MyCalcs profile
Twitter/X: nsi_xyz

Re: Script qui refuse de s’exécuter sur la Numworks N0100

Message non lude cent20 » 08 Sep 2019, 08:19

Lionel Debroux a écrit:En pièce jointe à ce post, un build d'epsilon pour N0100 avec k_pythonHeapSize = 32768, ainsi que -Wl,--gc-sections dans les flags de build ( https://github.com/numworks/epsilon/pull/1062 ). Il a été obtenu par `make build/device/n0100/epsilon.bin`, et critor l'a testé tôt ce matin: il a pu flasher la calculatrice avec succès - j'ignore quel outil il a utilisé, peut-être un WebDFU ? - et son script habituel d'obtention de la taille de la mémoire rend 32204 plutôt qu'une valeur inférieure à 16 KB.
@cent20: peut-être que ce changement ça permettra de tourner des scripts un peu moins pas complexes sans avoir à rendre le code source moche ?

Si ça augmente la complexité des scripts qu'on peut traiter sous Epsilon, je fais une pull request pour ce one-liner, en linkant ce topic.


Je vais essayer ceci dans la matinée.
Je crois que la page qui permet de flash est https://ti-planet.github.io/webdfu_numworks/.
Image
Enseignant de mathématiques et d'informatique. Spécialité NSI : Des projets, des tutos, mais aussi de l'art
Calculatrice NumWorks : Des applications et des jeux, scripts, 📙 Découvrir la NumWorks
Avatar de l’utilisateur
cent20VIP++
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Prochain niv.: 46.1%
 
Messages: 1013
Images: 64
Inscription: 17 Mai 2012, 09:49
Localisation: Avignon
Genre: Homme
Calculatrice(s):
MyCalcs profile
Twitter/X: nsi_xyz

Re: Script qui refuse de s’exécuter sur la Numworks N0100

Message non lude parisse » 08 Sep 2019, 08:34

Lionel Debroux a écrit:@parisse: le pool est fait pour stocker les TreeNode utilisés un peu partout comme opérande et résultat d'opération d'epsilon.

Ok, quelle consequence si on le divise par 2? Parce que ca permettrait de recuperer un peu de place pour le tas, ca ne serait pas du luxe pour KhiCAS.
Avatar de l’utilisateur
parisseVIP++
Niveau 12: CP (Calculatrice sur Pattes)
Niveau 12: CP (Calculatrice sur Pattes)
Prochain niv.: 77.8%
 
Messages: 3511
Inscription: 13 Déc 2013, 16:35
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile

PrécédenteSuivante

Retourner vers Programmation Python

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 7 invités

-
Rechercher
-
Social TI-Planet
-
Sujets à la une
Comparaisons des meilleurs prix pour acheter sa calculatrice !
Aidez la communauté à documenter les révisions matérielles en listant vos calculatrices graphiques !
Phi NumWorks jailbreak
123
-
Faire un don / Premium
Pour plus de concours, de lots, de tests, nous aider à payer le serveur et les domaines...
Faire un don
Découvrez les avantages d'un compte donateur !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


Partenaires et pub
Notre partenaire Jarrety Calculatrices à acheter chez Calcuso
-
Stats.
1332 utilisateurs:
>1293 invités
>34 membres
>5 robots
Record simultané (sur 6 mois):
6892 utilisateurs (le 07/06/2017)
-
Autres sites intéressants
Texas Instruments Education
Global | France
 (English / Français)
Banque de programmes TI
ticalc.org
 (English)
La communauté TI-82
tout82.free.fr
 (Français)