Frage eines NB-Fans:The Hawks (Nik) schrieb:Ich hab das auf Bitte von MiK auf der NB-Website mal angemerkt, damit sich später keiner beschwert wenn es Datenverlust beim Update gibt![]()
Lieben Dank MiK, nur keinen Stress! Macht es wie immer, Nägel mit Köpfen. Gutding braucht Weile.MiK schrieb:Ich hoffe, dass diese letzten Fragen innerhalb einer Woche geklärt sind. Danach kann man wohl sicher updaten (aber nicht mehr downgraden). Ich werde mich um eine entsprechende "Entwarnung" kümmern, wenn ich der Meinung bin, dass wir soweit sind.
Das klingt freundlicher, als es ist: Es gibt zwar verschieden benannte Konstanten für GC und OC, der Wert ist aber der gleiche. Ich glaube aber auch nicht, das das stört. Wenn ich wissen will, ob ein Tradi ein GC- oder ein OC-Tradi ist, dann kann ich den Wegpunkt analysieren. In der Regel interessiert es mich aber nur, ob es ein Tradi ist oder was anderes - eine Unterscheidung zwischen OC- oder GC-Tradi brauchts da nicht. Oder übersehe ich da was?MiK schrieb:Dabei wurde bei Earth, Mega-Event und Wherigo einfach der GC-Wert übernommen. Das ist ein Fehler.
Klingt unproblematisch und vernünftig.MiK schrieb:2. An allen stellen im Code sollten diese Konstanten verwendet werden anstatt die Zahlen direkt zu schreiben.
Weil man dann einen Wertebereich von 256 hat, und nicht nur 128. Kann man Chars auch als vorzeichenlose Bytes betrachten? Dann wäre das natürlich eine Alternative gewesen. Allerdings halte ich die Subtraktion auch nicht für problematisch und nicht für einen Grund, die Datenstruktur diesbezüglich noch zu ändern. Schließlich würde das die bereits umgestellten Profile zerhauen.MiK schrieb:3. Wozu dieses Subtraction um 128? Warum benutzen wir nicht direkt einen vorzeichenlosen Datentyp (char?)?
Die interne Umstellung, dass CacheTypen jetzt alle als byte (oder char) dargestellt werden, hab ich erstmal gelassen, um die Baustelle nicht zu groß werden zu lassen. Das kann man ja noch nachziehen, wenn man will, allerdings halte ich das nicht für äußerst dringlich.MiK schrieb:Bei Umsetzung dieser Punkte wären intern auch (ausgenommen Im/Export) keine Konvertierungen mehr nötig und es könnte immer mit dem gleichen Datentyp gearbeitet werden.
Ausprobiert mit "Other" und "Not chosen" - klappt. An dieser Stelle sehe ich keine Probleme.greiol schrieb:Micro GC1KGFM
Small GC1HZYR
Regular GC10CXG
Large GCZBT0
Not chosen GC16YKK
Other GC1Q88V
Virtual GCK02P
das problem ist nicht der 128er trick, sondern die tatsache, dass er direkt mit zwei ausnahmen versehen wurde. datenverlust kann bei nutzung eines NB eintreten. deshalb würde ich es mittelfristig auch begrüssen wenn wir wieder stärker vermitteln könnten was stabil ist und was nicht. sonst nehmen wir uns die möglichkeit in der entwicklung sachen auszuprobieren und das wäre mindestens genauso fatal.Engywuck schrieb:Weil man dann einen Wertebereich von 256 hat, und nicht nur 128. Kann man Chars auch als vorzeichenlose Bytes betrachten? Dann wäre das natürlich eine Alternative gewesen. Allerdings halte ich die Subtraktion auch nicht für problematisch und nicht für einen Grund, die Datenstruktur diesbezüglich noch zu ändern. Schließlich würde das die bereits umgestellten Profile zerhauen.MiK schrieb:3. Wozu dieses Subtraction um 128? Warum benutzen wir nicht direkt einen vorzeichenlosen Datentyp (char?)?
char kann (zumindest seit 1.4.2) unicode aufnehmen, dürfte also zumindest von den "klassischen" jvms als 16bit oder größer implementiert sein. es hindert uns aber niemand daran einfach festzulegen, dass ein tradi die -99 hat. es wird ohnehin nur an einer stelle umgerechnet und an allen anderen sollte die konstante auftauchen also stört das niemanden.MiK schrieb:3. Wozu dieses Subtraction um 128? Warum benutzen wir nicht direkt einen vorzeichenlosen Datentyp (char?)?
alle daten die mir wichtig sind habe ich noch in einer cw version vor 1787. um die aktuellen versionen zu testen kopiere ich mir das verzeichnis und arbeite mit der kopie. änderungen mache ich auf dem altbestand und kopiere ggf. erneut zum testen.Geo-Johnny schrieb:Frage eines NB-Fans:
Wird es auch eine entsprechende "Entwarnung" geben, oder zumindest eine kurze Erklärung was man unbedingt vermeiden sollte?
Ich verstehe das eher so: Man benutzt die GC/OC-Konstanten beim Import um den Typ zu erkennen und speichert dann intern immer mit der Kodierung nach CW-Konstanten.Engywuck schrieb:Das klingt freundlicher, als es ist: Es gibt zwar verschieden benannte Konstanten für GC und OC, der Wert ist aber der gleiche. Ich glaube aber auch nicht, das das stört. Wenn ich wissen will, ob ein Tradi ein GC- oder ein OC-Tradi ist, dann kann ich den Wegpunkt analysieren. In der Regel interessiert es mich aber nur, ob es ein Tradi ist oder was anderes - eine Unterscheidung zwischen OC- oder GC-Tradi brauchts da nicht. Oder übersehe ich da was?MiK schrieb:Dabei wurde bei Earth, Mega-Event und Wherigo einfach der GC-Wert übernommen. Das ist ein Fehler.
char ist 8 Bit unsigned und byte ist 8 Bit signed. Diese Verschiebung anstatt der Verwendung von char macht den Code wohl etwas weniger verständlich. Ich hatte es auch erst nicht verstanden (dachte die Werte wären alle zu größer 128 und müssten deswegen verschoben werden) und sie ist wohl auch zum Teil für die "Verwirrung" von Greiol verantwortlich.Engywuck schrieb:Weil man dann einen Wertebereich von 256 hat, und nicht nur 128. Kann man Chars auch als vorzeichenlose Bytes betrachten? Dann wäre das natürlich eine Alternative gewesen. Allerdings halte ich die Subtraktion auch nicht für problematisch und nicht für einen Grund, die Datenstruktur diesbezüglich noch zu ändern. Schließlich würde das die bereits umgestellten Profile zerhauen.MiK schrieb:3. Wozu dieses Subtraction um 128? Warum benutzen wir nicht direkt einen vorzeichenlosen Datentyp (char?)?
Gibt es denn keinen Datentyp für vorzeichenlose 8 Bit mehr?greiol schrieb:char kann (zumindest seit 1.4.2) unicode aufnehmen, dürfte also zumindest von den "klassischen" jvms als 16bit oder größer implementiert sein. es hindert uns aber niemand daran einfach festzulegen, dass ein tradi die -99 hat. es wird ohnehin nur an einer stelle umgerechnet und an allen anderen sollte die konstante auftauchen also stört das niemanden.MiK schrieb:3. Wozu dieses Subtraction um 128? Warum benutzen wir nicht direkt einen vorzeichenlosen Datentyp (char?)?
Hatte ich beim Lesen in der Java-Dokumentation auch nicht gefunden...MiK schrieb:Gibt es denn keinen Datentyp für vorzeichenlose 8 Bit mehr?
Hm. Wenn Du die Umrechnung sparen willst, wäre ich dafür, den internen Wert als int (oder char) abzulegen, und beim speichern/laden die byte-Umrechnung wie bislang zu machen.MiK schrieb:Also mein Vorschlag: Wir bleiben bei Byte, belegen aber das CW-Mapping neu. Und zwar so, dass sie bei den meisten Cachetypen der jetzigen toByte-Methode entspricht. Nur bei Earth, Mega und Wherigo vergeben wir neue fortlaufende Werte. So sparen wir uns Umrechnung und Sonderbahandlungen.
Der interne Wert muss ja nicht fortlaufend sein. Das wäre nur eine Frage der Ästhetik. Man kann ja durchaus die Werte nehmen, die bislang auch genommen werden, dann hätte man keine Probleme.MiK schrieb:Außerdem ist es für bereits konvertierte Daten kein kompletter Datenverlust, sondern nur einige wenige Caches verlieren ihren Typ, was leicht durch Aktualisieren dieser Caches behoben werden kann.
ich wäre für einen klaren sauberen schnitt. selbst wenn wir nur den positiven tyeil des byte nehmen haben wir erst mal 0 bis 127 was mehr als ausreichen dürfte um sogar die bisher nicht unterstützten eher seltenen typen aufzunehmen. mit dem negativen teil dazu können wir vermutlich noch drei andere cachplatformen unterstützen und haben dann immer noch luft nach oben. und sollte gar nichts mehr gehen, flicken wir den leuten halt einmalig ihren code zusammen, auch wenn ich der meinung bin, dass der NB nicht die daily stable ist.Engywuck schrieb:Der interne Wert muss ja nicht fortlaufend sein. Das wäre nur eine Frage der Ästhetik. Man kann ja durchaus die Werte nehmen, die bislang auch genommen werden, dann hätte man keine Probleme.MiK schrieb:Außerdem ist es für bereits konvertierte Daten kein kompletter Datenverlust, sondern nur einige wenige Caches verlieren ihren Typ, was leicht durch Aktualisieren dieser Caches behoben werden kann.
Genau diese Umrechnung hätte ich aber gerne komplett raus. Warum sollen wir während den Programmlaufs mit anderen Werten arbeiten als wir speichern?Engywuck schrieb:Hm. Wenn Du die Umrechnung sparen willst, wäre ich dafür, den internen Wert als int (oder char) abzulegen, und beim speichern/laden die byte-Umrechnung wie bislang zu machen.MiK schrieb:Also mein Vorschlag: Wir bleiben bei Byte, belegen aber das CW-Mapping neu. Und zwar so, dass sie bei den meisten Cachetypen der jetzigen toByte-Methode entspricht. Nur bei Earth, Mega und Wherigo vergeben wir neue fortlaufende Werte. So sparen wir uns Umrechnung und Sonderbahandlungen.
Wenn wir sowieso ummappen müssen, damit es in ein Byte passt, dann natürlich aus ästhetischen Gründen fortlaufend.Engywuck schrieb:Der interne Wert muss ja nicht fortlaufend sein. Das wäre nur eine Frage der Ästhetik. Man kann ja durchaus die Werte nehmen, die bislang auch genommen werden, dann hätte man keine Probleme.MiK schrieb:Außerdem ist es für bereits konvertierte Daten kein kompletter Datenverlust, sondern nur einige wenige Caches verlieren ihren Typ, was leicht durch Aktualisieren dieser Caches behoben werden kann.
Wenn man es geschickt macht, ist es ja auch kein Datenverlust. Nur die Cachetypen werden nicht mehr richtig erkannt. Je nachdem, ob wir die Verschiebung ins negative Beibehalten sind das nur wenige oder eben alle.greiol schrieb:ein datenverlust kann einsatz der NB version vorkommen. das sollte einfach jedem klar sein, der sie benutzt.
Weil ich es jetzt erstmal so implementiert hab. Als ich den Code als Patch gepostet hab, hat sich auch keiner die Mühe gemacht, sich das Zeug runterzuladen und anzugucken. Da finde ich es ehrlich gesagt etwas seltsam, wenn jetzt die Welle gemacht wird, weil man in der Datei lieber ne 0 als ne -128 abspeichert.MiK schrieb:Genau diese Umrechnung hätte ich aber gerne komplett raus. Warum sollen wir während den Programmlaufs mit anderen Werten arbeiten als wir speichern?
Wenn es denn überhaupt dreckig wäre... Aber so wie ich das sehe, geht es darum, ob in der Datei negative Zahlen stehen oder nicht und ob die interne Zahlenrepräsentation fortlaufend ist oder nicht. Alles Dinge, die mit Funktionalität nicht die Bohne zu tun haben.MiK schrieb:Ich verstehe, dass Du das Format nicht noch einmal ändern möchtest, aber ich denke es ist besser jetzt in den sauren Apfel zu beißen und es sauber zu machen.
der einwand ist berechtigt.Engywuck schrieb:Als ich den Code als Patch gepostet hab, hat sich auch keiner die Mühe gemacht, sich das Zeug runterzuladen und anzugucken.
nochmal: es geht nicht darum ob ein tradi -1, 0 oder 1 ist. das problem ist, dass die derzeitige implementierung eine regel mit zwei ausnahmen ist, statt einfach nur eine regel zu sein. die lösung hat einen hohen hack value, bietet aber auch potetntial für zukünftige probleme.Engywuck schrieb:Da finde ich es ehrlich gesagt etwas seltsam, wenn jetzt die Welle gemacht wird, weil man in der Datei lieber ne 0 als ne -128 abspeichert.
genau darum geht es nicht. von mir aus, kannst du die dinger auch nach belieben . , A J K oder \u0045 nennen und in einem char statt einem byte speichern, solange klar erkennbar ist, dass es eine blöde idee ist für den nächsten wegpunkt den identifier A zu vergeben weil er eben schon benutzt wird.Engywuck schrieb:Aber so wie ich das sehe, geht es darum, ob in der Datei negative Zahlen stehen oder nicht und ob die interne Zahlenrepräsentation fortlaufend ist oder nicht.
zu einem "es funktioniert heute", sollte im idealfall auch ein "es funktioniert morgen" und es "funktioniert wenn ein anderer dran arbeiten muss" dazu gehören.Engywuck schrieb:Alles Dinge, die mit Funktionalität nicht die Bohne zu tun haben.
es bestreitet niemand, dass das was du da geschrieben hast funktional ist. und die idee ist gut. wenn wir es jetzt noch schaffen sie idiotensicher zu machen (falls leute wie ich vorbei kommen), ist sie perfekt.Engywuck schrieb:Manchmal kann ich echt nur den Kopf schütteln..
D.h. Du willst es ersetzen durch eine Variante ohne Regel und nur mit ausnahmen? Wenn ich sowas mache wiegreiol schrieb:nochmal: es geht nicht darum ob ein tradi -1, 0 oder 1 ist. das problem ist, dass die derzeitige implementierung eine regel mit zwei ausnahmen ist, statt einfach nur eine regel zu sein.
switch (type) {
case EX_TRADI: result=CW_TRADI; break;
case EX_MULTI: result=CW_MULTI; break;
...
end;