Desenvolvimento

Mudanças na distribuição de pacotes do Ansel

Desenvolvimento

Target clones

Compilar o software nativamente no computador costumava melhorar o desempenho na CPU em cerca de 30 %, em comparação com pacotes pré-compilados. O motivo é que o compilador faz otimizações específicas para o hardware alvo no qual é compilado, enquanto os pacotes pré-compilados precisam permanecer genéricos e acionar otimizações mais conservadoras em prol de um suporte amplo. Note que os kernels OpenCL são, de qualquer forma, compilados para a sua GPU específica usando o seu driver OpenCL, então a história é diferente nesse caso.

Reformulando a mesa de luz e o cache de mipmap

Desenvolvimento Redesenho Desempenho

Entre janeiro de 2022 e março de 2026, o Ansel integrou 297 commits (sem contar merges) referentes à grade da mesa de luz, suas miniaturas e seu pipeline de renderização e caching. Tentei me virar com o desleixado código da mesa de luz do Darktable, apenas desengordurado, pelo maior tempo que consegui, mas infelizmente era pura dívida técnica e era dolorosamente lento.

De fato, o Darktable “gerencia” a porcaria de sua mesa de luz reduzindo o tamanho dela: os painéis laterais esquerdo e direito ocupam bastante superfície de exibição, o que deixa uma área ainda menor para a mesa de luz repintar. Como o Ansel removeu o painel lateral direito, fundindo seu conteúdo com o esquerdo e com o menu global, havia mais superfície para pintar, mais trabalho de CPU a fazer, e o péssimo design da mesa de luz tornou-se ainda mais prejudicial.

Boas-vindas, documentação para desenvolvedores !

Desenvolvimento

Lá em dezembro de 2019, eu pedi que alguém se encarregasse de fornecer pacotes AppImage  para o Darktable. O benefício óbvio teria sido possibilitar testes precoces, antes da versão, por parte de pessoas que não conseguem compilar o código-fonte por conta própria, de modo a quem sabe fornecer feedback antecipado e ajudar a depurar antes de lançar. Isso nunca foi uma prioridade, o que significa que estava tudo bem ter uma corrida para corrigir bugs tanto antes quanto depois da versão.

Corrigindo o cache do pipeline e bugs de 10 anos de idade

Desenvolvimento

Resumo dos episódios anteriores

  1. Entre 2020 e 2022, o Darktable passou por um empreendimento de destruição em massa, conduzido por um punhado de sujeitos com mais tempo livre e benevolência do que competência de verdade,
  2. Em 2022, comecei a notar um lag incômodo  entre as interações da interface gráfica com os controles deslizantes e o feedback/atualização dos ditos controles. Por falta de um feedback indicando que a mudança de valor havia sido registrada, os usuários podiam mudá-lo de novo, iniciando assim recomputações adicionais do pipeline e efetivamente travando seus computadores, porque a estúpida interface gráfica nunca dizia “entendi, agora espere um pouco”.
  3. Descobri que as ordens de recomputação do pipeline eram emitidas duas vezes por clique (uma no evento de “botão pressionado”, outra no de “botão solto”), e mais uma vez a cada movimento do mouse, mas também que os estados da interface gráfica eram atualizados aparentemente após a recomputação do pipe.
  4. Corrigi isso reescrevendo quase por completo os controles personalizados da interface gráfica (biblioteca Bauhaus). Achei que impedir as ordens imprudentes de recomputação fosse resolver o lag: não resolveu. Então descobri que solicitar uma nova recomputação do pipeline antes de a anterior terminar esperava a anterior terminar, apesar de um mecanismo de desligamento implementado muitos anos atrás que deveria ter funcionado.
  5. Corrigi isso implementando um mecanismo de kill-switch nos pipelines, seguindo comentários no código dos anos 2010 e utilitários internos que bem podem nunca ter funcionado. Isso nem sempre funcionava porque a ordem de cancelamento vinha muitas vezes com um atraso perceptível. Mais uma vez, o lag da interface gráfica não foi corrigido.

Reescrevendo a ferramenta de importação

Desenvolvimento Redesenho

O Ansel herda do Darktable sua espinha dorsal de banco de dados: os históricos de edição não destrutiva são salvos por imagem em um banco de dados SQLite, junto com metadados e outros dados definidos pelo usuário. Fazer com que o banco de dados reconheça novas imagens é feito através da “importação” de imagens de um disco ou de um cartão de memória. É aí que entra a ferramenta de importação.

Implementando um kill-switch no pipeline

Desenvolvimento

Durante muito tempo, eu achei que houvesse algum mecanismo de kill-switch no pipeline de pixels. O caso de uso é o seguinte:

  1. você está alterando um parâmetro de módulo,
  2. as prévias (a da sala escura central e a miniatura no painel esquerdo, também usada para o histograma e os seletores de cor) recalculam seu pipeline para levar em conta essa alteração,
  3. uma das prévias termina de renderizar antes da outra, e o resultado obviamente não é o que você queria,
  4. você altera novamente o parâmetro de módulo, sem esperar que o recálculo termine.

Nesse caso, você quer encerrar todos os pipelines ativos porque sua saída não será usada, e começar a recalcular tudo imediatamente com os novos parâmetros. Só que o Darktable não faz isso, ele deixa o pipeline terminar antes de reiniciá-lo, e olhando os comentários no código-fonte, parece ser uma regressão bastante recente e não o comportamento originalmente pretendido.

Des-darktable-izando os controles da interface

Desenvolvimento

O Darktable tem sua própria biblioteca de widgets de interface, para controles deslizantes e caixas de combinação (também conhecidas como menus suspensos ou caixas de seleção), chamada Bauhaus (no código-fonte, fica em src/bauhaus/bauhaus.c). Embora usem o Gtk como backend, os Bauhaus são objetos personalizados. E, como muitas coisas no Darktable, personalizado é sinônimo de podre.

Em 2022, ‍notei redesenhos parasitas e travamentos  ao usá-los, resultando em uma experiência de usuário frustrante: o redesenho do widget parecia esperar a conclusão dos recálculos do pipeline, o que significava que os usuários não tinham certeza se a mudança de valor havia sido registrada, o que podia levá-los a tentar novamente, iniciando outro ciclo de recálculo custoso e efetivamente congelando o computador por vários minutos muito frustrantes de recálculos intermediários e inúteis do pipeline.

Novas opções de compilação para Linux

Desenvolvimento

Descobri por acaso que o script de compilação do Linux usava uma compilação “package”, o que significa que as otimizações de CPU ficam limitadas às genéricas, a fim de produzir binários portáteis que podem ser instalados em qualquer plataforma x86-64. Por “usava”, quero dizer que a compilação package não estava explicitamente desativada, então ficava ativada por padrão.

De qualquer forma, isso agora está desativado por padrão, já que os pacotes de fato (.exe e .appimage) não são compilados através desse script, que se destina principalmente a ajudar os usuários finais. Para recuperar o comportamento anterior, você precisaria executar:

Diário de desenvolvimento #2: apresentando a Chantal

Desenvolvimento

2022 foi tão ruim em termos de e-mails inúteis e ruído que comecei o Virtual Secretary , um framework em Python para escrever filtros de e-mail inteligentes cruzando informações entre várias fontes para adivinhar o que os e-mails recebidos são e se eles são importantes/urgentes ou não. Quando falo de e-mails inúteis, são também notificações do Github, pings no pixls.us (graças a Deus fechei minha conta naquele fórum idiota), YouTube e e-mails diretos de pessoas esperando conseguir alguma ajuda em particular.

Diário de desenvolvimento

Desenvolvimento

Faz aproximadamente 3 meses que renomeei o “R&Darktable” (que ninguém parecia entender direito) para “Ansel”, depois comprei o nome de domínio e criei o site do zero com o Hugo (eu nunca havia programado em Golang antes, mas é basicamente código de template).

Depois gastei um total de 70 h fazendo os builds noturnos dos pacotes para Windows e Linux funcionarem para entrega contínua, algo que o Darktable nunca acertou (“você pode compilar por conta própria, não é difícil”), só para ver o rastreador de bugs explodir depois do lançamento (nada melhor do que encadear a maratona de pré-lançamento com uma de pós-lançamento para reduzir sua expectativa de vida).

Search

You can also ask Chantal, the AI search engine.