Développement

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 , par une poignée de gars avec plus de temps libre et de bienveillance que de réelles 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.