SimuLook · Notizen von der Kamera

Lichter und Schatten bewegen sich in halben Stufen, und wir haben sie weggerundet

Stell die Lichter an einer aktuellen Fujifilm ein, und das Rad geht nicht −1, 0, +1. Es geht −1, −0,5, 0, +0,5, +1. Bei den Schatten genauso. Diese beiden Regler bewegen sich als einzige unter den Tonwertreglern in halben Stufen.

Unsere App speicherte sie als ganze Zahlen. Und alles, was danach kam, ebenfalls.

Was das tatsächlich gekostet hat

Drei der sieben Speicherplätze der Kamera, gegen die wir kalibrieren, stehen auf −0,5. Liest du einen dieser Plätze in die App, wurde der Wert schon beim Hereinkommen gerundet — bevor er gesichert, bevor er veröffentlicht, bevor er zurückgeschrieben wurde.

Die Folgen stapeln sich schlimmer, als es zuerst klingt:

  • Ein Rezept, das du von deiner Kamera gelesen hast, war nicht das Rezept, das in deiner Kamera stand. Es lag eine halbe Stufe daneben.
  • Veröffentlichst du es, bekam jeder, der es sicherte, die gerundete Fassung.
  • Schreibst du es zurück in einen Speicherplatz, hielt die Kamera anschließend einen Wert, den sie nie zuvor gehalten hatte.
  • Gleichst du es mit dem Foto ab, mit dem es aufgenommen wurde, meldete die App eine exakte Übereinstimmung — weil beide Seiten in die Übereinstimmung hineingerundet worden waren.

Das Letzte ist das Schlimmste. Der ganze Sinn, ein Foto gegen die eigene Bibliothek abzugleichen, ist, den Unterschied zu benennen. Runden macht aus einem echten Unterschied eine falsche Bestätigung.

Der Kommentar stand schon da

Die Rundung war kein Versehen, das niemand bemerkt hatte. Direkt darüber stand ein Kommentar, der festhielt, dass das Modell den Tonwert als ganze Zahl speichert, dass aktuelle Gehäuse halbe Stufen anbieten und dass dies eine Grenze der App war, nicht der Kamera.

Jemand hat das korrekt aufgeschrieben und ist weitergegangen. Es blieb monatelang wahr.

Wir erwähnen es, weil die Lektion nicht „prüf deine Typen“ lautet. Sie lautet: Eine bekannte, in einem Kommentar festgehaltene Einschränkung ist keine behobene Einschränkung, und eine Codebasis trägt eine zutreffende Beschreibung ihres eigenen Fehlers bereitwillig so lange mit, wie man sie lässt.

Was die Reparatur heikel machte

Die naheliegende Reparatur ist, das Feld auf eine Dezimalzahl umzustellen und −0,5 an den Server zu schreiben. Das hätte die App für alle kaputt gemacht, die nicht aktualisiert hatten.

Die ausgelieferten Versionen dekodieren dieses Feld als ganze Zahl. Bekommen sie einen Bruch, verschlechtern sie sich nicht — sie brechen ab. Und weil eine Seite des Community-Feeds als eine einzige Liste dekodiert wird, hätte ein einziges Rezept mit halber Stufe „Entdecken“ für jeden geleert, der noch auf dem älteren Stand ist. Ein Rezept, alle Feeds.

Also reist der Wert zweimal. Das alte Feld trägt weiterhin unverändert die gerundete Zahl, die diese Clients ohnehin lesen. Ein zweites Feld trägt den exakten Wert in der Einheit der Kamera — das Gehäuse speichert Tonwerte in Zehnteln, −0,5 ist also −5, eine ganze Zahl, und damit stellt sich die Frage gar nicht erst, wie eine Dezimalzahl einen Hin- und Rückweg übersteht.

Zwei Tests halten dieses Versprechen, kein Kommentar: Der eine dekodiert das, was die aktuelle App schreibt, in eine Struktur nach dem alten Vertrag und prüft, dass dort weiterhin eine ganze Zahl steht; der andere schickt jedes Feld einmal hin und zurück, damit eine im handgeschriebenen Encoder vergessene Eigenschaft die Testsuite scheitern lässt, statt still eine deiner Einstellungen zu verlieren.

Alles danach musste nachziehen

Ein Wert bleibt nur erhalten, wenn ihn auf dem Weg nichts erneut rundet.

Beide Editoren gehen jetzt in halben Stufen. Ein Editor mit ganzen Stufen hätte das Rezept in dem Moment neu gerundet, in dem sein Besitzer es öffnet — derselbe Verlust, eine Grenze weiter. Der Schreibweg zur Kamera sendet die exakten Zehntel, ein Speicherplatz, den du vom selben Gehäuse gelesen hast, wird beim Zurückschreiben also so wiederhergestellt, wie er war. Die Rücklese-Prüfung behält ihre Toleranz für Fließkomma-Rauschen, ohne eine echte halbe Stufe zu verzeihen. Und der Foto-Abgleich meldet −0,5 gegen 0 als Unterschied und benennt ihn.

Warum wir das aufschreiben

Weil das Versprechen der App ist, dir die Wahrheit über deine Einstellungen zu sagen — und monatelang sagte sie dir still etwas, das eine halbe Stufe daneben lag.

Die Reparatur ist drin. Die sechs von uns veröffentlichten Rezepte wurden auf ihre exakten Werte korrigiert. Aber eine App, die behauptet, genau zu sein, muss sagen können, wann sie es nicht war — sonst ist die Behauptung nur Marketing.


Geschrieben während der Arbeit an SimuLook, einer App zum Lesen und Schreiben von Fujifilm-Filmsimulations-Rezepten. Unterstützte Kameras ansehen · Weitere Notizen lesen