1 pontos por GN⁺ 2025-03-17 | 1 comentários | Compartilhar no WhatsApp
  • A experiência de criar o leitor de mangás pessoal Fiew no verão de 2006 foi o ponto de partida para implementar, como projeto de monografia, o Fedit, um editor de imagens semelhante ao Photoshop, usando C++ e a Windows API
  • O Fedit funcionava como um único executável, sem instalador, arquivo compactado, chaves de registro ou runtimes adicionais, podendo ser executado diretamente até em PCs com permissões restritas ou a partir de um drive USB
  • A interface foi projetada para se parecer com o fluxo de trabalho do Photoshop clássico e incluía janelas de ferramentas flutuantes, seletor de cores, gerenciamento de camadas, histórico de desfazer, filtros de imagem e um filtro personalizado de movimentação de pixels
  • O maior desafio foi reproduzir a interface de usuário; muito tempo foi gasto na implementação do comportamento de encaixar/desencaixar do painel de configurações de ferramentas e dos seletores de cores e ferramentas
  • O projeto resultou no sucesso da monografia e na obtenção do bacharelado em engenharia; depois, impressionou o CTO da GoldenLine e levou a um trabalho em C++ para criar um app WinAPI de upload em massa de imagens

Do leitor de mangás Fiew ao editor de imagens Fedit

  • No início do verão de 2006, o ponto de partida foi a insatisfação com os apps de leitura de imagens existentes
    • Em especial, atrapalhava o fato de não ser possível controlar a leitura apenas com o mouse, obrigando a estender a mão até o teclado constantemente
  • Ele havia acabado de concluir um curso de C++/Windows API na universidade e, durante as férias de verão, desenvolveu por conta própria seu leitor de mangás ideal
  • Esse leitor de mangás recebeu o nome de Fiew
  • No início do outono de 2006, era preciso definir o tema da monografia; como a experiência de desenvolver um visualizador de imagens tinha corrido bem, ele julgou que também conseguiria criar um editor de imagens
  • Como na época usava muito o Adobe Photoshop, o objetivo passou a ser um editor semelhante ao Photoshop

Como o Fedit foi implementado e as restrições de distribuição

  • O Fedit é um Advanced Image Editor escrito em C++, usando a Windows API e a biblioteca gráfica GDI+
  • Para oferecer uma forma de distribuição favorável ao usuário, seguiu cinco regras
    • Sem instalador
    • Sem arquivo compactado
    • Sem chaves de registro
    • Sem runtimes adicionais
    • Um único executável
  • Como resultado, tornou-se um programa que funcionava imediatamente sem instalação, podia ser executado em sistemas com permissões restritas ou a partir de um drive USB e consumia poucos recursos

Interface e recursos próximos aos do Photoshop

  • A interface foi cuidadosamente criada para se parecer com o Photoshop clássico e incluía os recursos usados com frequência
  • Os principais recursos eram:
    • Janelas de ferramentas flutuantes livremente
    • Seletor de cores
    • Gerenciamento fácil de camadas
    • Histórico com desfazer passo a passo
    • Diversos filtros de imagem
    • Uma interface de matriz que permitia codificar diretamente filtros de movimentação de pixels
  • Também incluía o visualizador de grandes bibliotecas de imagens trazido do projeto anterior, o Fiew
    • Era possível rolar grandes volumes de fotos de forma rápida e fácil

Um processo de desenvolvimento que exigiu depuração direta

  • Embora tenha consultado bastante a MSDN e o Experts Exchange, os problemas eram específicos demais, então a maior parte precisou ser analisada e depurada diretamente
  • Como precisava cumprir o prazo da monografia de graduação, nos últimos dois meses trabalhou 14 horas por dia
  • A área mais difícil foi a interface de usuário
    • Ele queria um fluxo de trabalho o mais parecido possível com o do Photoshop
    • O comportamento de encaixar e desencaixar livremente o painel de configurações de ferramentas foi particularmente difícil
    • Reproduzir o seletor de cores e o seletor de ferramentas também não foi fácil
  • Ao terminar o projeto, estava bastante esgotado e também passou a ter certa aversão à WinAPI

Resultados após a monografia e materiais públicos

  • A monografia foi bem-sucedida, e ele recebeu o título de Bachelor of Science in Engineering pela Warsaw University of Technology
  • O Fedit recebeu algumas avaliações positivas online, mas não foi promovido ativamente
  • Depois, o Fiew e o Fedit impressionaram o CTO da GoldenLine, o que levou a um trabalho em C++ criando um app WinAPI eficiente para upload em massa de imagens para um clone do Flickr
  • Materiais públicos

1 comentários

 
GN⁺ 2025-03-17
Comentários do Hacker News
  • Senti uma sensação calorosa e feliz ao ler a frase “Cinco regras que beneficiam o usuário: sem instalador, sem arquivo compactado, sem chaves de registro, sem runtime adicional, um único executável
    Entendo por que o registro existe e por que o ecossistema de software do Windows funciona assim hoje, mas sinto muita falta da época em que a maior parte do software desktop era simples como antigamente
    Hoje em dia, sempre que possível, uso instalação portátil, e gostaria que esse modelo fosse mais comum. O tempo, o incômodo e a incerteza de não saber se vou conseguir restaurar completamente as configurações me fazem evitar ativamente reinstalar o Windows

    • Instaladores também fazem muitas coisas úteis, e uma boa parte dos usuários finais realmente quer isso. Por exemplo, adicionar atalhos ao menu Iniciar para que o app possa ser encontrado ou pesquisado, associar tipos de arquivo e registrar o programa na lista de programas do Windows
      Antigamente eu gostava muito de software portátil, mas hoje, quando os dois são oferecidos, acabo preferindo o instalador. Caso contrário, preciso adicionar manualmente ao menu Iniciar para que seja pesquisável
      Mas eu não gosto de chaves de registro. Elas costumam desaparecer quando o sistema operacional é reinstalado. Eu gostaria que as configurações fossem simplesmente armazenadas em %appdata%
    • É por isso que gosto de Go. Por ser um único executável, fica fácil para outras pessoas usarem a ferramenta
      Como alternativa, também uso a abordagem de empacotar um único executável com NSIS e extrair tudo para um diretório temporário antes da execução
      Vejo o registro do Windows como uma miscelânea inconsistente e mal projetada. Em comparação, o registro do Gnome é bem projetado. Descrições de chaves, opções de valores com restrições e exibição de valores padrão são um bom design de interface de usuário
      Basta olhar para o mapeamento entre as Políticas de Grupo do Windows e o registro: a mesma estrutura lógica aparece de formas diferentes, e ainda há dupla negação nas chaves
    • O propósito original do registro era permitir que o COM encontrasse a localização de arquivos DLL a partir de GUIDs. Assim, o COM podia criar instâncias de objetos
      Ainda dá para ver esses vestígios em HKEY_CLASSES_ROOT
      Tecnicamente, é possível criar objetos mesmo sem o registro. Basta carregar a DLL, chamar uma função exportada para criar um objeto Factory e, com esse Factory, criar a instância. É basicamente isso que o próprio COM faz
    • Esse design simples e leve também me tocou
      O texto também foi uma retrospectiva muito legal. Só acho que teria sido bom se o autor tivesse se aprofundado mais nas dificuldades que insinuou no começo. Mas isso é só uma implicância pequena; o artigo é muito bom e, na prática, parece um trabalho bastante impressionante
    • Não sei qual é o melhor caminho para criar um app de binário único sem incluir bibliotecas por compilação estática. Por causa de licenças, normalmente isso fica difícil de bancar
  • O Photoshop tem tantos recursos que apenas alguns filtros de imagem dificilmente contam como uma reprodução

    • Mas acertar a interface de usuário é extremamente difícil e extremamente importante
      O GIMP de 2006 também tinha recursos de sobra, mas era realmente horrível em comparação com a interface do Photoshop
    • Ainda assim, para um trabalho de graduação, é muito, muito impressionante
    • Acho que aqui a intenção não é levar “reprodução” ao pé da letra
    • Exato. Vejo o Photopea como a tentativa de clone mais próxima, mas mesmo ele não tem muitos recursos
    • Se dissesse “criei um editor de imagens básico”, naturalmente não soaria tão impressionante. Vendo o texto começar assim, também não surpreende

      As I’m getting older I look back on all the things I’ve done as a creative developer, and I see so many cool projects!
      Quanta humildade…

  • Também deveria haver um link direto para esse projeto incrível
    https://github.com/f055/fedit-image-editor

  • Achei interessante o trecho “Não fiz divulgação. Alguns meses depois, consegui um emprego em C++. No fim, todo aquele esforço foi recompensado”
    Sabemos instintivamente que trabalho árduo deveria ser recompensado, mas é uma pena que desenvolvedores open source tantas vezes dediquem muito esforço, especialmente a código muito usado em produção, e recebam pouca ou nenhuma compensação real
    Acho que é por isso que se busca recompensa reputacional, ou que o NPM adiciona recursos como “que tal doar para o autor desta biblioteca?”, e que o GitHub criou integração com Patreon
    Precisamos de um modelo melhor do que o atual, que não se aproveite de jovens criadores ingênuos, mas dedicados

  • No começo dos anos 2000 havia um projeto chamado pixel32 e, depois, Pixel Studio Pro. Parecia realmente bom e foi vendido em early access
    Mas acabou virando vaporware, as pessoas que pagaram ficaram muito irritadas, e o criador rapidamente passou de herói a vilão
    https://discuss.haiku-os.org/t/pixel-studio-pro-in-past-call...

  • O autor disse que se formou na Warsaw University of Technology, que por aqui sempre foi considerada uma das escolas bem boas
    Separadamente, também chama atenção como as teses daquela época eram diferentes das de hoje. Recentemente escrevi uma tese em uma universidade de tecnologia de outra cidade grande, e 90% das nossas teses de engenharia eram de nível bem baixo, incluindo a minha

    • Não sei se hoje é tão diferente assim. Pelo que sei, o objetivo não é avançar a área, mas provar às pessoas que concedem bacharelados ou mestrados que você consegue produzir um resultado em formato de tese
      Deve haver teses que se destacam, mas a maioria provavelmente é bem tediosa
  • É por isso que gosto do Windows. Existe uma quantidade enorme de softwares pequenos, de código aberto, que preenchem nichos específicos muito bem
    Antigamente eu costumava ficar garimpando em lugares como sourceforge.net e freshmeat, acho que era esse o nome

  • Um amigo que trabalhava no PhoneGap, depois que eles foram comprados pela Adobe cerca de 10 anos atrás, portou imediatamente o Photoshop para JavaScript por diversão

    • Não é que eu queira reclamar dos votos negativos, mas é bem estranho isso parecer uma história que o Hacker News odiaria
      Eu achei que uma história sobre um projeto interno de hack de um engenheiro de software seria interessante, mas fazer o quê
  • Há coisas que as pessoas criam e não divulgam ao mundo. Ainda bem que está no GitHub; é realmente impressionante