• Willkommen im Geoclub - dem größten deutschsprachigen Geocaching-Forum. Registriere dich kostenlos, um alle Inhalte zu sehen und neue Beiträge zu erstellen.

Notizen/Solver in Liste?

pfeffer

Geowizard
warum steigen wir nicht tatsächlich gleich auf ein binäres Format um?
Das würde den Interpretationsuafwand stark reduzieren und die Dateigröße (Lese-Aufwand) auch. - Hmm - naja, vielleicht bringt es doch nicht so viel, schließlich sind nach den Änderungen von Engywuck noch imn Wesentlichen Strings übrig, deren binäre Speicherung kaum Vorteile bringen dürfte.

Umwandlung Byte <-> Long dürfte wohl etwa so gehen:
(long) b << 3*8 | l
und umgekehrt
(byte) (( l >> 3*8 ) & 0xff)

ein einzelnes Bit abfragen so
return (l & (1 << bitpos)) > 0
da lohnt es sich wohl eher nicht, das Ergebnis dieser Abfrage in einem boolean zu speichern. Man kann statt einem Getter auch 1 << bitpos in eine finale Konstante packen und dann ohne getter einfach abfragen:

if ( (ch.status & CacheHolder.ISBLACK) > 0) { nicht anzeigen }

Das würde dann den Getter-Aufruf ersparen. Ich fänd das - glaub ich - die beste Lösung.

Gruß,
Pfeffer.
 
OP
Engywuck

Engywuck

Geowizard
Ich habe das Spielchen jetzt noch etwas weiter getrieben: Die Informationen Difficulty, Terrain, Cachetyp, Größe und Anzahl-DNF werden jetzt alle als Byte in der Datei abgespeichert, und zwar auch alle zusammen in einem Long. Dabei werden nun Typ und Anzahl-DNF auch intern im CacheHolder-Objekt als Byte gehalten, der Rest nach wie vor als String. Bei diesen findet die Übersetzung während des Abspeicherns bzw. Auslesens statt.
Insgesamt scheint diese Änderung kaum Auswirkung auf die Geschwindigkeit zu haben, denn zum einen spart man nur 4 Felder in der Datei, zum andern braucht man mehr Aufwand, um die relevanten Informationen aus dem Long zu extrahieren. Daher stellt sich die Frage, ob wir diese Änderung auch übernehmen wollen. Kurze Gegenüberstellung:
Vorteile:
  • Datei wird kürzer
  • Werden weitere zahlartige Eigenschaften aufgenommen, können diese abgespeichert und ausgelesen werden, ohne die Dateistruktur ändern zu müssen.
Nachteile:
  • Kein spürbarer Geschwindigkeitsvorteil beim Lesen
  • Datei wird weniger "human readable"
  • Externe Programme, die (z.B. per XSLT) auf die Datei zugreifen wollen, haben mehr Interpretationsaufwand, um an die gewünschten Informationen zu kommen
  • Mehr Programmcode, um die Daten auszuwerten
Meine persönliche Einschätzung wäre, dass wir es erstmal bei der veränderten Speicherung boolscher Werte belassen, wie ich sie weiter oben im Thread schon als Patch angehängt habe.

Meinungen?

Gruß,
E.
 

Anhänge

  • BitFields4.zip
    7,2 KB · Aufrufe: 4

Silas

Geocacher
greiol schrieb:
Silas schrieb:
Eine Kleinigkeit noch zum Konvertieren der XMLs ins neue Format: Ich hielte es für ein besseres Design, wenn CW beim Start erkennt, dass die Dateien einem alten Format entsprechen und sie dann direkt alle konvertiert. Idealerweise natürlich mit Fortschrittsanzeige wie beim Speichern. Hierfür sollte es eine eigene Klasse geben, die beim Start immer aufgerufen wird und die Formate prüft und wenn erforderlich aktualisiert.
diese klasse müsste dann aber vermutlich durch alle dateien gehen, denn sonst gibt es lustig effekte beim verschieben/kopieren eines caches aus einem konvertierten in ein noch nicht konvertiertes profil. das dürfte aber den kompletten startvorteil den wir oben heraus gearbeitet haben locker wieder zu nichte machen. aus performance sicht wäre da ein externes tool das einmal in einem rutsch alles konvertiert vermutlich unschädlicher, aber es hat halt den usability nachteil.
Ja, da hast du recht. Das wäre dann eigentlich ein Job für eine Update-Routine, wenns denn eine gäbe ;)

Von einem Binärformat wäre ich deshalb nicht so angetan, da dann die Diffs bei Synchronisationskonflikten (z.B. mit Unison) eher schlecht human readable sind.
 

MiK

Geoguru
Engywuck schrieb:
Vorteile:
  • Datei wird kürzer
  • Werden weitere zahlartige Eigenschaften aufgenommen, können diese abgespeichert und ausgelesen werden, ohne die Dateistruktur ändern zu müssen.
Besonders letzteres wäre schon praktisch. Dann wäre ein Hemmnis bei Verbesserungen beseitigt. Dies entspricht ja auch Deinem ursprünglichen Anliegen.
Engywuck schrieb:
Nachteile:
  • Kein spürbarer Geschwindigkeitsvorteil beim Lesen
  • Datei wird weniger "human readable"
  • Externe Programme, die (z.B. per XSLT) auf die Datei zugreifen wollen, haben mehr Interpretationsaufwand, um an die gewünschten Informationen zu kommen
  • Mehr Programmcode, um die Daten auszuwerten
Das erste ist kein Nachteil und die anderen spielen meiner Ansicht nach keine besondere Rolle.
 
OP
Engywuck

Engywuck

Geowizard
Ich habe jetzt einmal das Feature mit Löser/Notizen-Info in der Liste commited. Wer es wissen will, kann sich somit über zwei neue Spalten informieren, welche Caches Notizen oder Löser-Infos haben.
Initial ist diese Information natürlich leer. Daher gibt es unter Verwaltung den Menüpunkt "Prüfe Notizen und Löser", mit dem diese Informationen einmal initial eingelesen werden.
Achtung: Natürlich sollte diese Information auch in der Index.xml abgespeichert werden. Aufgrund der aktuellen Diskussionen zum Format geschieht dies noch nicht!

(Frage an die Entwickler: Es sollte nichts dagegen sprechen, wenn ich die Infos in Position 13 und 14 des boolschen Bitfelds abspeichere? Und nein, die Versionsnummer wird nicht hochgezählt ;-) )

Gruß,
E.

P.S.: Wo ich grad dabei war: Getter und Setter für Notizen und Solver eingeführt.
 
OP
Engywuck

Engywuck

Geowizard
Da ich keine gegenteiligen Meinungen gehört habe: Die Eigenschaften hasNote() und hasSolver() werden nun als Bit Nr. 13 und 14 mit im Bitfeld abgespeichert (und auch wieder gelesen).

Gruß,
E.
 
OP
Engywuck

Engywuck

Geowizard
Ob ein Cache eine Note oder einen Solvereintrag hat, wird immer dann festgestellt, wenn der Solvereintrag (oder die Note) geschrieben wird.
Bei bereits existierenden Caches steht die Information defaultmäßig auf "hat nicht". Der Menüpunkt geht dann alle Caches durch (muss dazu die Dateien laden) und schaut, ob Notiz oder Solvereintrag vorhanden sind und setzt die Flag dementsprechend.
Also etwas, was man nur einmal braucht, um sein Profil zu aktualisieren.

Gruß,
E.
 

greiol

Geoguru
Engywuck schrieb:
Ob ein Cache eine Note oder einen Solvereintrag hat, wird immer dann festgestellt, wenn der Solvereintrag (oder die Note) geschrieben wird.
ich gebe zu die frage war reine faulheit. inzwischen habe ich den source gelesen ;)
 
OP
Engywuck

Engywuck

Geowizard
Das habe ich auch vermutet (auch aufgrund Deiner PN), habe da die Antwort ja dennoch für andere interessant sein mag, habe ich sie mir nicht verkneifen wollen ;-)

Gruß,
E.
 

t31

Geowizard
Ich habe jetzt mal die 1846 getestet, das Solver-Flag wird bei mir dargestellt, nicht aber das Notiz-Flag, "Prüfe Notizen und Löser" habe ich bereits bemüht ebenso habe ich mal eine neue Notiz erstellt und abermals "prüfen lassen", die Spalte N bleibt leer.
 
OP
Engywuck

Engywuck

Geowizard
Hast Du die neuen Icons note_exists.png und solver_exists.png (oder so) im ressourcenverzeichnis?

Gruß,
E.
 

t31

Geowizard
Nein, habe ich nicht.
Ich nehme mal an, das mit Recourcenverzeichnis das Programmverzeichnis gemeint ist.

Ich habe derweil mal mit dem Filemon geschaut ob überhaupt solche Bild-Dateien angefragt werden werden. Ergebnis: nix.
 
OP
Engywuck

Engywuck

Geowizard
Äh, sorry. Die Bilder werden ja in die Programmdatei reinkompiliert.
Muss ich nachher mal gucken, ob das evtl. nicht passiert.

Gruß,
E.
 
OP
Engywuck

Engywuck

Geowizard
So hatte ich das eigentlich auch in Erinnerung...

Tritt Dein Problem mit der PC- oder der PDA-Version oder beiden auf?

Gruß,
E.
 

t31

Geowizard
@Engywuck

derzeit die PC-Version unter WinXPSP3

Die PDA-Version werde ich mal testen.
 

t31

Geowizard
so hat etwas gedauert: also auf den PDA geht ebenfalls nur das Solver-Flag, das Notiz-Flag wird nicht dargestellt.

Zuvor mußte ich noch die Felder in der Liste aufnehmen wie bei der PC-Version auch. Auf dem PC dauerte es eine ganze Weile bis "Anwenden" übernommen wurde. Beim PDA passierte nichts und dann kam eine Fehlermeldung im Sinne von "Out of Bounds Array" oder so ähnlich "Anwendung beenden ja/nein", nach dem Neustart von CW war die Einstellung aber übernommen.
 
OP
Engywuck

Engywuck

Geowizard
Seltsam. Aber irgendwie scheinst Du der Einzige mit dem Problem zu sein... Ich kanns mir auch nicht recht erklären, bei mir klappt das nämlich problemlos.

Gruß,
E.
 

t31

Geowizard
hmm ...

ich hatte zuvor
CacheWolf version: 1.0.1622 Release
CacheWolf version: 1.0.1727 Release

davon habe ich die Profile kopiert

dann noch die 1846 heruntergeladen:
CacheWolf version: 1.1.1846 InDevelopmentNewest
http://pub.naturalnet.de/~nik/CacheWolf-BE/r1846/datfiles.zip
http://pub.naturalnet.de/~nik/CacheWolf-BE/r1846/x86-Win32-StaticLinked/CacheWolf.exe
http://pub.naturalnet.de/~nik/CacheWolf-BE/r1846/PocketPC2003/CacheWolf.exe
zusätzlich noch die ewe.dll auf dem PDA

Ich habe jetzt auch mal ein nigelnagelneues Profil angelegt, es bleibt dabei: kein Icon bei der Notiz in der Liste
 
Oben