<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Desenvolvimento on Ansel</title><link>https://ansel.photos/pt_br/tags/desenvolvimento/</link><description>Recent content in Desenvolvimento on Ansel</description><generator>Hugo -- gohugo.io</generator><language>pt_br</language><copyright>© Copyright 2022-2025 – Aurélien Pierre</copyright><lastBuildDate>Fri, 10 Apr 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://ansel.photos/pt_br/tags/desenvolvimento/index.xml" rel="self" type="application/rss+xml"/><item><title>Mudanças na distribuição de pacotes do Ansel</title><link>https://ansel.photos/pt_br/news/changes-in-packages-distribution/</link><pubDate>Fri, 10 Apr 2026 00:00:00 +0000</pubDate><updated>Fri, 10 Apr 2026 00:00:00 +0000</updated><guid>807192ed607a4892aa4b85de7ba1fafbcb03d24c2d17fffd3d0a476ee3cb7b07</guid><description>&lt;/section>
&lt;section id="target-clones">
&lt;h2 class="text-left heading">
Target clones
&lt;span class="header-filet">&lt;/span>
&lt;/h2>
&lt;p>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.&lt;/p></description></item><item><title>Reformulando a mesa de luz e o cache de mipmap</title><link>https://ansel.photos/pt_br/news/redesigning-lighttable-and-mipmap-cache/</link><pubDate>Fri, 03 Apr 2026 00:00:00 +0000</pubDate><updated>Fri, 03 Apr 2026 00:00:00 +0000</updated><guid>853690b06e77e6284685d19430444a4ade8bf6362d007e052dd35b9d189fc5a0</guid><description>&lt;p>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.&lt;/p>
&lt;p>De fato, o Darktable &amp;ldquo;gerencia&amp;rdquo; 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.&lt;/p></description></item><item><title>Boas-vindas, documentação para desenvolvedores !</title><link>https://ansel.photos/pt_br/news/welcome-dev-docs/</link><pubDate>Mon, 31 Mar 2025 00:00:00 +0000</pubDate><updated>Mon, 31 Mar 2025 00:00:00 +0000</updated><guid>f30bf7e1885a79a9acd1fa9c7c7af1a50d7307f7a9569056891b61d73757ce25</guid><description>&lt;p>Lá em dezembro de 2019, eu pedi que alguém &lt;a href="https://github.com/darktable-org/darktable/issues/3925" title="External link" target="_blank" rel="noopener noreferrer nofollow" >se encarregasse de fornecer pacotes AppImage&amp;thinsp;&lt;sup class="icon">&lt;i class="fa fa-external-link-alt">&lt;/i>&lt;/sup>&lt;/a> 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 &lt;em>quem sabe&lt;/em> fornecer feedback antecipado e ajudar a depurar &lt;strong>antes&lt;/strong> de lançar. Isso nunca foi uma prioridade, o que significa que estava tudo bem ter uma corrida para corrigir bugs &lt;strong>tanto&lt;/strong> antes &lt;strong>quanto&lt;/strong> depois da versão.&lt;/p></description></item><item><title>Corrigindo o cache do pipeline e bugs de 10 anos de idade</title><link>https://ansel.photos/pt_br/news/fixing-pipe-cache-10-yo-bugs/</link><pubDate>Sun, 07 Jul 2024 00:00:00 +0000</pubDate><updated>Sun, 07 Jul 2024 00:00:00 +0000</updated><guid>9a821cb5eda7f67aa1d37e6b37f0f71d323b6c2d18d8e505b5b5ffca22d286ae</guid><description>&lt;/section>
&lt;section id="resumo-dos-episódios-anteriores">
&lt;h2 class="text-left heading">
Resumo dos episódios anteriores
&lt;span class="header-filet">&lt;/span>
&lt;/h2>
&lt;ol start="0">
&lt;li>Entre 2020 e 2022, o &lt;a href="https://ansel.photos/pt_br/news/darktable-dans-le-mur-au-ralenti/" title="" rel="dofollow" >Darktable passou por um empreendimento de destruição em massa&lt;/a>, conduzido por um punhado de sujeitos com mais tempo livre e benevolência do que competência de verdade,&lt;/li>
&lt;li>Em 2022, &lt;a href="https://github.com/aurelienpierreeng/ansel/issues/29" title="External link" target="_blank" rel="noopener noreferrer nofollow" >comecei a notar um lag incômodo&amp;thinsp;&lt;sup class="icon">&lt;i class="fa fa-external-link-alt">&lt;/i>&lt;/sup>&lt;/a> 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 &amp;ldquo;entendi, agora espere um pouco&amp;rdquo;.&lt;/li>
&lt;li>Descobri que as ordens de recomputação do pipeline eram emitidas duas vezes por clique (uma no evento de &amp;ldquo;botão pressionado&amp;rdquo;, outra no de &amp;ldquo;botão solto&amp;rdquo;), 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.&lt;/li>
&lt;li>&lt;a href="https://ansel.photos/pt_br/news/undarktable-ing-gui-controls/" title="" rel="dofollow" >Corrigi isso&lt;/a> 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.&lt;/li>
&lt;li>&lt;a href="https://ansel.photos/pt_br/news/implementing-kill-switch/" title="" rel="dofollow" >Corrigi isso&lt;/a> 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.&lt;/li>
&lt;/ol>
&lt;p>…&lt;/p></description></item><item><title>Reescrevendo a ferramenta de importação</title><link>https://ansel.photos/pt_br/news/rewriting-import/</link><pubDate>Fri, 07 Jun 2024 00:00:00 +0000</pubDate><updated>Fri, 07 Jun 2024 00:00:00 +0000</updated><guid>7ff3a7c3f81360ed374a7446d65fc281cb07c3eea831bb7c5bc3c03749b5aa99</guid><description>&lt;p>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 &amp;ldquo;importação&amp;rdquo; de imagens de um disco ou de um cartão de memória. É aí que entra a ferramenta de importação.&lt;/p></description></item><item><title>Implementando um kill-switch no pipeline</title><link>https://ansel.photos/pt_br/news/implementing-kill-switch/</link><pubDate>Tue, 28 Nov 2023 00:00:00 +0000</pubDate><updated>Tue, 28 Nov 2023 00:00:00 +0000</updated><guid>6a91c46d43081b434ef591e6b3dfeeb7e9e026adc9f35dc7da453888eaf181c2</guid><description>&lt;p>Durante muito tempo, eu achei que houvesse algum mecanismo de kill-switch no pipeline de pixels. O caso de uso é o seguinte:&lt;/p>
&lt;ol>
&lt;li>você está alterando um parâmetro de módulo,&lt;/li>
&lt;li>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,&lt;/li>
&lt;li>uma das prévias termina de renderizar antes da outra, e o resultado obviamente &lt;strong>não&lt;/strong> é o que você queria,&lt;/li>
&lt;li>você altera novamente o parâmetro de módulo, sem esperar que o recálculo termine.&lt;/li>
&lt;/ol>
&lt;p>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.&lt;/p></description></item><item><title>Des-darktable-izando os controles da interface</title><link>https://ansel.photos/pt_br/news/undarktable-ing-gui-controls/</link><pubDate>Sat, 25 Nov 2023 00:00:00 +0000</pubDate><updated>Sat, 25 Nov 2023 00:00:00 +0000</updated><guid>37acfb5997610e9ff0bdbc4ef63383abe559dcabe97b90664a0ee0e8e4640d90</guid><description>&lt;p>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 &lt;code>src/bauhaus/bauhaus.c&lt;/code>). Embora usem o Gtk como backend, os Bauhaus são objetos personalizados. E, como muitas coisas no Darktable, personalizado é sinônimo de podre.&lt;/p>
&lt;p>Em 2022, ‍notei &lt;a href="https://github.com/aurelienpierreeng/ansel/issues/29" title="External link" target="_blank" rel="noopener noreferrer nofollow" >redesenhos parasitas e travamentos&amp;thinsp;&lt;sup class="icon">&lt;i class="fa fa-external-link-alt">&lt;/i>&lt;/sup>&lt;/a> 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.&lt;/p></description></item><item><title>Novas opções de compilação para Linux</title><link>https://ansel.photos/pt_br/news/new-build-options-linux/</link><pubDate>Fri, 16 Jun 2023 00:00:00 +0000</pubDate><updated>Fri, 16 Jun 2023 00:00:00 +0000</updated><guid>fdad232857364a026f5cfd5a11b5ce13726a6193cb23e8b3ad929d30176a4c65</guid><description>&lt;p>Descobri por acaso que o script de compilação do Linux usava uma compilação &amp;ldquo;package&amp;rdquo;, 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 &amp;ldquo;usava&amp;rdquo;, quero dizer que a compilação package não estava explicitamente desativada, então ficava ativada por padrão.&lt;/p>
&lt;p>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:&lt;/p></description></item><item><title>Diário de desenvolvimento #2: apresentando a Chantal</title><link>https://ansel.photos/pt_br/news/dev-diary-2/</link><pubDate>Fri, 28 Apr 2023 00:00:00 +0000</pubDate><updated>Fri, 28 Apr 2023 00:00:00 +0000</updated><guid>9f59069af664c966d41cb88a4482ab7ca0b1fbf441ed9e2c3270b9f55f605857</guid><description>&lt;p>2022 foi tão ruim em termos de e-mails inúteis e ruído que comecei o &lt;a href="https://virtualsecretary.aurelienpierre.com/" title="External link" target="_blank" rel="noopener noreferrer nofollow" >Virtual Secretary&amp;thinsp;&lt;sup class="icon">&lt;i class="fa fa-external-link-alt">&lt;/i>&lt;/sup>&lt;/a>, 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.&lt;/p></description></item><item><title>Diário de desenvolvimento</title><link>https://ansel.photos/pt_br/news/dev-diary-1/</link><pubDate>Sun, 19 Mar 2023 00:00:00 +0000</pubDate><updated>Sun, 19 Mar 2023 00:00:00 +0000</updated><guid>d2d84dc9520e9d5498b7acaa66fce6de268a9319512226b8ff81d80675323095</guid><description>&lt;p>Faz aproximadamente 3 meses que renomeei o &amp;ldquo;R&amp;amp;Darktable&amp;rdquo; (que ninguém parecia entender direito) para &amp;ldquo;Ansel&amp;rdquo;, 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).&lt;/p>
&lt;p>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 (&amp;ldquo;você pode compilar por conta própria, não é difícil&amp;rdquo;), 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).&lt;/p></description></item></channel></rss>