Entwicklung

Änderungen bei der Distribution der Ansel-Pakete

Entwicklung

Target Clones

Das native Kompilieren der Software auf dem Rechner verbesserte die Laufzeiten auf der CPU früher um etwa 30 % gegenüber vorgefertigten Paketen. Der Grund ist, dass der Compiler spezifische Optimierungen für die Zielhardware vornimmt, auf der er kompiliert wird, während vorgefertigte Pakete generisch bleiben und um der breiten Unterstützung willen konservativere Optimierungen auslösen müssen. Beachten Sie, dass OpenCL-Kernel ohnehin für Ihre bestimmte GPU über Ihren OpenCL-Treiber kompiliert werden, sodass die Sache dort anders liegt.

Neugestaltung des Leuchttisches und des Mipmap-Caches

Entwicklung Redesign Performance

Zwischen Januar 2022 und März 2026 hat Ansel 297 Non-Merge-Commits eingebracht, die das Leuchttisch-Raster, seine Vorschaubilder sowie deren Rendering-Pipeline und Caching betreffen. Ich habe versucht, so lange wie möglich mit dem schludrigen Leuchttisch-Code von Darktable auszukommen, nur entfettet, aber leider war das reine technische Schulden und es war quälend langsam.

Tatsächlich „bewältigt" Darktable die Miserabilität seines Leuchttisches, indem es dessen Größe reduziert: Die linke und rechte Seitenleiste beanspruchen viel Anzeigefläche, wodurch dem Leuchttisch noch weniger Fläche zum Neuzeichnen bleibt. Da Ansel die rechte Seitenleiste entfernt und ihren Inhalt mit der linken und dem globalen Menü zusammengeführt hat, gab es mehr Fläche zu zeichnen, mehr CPU-Arbeit zu leisten, und das furchtbare Design des Leuchttisches wurde umso schädlicher.

Willkommen, Entwicklerdokumentation!

Entwicklung

Im Dezember 2019 habe ich darum gebeten, dass jemand die Erstellung von AppImages-Paketen für Darktable übernimmt. Der offensichtliche Vorteil wäre gewesen, frühe Tests zu ermöglichen, vor der Veröffentlichung, von Menschen, die den Quellcode nicht selbst erstellen können, um hoffentlich frühes Feedback zu liefern und beim Debuggen vor der Veröffentlichung zu helfen. Dies war nie eine Priorität, was bedeutet, dass es in Ordnung war, einen Vorveröffentlichungs- und eine Nachveröffentlichungsspur zu haben, um Bugs zu beheben.

Den Cache der Pipeline und 10 Jahre alte Bugs beheben

Entwicklung

Zusammenfassung der vorherigen Episoden

  1. Zwischen 2020 und 2022 durchlief Darktable ein Massenvernichtungsunternehmen, betrieben von einer Handvoll Typen mit mehr Freizeit und Wohlwollen als tatsächlichem Können,
  2. 2022 begann ich, eine störende Verzögerung zu bemerken  zwischen GUI-Interaktionen mit Schieberegler-Steuerungen und der Rückmeldung/Aktualisierung besagter Regler. Mangels einer Rückmeldung, dass die Wertänderung erfasst wurde, konnten die Benutzer sie erneut ändern, wodurch zusätzliche Pipeline-Neuberechnungen ausgelöst und ihr Computer faktisch eingefroren wurde, weil die dumme GUI nie sagte „verstanden, warte jetzt einen Moment".
  3. Ich entdeckte, dass Aufträge zur Pipeline-Neuberechnung zweimal pro Klick ausgelöst wurden (einmal beim Ereignis „Taste gedrückt", einmal beim Ereignis „Taste losgelassen") und nochmals bei jeder Mausbewegung, aber auch, dass die GUI-Zustände scheinbar erst nach der Pipe-Neuberechnung aktualisiert wurden.
  4. Ich habe das behoben, indem ich die benutzerdefinierten GUI-Steuerelemente (Bauhaus-Bibliothek) nahezu neu geschrieben habe. Ich dachte, dass das Verhindern rücksichtsloser Neuberechnungsaufträge die Verzögerung beheben würde: Tat es nicht. Dann entdeckte ich, dass das Anfordern einer neuen Pipeline-Neuberechnung, bevor die vorherige beendet war, auf das Ende der vorherigen wartete, trotz eines vor vielen Jahren implementierten Abschaltmechanismus, der eigentlich hätte funktionieren sollen.
  5. Ich habe das behoben, indem ich einen Kill-Switch-Mechanismus für Pipelines implementiert habe, gemäß Kommentaren im Code aus den 2010er Jahren und internen Hilfsmitteln, die möglicherweise nie funktioniert haben. Das funktionierte nicht immer, weil der Kill-Befehl oft mit merklicher Verzögerung eintraf. Auch hier wurde die GUI-Verzögerung nicht behoben.

Neuschreiben des Import-Werkzeugs

Entwicklung Redesign

Ansel erbt von Darktable seine Datenbankgrundlage: Die nicht-destruktiven Bearbeitungshistorien werden pro Bild in einer SQLite-Datenbank gespeichert, zusammen mit Metadaten und anderen benutzerdefinierten Daten. Das Bewusstmachen der Datenbank für neue Bilder erfolgt durch das „Importieren“ von Bildern von einer Festplatte oder einer Speicherkarte. Hier kommt das Importwerkzeug ins Spiel.

Leider ist der Darktable-Importer eine weitere Sache, die um das Jahr 2020 verstümmelt wurde und sich in etwas äußerst Verstörendes verwandelte, da er ein Datei-Browser ist, der keinem zuvor bekannten Datei-Browser ähnelt und grundlegende Funktionen (wie Strg+F oder EXIF-Vorschau) vermisst, während er dennoch mit nutzlosen Funktionen überladen ist (siehe unten). Hier verlieren wir viele potenzielle zukünftige Benutzer, und es ist nur der erste Schritt des Workflows. Was für ein großartiges Beispiel dafür, was eine „Workflow-App“ leisten kann!

Implementierung eines Abbruchschalters in der Pipeline

Entwicklung

Ich habe lange gedacht, dass es einen Abbruchmechanismus in der Pixel-Pipeline gibt. Der Anwendungsfall ist folgender:

  1. Sie ändern einen Modulparameter,
  2. die Vorschaubilder (die zentrale Dunkelraumvorschau und das Thumbnail im linken Bereich, das auch für Histogramm und Farbwähler verwendet wird) rechnen ihre Pipeline neu, um diese Änderung zu berücksichtigen,
  3. eines der Vorschaubilder endet mit dem Rendern vor dem anderen, und das Ergebnis ist offensichtlich nicht das, was Sie wollten,
  4. Sie ändern erneut den Modulparameter, ohne darauf zu warten, dass die Neuberechnung abgeschlossen ist.

In diesem Fall möchten Sie alle aktiven Pipelines beenden, weil deren Ausgabe nicht verwendet wird, und alles sofort mit neuen Parametern neu berechnen. Außer Darktable tut das nicht, es lässt die Pipeline beenden, bevor sie neu startet, und angesichts der Kommentare im Quellcode scheint es sich um eine relativ neue Regression zu handeln und nicht um das ursprünglich beabsichtigte Verhalten.

Das Ent-Darktable-ing der GUI-Kontrollen

Entwicklung

Darktable hat seine eigenen GUI-Widgets-Bibliothek für Schieberegler und Kombinationsboxen (auch Drop-Down-Menüs oder Auswahllisten genannt), genannt Bauhaus (im Quellcode unter src/bauhaus/bauhaus.c). Während sie Gtk als Backend verwenden, sind Bauhaus benutzerdefinierte Objekte. Und wie vieles bei Darktable, gleich benutzerdefiniert verfault.

Im Jahr 2022 bemerkte ‍ich Parasiten-Neuzeichnungen und Lags  bei deren Nutzung, was zu einem frustrierenden Benutzererlebnis führte: Das Widget-Neuzeichnen schien darauf zu warten, dass Pipeline-Berechnungen abgeschlossen waren, was bedeutete, dass Benutzer nicht wirklich sicher waren, ob ihre Wertänderung registriert wurde, was sie dazu bringen könnte, es erneut zu versuchen, einen weiteren Zyklus teurer Neuberechnungen zu starten, und ihren Computer tatsächlich für mehrere sehr frustrierende Minuten nutzloser Zwischenpipeline-Berechnungen einfror.

Neue Build-Optionen für Linux

Entwicklung

Ich habe zufällig entdeckt, dass das Linux-Build-Skript eine „Paket“-Build verwendet, was bedeutet, dass die CPU-Optimierungen auf allgemeine beschränkt sind, um portable Binärdateien zu produzieren, die auf jeder x86-64-Plattform installiert werden können. Mit “Verwendung” meine ich, dass die Paket-Build-Option nicht explizit deaktiviert war, sodass sie standardmäßig aktiviert war.

Wie dem auch sei, dies ist nun standardmäßig deaktiviert, da die tatsächlichen Pakete (.exe und .appimage) nicht durch dieses Skript erstellt werden, das in erster Linie für Endbenutzer gedacht ist. Um das vorherige Verhalten wiederherzustellen, müssen Sie Folgendes ausführen:

Entwicklungstagebuch #2: Vorstellung von Chantal

Entwicklung

2022 war in Bezug auf Junk-Emails und Lärm so schlecht, dass ich Virtual Secretary  gestartet habe, ein Python-Framework, um intelligente E-Mail-Filter zu schreiben, indem Informationen aus mehreren Quellen kombiniert werden, um herauszufinden, was eingehende E-Mails sind und ob sie wichtig/dringend sind oder nicht. Wenn ich von Junk-Mails spreche, sind das auch Github-Benachrichtigungen, Pings auf pixls.us (Gott sei Dank habe ich mein Konto in diesem dummen Forum geschlossen), YouTube und direkte E-Mails von Menschen, die hoffen, privat Hilfe zu bekommen.

Dev-Tagebuch

Entwicklung

Es sind ungefähr 3 Monate her, dass ich “R&Darktable” (was niemand richtig zu verstehen schien) in “Ansel” umbenannt habe, dann den Domainnamen gekauft und die Website von Grund auf mit Hugo erstellt habe (ich hatte zuvor nie in Golang programmiert, aber es ist hauptsächlich Template-Code).

Dann habe ich insgesamt 70 Stunden darauf verwendet, die nächtlichen Paketbuilds für Windows und Linux für kontinuierliche Lieferung vorzunehmen, etwas, was Darktable nie richtig gemacht hat (“Sie können selbst bauen, es ist nicht schwer”), nur um zu sehen, wie der Bug-Tracker nach Veröffentlichung explodiert (nichts besseres als den Vorveröffentlichungs-Spurt mit einem Nachveröffentlichungs-Spurt zu verkürzen, um Ihre Lebenserwartung zu reduzieren).

Search

You can also ask Chantal, the AI search engine.