[Lua] [uBasic] LUA vs. uBasic

CHDK-Skripte, CHDK-Entwicklung, PC-Zusatzprogramme, Informationen für Tüftler

LUA vs. uBasic

Beitragvon msl » 12.09.2008, 21:45

Ich habe mich mal der Thematik LUA etwas genähert. Zum Vergleich wurde eine Aufgabe jeweils mit LUA und uBasic bewältigt. Aufgabe: formatierte Zeit/Datum-Anzeige und Auslösen zu einem bestimmbaren Zeitpunkt.

uBasic

Syntax: [ Download ] [ Verstecken ]
Benutze uBasic Syntax Highlighting
@title Timer

@param a Stunden

@default a 0

@param b Minuten

@default b 1



:check

cls

gosub "date"

gosub "time"

sleep 800

if a=H and b=M then shoot else goto "check"

sleep 1000

print "ready"

end



:time

S=get_time 0

M=get_time 1

H=get_time 2

if S>9 and M>9 and H<10 then print "0";H;":";M;":";S

if S<10 and M>9 and H<10 then print "0";H;":";M;":0";S

if S>9 and M<10 and H<10 then print "0";H;":0";M;":";S

if S<10 and M<10 and H<10 then print "0";H;":0";M;":0";S

if S>9 and M<10 and H>9 then print H;":0";M;":";S

if S<10 and M<10 and H>9 then print H;":0";M;":0";S

if S<10 and M>9 and H>9 then print H;":";M;":0";S

if S>9 and M>9 and H>9 then print H;":";M;":";S

return



:date

D=get_time 3

N=get_time 4

Y=get_time 5

if N<10 and D>9 then print D;".0";N;".";Y

if N>9 and D<10 then print "0";D;".";N;".";Y

if N<10 and D<10 then print "0";D;".0";N;".";Y

if N>9 and D>9 then print D;".";N;".";Y

return

 
Erstellt in 0.017 Sekunden, mit GeSHi 1.0.8.9


LUA

Syntax: [ Download ] [ Verstecken ]
Benutze Lua Syntax Highlighting
--[[

@title Timer

@param a Stunden

@default a 0

@param b Minuten

@default b 0

--]]




function date()

   yyyy = (get_time("Y"))

   mm   = (get_time("M"))

   if (tonumber(mm)<10) then

      mm = "0"..mm

   end

   dd   = (get_time("D"))

   if (tonumber(dd)<10) then

      dd = "0"..dd

   end

   ddmmyyyy = dd .. "." .. mm .. "." .. yyyy

end



function time()

   hh = (get_time("h"))

   if (tonumber(hh)<10) then

      hh = "0"..hh

   end

   mi = (get_time("m"))

   if (tonumber(mi)<10) then

      mi = "0"..mi

   end

   ss = (get_time("s"))

   if (tonumber(ss)<10) then

      ss = "0"..ss

   end

   hhmmss = hh .. ":" .. mi .. ":" .. ss

end



--check



HH = a

  if (tonumber(HH)<10) then

      HH = "0"..HH

  end

MI = b

  if (tonumber(MI)<10) then

      MI = "0"..MI

  end

st = HH..":"..MI..":00"



repeat

sleep ( 1000 )

cls()

date()

time()

print ( "Start Time: "..st )

print ( "Act.  Time: "..hhmmss )

print ( "Date:     "..ddmmyyyy )

until st == hhmmss



shoot()

sleep ( 1000 )

print ( "ready" )

 
Erstellt in 0.011 Sekunden, mit GeSHi 1.0.8.9


Das uBasic-Skript ließ sich einfach realisieren, da die Strukturen allgemein bekannt sind. Mit der Formatierung der Anzeige stößt man an die Grenzen. Außerdem ist das Anzeige-Timing kritisch.

Das LUA-Skript ist für Programmier-Anfänger wesentlich komplizierter zu bewerkstelligen, ohne Studium diverser LUA-Seiten nicht machbar. Das Ergebnis ist aber besser. Man kann mit Zeichenketten arbeiten. Es können Funktionen definiert werden. Das Anzeige-Timing funktioniert tadellos. Variablen können frei definiert werden. Die Vorteile werden aber sicherlich erst bei komplexen Anwendungen deutlich.

Fazit:

Für einfache Aufgaben ist uBasic die 1. Wahl. Bei komplexe Aufgaben ist LUA die bessere Anwendung.


Um LUA besser einsetzen zu können, ist in Sachen Doku noch einiges zu tun. Insbesondere würde mich interessieren, welche Basis-Funktionen wie "tonumber" die CHDK-LUA-Version beinhaltet. Wie sieht es mit selbst erstellten Bibliotheken aus?

Vielleicht können wir ja mal eine Sammlung von Standard-Anwendungen für LUA zusammentragen.

Gruß msl
Dateianhänge
tst_time.lua
LUA-Skript
(1.03 KiB) 1244-mal heruntergeladen
tst_time.bas
uBasic-Skript
(935 Bytes) 420-mal heruntergeladen
Zuletzt geändert von msl am 20.09.2008, 12:57, insgesamt 1-mal geändert.
Benutzeravatar
msl
Super-Mod
Super-Mod
 
Beiträge: 4567
Bilder: 271
Registriert: 22.02.2008, 11:47
Wohnort: Leipzig
Kamera(s): A720 1.00c
SX220 1.01a

Beitragvon Roew » 13.09.2008, 10:06

Gibt es unter LUA auch die "IF"-Probleme ? Wenn nicht, würde ich mich da auch einarbeiten wollen. Beschäftige mich nämlich wegen immer wieder für mich nicht durchschaubarer überraschender parse-error bei uBasis derzeit als Speciherkarten-Jockey.
A530+S5, Juciphox 839-4.9.1
Roew
CHDK-Einsteiger
CHDK-Einsteiger
 
Beiträge: 3
Registriert: 26.08.2008, 07:14

Beitragvon msl » 13.09.2008, 10:50

Hallo Roew,

ich sag jetzt mal nein, da Lua und uBasic im CHDK-Paket getrennt voneinander enthalten sind. uBasic ist sehr einfach gehalten. Lua ist komplexer.

Gruß msl
Benutzeravatar
msl
Super-Mod
Super-Mod
 
Beiträge: 4567
Bilder: 271
Registriert: 22.02.2008, 11:47
Wohnort: Leipzig
Kamera(s): A720 1.00c
SX220 1.01a

Beitragvon chiptune » 13.09.2008, 18:49

Roew hat geschrieben:Beschäftige mich nämlich wegen immer wieder für mich nicht durchschaubarer überraschender parse-error bei uBasis derzeit als Speciherkarten-Jockey.

Das Speicherkarten-Wechselspiel lässt sich u.U. mit dem Debugger reduzieren.
    In Ubasic sind IF-Verzweigungen, die unmittelbar aufeinander folgen problematisch
    FALSE Verzweigungen sollten besonders beobachtet werden.
    Offiziell sind für IF-Verzweigungen bis zu 4 Verschachtelungstiefen möglich - mir war nicht immer die Zählweise klar ;)

Ist ein SKript juciphoxfrei, so lässt sich die am parse err schuldige SKriptanweisung leicht finden - wenn nicht, dann steigt der Debugger schon bei der ersten JuciPhox-Anweisung aus.

Ohne Debugger ist man ziemlich blind, da der parse err nur auf die lezte Zeile des Skripts zeigt und keine weiteren Spuren hinterlässt. Bleibt nur übrig, schrittweise die üblich verdächtigen Zeilen auszukommentieren und Cardwechsler zu spielen.

Mit etwas parse err Routine, dürfte man mit UbasicScript trotzdem schneller zum Ziel kommen, als mit LUA - oder doch nicht :roll:

Viele Grüße
chiptune
SX100IS mit CHDK
MD_SLOWMD_FASTMD_TUNE
chiptune
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 131
Registriert: 16.07.2008, 05:24

Beitragvon gehtnix » 13.09.2008, 21:39

Dem, was chiptune ausführt, braucht man nicht mehr hinzuzufügen!
Lieber diese nun bekannte If-Falle als gar kein Debugger.

Ohne LUA nahezutreten, das hätte schon seine Vorteile wenn es einen Debugger gäbe!

gruß gehtnix
Benutzeravatar
gehtnix
CHDK-Legende
CHDK-Legende
 
Beiträge: 2406
Bilder: 8
Registriert: 17.04.2008, 12:42
Wohnort: München
Kamera(s): A610 100e+f + IXUS990 IS

Beitragvon msl » 14.09.2008, 09:09

Für die, die sich nicht scheuen, mal etwas neues auszuprobieren ;), gibt es einen hier einen speziellen Editor für LUA.

Dieser hat auch Debugging-Funktionen., mit der man gleich in Editor Routinen testen kann. Kameraspezifischen Funktionen können natürlich nicht getestet. Da kann man sich aber mit Dummy-Funktionen behelfen.

Auf dieser Seite werden in einfacher Form erste Schritte mit LUA erklärt.

Gruß msl
Benutzeravatar
msl
Super-Mod
Super-Mod
 
Beiträge: 4567
Bilder: 271
Registriert: 22.02.2008, 11:47
Wohnort: Leipzig
Kamera(s): A720 1.00c
SX220 1.01a

Beitragvon gehtnix » 14.09.2008, 13:09

Nein, ich habe mich schon vor 4 Wochen nicht gescheut es zu installieren.

Wenn ich jetzt Dein obiges Script da laufen lasse stürzt mir LUA-Edit 2x ab.

Bild1 snap008
Da habe ich mit "fu nction" eine Syntaxprüfung laufen lassen.
Da kommt da gleich die Meldung mit dem bug Report.

Bild2 snap009
Das ist "function" wieder richtig und dann habe ich das Script laufen lassen. Und wieder ein Bug Report.
Dieser Error besagt mir aber nichts.
Wieso taucht der auf wenn das Script auf der Kamera läuft.

Farbliche Unterstützung habe ich ja auch bei meinem Notpad++

gruß gehtnix
Dateianhänge
snap008.jpg
snap008.jpg (75.59 KiB) 14376-mal betrachtet
snap009.jpg
snap009.jpg (112.36 KiB) 14375-mal betrachtet
Benutzeravatar
gehtnix
CHDK-Legende
CHDK-Legende
 
Beiträge: 2406
Bilder: 8
Registriert: 17.04.2008, 12:42
Wohnort: München
Kamera(s): A610 100e+f + IXUS990 IS

Beitragvon msl » 14.09.2008, 14:06

@gehtnix:

Ich weiß nicht, unter welchen Bedingungen bei Dir LuaEdit läuft. Bei mir funktioniert der Synthax-Test. Das der Run stoppt, wenn die erste kameraspezifische Sache kommt, ist logisch. Das hatte ich aber auch schon erwähnt.

Gruß msl
Benutzeravatar
msl
Super-Mod
Super-Mod
 
Beiträge: 4567
Bilder: 271
Registriert: 22.02.2008, 11:47
Wohnort: Leipzig
Kamera(s): A720 1.00c
SX220 1.01a

Beitragvon gehtnix » 14.09.2008, 14:36

@msl

XP SP2
LuaEDit 5.0, 3x installiert, keinerlei Fehlermeldungen bei der Lua-Installation

Der Syntax-Test läuft mit Deinem Script ordentlich, sofern das Script eh richtig ist.

Der KasusKnaxux ist, dass ich mit der Fehlermeldung im Bild 2 nicht angezeigt bekomme in welcher Zeile der vermeintliche Fehler ist.

gruß gehtnix
Benutzeravatar
gehtnix
CHDK-Legende
CHDK-Legende
 
Beiträge: 2406
Bilder: 8
Registriert: 17.04.2008, 12:42
Wohnort: München
Kamera(s): A610 100e+f + IXUS990 IS

Beitragvon msl » 14.09.2008, 16:00

@gehtnix

hmm, alles sehr seltsam. Wenn ich das Skript, so wie es ist, laufen lasse, stoppt es mit der Meldung, dass in Zeile 41 etwas nicht stimmt. Diese wird in dem Messagefenster angezeigt und als Windows-Fehlermeldung (eigenartige Programmkonstruktion). Außerdem wird die Fehlerzeile markiert und eine Statuszeile weist auch auf den Fehler hin.

Kann es sein, dass Du Windows-Fehlermeldungen speziell abfängst (madexcept)?

Man müßte sich wahrscheinlich langsam an die Materie herantasten, um auszutesten, was man wie debuggen kann.

Gruß msl
Benutzeravatar
msl
Super-Mod
Super-Mod
 
Beiträge: 4567
Bilder: 271
Registriert: 22.02.2008, 11:47
Wohnort: Leipzig
Kamera(s): A720 1.00c
SX220 1.01a

Beitragvon chiptune » 30.09.2009, 19:31

Hallo,

ich wühle den alten Thread nochmal raus, da ich auf zwei verschiedenern PCs genau das selbe Problem wie gehtnix habe.

Was in dem Screenshot gezeigt wird, ist ja keine Debugmeldung, sondern ein sauberer Absturz. Auch bei mir zeigt der Syntaxcheck eine saubere Welt.

Aber egal wie ich Run starte; auch wenn ich ihn nur bis zur Cursorposition unmittelbar nach dem comment laufen lasse - er stürtzt ab.

LuaEdit macht sonst einen recht guten Eindruck, weswegen ich also kaum glauben kann, dass das Teil so buggy wäre. Ein Debugger muss doch wenigstens zeigen, an welcher Stelle er das Script nicht interpretieren kann. In dem wahrgenommenen Zustand kann es eigentlich nicht sein, das LuaEdit der einzigste Lua-Debugger wäre.

Hat jemand einen alternativen funktionierenden Debugger für Lua?

PS: LuaEdit 2010 hat diesen Fehler nicht, befindet sich aber sonst noch im pre-alpha-Stadium.
SX100IS mit CHDK
MD_SLOWMD_FASTMD_TUNE
chiptune
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 131
Registriert: 16.07.2008, 05:24

Beitragvon CHDKLover » 01.10.2009, 16:43

Hallo chiptune,
ich hatte auch diesen Fehler. Aber wenn ich LuaEdit mit Administratorrechen starte, geht es bei mir ohne Fehlermeldungen.

CHDKLover
A610 100e CHDK-DE: aktuelle Version
Benutzeravatar
CHDKLover
Super-Mod
Super-Mod
 
Beiträge: 878
Bilder: 8
Registriert: 12.09.2007, 18:25
Wohnort: Dresden
Kamera(s): a610 100e

Beitragvon stift » 19.11.2009, 23:57

chiptune hat geschrieben:Aber egal wie ich Run starte; auch wenn ich ihn nur bis zur Cursorposition unmittelbar nach dem comment laufen lasse - er stürtzt ab.

LuaEdit macht sonst einen recht guten Eindruck, weswegen ich also kaum glauben kann, dass das Teil so buggy wäre. Ein Debugger muss doch wenigstens zeigen, an welcher Stelle er das Script nicht interpretieren kann. In dem wahrgenommenen Zustand kann es eigentlich nicht sein, das LuaEdit der einzigste Lua-Debugger wäre.

Hat jemand einen alternativen funktionierenden Debugger für Lua?


Hallo chiptune,

ich bin beim stoebern in der Code-Ecke ueber diese Diskussion gestolpert.

Ich habe waehrend meiner Entwicklung am TagMe.lua Skript zwei Lua Editoren getestet: oben diskutierten LuaEdit und Lua for Windows (LfW) http://luaforwindows.luaforge.net/. Von LuaEdit bin sehr schnell abgekommen weil bestimmte Tastatuskommandos nicht verfuegbar waren (z.B. Strg + Tab um zwischen mehreren offenen Skriptdateien hin- und her zu wechseln). Ich konnte nicht wie gwohnt zuegig arbeiten mit LuaEdit.

LfW kann ich waermsten empfehlen. Es kommt mit dem SciTE Editor und der Debugger gibt klare Ansagen warum er eine bestimmte Zeile nicht ausfuehren mag. Ausserdem kommt LfW mit einem Kommandozeilen Interpreter mit dem man schnell mal einzelne Kommandos ausprobieren kann. Ich benutze das oft um pattern matching auszutesten:

Code: Alles auswählen
C:\>lua
Lua 5.1.4  Copyright (C) 1994-2008 Lua.org, PUC-Rio
> text = "test text \n zweite zeile \n dritte zeile \n ende gelaende"
> print(text)
test text
 zweite zeile
 dritte zeile
 ende gelaende
> print(string.gsub(text, "zeile", "---"))
test text
 zweite ---
 dritte ---
 ende gelaende  2
> ^Z


C:\>
Canon PowerShot SX10 IS, CHDK 1.03A
stift
CHDK-Einsteiger
CHDK-Einsteiger
 
Beiträge: 7
Registriert: 06.09.2009, 22:16

LfW

Beitragvon naddel » 22.11.2009, 23:25

Hallo stift,

Ich hatte mit Luaedit auch so meine Probleme, weniger mit Luaedit 2010
Mit Lfw kann man wirklich einiges effekiver arbeiten.

@msl
Du könntest es doch in die Liste aufnehmen.
http://forum.chdk-treff.de/viewtopic.php?p=394#394

Eine Gesamtsyntaxprüfung wie in Luaedit habe ich nicht gefunden.
Wo ist die denn versteckt?

Der Debuger steigt ja bei der ersten Kameraspezifischen Funktion aus.
Und man muß sich dann für jede einen Dummy basteln.

Gruß und Danke für den Tipp
naddel
S2 1.00f mit aktueller DE Version
Benutzeravatar
naddel
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 156
Registriert: 26.01.2009, 19:42
Kamera(s): G3 s2 ixusii

Re: LfW

Beitragvon stift » 23.11.2009, 19:09

naddel hat geschrieben:Eine Gesamtsyntaxprüfung wie in Luaedit habe ich nicht gefunden.
Wo ist die denn versteckt?


Hallo naddel,

mit "Tools" -> "Compile" (oder Strg + F7) wird die Syntaxpruefung ausgefuehrt.

Gruss
stift
Canon PowerShot SX10 IS, CHDK 1.03A
stift
CHDK-Einsteiger
CHDK-Einsteiger
 
Beiträge: 7
Registriert: 06.09.2009, 22:16


Zurück zu Code-Ecke

Wer ist online?

Mitglieder in diesem Forum: Google [Bot] und 19 Gäste