- 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
- Code source de Fedit et Fiew : disponible sur GitHub
- PDF du mémoire : document du mémoire sur Fedit
- Archive Web du site original de l’application : archive du site de l’époque
- Discussion Hacker News : page de discussion associée
1 commentaires
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
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%
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
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
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
Photoshop a vraiment énormément de fonctionnalités, donc quelques filtres d’image ne suffisent pas vraiment à parler de reproduction
En 2006, GIMP avait déjà énormément de fonctionnalités, mais comparé à l’interface de Photoshop, c’était vraiment atroce
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
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 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