Développement

Changements dans la distribution des paquets Ansel

Développement

Target clones

Compiler le logiciel nativement sur l’ordinateur permettait d’améliorer les temps d’exécution sur CPU d’environ 30 %, par rapport aux paquets pré-compilés. La raison en est que le compilateur effectue des optimisations spécifiques pour le matériel cible sur lequel il compile, tandis que les paquets pré-compilés doivent rester génériques et déclenchent des optimisations plus conservatrices dans un souci de large compatibilité. Notez que les noyaux OpenCL sont, de toute façon, compilés pour votre GPU particulier à l’aide de votre pilote OpenCL, l’histoire est donc différente de ce côté-là.

Les contrôles de couleur enfin corrects

Développement Conception

Introduction

Outils vs. machines, artisanat vs. industrie

Dans son livre La Technique ou l’enjeu du siècle (1954), Jacques Ellul présente ainsi la différence entre l’avant et l’après révolution industrielle :

L’ère préindustrielle est le règne de l’outil et de l’artisanat. La propriété première des outils est d’être génériques, polyvalents et adaptables. Il revient à l’artisan de développer ses compétences pour faire suivre son intention aux outils, de sorte que la main compense les limitations de l’instrument. Ce concept est encore bien connu des musiciens aujourd’hui : il faut s’entraîner, apprendre, essayer, échouer, réessayer… il n’y a pas de raccourcis. Ellul insiste sur l’idée de parcimonie qui accompagne les outils : les ressources sont limitées, si bien que votre outillage est à peu près défini par ce que vous pouvez vous offrir, transporter, maîtriser et fabriquer localement. Les tendances changent lentement et sont locales, parce qu’elles utilisent des ressources locales et s’adaptent à des besoins locaux, et les outils suivent le même schéma. Les outils sont des héritages transmis du maître à l’apprenti, du parent à l’enfant. Ils ne deviennent ni incompatibles ni obsolètes.

Refonte de la table lumineuse et du cache mipmap

Développement Refonte Performances

Entre janvier 2022 et mars 2026, Ansel a intégré 297 commits (hors fusions) concernant la grille de la table lumineuse, ses vignettes, ainsi que leur pipeline de rendu et leur mise en cache. J’ai essayé de me contenter du code brouillon de la table lumineuse de Darktable, seulement dégraissé, aussi longtemps que j’ai pu mais malheureusement, ce n’était que de la dette technique pure et c’était atrocement lent.

En effet, Darktable « gère » la médiocrité de sa table lumineuse en réduisant sa taille : les panneaux latéraux gauche et droit occupent une grande surface d’affichage, ce qui laisse encore moins de place à repeindre pour la table lumineuse. Comme Ansel a supprimé le panneau latéral droit, fusionnant son contenu avec celui de gauche et le menu global, il y avait plus de surface à peindre, plus de travail CPU à effectuer, et la conception désastreuse de la table lumineuse en devenait d’autant plus nuisible.

Refonte complète du pipeline

Développement

Depuis que j’ai commencé à utiliser Darktable, vers 2012, j’ai toujours été surpris par la très faible quantité de RAM qu’il utilisait. Les gens pensent qu’il est bon qu’une application utilise la mémoire avec parcimonie, et c’est certainement vrai lorsqu’on parle de votre environnement de bureau. Mais pour un logiciel de production qui fait du rendu pixel lourd sur des images de 12 à 54 mégapixels, cela signifie que les mêmes calculs coûteux sont refaits encore et encore au lieu d’être enregistrés pour être réutilisés plus tard. C’est précisément à cela que sert un cache : éviter des calculs coûteux. Et il devrait utiliser toute la RAM disponible pour cela, parce que calculer gaspille de l’énergie, ce qui a un impact concret si vous travaillez sur batterie. En plus, vous avez payé cette RAM et l’utiliser ne vide pas votre batterie. Le CPU et le GPU, eux…

La fusion d'historique rendue robuste et prévisible

Développement

Mémoires d’un type qui a passé beaucoup trop de temps à nettoyer la merde des autres et à payer pour leurs mauvaises décisions, épisode #trop.

Le copier-coller d’historique et les styles sont des fonctionnalités centrales d’Ansel, et celles qui lui font mériter, ou non, son titre d’« application de workflow ». Mais c’est aussi l’une des choses les plus difficiles à bien faire en interne. Les utilisateurs voient une liste de retouches, mais sous le capot ces retouches dépendent de l’ordre du pipeline, des instances de modules et des masques. Si deux images ont des topologies de pipeline différentes, copier naïvement les retouches peut produire des incohérences.

Bienvenue à la documentation développeurs !

Développement

En décembre 2019, j’ai demandé à quelqu’un de s’occuper de fournir des packages AppImages  pour Darktable. Le bénéfice évident aurait été de permettre des tests anticipés, avant la sortie, de la part de personnes qui ne peuvent pas construire le code source elles-mêmes, afin de fournir espérons-le des retours précoces et aider à déboguer avant la publication. Cela n’a jamais été une priorité, ce qui signifie qu’il était acceptable d’avoir une ruée avant et après la sortie pour corriger les bugs.

Correction du cache de pipeline et des bugs vieux de 10 ans

Développement

Récapitulatif des épisodes précédents

  1. Entre 2020 et 2022, Darktable a subi une entreprise de destruction massive, menée par une poignée de types ayant plus de temps libre et de bonne volonté que de vraies compétences,
  2. En 2022, j’ai commencé à remarquer un décalage ennuyeux  entre les interactions GUI avec les curseurs et feedback/ mise à jour de ces curseurs. En l’absence de feedback indiquant que le changement de valeur était enregistré, les utilisateurs pouvaient le changer à nouveau, lançant ainsi des recomputes supplémentaires de pipeline et gelant effectivement leur ordinateur car le GUI stupide n’a jamais dit “je t’ai eu, attends un peu maintenant”.
  3. J’ai découvert que les ordres de recompte de pipelines étaient émis deux fois par clic (une fois sur les événements “bouton enfoncé”, une fois sur les événements “bouton relâché”), et encore une fois pour chaque mouvement de souris, mais aussi que les états GUI étaient mis à jour apparemment après le recomputée de pipeline.
  4. J’ai corrigé cela en réécrivant presque complètement les contrôles GUI personnalisés (lib Bauhaus). Je pensais que la prévention des ordres de recomputation inconsidérés allait résoudre le décalage : ce n’était pas le cas. Ensuite, j’ai découvert que la demande d’une nouvelle recompte de pipeline avant la fin de la précédente attendait que la précédente se termine, malgré un mécanisme d’arrêt mis en œuvre il y a de nombreuses années qui aurait dû fonctionner.
  5. J’ai corrigé cela en mettant en œuvre un mécanisme de bouton d’arrêt sur les pipelines, suivant les commentaires dans le code datant des années 2010 et des fonctions internes qui n’ont peut-être jamais fonctionné. Cela ne fonctionnait pas toujours car l’ordre d’arrêt venait souvent avec un délai notable. Encore une fois, le décalage GUI n’était pas corrigé.

Réécriture de l'outil d'importation

Développement Refonte

Ansel hérite de Darktable son infrastructure de base de données : les historiques de modifications non destructifs sont sauvegardés image par image dans une base de données SQLite, avec les métadonnées et autres données définies par l’utilisateur. Pour intégrer de nouvelles images à la base de données, il faut « importer » ces images depuis un disque ou une carte mémoire. C’est à cela que sert l’outil d’importation.

Malheureusement, l’importateur de Darktable est une autre fonctionnalité qui a été massacrée autour de 2020 pour devenir quelque chose de profondément déroutant : un navigateur de fichiers ne ressemblant à aucun navigateur connu jusqu’alors, qui parvient à manquer de fonctions de base (comme Ctrl+F ou un aperçu EXIF) tout en étant encombré d’options inutiles (voir ci-dessous). C’est ainsi que nous perdons beaucoup d’utilisateurs potentiels dès l’étape zéro du flux de travail. Quel bel exemple de ce qu’une « application de workflow » peut faire !

Implémentation du bouton d'arrêt sur le pipeline

Développement

J’ai pensé, pendant très longtemps, qu’il y avait un mécanisme de bouton d’arrêt sur le pipeline de pixels. Le cas d’utilisation est le suivant :

  1. vous modifiez un paramètre de module,
  2. les aperçus (celui de la chambre noire central et la vignette dans le panneau de gauche, également utilisé pour l’histogramme et les sélecteurs de couleurs) reconstruisent leur pipeline pour tenir compte de ce changement,
  3. l’un des aperçus finit de se rendre avant l’autre, et le résultat n’est évidemment pas celui que vous vouliez,
  4. vous modifiez à nouveau le paramètre du module, sans attendre la fin de la recomputation.

Dans ce cas, vous souhaitez annuler tous les pipelines actifs car leur résultat ne sera pas utilisé, et commencer immédiatement à tout recalculer avec les nouveaux paramètres. Sauf que Darktable ne fait pas ça, il laisse le pipeline se terminer avant de le redémarrer, et en regardant les commentaires dans le code source, il semble que ce soit une régression assez récente et non le comportement initialement prévu.

Dé-darktable-isation des contrôles GUI

Développement

Darktable a sa propre bibliothèque d’objets GUI, pour les curseurs et les comboboxes (alias menus déroulants ou boîtes de sélection), appelée Bauhaus (dans le code source, c’est dans src/bauhaus/bauhaus.c). Bien qu’ils utilisent Gtk en tant que moteur arrière, les objets Bauhaus sont des objets personnalisés. Et comme beaucoup de choses dans Darktable, personnaliser signifie pourri.

En 2022, ‍j’ai remarqué des redessinages parasites et des lenteurs , lors de leur utilisation, conduisant à une expérience utilisateur frustrante : le redessinage des widgets semblait attendre la conclusion des recalculs de la chaîne, ce qui signifiait que les utilisateurs n’étaient pas vraiment sûrs que leur changement de valeur était pris en compte, ce qui pouvait les amener à réessayer, déclenchant un autre cycle de recalcul coûteux, et gelant effectivement leur ordinateur pendant plusieurs minutes frustrantes d’intermédiaires coûteux recalculs de la chaîne.

Nouvelles options de build pour Linux

Développement

J’ai découvert par accident que le script de build Linux utilisait un package build, ce qui signifiait que les optimisations CPU étaient limitées à des optimisations génériques afin de produire des binaires portables pouvant être installés sur n’importe quelle plateforme x86-64. Par ‘utiliser’, je veux dire que le build package n’était pas explicitement désactivé, donc il était activé par défaut.

De toute façon, cela est maintenant désactivé par défaut, puisque les packages réels (.exe et .appimage) ne sont pas construits via ce script, qui est principalement destiné à aider les utilisateurs finaux. Pour revenir à l’ancien comportement, vous devrez exécuter :

Journal de développement #2 : présentation de Chantal

Développement

2022 a été si mauvaise en termes de courriels indésirables et de bruit que j’ai commencé la Secrétaire Virtuelle , un cadre Python pour écrire des filtres de courriels intelligents en croisant des informations provenant de plusieurs sources pour deviner ce que sont les courriels entrants et s’ils sont importants/urgents ou non. Quand je parle de courriels indésirables, il s’agit aussi des notifications Github, des pings sur pixls.us (heureusement, j’ai fermé mon compte sur ce forum stupide), YouTube et des courriels directs de personnes espérant obtenir de l’aide en privé.

Journal de développement

Développement

Cela fait environ 3 mois que j’ai rebrandé “R&Ddarktable” (ce que personne ne semble comprendre), en “Ansel”, puis acheté le nom de domaine et créé le site web de zéro avec Hugo (je n’avais jamais programmé en Golang auparavant, mais il s’agit principalement de code de modèle).

Il me reste alors un total de 70 heures pour faire fonctionner les builds packaуs nocturnes pour Windows et Linux pour une livraison continue, ce que Darktоrque n’a jamais bien fais (« tu peux compléter toi-même, ce n’est pas difficile »), seulement pour voir le traqueur de bugs exploser après la sortie (rien de mieux que de chaîner le sprint pré-sortie avec un sprint post-sortie pour réduire votre espérance de vie.)

Search

You can also ask Chantal, the AI search engine.