[Lua] Ãœberarbeitung des "Tag und Nacht Zeitraffers"

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

Ãœberarbeitung des "Tag und Nacht Zeitraffers"

Beitragvon Tiefflieger » 19.05.2010, 18:03

Hallo,

ich arbeite aktuell daran, das "Tag und Nacht Zeitraffer" Skript zu überarbeiten. Genauer gesagt die Version VarTLNoVF

Ich möchte hier wohlgemerkt nicht die Arbeit des ursprünglichen Entwicklers DrMaex schlechtmachen. Ich sehe es vielmehr als Basis einer freien Entwicklergemeinschaft, daß man die Arbeit von anderen aufgreift und weiterentwickelt :-).
Meine Arbeit zielt zunächst ausschließlich darauf ab, den Quellcode verständlicher zu machen, ohne irgendetwas an dessen Funktionalität zu verändern. Das soll es auch anderen erleichtern, das Skript an ihre Bedürfnisse anzupassen.

Den jeweils aktuellen Stand der Entwicklung werde ich immer hier in diesem ersten Thread anhängen.



Anmerkungen:

- Auf meiner Ixus 65 funktioniert der CHDK Befehl get_jpg_count nicht, deswegen überschreibt mein Skript aktuell diese Funktion, damit sie immer 1000 zurückgibt. Das ist natürlich eine temporäre Lösung. Bug Report

- Meine Ixus 65 ist schon sehr mitgenommen (lange Geschichte :) ), deswegen fänd ichs super, wenn andere Leute das Skript mal bei sich testen. Ein, zwei Bilder damit zu machen sollte eigentlich ausreichen um zu überprüfen, ob das Skript noch so läuft wie es soll.




Ãœberarbeitungen bis jetzt:

- Einrückungen einheitlich gemacht
Jeder Block, der in einem anderen Block enthalten ist, sollte eingerückt werden. Ich verwende 4 Leerzeichen pro Einrückung.

- User Parameter umbenannt
Die vom User setzbaren Parameter dürfen nur aus einem einzigen Buchstaben bestehen. Deswegen werden direkt am Anfang des Skripts diese Parameter anderen Variablen mit sinnvolleren Bezeichnern übergeben

- Sinnvolle Bezeichner: Variablennamen
Bis auf wenige Ausnahmen (zB. ein Index einer for-Schleife) sollten Variablen immer möglichst genau beschreiben, was sie enthalten sollen. Soweit bin ich auf keine Längenbegrenzung von Variablennamen gestoßen, und so verwende ich zB. lieber den Variablennamen "paramCountPicturesToTurnDisplayOff" statt einfach nur "d" ;-)

- Sinnvolle Bezeichner: Funktionsnamen
Vorher gab es zB. die zwei Funktionen "lcd(lcdmode)" und "get_display_mode()". Diese habe ich umbenannt in "setDisplayMode( newDisplayMode )" und "getDisplayMode()". Andere Setter und Getter Funktionen wurden äquivalent umbenannt

- In den Getter / Setter Funktionen wird nun auch das propset 3 berücksichtigt

- Das Schreiben des Logs wurde in zwei neue Funktionen ausgelagert

- Namen der Skriptdatei umbenannt in TLNoVF1*.lua, da mir gesagt wurde, daß die Skriptedateinamen neuerdings im alten 8.3 Dos-Format gehalten werden sollten (thx für den Hinweis @msl)




Noch zu erledigen:

- möglichst auf globale Variablen verzichten
- restore() Funktion erstellen
Diese Funktion wird automatisch beim Abbruch des Skripts aufgerufen (thx für den Hinweis @msl)




Anmerkungen und Fragen sind jederzeit willkommen :-)

Wichtig: Ich bin auf Feedback angewiesen, da ich das Skript nur sehr eingeschränkt auf meiner eigenen, schon ziemlich mitgenommenen Ixus 65 testen kann. Mir macht diese Arbeit wirklich Spaß :-) , aber ohne zumindest gelegentliches Feedback werde ich sie nicht vollenden können :-/ .
Wie Ihr testen könnt:
Einfach die aktuelle Version im Anhang dieses Threads herunterladen und das Skript 2,3 Fotos machen lassen. Sobald jemand hier sagt "klappt!", werde ich die entsprechende Version mit "rudimentär getestet" kennzeichnen. Danke für Eure Hilfe!



Viele Grüße,

Tiefflieger
Dateianhänge
TLNoVF12.lua
Aktueller Stand vom 19.05.2010
Rudimentär getestet
Sollte das Skript nicht funktionieren oder sich anders verhalten als das Original, bitte hier bescheidsagen :-)
(18.89 KiB) 512-mal heruntergeladen
Zuletzt geändert von Tiefflieger am 20.05.2010, 18:36, insgesamt 2-mal geändert.
Ixux 65
Tiefflieger
CHDK-Einsteiger
CHDK-Einsteiger
 
Beiträge: 13
Registriert: 29.04.2009, 22:46

Beitragvon TaiJiGong » 19.05.2010, 22:00

Hallo Tiefflieger,

wenn Du noch kurz beschreibst wie man es testet, werde ich das machen.

Eine klaren, einleuchtenden und selbst erklärenden Programierstil finde ich immer sehr sinnvoll. (Man muss ja heutzutage nicht mehr um jedes Byte geizen, besser Aussagekräftigere variable-namen, als a,b,c)

Viele Grüße, TaiJiGong
Canon IXUS 100 (SD780) Firmware: 1.00C, sonst nur rein mechanische Kameras wie Pentax-MX
TaiJiGong
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 320
Registriert: 08.04.2010, 20:10
Wohnort: München
Kamera(s): IXUS100is, 100c
IXUS IIs (etwas defekt ohne CHDK)

Beitragvon msl » 19.05.2010, 22:45

Hallo,
Man muss ja heutzutage nicht mehr um jedes Byte geizen
Leider müssen wir hier im Zusammenhang mit CHDK doch etwas auf die Noten achten. Jedes "Skript-Byte" verschwindet 1:1 im Arbeitsspeicher der Kamera. Und leider sind unsere Kameras nicht unbedingt üppig mit Speicher ausgestattet.

Und Tiefflieger, ich finde es klasse, dass du dich trotz Kamera-Handicap so in das Projekt vertiefst. Das hilft bestimmt vielen, die ein Skript selbst entwickeln wollen, strukturiertes (Programmieren) Skripten besser zu verstehen.

Das Intervall-Skript lässt sich gut testen. Einfach ausführen :D . Hier sind die Funktionen beschrieben. Hier geht es konkret um die Version für Kameras ohne optischen Sucher. Die läuft aber auch allen anderen Kameras.

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 TaiJiGong » 20.05.2010, 07:55

Hallo

Leider müssen wir hier im Zusammenhang mit CHDK doch etwas auf die Noten achten. Jedes "Skript-Byte" verschwindet 1:1 im Arbeitsspeicher der Kamera. Und leider sind unsere Kameras nicht unbedingt üppig mit Speicher ausgestattet.


Da könnte man für eine Version, die dann Endgültig auf der Kamera landet, einen Script (Preprocessor, Precompiler, Optimizer) nutzen das die Aussagekräftigen Bezeichner durch kurze (a,b,..) ersetzt, Komentare und unnötige blanks entfernt. Aber die ausführliche Version sollte weiterhin die Referenz sein. Ich habe mir auch hier schon ein paar scripts angeschaut die einfach nicht intuitiv verstehbar sind. Das scheckt doch fast jeden ab sich das genauer anzuschen. Und selbst wer das geschrieben hat weis doch nach Monaten, Jahren nicht mehr was eigendlich (a,b,c,... ) ist.

So ein Script könnte dann sogar so manches unleserliches script vielleicht auch noch um ein paar Bytes reduzieren.

Mich würden die paar (kilo)-Bytes zuviel, zu gunsten der Lesbarkeit (auch Verwendbarkeit), erst mal nicht stören.

Jedes "Skript-Byte" verschwindet 1:1 im Arbeitsspeicher der Kamera.


Kenn mich nicht gut aus, doch denke ich das das erst der Fall ist wenn das script gestartet wird, Sonst liegt es doch nur auf der SD-Karte. Vielleicht währe ja so ein Precompiler,Optimizer direkt beim laden der Scripte ein brauchbares tool.

msl: Danke für den Link, das werde ich mir mal anschauen.

Viele Grüße, TaiJiGong
Canon IXUS 100 (SD780) Firmware: 1.00C, sonst nur rein mechanische Kameras wie Pentax-MX
TaiJiGong
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 320
Registriert: 08.04.2010, 20:10
Wohnort: München
Kamera(s): IXUS100is, 100c
IXUS IIs (etwas defekt ohne CHDK)

Beitragvon msl » 20.05.2010, 10:51

Hallo,

dass Lua-Skripte sehr häufig nur einzelnen Buchstaben als Variablen-Namen verwenden, hat doch eher einen historischen Hintergrund. Zuerst war uBasic da. Da gibt es nur diese Möglichkeit. Dann ist da noch die Einschränkung bei den Parameter-Variablen.

Und Skripte unterscheiden sich doch deutlich von einem Programm. Ein Skript soll in kurzer und knapper Form einen Ablauf automatisieren. Ursprünglich war die Skript-Datei-Größe im CHDK sogar auf 8 kByte beschränkt.

Mittlerweile gibt es aber sehr komplexe Skripte, dank gehtnix auch in uBasic. Mit Lua haben wir nun auch Zugriff auf das Kamera-Betriebssystem und können mit Zeichenketten hantieren. Da macht sich dann strukturiertes Programmieren mit Kommentierung positiv bemerkbar. Man sollte es aber nicht übertreiben. Sonst geraten wir möglicherweise in ein Problem mit dem Arbeitsspeicher.

TaiJiGong hat geschrieben:Sonst liegt es doch nur auf der SD-Karte.
Diese Aussage ist kurz gesagt falsch. Das Skript, was im <ALT>-Modus angezeigt wird, befindet sich auch im Arbeitsspeicher. Deshalb enthält das CHDK-Komplett-Paket auch ein leeres "default.bas"-Skript, mit dem man notfalls den Arbeitsspeicher entlasten kann.

Wenn dann so ein komplexes Lua-Skript wie das Tag&Nacht-Skript läuft, können durchaus 150 kByte zusammenkommen. Jedenfalls wurden solche Werte bei einem ähnlichen Skript festgestellt.

Es gibt Kameras, die haben bei laufendem CHDK nur noch ca. 250 kByte an freien Arbeitspeicher zur Verfügung. Da wird es dann wirklich eng. Denn wir haben neben dem Skript noch so einige "Großverbraucher".
  • Konturenüberlagerung 260 kByte
  • Zebra-Modus 110 kByte
  • DNG (badpixel.bin) ca 25 kByte je nach Anzahl der Badpixel
  • Sprachdatei 13 kByte
  • Symboldatei 12 kByte
  • Grids je nach Größe ca. 3 kByte
  • Benutzer-Tonwertkurven ca. 20 kByte

Wie viel Speicher zur Verfügung steht, kann jeder selbst herausfinden. In "verschiedene Einstellung" gibt es dazu eine Abfrage.

Der Aufwand, Preprocessor, Precompiler, Optimizer einzusetzen, wäre meiner Meinung nach für ein Skript zu groß, wenn überhaupt machbar. Da halte ich doch lieber ein Skript kurz und dokumentiere es extern.

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

Test

Beitragvon h3px » 20.05.2010, 11:09

Hi Tiefflieger,

auch von mir die Frage, gibt es einen speziellen Punkt der getestet sein will, oder sollen wir es einfach mal in verschiedenen Einstellungen durchlaufen lassen?
Letzteres werde ich in den nächsten Tagen schon mal machen (Pfingsten naht ja mit großen Schritten :) ).

Gruß h3px
Benutzeravatar
h3px
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 365
Bilder: 10
Registriert: 15.01.2009, 20:38
Wohnort: ~ MUC
Kamera(s): S 110 103a - SX 260 101a
Ixus 870 101a - A590 101b

Beitragvon TaiJiGong » 20.05.2010, 11:17

Hallo,

msl hat geschrieben:
TaiJiGong hat geschrieben:Sonst liegt es doch nur auf der SD-Karte.
Diese Aussage ist kurz gesagt falsch. Das Skript, was im <ALT>-Modus angezeigt wird, befindet sich auch im Arbeitsspeicher. Deshalb enthält das CHDK-Komplett-Paket auch ein leeres "default.bas"-Skript, mit dem man notfalls den Arbeitsspeicher entlasten kann.


Lass mich da gerne belehren. Aber ich sehe dafür erst mal keinen Grund das Scripte die nicht benötigt werden in den Arbeitsspeicher geladen werden. Gilt das für alle scripte die sich auf der SB-Card befinden ?

Der Aufwand, Preprocessor, Precompiler, Optimizer einzusetzen, wäre meiner Meinung nach für ein Skript zu groß, wenn überhaupt machbar. Da halte ich doch lieber ein Skript kurz und dokumentiere es extern.


Kommentare entfernen sollte eigendlich einfach gehen, das umwandeln von Variablennamen evtl. etwas schwieriger.

Wenn ich das ganze etwas besser verstehe, werde ich mich mal drum kümmern.

Viele Grüße, TaiJiGong
Canon IXUS 100 (SD780) Firmware: 1.00C, sonst nur rein mechanische Kameras wie Pentax-MX
TaiJiGong
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 320
Registriert: 08.04.2010, 20:10
Wohnort: München
Kamera(s): IXUS100is, 100c
IXUS IIs (etwas defekt ohne CHDK)

Beitragvon msl » 20.05.2010, 11:41

Hallo TaiJiGong,

ich hatte doch geschrieben, dass es nur um das Skript geht, was im <ALT>-Modus angezeigt wird und sich damit im Arbeitsspeicher befindet. Die anderen Skripte auf der SD-Karte sind natürlich nicht betroffen.

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 d.pielmeier » 20.05.2010, 12:34

es ist inzwischen häufig so, dass es eine "normale" Version von z.b. JS Erweiterungen gibt und sogn. "Minified"-Versionen.

Um gleiches für CHDK-Scripte zu erreichen schlage ich einfaches "Suchen und ersetzen" der Variablennamen vor, sowie unnötige Zeilen zu löschen und Kommentare zu entfernen, z.b. mittels Text Tools aus Notepad++.
IXUS 40, 860IS, 100IS
d.pielmeier
CHDK-Einsteiger
CHDK-Einsteiger
 
Beiträge: 14
Registriert: 05.05.2010, 14:18

Beitragvon TaiJiGong » 20.05.2010, 12:55

z.b. mittels Text Tools aus Notepad++


Klar, das ist eine einfachste Methode. Aber etwas Einheitliches und Automatisches ist da wohl schon Sinnvoll.
Habe mal kurz nach einen parser gesucht:
http://www.lua.org/source/5.1/lparser.c.html
http://lua-users.org/wiki/LpegRecipes


msl: Diese Aussage ist kurz gesagt falsch. Das Skript, was im <ALT>-Modus angezeigt wird, befindet sich auch im Arbeitsspeicher.

Aber keinen Streit wegen solchen Kleinigkeiten, das bring doch nicht.

Viele Grüße, TaiJiGong
Zuletzt geändert von TaiJiGong am 20.05.2010, 18:34, insgesamt 1-mal geändert.
Canon IXUS 100 (SD780) Firmware: 1.00C, sonst nur rein mechanische Kameras wie Pentax-MX
TaiJiGong
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 320
Registriert: 08.04.2010, 20:10
Wohnort: München
Kamera(s): IXUS100is, 100c
IXUS IIs (etwas defekt ohne CHDK)

Beitragvon d.pielmeier » 20.05.2010, 13:58

Das Script läuft erstmal ohne kritischen fehler auf meiner Ixus 860IS ohne optischen Sucher.

Wie ich anhand einer analogen uhr erkennen kann, liegen die fotos allerdings nicht genau 5 sekunden auseinander wie im script angegeben sondern zwischen 6 und 9 sekunden.
IXUS 40, 860IS, 100IS
d.pielmeier
CHDK-Einsteiger
CHDK-Einsteiger
 
Beiträge: 14
Registriert: 05.05.2010, 14:18

Beitragvon Tiefflieger » 20.05.2010, 18:28

Wow, vielen Dank für die viele positive Resonanz :-)

Zum Testen: In der Tat würde es mir sehr helfen, wenn man einfach mal 2-3 Bilder mit dem Skript erstellt. Ganz grobe Schnitzer würden da schon auffallen.
Danke für den Hinweis @ d.pielmeier, ich werde mir die Stelle mal anschauen, bin aber auch wie gesagt noch nicht fertig :-)

Und zu dem Parser, um eine minimierte Kopie des Skripts zu erstellen: Das wäre ein enormer Aufwand, ich habe selber mal zwei Vorlesungen über Compilertechnik gehört. Dann müßte man z.B. eine Tabelle für die ganzen Variablen einführen und verwalten.
Die einzig machbare Art, das Skript automatisch zu minimieren, wäre es meiner Meinung nach, alle Kommentare zu entfernen.
Selbst die automatische Entfernung von Leerzeichen und Zeilenumbrüchen wäre nicht trivial, da man noch herausfinden müßte, ob diese Zeichen nicht in einem String enthalten sind.
Einfaches Umbenennen von Variablen würde noch komplizierter, da man noch sicherstellen muß, daß der verkürzte Name nicht bereits in der aktuellen Sicht verwendet wird.

Ich würde aber eher zum altbewährten (Lex und evtl Yacc) raten, wenns um die Erstellung eines solchen Parsers geht - oder kennt jemand ein Argument, warum man sich mit dem LUA-Parser herumschlagen sollte?

So interessant das ganze ist, sollte man das aber in einen eigenen Thread packen, dort würde es sicher auch noch mehr Resonanz finden :-) .

Zum Skript selber: Es ist trotz allem nicht über die Maßen komplex, in dem Arbeitsspeicher meiner Ixus 65 verbraucht es etwas mehr als 50kB (von insgesamt ca. 1MB), was ich für mich noch für absolut vertretbar halte. Und da meine Kamera durchaus schon zu den älteren gehört, hoffe ich mal, daß das bei den meisten anderen ebenso ist?

Nochmals vielen Dank für all Eure Hilfe, ohne euch könnte ich nicht weiter daran arbeiten :-)
Ixux 65
Tiefflieger
CHDK-Einsteiger
CHDK-Einsteiger
 
Beiträge: 13
Registriert: 29.04.2009, 22:46

Beitragvon TaiJiGong » 20.05.2010, 19:04

Auch auf meiner IXUS100is läuft das Script (mit optischen Sucher). ca. alle 8 sec eine Aufnahme.

Warum habe ich nach einen Parser geschaut, weil mir die Problematik bewust ist. Vielleicht werden die Kommentare ja beim laden auch schon ausgefilterd (könnte man mal testen). Aber das sollte man schon einen eigenen Thread packen.

Viele Grüße, TaiJiGong
Zuletzt geändert von TaiJiGong am 20.05.2010, 20:13, insgesamt 2-mal geändert.
Canon IXUS 100 (SD780) Firmware: 1.00C, sonst nur rein mechanische Kameras wie Pentax-MX
TaiJiGong
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 320
Registriert: 08.04.2010, 20:10
Wohnort: München
Kamera(s): IXUS100is, 100c
IXUS IIs (etwas defekt ohne CHDK)

Beitragvon msl » 20.05.2010, 19:12

Hallo,

noch etwas zum Thema Kommentare: Skript zum Entfernen von Kommentaren

Die Größe eines Skriptes soll nun nicht überbewertet werden. Trotzdem könnte es eine Ursache bei Komplikationen sein.

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 h3px » 20.05.2010, 20:23

Hi Tiefflieger,
also bisher läuft es auch auf meiner Ixus 870...Sieht soweit auch gut aus.
Allerdings schaltet das Script das Display nicht aus :?

Das mal so als Zwischenmeldung :)

Gruß h3px

Edit sagt:

Neben dem Display-Problem habe ich nach 230 Bildern einen Abbruch zu vermelden.
Die Kamera war ca. 2 Stunden nach dem letzten Bild immer noch an und die grüne LED blinkte langsam aber regelmäßig.
Akku war also o.k. Speicherplatz auch.

Die Script-Parameter
TTW 3
LCD 4
Countdown 1
Fixfocus 1
EV-Shift -1
Flash 2
Q 0
Pixel 0
Logs 1
Start 0
End 23

Der Rest in den EXIF und im LOG-File.
Die Aufnahmen unterscheiden sich in Belichtungszeit 1/60 vs. 1/25. ISO 100 vs. 200 und Sharpness 21 vs. 18.
Wenn ich mich recht erinnere hatten wir letztes Jahr beim Ausgangsscript auch diverse ungeklärte Abbrüche...

Einstweilen Gruß und gute Nacht
h3px
Dateianhänge
IMG_9500.txt
EXIF letztes Bild
(6.61 KiB) 426-mal heruntergeladen
IMG_9270.txt
EXIF erstes Bild
(6.61 KiB) 419-mal heruntergeladen
log20052004.txt
LOG-File :-)
(8.59 KiB) 422-mal heruntergeladen
Benutzeravatar
h3px
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 365
Bilder: 10
Registriert: 15.01.2009, 20:38
Wohnort: ~ MUC
Kamera(s): S 110 103a - SX 260 101a
Ixus 870 101a - A590 101b

Nächste

Zurück zu Code-Ecke

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

cron