1 puntos por GN⁺ 2025-03-17 | 1 comentarios | Compartir por WhatsApp
  • La experiencia de haber creado en el verano de 2006 el lector personal de cómics Fiew fue el punto de partida para implementar, como proyecto de tesis, un editor de imágenes similar a Photoshop llamado Fedit usando C++ y la API de Windows
  • Fedit funcionaba como un único ejecutable sin instalador, archivo comprimido, claves de registro ni runtimes adicionales, por lo que podía ejecutarse de inmediato incluso en PCs con permisos limitados o desde una unidad USB
  • La interfaz fue diseñada para parecerse al flujo de trabajo de Photoshop clásico e incluía ventanas de herramientas flotantes, selector de color, gestión de capas, historial de deshacer, filtros de imagen y un filtro personalizado para mover píxeles
  • El mayor reto fue recrear la interfaz de usuario, y llevó mucho tiempo implementar el comportamiento de acoplar/desacoplar del panel de configuración de herramientas, además de los selectores de color y herramientas
  • El proyecto llevó al éxito de la tesis y a obtener una licenciatura en ingeniería, y después impresionó al CTO de GoldenLine, lo que se convirtió en un trabajo en C++ creando una app WinAPI para la carga masiva de imágenes

Del lector de cómics Fiew al editor de imágenes Fedit

  • A inicios del verano de 2006, el punto de partida fue que las apps lectoras de imágenes existentes no le convencían
    • En especial, le molestaba que no se pudiera controlar la lectura solo con el mouse y hubiera que estirar la mano al teclado constantemente
  • Acababa de terminar en la universidad un curso de C++/Windows API, y durante las vacaciones de verano desarrolló por su cuenta el lector de cómics ideal
  • Este lector de cómics recibió el nombre de Fiew
  • A comienzos del otoño de 2006 tuvo que elegir el tema de su tesis, y como el desarrollo del visor de imágenes había ido bien, pensó que también podía crear un editor de imágenes
  • Como en ese momento usaba mucho Adobe Photoshop, el objetivo pasó a ser un editor similar a Photoshop

Cómo fue implementado Fedit y las restricciones de distribución

  • Fedit es un Advanced Image Editor escrito en C++ y utiliza la API de Windows junto con la biblioteca gráfica GDI+
  • Para ofrecer una forma de distribución favorable para el usuario, siguió cinco reglas
    • Sin instalador
    • Sin archivo comprimido
    • Sin claves de registro
    • Sin runtimes adicionales
    • Un único ejecutable
  • Como resultado, era un programa que funcionaba de inmediato sin instalación, podía ejecutarse en sistemas con permisos limitados o desde una unidad USB, y consumía pocos recursos

Una interfaz y funciones cercanas a Photoshop

  • La interfaz fue creada cuidadosamente para verse como Photoshop clásico e incluir las funciones que más usaba
  • Las funciones principales eran las siguientes
    • Ventanas de herramientas flotantes libres
    • Selector de color
    • Gestión sencilla de capas
    • Historial con deshacer paso a paso
    • Varios filtros de imagen
    • Una interfaz matricial que permitía codificar directamente filtros de desplazamiento de píxeles
  • También incluía un visor de grandes bibliotecas de imágenes traído del proyecto anterior, Fiew
    • Permitía desplazarse rápida y fácilmente entre grandes cantidades de fotos

Un proceso de desarrollo que hubo que depurar directamente

  • Aunque consultó mucho MSDN y Experts Exchange, los problemas eran tan específicos que en la mayoría de los casos tuvo que analizarlos y depurarlos por cuenta propia
  • Como debía llegar a la fecha límite de la tesis de licenciatura, durante los últimos dos meses trabajó 14 horas al día
  • El área más complicada fue la interfaz de usuario
    • Quería un flujo de trabajo lo más parecido posible a Photoshop
    • Fue especialmente difícil lograr que el panel de configuración de herramientas pudiera acoplarse y desacoplarse libremente
    • Tampoco fue fácil recrear el selector de color y el selector de herramientas
  • Hacia el final del proyecto estaba bastante agotado y hasta desarrolló cierta aversión por WinAPI

Resultados después de la tesis y materiales públicos

  • La tesis fue un éxito y obtuvo el título de Bachelor of Science in Engineering en la Warsaw University of Technology
  • Fedit recibió algunas reseñas positivas en línea, pero no fue promocionado activamente
  • Más adelante, Fiew y Fedit impresionaron al CTO de GoldenLine, lo que llevó a un trabajo en C++ creando una app eficiente de WinAPI para carga masiva de imágenes para un clon de Flickr
  • Materiales públicos

1 comentarios

 
GN⁺ 2025-03-17
Opiniones en Hacker News
  • Leer la frase “Cinco reglas que benefician al usuario: sin instalador, sin archivos comprimidos, sin claves del registro, sin runtimes adicionales, un solo ejecutable” me dio una sensación cálida y feliz.
    Entiendo por qué existe el registro y por qué el ecosistema de software de Windows funciona como funciona hoy, pero de verdad extraño aquellos tiempos en que la mayoría del software de escritorio era simple.
    Hoy, siempre que puedo, uso instalaciones portables, y me gustaría que este enfoque fuera más común. El tiempo, la incomodidad y la incertidumbre de no saber si podré restaurar por completo la configuración hacen que evite activamente reinstalar Windows.

    • Los instaladores también hacen muchas cosas útiles, y muchos usuarios finales de hecho las quieren. Por ejemplo, agregar accesos directos al menú Inicio para que se puedan encontrar o buscar, asociar tipos de archivo y registrarse en la lista de programas de Windows.
      Antes me encantaba el software portable, pero hoy, si se ofrecen ambas opciones, prefiero el instalador. Si no, para que sea buscable, tengo que agregarlo yo mismo al menú Inicio.
      Eso sí, odio las claves del registro. Porque a menudo desaparecen al reinstalar el sistema operativo. Preferiría que la configuración simplemente se guardara en %appdata%.
    • Por eso me gusta Go. Al ser un solo ejecutable, hace que a otros les resulte fácil usar la herramienta.
      Como alternativa, también uso el enfoque de empaquetar un solo ejecutable con NSIS y descomprimir todo en un directorio temporal antes de ejecutarlo.
      Considero que el registro de Windows es más bien una mezcla desordenada, inconsistente y mal diseñada. En comparación, el registro de Gnome está bien diseñado. Cosas como descripciones de claves, opciones de valores restringidas y visualización de valores predeterminados son buen diseño de interfaz de usuario.
      Basta ver el mapeo entre las políticas de grupo de Windows y el registro: la misma estructura lógica aparece de formas distintas, e incluso hay dobles negaciones mezcladas en las claves.
    • El propósito original del registro era permitir que COM encontrara la ubicación de los archivos DLL a partir de un GUID. Así COM podía crear instancias de objetos.
      Todavía se pueden ver esos rastros en HKEY_CLASSES_ROOT.
      Técnicamente, también se pueden crear objetos sin el registro. Se carga la DLL, se llama a una función exportada para crear un objeto Factory, y con ese Factory se crean instancias. Eso es lo que hace COM en sí.
    • Ese diseño simple y liviano también me llegó.
      El artículo fue una retrospectiva realmente genial. Aunque me habría gustado que profundizara más en las dificultades que el autor insinúa al principio. Aun así, es solo una pequeña objeción; el artículo es muy bueno y el trabajo realmente parece bastante impresionante.
    • No estoy seguro de cuál sea el mejor camino para crear una app de un solo binario sin incluir bibliotecas mediante compilación estática. Por cuestiones de licencia, normalmente se vuelve difícil de manejar.
  • Photoshop tiene muchísimas funciones, así que con solo unos cuantos filtros de imagen es difícil llamarlo una recreación.

    • Pero acertar con la interfaz de usuario es muy difícil y muy importante.
      GIMP en 2006 también tenía una enorme cantidad de funciones, pero comparado con la interfaz de Photoshop era realmente horrible.
    • Aun así, para un trabajo de grado es muy, muy impresionante.
    • No creo que aquí se pretenda tomar “recreación” de forma literal.
    • Exacto. Creo que Photopea es el intento de clonación más cercano, pero incluso ahí faltan muchas funciones.
    • Si dijera “creé un editor de imágenes básico”, por supuesto no sonaría tan impresionante. Viendo que el texto empieza así, tampoco sorprende:

      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!
      Qué humilde…

  • También debería haber un enlace directo a este gran proyecto:
    https://github.com/f055/fedit-image-editor

  • Me pareció interesante la parte que dice: “No hice promoción. Unos meses después conseguí un trabajo en C++. Al final, todo ese esfuerzo tuvo su recompensa”.
    Sabemos instintivamente que el trabajo duro debería ser recompensado, pero es una lástima que los desarrolladores open source tantas veces dediquen mucho esfuerzo a código ampliamente usado, especialmente en producción, y reciban muy poca recompensa real.
    Por eso creo que se buscan recompensas reputacionales, o NPM agrega cosas como “¿qué tal si donas al autor de esta biblioteca?”, y GitHub creó la integración con Patreon.
    Necesitamos un modelo mejor que el actual, que no se aproveche de creadores jóvenes, ingenuos pero trabajadores.

  • A principios de los 2000 existía un proyecto llamado pixel32, luego Pixel Studio Pro. Se veía realmente prometedor y se vendía en early access.
    Pero al final se convirtió en vaporware, quienes habían pagado se enfadaron mucho, y su creador pasó rápidamente de héroe a villano.
    https://discuss.haiku-os.org/t/pixel-studio-pro-in-past-call...

  • El autor dijo que se graduó de Warsaw University of Technology, que aquí siempre fue considerada una de las escuelas bastante buenas.
    Aparte de eso, también llama la atención lo diferentes que eran las tesis de esa época comparadas con las de ahora. Hace poco escribí una tesis en una universidad tecnológica de otra ciudad grande, y el 90% de nuestras tesis de ingeniería tenían un nivel bastante bajo, incluida la mía.

    • Me pregunto si hoy será muy distinto. Según entiendo, el objetivo no es hacer avanzar el campo, sino demostrar a quienes otorgan títulos de licenciatura o maestría que uno puede producir un resultado con forma de tesis.
      Seguro hay tesis destacadas, pero la mayoría probablemente serán bastante aburridas.
  • Por eso me gusta Windows. Hay una cantidad enorme de software pequeño, de código abierto, que cubre muy bien nichos específicos.
    Antes solía recorrer sitios como sourceforge.net y freshmeat, creo que así se llamaba, para encontrar cosas.

  • Un amigo que trabajaba en Phonegap, después de que Adobe los adquirió hace unos 10 años, por diversión enseguida portó Photoshop a JavaScript.

    • No quiero quejarme de los votos negativos, pero me parece bastante raro que esto parezca una historia que a Hacker News no le gustaría.
      Pensé que una historia sobre un hack interno de un ingeniero de software sería interesante, pero bueno, qué se le va a hacer.
  • Hay cosas que la gente crea y luego no le cuenta al mundo. Menos mal que está en GitHub; es realmente impresionante.