Donnerstag, 7. November 2013

Fehlersuche und Codeanalyse mittels _cartrigde.lua

Voraussetzung: "Der Einstieg in lua“

Abbildung 1: Bei der Zonendefinition wird der Identifier des Steinbruchs mit kleinem s angelegt
In diesem Tutorial wollen wir uns mit Fehlersuche bzw. Codeanalyse beschäftigen. Genauer gesagt geht es darum sich anzuschauen welcher lua Code aus dem Urwigo Projekt generiert wird.
Dies kann uns in zweierlei Hinsicht nützlich sein.
  • Erweitern der lua-Kenntnisse sowie Analyse der Wherigo-API
  • Fehlersuche
Zunächst beschäftigen wir uns mit dem zweiten Punkt: Das Scenario ist folgendes:
Wir haben eine Zone Steinbruch definiert, die wir im Lua user functions Bereich ansprechen wollen bzw. der Aktivitätsstatus wir dort verändern möchten.
Abb. 1 zeigt das Anlegen der Zone. Erfahrene Wherigo-Entwickler werden auf den ersten Blick feststellen, dass wir neben Namen und Bild auch den Identifier festgelegt haben.

Abbildung 2: Im lua Teil wird das Objekt fälschlicherweise mit großem S angesprochen
Im Lua user functions Bereich nehmen wir unseren Steinbruch und setzen die Aktivät auf true.
Wer erkennt hier schon unseren Fehler? Kleiner Tipp: Bei diesem Code würde das Projekt gar nicht erst starten. Würden wir die Anweisung in einer Funktion verwenden, die erst während dem Spiel ausgeführt wird, z.B onStart würde die Fehlermeldung folgendermaßen lauten:
Lua method call failed. .../urwigo-src-23fd04e4-6177-45ca-a89a-2ffc8589ff08.lua:323: attempt to index global 'Steinbruch' (a nil value)

Abbildung 3: Wichitg für die Lesbarkeit im Testmodus ist Verschlüsselung sowie die Verschleierung der Identifier und Texte zu deaktivieren
Die Ursache der Fehlermeldung ist schnell erklärt: Während der Identifier in Abb.1 auf steinbruch mit kleinem s gesetzt wurde wird im lua Part versucht die Zone mit großem S anzusprechen.
Da der Code case-sensitive ausgewertet wird ist Groß- und Kleinschreibung wichtig. Schließlich befinden wir uns ja nicht im Windows-DOS-Modus.

Diesen Fehler erkennt man beim zweiten Mal sehr zügig. Was aber, wenn wir noch nicht so erfahren sind? Hier kann ein Blick in die lua Datei helfen, die von Urwigo aus dem Projekt erzeugt wird und neben den Bildern als zip Datei (oder besser gesagt als gwz Datei) zum wherigo.com Server hochgeladen wird.
Wir wollen also einen Blick in die generierte lua Datei werfen. Dazu ist es wichtig, dass wir wie in Abb.3 erkennbar ist, die Verschleierung und Verschlüsselung der Texte, Antworten und vorallem der Identifiers aufheben. Die Identifiers dürfen auf keinen Fall verscheiert werden, wenn wir eigenen lua Code schreiben. Die ersten beiden Kästchen dienen der besseren Lesbarkeit während der Testphase, sollten vor dem Hochladen zu wherigo.com aber wieder gesetzt werden.
(Nicht dass es euch so wie mir geht und ihr ein paar Minuten nach der Veröffentlichung des neuesten Wherigos eine eMail bekommt in der euch ein Cachingkollege mit breitestem Grinsen alle Antworten und Spoilerbild zuschickt, weil ihr vergessen habt die Verschlüsselung zu aktivieren...)

Abbildung 4: Das Bauen des package ist nicht neues und kennen wir schon als Vorbereitung für's Hochladen
Jetzt könnt ihr euch kurz entspannt zurücklehen, denn der Teil mit dem Erstellen eines Packets sollte euch wohlbekannt sein.
Für den weiteren Vorgang nehmen wir an, wir haben die gwz Datei ExtractLua.gwz genannt und in dem Ordner "C:\tmp\ExtractLua" abgespeichert.

Abbildung 5: Beispiel für das Entpacken der gwz-Datei mit 7zip
Um die lua Datei aus der gwz Archivdatei zu extrahieren, bedienen wir uns eines Zip-Programmes unserer Wahl. WinZip, WinRar sollten selbsterklärend sein. Ich habe 7zip verwendet, da es sich hierbei um ein kostenlos nutzbares Tool handelt, dass allen Ansprüchen der Extrahierung gerecht wird. Wenn man den Schritt "Packet bauen - auspacken - Lua Datei anschauen" mehrmals wiederholt (nach der Behebung des ersten Fehlers wartet der zweite) empfiehlt es sich den Extraktionsbefehl über die Kommandozeile abzusetzen, da er dort recht leicht wiederholt werden kann (z.B Pfeil aufwärts in der Konsole). Der Parameter e steht für Auspacken, während der Schalter y für das Überschreiben vorhandener Dateien steht. Deswegen sollte man die gwz Datei außerhalb des Projektordners auspacken.

Abbildung 6: In der von Urwigo erstellten lua Datei kann man gut sehen, woran der Fehler liegt: Groß- und Kleinschreibung des Identifiers stimmen nicht überein
Wie ihr eure gwz Datei entpackt ist aber euch überlassen. Wichtig ist, dass am Ende eine _cartridge.lua Datei herauskommt, die ihr dann mit einem Texteditor öffnen könnt. Ich habe dies mit dem vim Editor gemacht, da mir dann ein farbliches Syntax-Highlighting sicher ist. Wer bereits mit dem IntellijIDEA arbeitet (siehe Lua im externen Editor bearbeiten) kann natürlich sich dort die Datei anschauen.

Nun aber zur Fehleranalyse. In Abb. 6 erkennt ihr an dem oberen bzw. unteren roten Kreis, dass die Identifier sich in Groß- und Kleinschreibung unterscheiden und ihr habt den Fehler somit gefunden.

Ich hatte zu Beginn des Tutorial einen weiteren Nutzen der Codeanalyse angesprochen. Dies wird durch Betrachtung des mittleren roten Kreises deutlich:
Der Codeteil function objExtractLuaTest:OnStart() end enthält nämlich alle Codeanweisung, die beim Starten des Wherigo ausgeführt werden. Ich seht auch wie der Identifier des Cartridges gebildet wird, wenn er nicht von euch vorgegeben wird: Mit einem simplen Prefix obj der vor den Namen gesetzt wird.
Anstatt die Startanweisungen als lua Block aufwändig über Urwigo einzugeben, könnt ich auch einfach in euerer lua Datei diesen Codeteil verwenden.
Auf diese Weise hab ich mir nach und nach angeschaut, wir Textausgaben (MessageBoxen), Benutzeneingaben (Input), Timer, Zonen und Gegenstände verwendet werden, sodass ich heute nur noch die Objekte in Urwigo definiere (UUID-Erzeugung ist zwar möglich aber recht aufwändig) und alles andere direkt in lua schreibe, was sich bei aufwändigeren WherIGos wie Minesweeper, Cachopoly, Schiffe versenken... als wesentlich schneller herausgestellt hat und ihr habt die Codeanweisungen zentral in einer (später mehreren) Lua Dateien und könnt so euren Code besser nachvollziehen.

Samstag, 17. August 2013

IPhone Player Update erfolgreich

Wie ich mittlerweile von mehreren Feedbacks mitbekommen habe ist das aktuelle 1.4.2 Version des PiGo Player soweit daß auch kompliziertere  Wherigos wie Scotland Yard oder Minesweeper zu spielen sind. Also Update einspielen und los geht's. Um weitere Rückmeldungen bin ich immer noch dankbar

Sonntag, 28. Juli 2013

Buggy und T5er

Jaja kaum ist das Kind anderthalb kann es schon Buggyverschüsse öffnen. Aber da hat es die Rechnung ohne T5er Papa gemacht

Freitag, 26. Juli 2013

Minesweeper überall als PlayAnywhere spielen


Abbildung 1: Wenn du zu weit entfernt von vordefinierten Spielfeldern bist, kannst du dein Feld selbst aufziehen. Markiere ObenLinks ...
Minesweeper ist mit der Version 2.0 nun auch als PlayAnywhere verfügbar.

Dabei kommt ein neuartiges Lokalisierungverfahren zum Einsatz:

Beim Start des Spieles prüft das Gerät selbstständig ob es sich im 1-km-Radius zu einem vordefinerten Spielfeld (z. Zt Koblenz/Ehrenbreitstein - Emsland und Holland sind in Planung) befindet und wählt dieses automatisch aus.

Ist kein passendes Spielfeld in der Nähe, wird automatisch auf PlayAnywhere-Modus umgeschaltet und der Spieler wird zur Definition der Ecken LinksOben sowie RechtsUnten aufgefordert. Am Ende erhält er wie gewohnt Zahlen für die Buchstaben A, B, C und D, die er in die Formel im Geocaching.com Listing eintragen kann um die Tupperdose zu besuchen.

Abbildung 2: ... und danach UntenRechts und schon bist du fertig und kannst loslegen.

Minesweeper auch in deiner Stadt?

Du wohnst ein wenig entfernt von Koblenz und möchtest Minesweeper auch in deiner Caching-Homezone anbieten?
Schreib mir einfach ne Nachricht und ich kann ein vordefiniertes Spielfeld auch für deinen Ort eintragen, bzw. dir bei der PlayAnywhere-Formel helfen.

Donnerstag, 25. Juli 2013

Endlich dynamische Wherigos auf dem iPhone? Update für Apfel-Player PiGo erschienen

Es gibt ein neues Update für den PiGo Player. Und es gibt damit neue Hoffnung auf komplexere Wherigos wie Cachopoly, Schiffe versenken, Scotland Yard, Siedler oder Minesweeper


Abbildung 1: Die Auflistung von Cachopoly in den Beispiel-Wherigos auf der iTunes Seite lässt hoffen, dass nun auch dynamische Wherigos mit PiGo spielbar sind.
Wie auf der iTunes Seite verkündet ist das 1.4 Update für PiGo verfügbar und hat allerei Bugfixes dabei.
1) Various minor updates.
2) Improved audio playback.
3) Added active zones as possible command targets.
4) Allow selection of universal commands with no targets.
5) Consider active zones for command text.
6) All input/views allow timers, etc. to run normally.
7) Updated map display.
8) Reversed angle for: Wherigo.VectorToPoint
9) Changed action tracking for items.
10) Added geocache search!
11) Fixed restore of boolean values. Thanks Knut!
    


Besonders gespannt bin ich auf die Überarbeitung der Timer sowie die VectorToPoint Anpassung. Letzteres könnte die Ursache dafür sein, dass Minesweeper beim Project-Eck-Event nicht für Apfeljünger spielbar war.
Es gibt also Hoffnung. Da ich selbst (überaus zufrieden) auf der Android-Welle surfe, bin ich auf euer Feedback angewiesen und gespannt.

Schreibt eure Erfahrungen ruhig als Antwort zu diesenm Post

Dienstag, 18. Juni 2013

GSAK-Macros: Buttons und Online Index

Voraussetzung: Der Einstieg in die GSAK Macro Welt

Einen Button für das Macro definieren


Abbildung 1: Wie heißt mein Button, welchen Text und Beschreibung soll er erhalten und wo ist das zugehörige Macro?
Damit wir den großen Batzen an Macrowissen aus dem Macro Einstiegstutorial besser verdauen können, wird es heute etwas übersichtlicher. Wir wollen lediglich bestehende Macros mit Buttons versehen und diese in er Speedbar (oberhalb der Cacheübersicht, da wo schon "Datei öffnen", "Drucken" usw definiert sind) anordnen.
Wir beginnen mit Macro->Button Configuration und wählen im ersten Feld einen noch unbelegten Button, z.B 7 - M7. Im nächsten Feld geben wir den zugehörigen Text ein. Dieser sollte nicht zu lange sein, damit er in die standardmäßig definierten 28 x 28 Pixel passt. (Alternativ kann man unten links die Breite raufsetzen, wenn der Button breiter werden soll). Für unseren "Init" Text reichen 28 Pixel aber aus. Button Description and Hint bezeichnet den Text der erscheint, wenn man mit der Maus über dem Button ein paar Sekunden verweilt und kann dazu genutzt werden eine genauere Beschreibung einzublenden.
Das wichtigste Feld ist der Macro file name in dem man den Pfad zum geschriebenen oder heruntergeladenen Macro (siehe unten) eintragen bzw. auswählen kann.
Ganz nützlich ist auch die Vorschau unten rechts im Abschnitt Toolbar sample wo ihr euch direkt ansehen könnt, ob der Text nicht zu lang für die Breite ist.

Abbildung 2: Um die Speedbar anzupassen, einfach den Button auswählen (eigene Buttons sind unter Macros) und per Drag&Drop auf die Speedbar ziehen.
Ist der Button erst einmal definiert, gilt es ihn noch auf die Speedbar zu ziehen. Dazu öffnen wir Macro->Add Button to Tool Bar wählen unter Macros (dort sind die 20 selbst definierbaren Buttons zu finden) unseren Init-Button aus und ziehen ihn per Drag'n'Drop auf unsere Speedbar an die gewünschte Stelle und ...
sind schon fertig. So einfach geht das.
Um einen Button wieder zu entfernen ziehen wir ihn einfach von der Speedbar aus nach unten, bis er außerhalb der Speedbar ist und quasi verschwindet. Maustaste loslassen und unser Button ist zwar nicht Geschichte, aber nicht mehr auf der Speedbar sichtbar.
So sammeln sich je nach Intensität und Funktionen mit denen man GSAK nutzt mehr und mehr Buttons / Macroshortcuts in der Speedbar an. Zum Glück ist dort ne Menge Platz.

Abbildung 3: Je intensiver man GSAK nutzt, desto größer wird die Button-Anzahl in der Speedbar.

Macro Online Index

Es muss aber nicht immer ein selbstgeschriebenes Macro sein. Geht man auf Macro->Run/Manage->Online Macro Index oder direkt auf http://gsak.net/board/MacroIndex.php so hat man Zugang zu einer riesigen Bibliothek an Macros für jeden Zweck. Gebt das passende Schlagwort (z.B Project81 für ein Macro, das euch die Caches raussucht, deren D/T Wertung euch noch für die Matrix fehlt) und klickt auf den blauen Macronamen.

Abbildung 4: Im Online Index existiert bereits eine Flut von fertigen Macros die viel nützliche Funktionen bereit stellen
Die darauf folgende Seite ist wie ein Forum aufgebaut und ihr könnt die (Weiter-)Entwicklung des Macros studieren. Zum Download des Macros geht ihr zum letzten Eintrag und ladet so die aktuellste Version des Macros hinunter. Bei der Frage, was der Browser mit dem Macro machen soll, wählt ihr "Öffnen mit GSAK" und anschließend Install the macro.
Wenn euch das Macro gefällt könnt ihr wieder nen Button definieren und ihn auf die Toolbar schieben. Oder das Macro in euren Programmablauf einbauen, so wie wir das mit dem MoveFound-Macro im Init-Macro vollzogen haben.

Montag, 17. Juni 2013

Minesweeper ist online !!!

Keine zwei Wochen mehr bis zum Event der Events. Heute schonmal der erste (kleine) Paukenschlag: Um FTF-Stress während des Events zu vermeiden und um Erfahrungen mit dem neuen Minesweeper-WherIGo im freien Feld zu erhalten, wurde heute die Minensuchversion fürs GPSr freigeschaltet.
Unter GC4B061 kann man ab sofort hoch oben auf der Festung Ehrenbreitstein Minen suchen, markieren, graben und hoffen dass man nicht in die Luft fliegt. Natürlich alles im Secure-Mode mit Reset-Funktion. Wir wollen ja nicht, dass jemand ernsthaft zu schaden kommt.
Das Cartrigde erhaltet ihr über das GC-Listing oder direkt von der Wherigo-Seite.
Also Cartrigde runterladen, Listing ausdrucken (enthält Anleitung), ab ins Auto und auf geht's. Ein jungfräuliches Logbuch wartet schon auf euch.