1 points par GN⁺ 2025-03-17 | 1 commentaires | Partager sur WhatsApp
  • Le point de départ a été l’expérience de création, à l’été 2006, d’un lecteur de BD personnel, Fiew ; cela a ensuite conduit à la réalisation, comme projet de mémoire de fin d’études, de Fedit, un éditeur d’images proche de Photoshop, en C++ et avec l’API Windows
  • Fedit fonctionnait comme un exécutable unique, sans installateur, archive compressée, clé de registre ni runtime supplémentaire, ce qui permettait de le lancer immédiatement même sur des PC aux droits limités ou depuis une clé USB
  • L’interface a été conçue pour reprendre le flux de travail du Photoshop classique, avec fenêtres d’outils flottantes, sélecteur de couleurs, gestion des calques, historique d’annulation, filtres d’image et filtre personnalisé de déplacement de pixels
  • La plus grande difficulté a été la reproduction de l’interface utilisateur ; le comportement d’ancrage/désancrage du panneau des paramètres d’outils ainsi que l’implémentation des sélecteurs de couleurs et d’outils ont demandé beaucoup de temps
  • Le projet a débouché sur un mémoire réussi et l’obtention d’un diplôme de Bachelor of Science in Engineering, puis a impressionné le CTO de GoldenLine, ouvrant sur un poste en C++ pour développer une application WinAPI d’upload massif d’images

Du lecteur de BD Fiew à l’éditeur d’images Fedit

  • Au début de l’été 2006, tout est parti du fait que les applications de lecture d’images existantes ne me convenaient pas
    • En particulier, le fait de ne pas pouvoir contrôler la lecture uniquement à la souris, et de devoir sans cesse revenir au clavier, était gênant
  • Je venais tout juste de terminer un cours de C++/API Windows à l’université, et j’ai profité des vacances d’été pour développer l’idéal de lecteur de BD que j’avais en tête
  • Ce lecteur de BD s’appelait Fiew
  • Au début de l’automne 2006, il fallait choisir un sujet de mémoire de fin d’études, et comme le développement du visualiseur d’images s’était bien passé, j’ai estimé qu’il était aussi possible de créer un éditeur d’images
  • Comme j’utilisais beaucoup Adobe Photoshop à l’époque, l’objectif est devenu de réaliser un éditeur similaire à Photoshop

Mise en œuvre de Fedit et contraintes de distribution

  • Fedit est un éditeur d’images avancé écrit en C++, utilisant l’API Windows et la bibliothèque graphique GDI+
  • Pour proposer un mode de distribution avantageux pour l’utilisateur, cinq règles ont été suivies
    • pas d’installateur
    • pas d’archive compressée
    • pas de clé de registre
    • pas de runtime supplémentaire
    • un seul exécutable
  • Au final, cela a donné un programme qui fonctionne immédiatement sans installation, peut être exécuté sur des systèmes aux droits limités ou depuis une clé USB, et consomme peu de ressources

Une interface et des fonctions proches de Photoshop

  • L’interface a été soigneusement conçue pour ressembler au Photoshop classique et intégrer les fonctions que j’utilisais le plus souvent
  • Les principales fonctions étaient les suivantes
    • fenêtres d’outils librement flottantes
    • sélecteur de couleurs
    • gestion simple des calques
    • historique permettant d’annuler étape par étape
    • plusieurs filtres d’image
    • interface matricielle permettant d’encoder directement des filtres de déplacement de pixels
  • Elle incluait aussi une visionneuse de grandes bibliothèques d’images reprise du projet précédent, Fiew
    • ce qui permettait de faire défiler rapidement et facilement de très grandes quantités de photos

Un développement qui a nécessité un débogage manuel

  • Je me suis beaucoup appuyé sur MSDN et Experts Exchange, mais les problèmes étaient si spécifiques qu’il a fallu, dans la plupart des cas, les analyser et les déboguer moi-même
  • Comme il fallait respecter la date limite du mémoire de licence, j’ai travaillé 14 heures par jour pendant les deux derniers mois
  • La partie la plus délicate concernait l’interface utilisateur
    • je voulais un flux de travail aussi proche que possible de Photoshop
    • le comportement permettant d’ancrer et de désancrer librement le panneau des paramètres d’outils était particulièrement difficile
    • reproduire le sélecteur de couleurs et le sélecteur d’outils n’a pas non plus été simple
  • À l’approche de la fin du projet, j’étais assez épuisé, et j’avais même développé une certaine aversion pour WinAPI

Résultats après le mémoire et ressources publiques

  • Le mémoire a été un succès, et j’ai obtenu le diplôme de Bachelor of Science in Engineering à la Warsaw University of Technology
  • Fedit a reçu quelques avis positifs en ligne, mais je ne l’ai pas activement promu
  • Par la suite, Fiew et Fedit ont impressionné le CTO de GoldenLine, ce qui a débouché sur un travail en C++ consistant à créer une application WinAPI très efficace pour l’upload massif d’images d’un clone de Flickr
  • Ressources publiques

1 commentaires

 
GN⁺ 2025-03-17
Avis sur Hacker News
  • Lire la phrase « cinq règles qui profitent à l’utilisateur : pas d’installateur, pas d’archive compressée, pas de clé de registre, pas de runtime supplémentaire, un seul exécutable » m’a donné une sensation chaleureuse et heureuse
    Je comprends pourquoi le registre existe et pourquoi l’écosystème logiciel Windows fonctionne ainsi aujourd’hui, mais l’époque où la plupart des logiciels desktop étaient aussi simples me manque vraiment
    Aujourd’hui, j’utilise des installations portables quand c’est possible, et j’aimerais que cette approche soit plus courante. Le temps, les désagréments et l’incertitude de ne pas savoir si je pourrai restaurer complètement mes paramètres me font activement éviter de réinstaller Windows

    • Les installateurs font aussi beaucoup de choses utiles, et une bonne partie des utilisateurs finaux les veulent réellement. Par exemple, ajouter des raccourcis au menu Démarrer pour pouvoir trouver ou rechercher l’application, associer des formats de fichiers, ou l’inscrire dans la liste des programmes Windows
      Avant, j’adorais les logiciels portables, mais aujourd’hui, quand les deux sont proposés, je préfère plutôt l’installateur. Sinon, pour que ce soit recherchable, il faut l’ajouter soi-même au menu Démarrer
      En revanche, je déteste les clés de registre. Elles disparaissent souvent quand on réinstalle le système d’exploitation. J’aimerais que les paramètres soient simplement stockés dans %appdata%
    • C’est pour ça que j’aime Go. Un exécutable unique rend les outils plus faciles à utiliser pour les autres
      Une autre option consiste à empaqueter un exécutable unique avec NSIS, qui extrait tout dans un répertoire temporaire avant l’exécution
      Je considère le registre Windows comme une sorte de bric-à-brac incohérent et mal conçu. À titre de comparaison, le registre de Gnome est bien conçu. Les descriptions de clés, les choix de valeurs limités et l’affichage des valeurs par défaut relèvent d’une bonne conception d’interface utilisateur
      Il suffit de regarder les stratégies de groupe Windows et leur mapping vers le registre : la même structure logique y est traitée de façon disparate, avec même des doubles négations dans les clés
    • L’objectif initial du registre était de permettre à COM de trouver l’emplacement des fichiers DLL à partir d’un GUID. COM pouvait ensuite créer des instances d’objets
      On peut encore en voir les traces dans HKEY_CLASSES_ROOT
      Techniquement, on peut créer des objets sans registre. Il suffit de charger la DLL, d’appeler une fonction exportée pour créer un objet Factory, puis d’utiliser ce Factory pour créer l’instance. C’est précisément ce que fait COM lui-même
    • Cette conception simple et légère m’a aussi parlé
      L’article était aussi une très belle rétrospective. J’aurais seulement aimé que l’auteur approfondisse un peu les difficultés qu’il évoque au début. Mais ce n’est qu’un détail, le texte est excellent et le travail semble vraiment assez impressionnant
    • Je ne sais pas trop quelle est la meilleure façon de faire une application à binaire unique sans inclure les bibliothèques par compilation statique. À cause des licences, cela devient généralement difficile à assumer
  • Photoshop a vraiment énormément de fonctionnalités, donc quelques filtres d’image ne suffisent pas vraiment à parler de reproduction

    • Mais réussir correctement l’interface utilisateur est très difficile et très important
      En 2006, GIMP avait déjà énormément de fonctionnalités, mais comparé à l’interface de Photoshop, c’était vraiment atroce
    • Cela dit, pour un travail de licence, c’est très, très impressionnant
    • Je ne pense pas qu’il faille prendre ici « reproduction » au pied de la lettre
    • Oui. Je considère Photopea comme la tentative de clone la plus proche, mais il lui manque encore beaucoup de fonctionnalités
    • Dire « j’ai créé un éditeur d’images basique » ne sonne évidemment pas aussi impressionnant. Vu que l’article commence ainsi, ce n’est pas surprenant

      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!
      Quelle modestie…

  • Il devrait aussi y avoir un lien direct vers ce superbe projet
    https://github.com/f055/fedit-image-editor

  • Le passage « Je n’en ai pas fait la promotion. Quelques mois plus tard, j’ai obtenu un poste en C++. Au final, tous ces efforts ont donc été récompensés » est intéressant
    On sait instinctivement qu’un travail difficile devrait être récompensé, mais il est regrettable que les développeurs open source, surtout ceux dont le code est largement utilisé en production, consacrent si souvent beaucoup d’efforts pour recevoir très peu de compensation réelle
    C’est sans doute pour cela qu’on cherche des formes de récompense réputationnelle, que NPM ajoute des fonctions du type « et si vous faisiez un don à l’auteur de cette bibliothèque ? », et que GitHub a créé une intégration Patreon
    Il nous faut un meilleur modèle que l’actuel, qui n’exploite pas de jeunes créateurs naïfs mais sincères

  • Au début des années 2000, il y avait un projet appelé pixel32, puis plus tard Pixel Studio Pro. Il avait vraiment l’air prometteur et était vendu en early access
    Mais il a fini par devenir du vaporware, les personnes qui avaient payé se sont mises très en colère, et son créateur est rapidement passé du statut de héros à celui de méchant
    https://discuss.haiku-os.org/t/pixel-studio-pro-in-past-call...

  • L’auteur dit être diplômé de la Warsaw University of Technology, qui a toujours été considérée ici comme l’une des assez bonnes écoles
    À part cela, on remarque aussi à quel point les mémoires de l’époque étaient différents de ceux d’aujourd’hui. J’ai récemment rédigé mon mémoire dans une université de technologie d’une autre grande ville, et 90 % de nos mémoires d’ingénieur étaient d’un niveau plutôt faible, le mien compris

    • Je ne suis pas sûr que ce soit très différent aujourd’hui. À ma connaissance, l’objectif n’est pas de faire progresser le domaine, mais de prouver aux personnes qui délivrent les diplômes de licence ou de master qu’on est capable de produire un résultat sous forme de mémoire
      Il y a sans doute des mémoires qui se démarquent, mais la plupart sont probablement assez ennuyeux
  • C’est pour ça que j’aime Windows. Il existe une quantité énorme de petits logiciels open source qui remplissent très bien des niches précises
    Avant, je parcourais sourceforge.net et freshmeat — je crois que c’était leur nom — pour en trouver

  • Un ami qui travaillait chez Phonegap, après son rachat par Adobe il y a une dizaine d’années, a immédiatement porté Photoshop en JavaScript pour s’amuser

    • Je ne veux pas me plaindre des votes négatifs, mais c’est assez étrange que cette histoire semble être du genre à déplaire à Hacker News
      Je pensais qu’une histoire de hack interne par un ingénieur logiciel serait intéressante, mais bon, tant pis
  • Certaines personnes créent des choses et ne les font jamais connaître au monde. Heureusement que c’est sur GitHub, c’est vraiment impressionnant