1 Punkte von GN⁺ 2025-03-17 | 1 Kommentare | Auf WhatsApp teilen
  • Ausgangspunkt war die Erfahrung aus dem Sommer 2006, als ein persönlicher Comic-Reader namens Fiew entstand; darauf aufbauend wurde mit C++ und der Windows API ein Photoshop-ähnlicher Bildeditor namens Fedit als Abschlussarbeitsprojekt umgesetzt
  • Fedit lief als eine einzige ausführbare Datei ohne Installer, Archivdatei, Registry-Schlüssel oder zusätzliche Runtime und konnte daher auch auf PCs mit eingeschränkten Rechten oder direkt von einem USB-Laufwerk gestartet werden
  • Die Oberfläche wurde so entworfen, dass sie dem Arbeitsablauf von klassischem Photoshop ähnelt, einschließlich frei schwebender Werkzeugfenster, Farbwähler, Ebenenverwaltung, Undo-Historie, Bildfiltern und eines anpassbaren Filters zum Verschieben von Pixeln
  • Die größte Herausforderung war die Nachbildung der Benutzeroberfläche; besonders das Docking- und Undocking-Verhalten des Werkzeug-Einstellungsfensters sowie die Implementierung von Farb- und Werkzeugwählern kosteten viel Zeit
  • Das Projekt führte zu einer erfolgreichen Abschlussarbeit und zum Erwerb eines Bachelorabschlusses in Ingenieurwissenschaften und beeindruckte später den CTO von GoldenLine, was in einen C++-Job zum Bau einer WinAPI-App für Massen-Bilduploads mündete

Von dem Comic-Reader Fiew zum Bildeditor Fedit

  • Im Frühsommer 2006 begann alles damit, dass bestehende Bildbetrachter-Apps nicht gefielen
    • Besonders störend war, dass sich das Lesen nicht allein mit der Maus steuern ließ und man ständig zur Tastatur greifen musste
  • Kurz zuvor war an der Universität ein Kurs zu C++/Windows API abgeschlossen worden, und in den Sommerferien wurde privat der ideale Comic-Reader entwickelt
  • Dieser Comic-Reader trug den Namen Fiew
  • Im Frühherbst 2006 musste ein Thema für die Abschlussarbeit gewählt werden, und weil die Entwicklung des Bildbetrachters gut verlaufen war, entstand die Einschätzung, dass auch ein Bildeditor machbar sei
  • Da damals viel mit Adobe Photoshop gearbeitet wurde, wurde ein Photoshop-ähnlicher Editor zum Ziel

Wie Fedit umgesetzt wurde und welche Einschränkungen für die Verteilung galten

  • Fedit ist ein in C++ geschriebener Advanced Image Editor, der die Windows API und die Grafikbibliothek GDI+ verwendet
  • Für eine für Nutzer vorteilhafte Bereitstellungsform wurden fünf Regeln eingehalten
    • kein Installer
    • keine Archivdatei
    • keine Registry-Schlüssel
    • keine zusätzliche Runtime
    • eine einzige ausführbare Datei
  • Das Ergebnis war ein Programm, das ohne Installation sofort lief, auch auf Systemen mit eingeschränkten Rechten oder von USB-Laufwerken aus startbar war und nur wenig Ressourcen verbrauchte

Eine Photoshop-nahe Oberfläche und Funktionen

  • Die Oberfläche wurde sorgfältig so gestaltet, dass sie wie klassisches Photoshop aussieht, und enthielt häufig genutzte Funktionen
  • Zu den wichtigsten Funktionen gehörten
    • frei schwebende Werkzeugfenster
    • Farbwähler
    • einfache Ebenenverwaltung
    • eine schrittweise rückgängig machbare Historie
    • mehrere Bildfilter
    • eine Matrix-Oberfläche, über die sich ein Filter zum direkten Verschieben von Pixeln codieren ließ
  • Außerdem war ein Viewer für große Bildbibliotheken enthalten, der aus dem vorherigen Projekt Fiew übernommen wurde
    • Damit ließ sich durch große Fotomengen schnell und einfach scrollen

Der Entwicklungsprozess, bei dem vieles selbst debuggt werden musste

  • Zwar wurde häufig auf MSDN und Experts Exchange zurückgegriffen, doch die Probleme waren so spezifisch, dass die meisten direkt analysiert und debuggt werden mussten
  • Weil der Abgabetermin für die Bachelorarbeit eingehalten werden musste, wurde in den letzten zwei Monaten täglich 14 Stunden gearbeitet
  • Der schwierigste Bereich war die Benutzeroberfläche
    • Gewünscht war ein Arbeitsablauf, der Photoshop so ähnlich wie möglich ist
    • Besonders schwierig war das freie Andocken und Lösen des Werkzeug-Einstellungsfensters
    • Auch die Nachbildung des Farb- und Werkzeugwählers war nicht einfach
  • Gegen Ende des Projekts war die Erschöpfung groß, und es entstand sogar eine gewisse Abneigung gegen WinAPI

Ergebnisse nach der Abschlussarbeit und öffentlich verfügbare Materialien

  • Die Abschlussarbeit war erfolgreich, und an der Warsaw University of Technology wurde ein Bachelor of Science in Engineering erworben
  • Fedit erhielt online einige positive Rezensionen, wurde aber nicht aktiv beworben
  • Später beeindruckten Fiew und Fedit den CTO von GoldenLine und führten zu einer C++-Tätigkeit, bei der eine hocheffiziente WinAPI-App für Massen-Bilduploads für einen Flickr-Klon entwickelt wurde
  • Öffentlich verfügbare Materialien

1 Kommentare

 
GN⁺ 2025-03-17
Meinungen auf Hacker News
  • Beim Lesen des Satzes „Fünf Regeln, die den Nutzern zugutekommen: kein Installer, keine ZIP-Datei, keine Registry-Keys, keine zusätzlichen Runtimes, eine einzige ausführbare Datei“ wurde mir ganz warm und glücklich zumute.
    Ich verstehe, warum die Registry existiert und warum das Windows-Software-Ökosystem heute so funktioniert, aber ich vermisse wirklich die Zeit, in der die meiste Desktop-Software so einfach war.
    Heutzutage nutze ich, wenn möglich, portable Installationen, und ich wünschte, dieser Ansatz wäre verbreiteter. Wegen des Zeitaufwands, der Unannehmlichkeiten und der Unsicherheit, ob ich die Einstellungen vollständig wiederherstellen kann, vermeide ich es aktiv, Windows neu zu installieren.

    • Ein Installer erledigt auch viele nützliche Dinge, und viele Endnutzer wollen das tatsächlich. Zum Beispiel Verknüpfungen im Startmenü anlegen, damit man die Anwendung finden oder suchen kann, Dateitypen verknüpfen und sie in die Windows-Programmliste eintragen.
      Früher mochte ich portable Software sehr, aber heute bevorzuge ich eher den Installer, wenn beides angeboten wird. Sonst muss ich sie nämlich selbst ins Startmenü aufnehmen, damit sie auffindbar ist.
      Registry-Keys mag ich allerdings nicht. Sie verschwinden nämlich oft, wenn man das Betriebssystem neu installiert. Einstellungen sollten einfach in %appdata% abgelegt werden.
    • Deshalb mag ich Go. Eine einzelne ausführbare Datei macht es anderen leicht, ein Tool zu verwenden.
      Als Alternative nutze ich auch den Ansatz, mit NSIS eine einzelne ausführbare Datei zu paketieren, die vor dem Start alles in ein temporäres Verzeichnis entpackt.
      Die Windows-Registry halte ich für ein inkonsistentes, schlecht designtes Sammelsurium. Zum Vergleich: Die Registry von Gnome ist gut entworfen. Schlüsselbeschreibungen, eingeschränkte Auswahlmöglichkeiten für Werte und die Anzeige von Standardwerten sind gutes User-Interface-Design.
      Schon die Zuordnung zwischen Windows-Gruppenrichtlinien und Registry zeigt, dass dieselbe logische Struktur überall anders ist, und in den Keys stecken sogar doppelte Verneinungen.
    • Der ursprüngliche Zweck der Registry war, COM anhand einer GUID den Speicherort einer DLL-Datei finden zu lassen. Dann konnte COM eine Objektinstanz erzeugen.
      Die Spuren davon sieht man heute noch unter HKEY_CLASSES_ROOT.
      Technisch kann man Objekte auch ohne Registry erstellen. Man lädt die DLL, ruft eine exportierte Funktion auf, um ein Factory-Objekt zu erzeugen, und erstellt mit dieser Factory dann Instanzen. Genau das macht COM selbst.
    • Dieses einfache und leichtgewichtige Design hat mich ebenfalls angesprochen.
      Der Artikel war auch wirklich ein großartiger Rückblick. Ich hätte mir nur gewünscht, dass der Autor die Schwierigkeiten, die er am Anfang leicht andeutet, etwas ausführlicher behandelt hätte. Aber das ist nur eine Kleinigkeit; der Text ist sehr gut und die Arbeit wirkt tatsächlich ziemlich beeindruckend.
    • Ich bin mir nicht sicher, was der beste Weg ist, eine Single-Binary-App zu bauen, ohne Bibliotheken statisch einzukompilieren. Wegen der Lizenzen wird das normalerweise schwer zu handhaben.
  • Photoshop hat wirklich sehr viele Funktionen; ein paar Bildfilter reichen kaum, um von einer Nachbildung zu sprechen.

    • Aber die Benutzeroberfläche richtig hinzubekommen, ist sehr schwierig und sehr wichtig.
      Auch GIMP hatte 2006 enorm viele Funktionen, aber verglichen mit der Photoshop-Oberfläche war es wirklich furchtbar.
    • Für eine Arbeit im Bachelorstudium ist das trotzdem sehr, sehr beeindruckend.
    • Ich glaube nicht, dass „Nachbildung“ hier wörtlich gemeint ist.
    • Stimmt. Photopea halte ich für den nächsten Versuch eines Klons, aber auch dort fehlen viele Funktionen.
    • Wenn man sagt „Ich habe einen einfachen Bildeditor gebaut“, klingt das natürlich nicht annähernd so beeindruckend. Wenn der Artikel so beginnt, ist das auch nicht überraschend:

      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!
      Sehr bescheiden …

  • Es sollte auch einen direkten Link zu diesem tollen Projekt geben:
    https://github.com/f055/fedit-image-editor

  • Interessant ist die Passage: „Ich habe keine Werbung dafür gemacht. Ein paar Monate später bekam ich einen C++-Job. Am Ende hat sich all die Mühe also ausgezahlt.“
    Instinktiv wissen wir, dass harte Arbeit belohnt werden sollte, aber es ist schade, dass Open-Source-Entwickler so oft viel Arbeit in Code stecken, der insbesondere in der Produktion breit genutzt wird, und dafür kaum echte Gegenleistung erhalten.
    Deshalb sucht man wohl nach Reputationsbelohnungen, NPM baut Funktionen wie „Wie wäre es, dem Autor dieser Bibliothek etwas zu spenden?“ ein, und GitHub hat eine Patreon-Integration geschaffen.
    Wir brauchen ein besseres Modell als heute, eines, das naive, aber ehrliche junge Kreative nicht ausnutzt.

  • Anfang der 2000er gab es ein Projekt namens pixel32, später Pixel Studio Pro. Es sah wirklich ordentlich aus und wurde als Early Access verkauft.
    Am Ende wurde es aber Vaporware; die Leute, die bezahlt hatten, waren sehr verärgert, und der Macher wurde schnell vom Helden zum Bösewicht.
    https://discuss.haiku-os.org/t/pixel-studio-pro-in-past-call...

  • Der Autor sagte, er habe die Warsaw University of Technology absolviert; hier galt sie immer als eine der ziemlich guten Hochschulen.
    Unabhängig davon fällt auch auf, wie anders Abschlussarbeiten damals im Vergleich zu heute waren. Ich habe vor Kurzem an einer technischen Universität in einer anderen Großstadt meine Arbeit geschrieben, und 90 % unserer Ingenieur-Bachelorarbeiten waren auf ziemlich niedrigem Niveau, meine eingeschlossen.

    • Ich bezweifle, dass es heute groß anders ist. Soweit ich weiß, geht es nicht darum, das Fachgebiet voranzubringen, sondern denjenigen, die Bachelor- oder Masterabschlüsse vergeben, zu beweisen, dass man ein Ergebnis in Form einer Abschlussarbeit erstellen kann.
      Es mag herausragende Arbeiten geben, aber die meisten sind vermutlich ziemlich langweilig.
  • Deshalb mag ich Windows. Es gibt unglaublich viel kleine Software mit offenem Quellcode, die bestimmte Nischen gut abdeckt.
    Früher habe ich auf sourceforge.net und freshmeat, ich glaube, so hieß es, herumgestöbert und nach solchen Sachen gesucht.

  • Ein Freund, der bei PhoneGap arbeitete, wurde vor etwa zehn Jahren von Adobe übernommen und portierte dann zum Spaß sofort Photoshop nach JavaScript.

    • Ich will mich nicht über Downvotes beschweren, aber es ist ziemlich seltsam, dass das wie eine Geschichte wirkt, die Hacker News nicht mögen würde.
      Ich dachte, eine interne Hack-Story eines Software Engineers wäre interessant, aber nun ja.
  • Es gibt Dinge, die Menschen bauen und der Welt dann nicht zeigen. Gut, dass das auf GitHub liegt; wirklich beeindruckend.