Freitag, 9. Mai 2014

MEGA Switzerland, wir kommen


MEGA Switzerland, wir kommen !!!

Nachdem es gestern abend noch Anflüge von Panik gab, da das seit November gebuchte Ticket nicht ausgedruckt und die Mail auf dem Rechner mit abgerauchtem Mainboard lag, kam heute morgen die frohe Botschaft: Ein Kopie der eMail mit allen Anmeldedaten und Bestellbestätigung.
Da kann ich nur sagen, tolle Orga.
So geht es in 40 Minuten los Richtung Eidgenossen. Und ein Cachopoly liegt nur wenige Kilometer entfernt....

Sonntag, 20. April 2014

Sprachausgaben übersetzten ohne vararg Parameter

Voraussetzung: "I18n - Einen Wherigo in verschiedenen Sprachen anbieten“


Abbildung 1: Die Übersetzungen mit mehreren Parametern ohne varargs
Im vergangenen Tutorial bzgl. der Übersetzung habe ich den vararg Parameter ... eingesetzt.
Es scheint aber so, dass manche WhereYouGo bzw. PiGo Player Version Probleme mit diesem Konstrukt haben.

Um dem vorzubeugen möchte ich euch folgende Lsg vorstellen, die mir schnuefelis als funktionstüchtig beschrieben hat.

Der Trick ist recht einfach. Anstatt mit ... eine unbestimmte Anzahl an Parameter zu definieren, baut ihr einfach mehrere Methoden, die einen, zwei, oder drei "replacements" akzeptieren.

Um nicht unnötig Code zu duplizieren, rufen diese Methoden alle die 4-Parameter Version auf, in der dann geprüft wird ob replacement1, 2 oder 3 nil sind und nur dann die Ersetzung starten.

Als Softwarentwickler tut eine solche Lösung zwar schon ein bißchen weh, aber bei der Vielzahl der Player mit all ihren Schwächen muss die Dynamik zugunsten der Stabilität leiden.

Freitag, 21. März 2014

"13 Monate ist auch genug"

Heute mal nen ganz kurzer spontaner Beitrag:
Inspiriert durch die erste Notification des Tages
"[GEO] Notify: XXX archived YYY (Traditional Cache)", der Owner archiviert seinen eigenen Cache:

"Log Date: 3/20/2014 Der ist so oft weg, und 13 Monate ist auch genug. Mache wieder Platz für andere..."

Fand ich sehr interessant und brachte mich zum Schmunzeln.
"13 Monate ist auch genug".
Es soll keine Ketzerei gegen den Log oder den Owner sein, nein es zeigte mir einfach wie sich unser Hobby entwickelt hat. Schnell nen Tradi abgelegt, länger als nen Jahr muss er eh nicht halten. Da ich den Owner kenne, glaube ich zwar nicht, dass bei diesem Cache eine solche Überlegung ne Rolle gespielt hat, ich kenne aber genügend andere wo man bei der Publish Notification den Eindruck hat, dass die Dose bewußt so schnell und einfach gelegt hat, dass man gar nicht vor hat den Cache lange aufrecht zu halten.

Ich hoffe ich konnte den Schmunzelfaktor am Morgen an euch weitertragen.

Montag, 10. März 2014

Hier gibt es nix zu sehen

Wirklich, hier gibt es nix zu sehen:
http://muah.info

Sonntag, 9. März 2014

Grill & Kick Wherigo Event

Was haben Grillen und Kicken gemeinsam? Richtig, ab und zu muss man ganz schnell laufen. Man kann die beiden Freizeitbeschäftigungen aber anders verbinden:



Laufe auf einem echten Rasenplatz um einen virtuellen Ball in ein echtes Tor zu schießen und spiele dabei gegen virtuelle Gegner wie z.B. die deutsche Nationalmannschaft

Neugierig? Dann schau dir das Listing an, pack Grillfleisch und den Wherigo-Player ein

Freitag, 7. Februar 2014

To offer a wherigo in several languages

This is the english version of the article. It is also available in german

Good to know for this article: "Der Einstieg in lua“

In this tutorial you'll learn how to offer your wherigo cartridge in several languages.

Picture 1: Definition of the text outputs in three different languages
First we will define an array messages where we can define the outputs in different languages
Very important is to define the language parameter to to ZVariables because we want to save the value when we save and restore the cartrigde.
For each language (german, english and fresh in our example) we define a subarry like in row 5-7. After that we define the output strings.
How it works I can show you at the example for the key hello. Depending on the selected language we want to see "Herzlich Willkommen", "Welcome" oder "Bienvenue" in our display. Maybe you have noticed that for the key hi are no english value defined. For this case the program will use the defaultLanguage (see row 4) So if your language is set to en and no value for message.en.hi is defined the default value messages.de.hi => "Hi" (row 11) is used.
The next part is very important:
In row 13-18 you can see examples for using placeholders, e.g the name of the play inside the translated output string
At runtime the #1# will be replace with the name, e.g. 'Krolock'. You will have one of the following output:
  • de => Hallo Krolock, wie geht es dir?
  • en => Hi Krolock, how are you
  • fr => Salue Krolock, ca va?
Be careful with blanks! # 1# will not work, #1 # will not work and Hi#1#How are you will transformed to "HiKrolockHow are you".

During the start of your cartrigde you can offer an multiple-choice-input for the user where he can select the langauge. After the input you can set the variable language to the fitting value


Picture 2: Build the value fitting to the key and language
But how to use the resource strings. As shown in picture 2, row 21 we use an array access for the language in first and the key in second level. Using "de" as language and "hello" as key will deliver Herzlich Willkommen zum i18n Wherigo.
If no array value is available a new try with the default value is shown in row 23. So it is very import to define an entry for each key in the default value (de in our example)


Picture 3: Values for the placeholders
Now it is time to look to the parameter replacement. I is import to use a placeholder that will not be part of the "regular" strings. So I decided to use #1#.
As you can see in line 27 at picture 3 i use string.gsub to replace #1# with the first, #2# with the second parameter and so on. Picture 3 shows a updated version of getMessage with replacing the placeholders
The vararg argument "..." is a good way to be flexible.
The function getMessage can be called with only the key, with one or multiple parameters like the following examples show :
getMessage("hello")
getMessage("helloWithName","Krolock")
getMessage("openDoor","XYZ","A15N")

With #arg we can retrieve the number of the arguments stored in the array arg. With arg[1], arg[2] we can access to the first, the second parameter and so on

Picture 4: Example for calling the translation method
If you have more than one parameter you have to take care for the order. For the key openDoor you have different orders in the german and english version.
Picture 4 shows us an example how to call the translation method in Urwigo. He have an example for no, one and two parameters.

Last but not least I will show you how to seperate your code and your translations. In the concept of resource bundles you will define a own file for each language and each file hast the same key, excect the language part of the key.
You can use a file messages_de.lua containing the german, messages_en.lua for the english and messages_fr.lua for the french values.
All the three files can be bind with require "messages_de" and so on.
Development-Tool line eclipse or Intellij IDEA have plugins to manage your resource bundles.

To seperate the file is optional. It will also work if you write all the key-value entries in one file, but it is not a good practise.

Sonntag, 12. Januar 2014

Haben wir Geocaching endgültig kaputt bekommen?

Zum Abschluss des Wochenendes gab es heute wieder mal die Erkenntnis dass unser schönes Hobby kurz vor dem Exodus steht.
Ok das ist jetzt überzogen, aber nachdem 90 % meiner letzten Versuche nen Cache zu veröffentlichen abgelehnt wurden, werde ich es mir gut überlegen mir nochmal die Mühe zu machen, ne Dose vorzubereiten, auslegen und Arbeit und Zeit ins Listing zu stecken.
Sicherlich kennen viele (potentielle) T5-Owner das Problem das Stoff kurzem das Einverständnis sowie Kontaktdaten des Försters vorhanden sein muss um nen Klettercache zu veröffentlichen.
Heute hab ich nach nem langen Tag des Laternenkletterns die Erfahrung gemacht dass dies auch für Stadt und Gemeinde betrifft.
Sehr frustrierend. Wo darf man überhaupt noch klettern?
Wo noch ne Dose auslegen die vom langweiligen 1/1 er Standard abweicht?
Dies soll übrigens keine Anprangerung der Reviewer sein. Vielmehr sehe ich die Ursache in den a) überzogenen Regeln die diese befolgen müssen und in der Notwendigkeit die Regeln in der Vergangenheit verschärft haben zu müssen.
Vielleicht machen wir noch mehr Powertrails und noch mehr Fernsehberichte ohne zu recherchieren damit der letzte aus der Hinz- und Kunz- Menge mit dem iPhone loszieht um schnell mal paar Dosen zu suchen, äh kaputt zu machen.
Dann wird die öffentliche Wahrnehmung und unser Ruf bestimmt besser.
Ach und je mehr Apps Seattle verkauft desto mehr klingelt dort auch die Kasse. Was ja wohl zunehmend der entscheidende Faktor zu sein scheint
In der BWL heißt so was CashCow. Melken bis es umfällt. Danach bzw eng verbunden kommt Degenerationsphase (Rückgang)