Lua sur Nspire

Ici, on fait dans le petit, le LCD qui déchire sa race, on y cause même calculatrices quand on est en manque !

Modérateur : Politburo

Répondre
tyann
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 756
Inscription : 06 oct. 2012 14:37

Lua sur Nspire

Message par tyann » 18 juil. 2013 07:25

Bonjour à tous

Suite aux différents échanges que j'ai eu avec
certains d'entre vous, je vous propose une petite présentation
du Lua sur Nspire via un petit code assez simple.

Depuis la version de la Rom 3.1, la Nspire supporte officiellement la programmation
en Lua et depuis la 3.2 met à votre disposition un éditeur intégré au logiciel.

La Nspire fonctionne avec un système de classeurs,qui contiennent une ou plusieurs pages,
ces page pouvant contenir une ou plusieurs applications.

Après avoir créer une page dans un classeur via le logiciel, on va dans le menu Insertion et
l'on selectionne insérer un script, on accéde alors à l'éditeur de scripts et l'on peut
entrer son code Lua.

Pour utiliser le programme Lua, il suffit ensuite d'ouvrir le classeur et de visualiser la page
contenant le script (votre classeur peut contenir uniquement cette page) vous accéder alors directement
au programme.

Il suffit ensuite d'envoyer le classeur à la calto depuis le logiciel.

Je vous propose un petit programme qui affiche un message à l'écran et vous permet de le déplacer
dans les quartre direction via les touches de 'direction".
Une pression sur "ENTER" ramène le message à sa position d'origine.

Voici le code:

Code : Tout sélectionner

xdep,ydep=0,0
xmodif,ymodif=xdep,ydep

function on.paint(gc)
    gc:setColorRGB(0,0,0)
    gc:setFont("serif","b",10)
    gc:drawString("LUA sur Nspire",xmodif,ymodif,"top")
end

function on.arrowKey(k)
    if k=="up" then
        ymodif=math.max(ymodif-4,0)
    elseif k=="down" then
        ymodif=math.min(ymodif+4,150)
    elseif k=="left" then
        xmodif=math.max(xmodif-4,0)
    else
        xmodif=math.min(xmodif+4,300)
    end
    platform.window:invalidate()
end

function on.enterKey()
    xmodif,ymodif=xdep,ydep
    platform.window:invalidate()
 end
Les deux premières lignes initialisent les variables globales (on remarque que Lua accepte la multi-affectation)
Lua est un langage événementiel, ici on gére 3 événements:
1) l'affichage
2) une pression sur une touche de direction
3) une pression sur ENTER

La première fois que le script est lancé, la fonction on.paint est exécutée :tout ce qui doit être affiché doit être
programmé dedans ou appelé depuis cette fonction et le paramétre "gc" doit être transmis obligatoirement.

Lorsque l'utilisateur presse une touche de direction, on.arrowKey est exécutée et le code de touche est transmis
via le paramètre "k", si il presse "ENTER" c'est on.enterKey qui est exécutée.

Enfin pour que l'affichage soit mis à jour (on.paint), c'est le programmeur qui doit déclencher l'événement grâce à
l'instruction "platform.window:invalidate()" tout l'écran est alors redessiné.

Voilà faites moi part de votre impression et si vous avez des questions j'y répondrai volontier dans la limite
de mes modestes connaissances.
Ti(s) 60, 62 Galaxy, 66, 67 Galaxy, 68, 74 Basical 80, 81, 82, 83+, 83 CE, 84+SE, 85, 86, 89, 89 titanium, 92, 95 Procalc, v200, nSpire cx
Hp(s) 41CX, 28S, 48g, 50g, 39gII, Prime G1 et G2,
Casio(s) fx 602P, 702P, 4000P, 4500P, 6000G, 6900G, 7700G, 8500g, PB-700, CG-20, Graph 95 sd
Psion(s)II LZ64, siena, s3a, s3mx, s5mx.
Sharp(s) pc-1350, 1403, 1500A, El 5120, 9200, 9600

Canon X-07

Avatar de l’utilisateur
gege
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 7180
Inscription : 31 janv. 2008 15:24
Localisation : Banlieue Paârisienne
Contact :

Re: Lua sur Nspire

Message par gege » 18 juil. 2013 09:05

Bon,
c'est assez sympa mais verbeux.

math.max ???? Pourquoi pas result.provide.calculation.number.real.maximum ??
max tout court ça fait mal où ?
Quand au truc qui finit par invalidate, c'est le pompon !

Je me souviens que sur TI74 on pouvait faire a,b=0 , une facilité amusante mais peu utile.
Sur Casio on peut même faire 42->H~T

Bref ce pourrait être super avec la programmation événementielle, mais le truc est inutilisable sur la calto parce que les designers insistent sur la syntaxe "prout-prout" (mutateur, contexte, foncteur, accesseur...).
Simple, c'est bien ! Si, si !

Cependant je suis curieux de voir ce qu'on peut faire de sympa. Peut-on définir des fenêtres avec un contexte graphique soécifique (si non, la variable gc ne sert à rien) ?

Désolé pour le ton un peu négatif, c'est de la frustration par rapport à ce qui aurait pu être.
G.E.

Avatar de l’utilisateur
zork750
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 489
Inscription : 29 avr. 2011 15:44
Localisation : Paris

Re: Lua sur Nspire

Message par zork750 » 18 juil. 2013 12:54

Je ne sais pas pourquoi mais j'accroche pas avec ce langage de programmation, peut être que je suis trop vieille école (Casio FX-502 P - Casio FX-4000 P - HP15C, Casio Graph 35+) mais c'est certain qu'il apporte bien des possibilités, et ni avec le langage de la HP Prime (le même que sur HP39GII), alors je vais plutôt profiter des programmes disponibles, ayant une Nspire CX, comme pour ma HP48GX, pour laquelle je suis trop vieux pour apprendre à la programmer en assembleur, il y a des gens largement plus compétent que moi, autant profiter de leur savoir faire............ :wink:

merci à tous les développeurs en herbe et aux confirmés, à commencer par toi tyann........ :D

@+

tyann
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 756
Inscription : 06 oct. 2012 14:37

Re: Lua sur Nspire

Message par tyann » 18 juil. 2013 16:10

Salut Gege, Zork750

Pour ce qui est du verbeux, je trouve que ça va encore: math.xxxxx est de rigueur pour les fonctions de math c'est vrai
et string.xxxx pour les fonctions de traitement de chaines, on s'y fait assez rapidement.

Pour ce qui est de la multi affectation c'est vraiment bien fait et du coup utile:
exemple : échange du contenu de 2 variables -> a,b=b,a
Sur Hp 39gii un sous programme peut renvoyer une valeur ou pas et tu peux la récupérer ou pas, ce qui est mieux
que sur le Ti basic on en avait déja convenu.
Sur Lua un sous programme peut renvoyer une ou plusieurs valeurs ou pas, et tu peux récupérer 1 ou 2 ou 3 ou toutes les
valeurs ou pas.

Naturellement ce n'est pas du basic, mais il y a la programmation objet qui amène des choses très intéressantes et complexes aussi.
En ce qui concerne les tests et les boucles la syntaxe est très proche du basic, pour ce qui est de platform.window:invalidate()
tu peux faire
function redraw()
platform.window:invalidate()
end
puis redraw() :wink:
enfin pour gc: désolé mais j'applique bêtement.
Je pense que le Lua permet d'accéder aux possibilités de la machine tout en restant tout de même très accessible, on peut programmer à
la sauce basic tout en découvrant doucement la programmation objet et l'utiliser un peu, beaucoup ou pas du tout et qu'il comble un manque
que l'on ressent tous avec le Ti basic.
Ti(s) 60, 62 Galaxy, 66, 67 Galaxy, 68, 74 Basical 80, 81, 82, 83+, 83 CE, 84+SE, 85, 86, 89, 89 titanium, 92, 95 Procalc, v200, nSpire cx
Hp(s) 41CX, 28S, 48g, 50g, 39gII, Prime G1 et G2,
Casio(s) fx 602P, 702P, 4000P, 4500P, 6000G, 6900G, 7700G, 8500g, PB-700, CG-20, Graph 95 sd
Psion(s)II LZ64, siena, s3a, s3mx, s5mx.
Sharp(s) pc-1350, 1403, 1500A, El 5120, 9200, 9600

Canon X-07

Avatar de l’utilisateur
gege
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 7180
Inscription : 31 janv. 2008 15:24
Localisation : Banlieue Paârisienne
Contact :

Re: Lua sur Nspire

Message par gege » 18 juil. 2013 17:28

Bonjour,
pas de souci, j'ai programmé sous X11/Motif assez longtemps pour comprendre l'utilité d'un 'contexte graphique'.
Par contre, forcer l'utilisation d'une variable gc quand on n'a qu'une fenêtre, ça me semble plutôt ressortir du sadomasochisme. Pareil pour le truc sur invalidate. Pareil pour string ou math...
On sait le grand destin vécu par le Pascal, le langage "rigoureux"... il est resté rigoureux dans un système de classement vertical et cylindrique...

Tu tapes juste en proposant de simplifier avec des trucs comme redraw(). Les concepteurs du Lua avaient *une* chance de le faire d'emblée.

Peux-tu continuer à nous régaler d'exemples en dépit des (du ?) grincheux ?
Merci
G.E.

Avatar de l’utilisateur
febed01
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 407
Inscription : 21 juin 2009 22:13

Re: Lua sur Nspire

Message par febed01 » 19 juil. 2013 01:35

les math. string. etc viennent de ce que ce ne sont pas des fonctions de la librairie standard. Je ne sais pas quelle est l'étendue du support sur Nspire, mais sur Palm et PSP c'était assez sympa.
10 PRINT "One program a day keeps Alzheimer away..." : GOTO 10

tyann
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 756
Inscription : 06 oct. 2012 14:37

Re: Lua sur Nspire

Message par tyann » 19 juil. 2013 05:38

Salut gege
Peux-tu continuer à nous régaler d'exemples en dépit des (du ?) grincheux ?
Pas de soucis, j'essaierai d'entretenir ce fil avec des exemples illustrant différents aspects positifs ou
négatifs du Lua .
Salut Zork750
peut être que je suis trop vieille école

Moi aussi, j'ai commencé avec une Ti 57 et je ne suis ni matheux, ni informaticien de métier.
J'ai toujours programmé par plaisir, c'est un de mes loisirs favori.
Mais je trouve que les machines actuelles ressemblent un peu à celles dont on rêver à cette époque non :?:
Et puis découvrir de nouveaux langages, de nouvelle possibilités c'est plaisant, du moment que, en ce qui me concerne,
ils ne soient pas trop compliqués et documentés en français. :wink:
Ti(s) 60, 62 Galaxy, 66, 67 Galaxy, 68, 74 Basical 80, 81, 82, 83+, 83 CE, 84+SE, 85, 86, 89, 89 titanium, 92, 95 Procalc, v200, nSpire cx
Hp(s) 41CX, 28S, 48g, 50g, 39gII, Prime G1 et G2,
Casio(s) fx 602P, 702P, 4000P, 4500P, 6000G, 6900G, 7700G, 8500g, PB-700, CG-20, Graph 95 sd
Psion(s)II LZ64, siena, s3a, s3mx, s5mx.
Sharp(s) pc-1350, 1403, 1500A, El 5120, 9200, 9600

Canon X-07

debrouxl
Fonctionne à 300 bauds
Fonctionne à 300 bauds
Messages : 123
Inscription : 03 mars 2013 10:01

Re: Lua sur Nspire

Message par debrouxl » 19 juil. 2013 14:02

Je ne sais pas quelle est l'étendue du support sur Nspire, mais sur Palm et PSP c'était assez sympa.
L'étendue du support a de gros trous sur Nspire, au premier rang desquels io.* et os.* (soupir).
En revanche, il y a le framework spécifique plate-forme de programmation graphique événementielle (dont lecture au clavier) entrevu plus haut, pas inintéressant. Le format non standard et inefficace d'images qui lui est associé (soupir) coûte en taille et certainement en performance.

Avatar de l’utilisateur
gege
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 7180
Inscription : 31 janv. 2008 15:24
Localisation : Banlieue Paârisienne
Contact :

Re: Lua sur Nspire

Message par gege » 19 juil. 2013 20:08

Cela veut-il dire qu'on peut créer des menus, fenêtres, listes déroulantes, boutons, champs texte... ?
Si oui, je vais peut-être changer d'avis sur les productions TI du XXIème siècle.
Sous TI-Basic certains par une gymnastique incroyable (listes statistiques...) on réussi à tracer des traits...
G.E.

destroyedlolo
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 1880
Inscription : 03 mai 2003 02:24
Localisation : Nonglard (Annecy)
Contact :

Re: Lua sur Nspire

Message par destroyedlolo » 19 juil. 2013 21:39

Ben dit donc, je ne m'attendais pas une telle levée de bouclier contre Lua.
Perso, je m'y suis mis il y a quelques temps après l'avoir découvert pour étendre facilement les Conky qui tournent sur mes machines ... et je me suis mis rapidement à l’apprécier.

Contrairement aux bouses comme Java, Lua a l'avantage d’être très léger et rapide. Et pour être léger, de base il n’intègre que peu de choses ... et en particulier les fonctions mathématiques sont dans une librairie externe donc chargée que si nécessaire. D'où le math.xxxx()

L'autre truc, c'est qu'il est extrêmement facile de l'étendre ... soit en créant des modules en Lua (qui à nouveau ne seront chargés qu'a la demande), soit par des librairies C avec lesquels il s’intègre nativement.

Bref, j'ai commencé avec Conky, j'ai très rapidement progressé et maintenant, je m'en sert pour faire des daemons sous Linux (monitoring, tâches a distance ou tout gros script que je faisais avant en PHP) : très léger par rapport à l'équivalent en bash, perl ou PHP.
Amiga, UNIX
Sharp, NetBSD http://destroyedlolo.info/
Apache, PHP 100 % dictionnary free
Vacances, Voyages 1 mispelling by word

debrouxl
Fonctionne à 300 bauds
Fonctionne à 300 bauds
Messages : 123
Inscription : 03 mars 2013 10:01

Re: Lua sur Nspire

Message par debrouxl » 20 juil. 2013 07:38

Cela veut-il dire qu'on peut créer des menus, fenêtres, listes déroulantes, boutons, champs texte... ?
Oui, voir entre autres http://www.omnimaga.org/index.php?topic=13849.0 (recodage du EEPro des TI-68k pour Nspire en Lua) ou http://www.omnimaga.org/index.php?topic=16597.0 (éditeur de Lua en Lua) ;)
En BASIC Nspire, c'est malheureusement impossible comme tu le soulignes, alors que le BASIC TI-68k (production de la toute fin du XXème siècle) permettait de faire des menus, et des dialogs avec listes déroulantes et champs texte. Pour être complet, signalons que sur TI-68k, le code natif permet l'utilisation de fenêtres, ainsi que des dialogs avec boutons (dont boutons radio), même si on ne le fait presque jamais pour des raisons de performance. Sur Nspire, la documentation du back-end code natif des éléments d'UI Lua est partielle, et de mémoire, là aussi, le Lua ne donne pas accès à tout.
Pour plus d'infos sur la programmation sur calculatrices TI, les sites de référence (projets et news) sont Omnimaga, Cemetech et TI-Planet, avec quelques différences: par exemple, Cemetech est habituellement plus orienté TI-Z80 et ne s'intéresse pas aux Nspire.

Pour avoir avancé un peu un vieux portage de Lua sur TI-68k ( http://www.omnimaga.org/index.php?topic=9228.0 ), je confirme que c'est extensible et plutôt léger. Bien entendu, pour le calcul brut, Lua reste quand même très loin derrière le code natif, voir les benchmarks de LuaJIT (sur x86 / x86_64 et ARM, plus de la moitié des benchmarks sont un à deux ordres de grandeur plus rapides avec un JIT), et le JIT n'est, sauf exception (paraît-il que certaines VMs avancées, comme la VM Java, y arrivent parfois), pas aussi bon que du code natif AOT.

Avatar de l’utilisateur
gege
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 7180
Inscription : 31 janv. 2008 15:24
Localisation : Banlieue Paârisienne
Contact :

Re: Lua sur Nspire

Message par gege » 20 juil. 2013 08:54

BIEN !!!! :D
On peut même afficher des équation en format "mathématique".
G.E.

Avatar de l’utilisateur
febed01
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 407
Inscription : 21 juin 2009 22:13

Re: Lua sur Nspire

Message par febed01 » 20 juil. 2013 09:27

destroyedlolo a écrit :Ben dit donc, je ne m'attendais pas une telle levée de bouclier contre Lua.
Perso, je m'y suis mis il y a quelques temps après l'avoir découvert pour étendre facilement les Conky qui tournent sur mes machines ... et je me suis mis rapidement à l’apprécier.

Contrairement aux bouses comme Java, Lua a l'avantage d’être très léger et rapide. Et pour être léger, de base il n’intègre que peu de choses ... et en particulier les fonctions mathématiques sont dans une librairie externe donc chargée que si nécessaire. D'où le math.xxxx()

L'autre truc, c'est qu'il est extrêmement facile de l'étendre ... soit en créant des modules en Lua (qui à nouveau ne seront chargés qu'a la demande), soit par des librairies C avec lesquels il s’intègre nativement.

Bref, j'ai commencé avec Conky, j'ai très rapidement progressé et maintenant, je m'en sert pour faire des daemons sous Linux (monitoring, tâches a distance ou tout gros script que je faisais avant en PHP) : très léger par rapport à l'équivalent en bash, perl ou PHP.
C'est vrai que c'est un bon langage. Je m'en sers en douce au taf, et tout le monde me demande comment je fais pour faire un export csv d'un annuaire LDAP en 1,6 secondes ;)
Pour des scripts c'est carrément excellent. Pour faire des interfaces, par contre, ça dépend de ce qu'on a comme librairie. Sur Palm c'était pas mal avec PLua, sur Psion je ne sais pas mais à priori on peut s'en servir pour étendre OPL.
10 PRINT "One program a day keeps Alzheimer away..." : GOTO 10

tyann
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 756
Inscription : 06 oct. 2012 14:37

Re: Lua sur Nspire

Message par tyann » 20 juil. 2013 09:38

Bonjour à tous
BIEN !!!! :D
On peut même afficher des équation en format "mathématique".
Allez Gege, samedi c'est le jour des courses, un petit détour par le rayon calculatrices :wink: :) :D
Ti(s) 60, 62 Galaxy, 66, 67 Galaxy, 68, 74 Basical 80, 81, 82, 83+, 83 CE, 84+SE, 85, 86, 89, 89 titanium, 92, 95 Procalc, v200, nSpire cx
Hp(s) 41CX, 28S, 48g, 50g, 39gII, Prime G1 et G2,
Casio(s) fx 602P, 702P, 4000P, 4500P, 6000G, 6900G, 7700G, 8500g, PB-700, CG-20, Graph 95 sd
Psion(s)II LZ64, siena, s3a, s3mx, s5mx.
Sharp(s) pc-1350, 1403, 1500A, El 5120, 9200, 9600

Canon X-07

tyann
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 756
Inscription : 06 oct. 2012 14:37

Re: Lua sur Nspire

Message par tyann » 21 juil. 2013 08:30

Bonjour à tous
Cela veut-il dire qu'on peut créer des menus, fenêtres, listes déroulantes, boutons, champs texte... ?
Pour répondre en partie à cette question voici un petit code qui gère 2 boutons

On utilise la programmation objet, le code est assez simple pour qu'on en comprenne le principe.

On gère 2 nouveaux événements le clavier alpha/numerique et le click souris
(la nSpire cx dispose d'un petit pavé tactile comme sur les Pc portables).

Code : Tout sélectionner

click,option=false,0

button=class()
function button:init(t,r,x,y)
    self.xg=x
    self.yg=y
    self.txt=t
    self.rk=r
    self.lg=60
    self.ht=30
end
function button:paint(gc)
   local lrk
   gc:setPen("medium")
   gc:setColorRGB(0,0,0)
   gc:drawRect(self.xg,self.yg,self.lg,self.ht)
   gc:setFont("sansserif","b",9)
   gc:drawString(self.txt,self.xg+4,self.yg,"top")
   gc:setFont("sansserif","r",7)
   lrk=math.ceil((self.lg-gc:getStringWidth(self.rk))/2)
   gc:drawString(self.rk,self.xg+lrk,self.yg+14,"top")
end
function button:clic(x,y)
    if x>self.xg and x<self.xg+self.lg and y>self.yg and y<self.yg+self.ht then 
        return true
    else
        return false
    end
end
function button:racc(c)
    c="["..c.."]"
    if c==self.rk then
        return true
    else
        return false
    end
end

bvalid=button("VALIDER","[V]",250,100)
bjouer=button(" JOUER ","[J]",250,40)

function on.paint(gc)
    bvalid:paint(gc)
    bjouer:paint(gc)
    if click==true then
        gc:drawString("Option choisie="..option,10,10)
        click,option=false,0
    end
end

function on.mouseDown(x,y)
    if bvalid:clic(x,y)==true then option=1 end
    if bjouer:clic(x,y)==true then option=2 end
    if option>0 then click=true end
    platform.window:invalidate()
end
function on.charIn(k)
    if bvalid:racc(k)==true then option=1 end
    if bjouer:racc(k)==true then option=2 end
    if option>0 then click=true end
    platform.window:invalidate()
end
Voilà, quelques commentaires:
.. sert à concaténer 2 chaines ou 1 chaine et 1 nombre
on peut voir que la programmation objet apporte de nouvelles choses
vous aurez surement compris que les fonction on.xxxxx permettent de gérer les événements, il y en a beaucoup
je ferai sans doute d'autres exemples pour vous les montrer

* A ceux qui maitrisent le Lua: Je fais ce fil à partir de mes connaissances et expériences, si je dis des bêtises n'hésitez pas à me corriger,
je serai content d'apprendre de nouvelles choses (surtout en programmation objet)
Ti(s) 60, 62 Galaxy, 66, 67 Galaxy, 68, 74 Basical 80, 81, 82, 83+, 83 CE, 84+SE, 85, 86, 89, 89 titanium, 92, 95 Procalc, v200, nSpire cx
Hp(s) 41CX, 28S, 48g, 50g, 39gII, Prime G1 et G2,
Casio(s) fx 602P, 702P, 4000P, 4500P, 6000G, 6900G, 7700G, 8500g, PB-700, CG-20, Graph 95 sd
Psion(s)II LZ64, siena, s3a, s3mx, s5mx.
Sharp(s) pc-1350, 1403, 1500A, El 5120, 9200, 9600

Canon X-07

Répondre

Revenir vers « Tous les Pockets »