[HN Gopher] That Time I Recreated Photoshop in C++
___________________________________________________________________
That Time I Recreated Photoshop in C++
Author : f055
Score : 185 points
Date : 2025-03-15 18:22 UTC (1 days ago)
(HTM) web link (f055.net)
(TXT) w3m dump (f055.net)
| chpatrick wrote:
| Photoshop has a million features though, a couple of image
| filters doesn't really count as recreating.
| ForTheKidz wrote:
| Still very, very impressive for undergraduate work.
| JackFr wrote:
| Nailing the UI though is both very difficult and very
| important.
|
| In 2006, GIMP had a ton of features, but compared to
| Photoshop's UI it was positively awful.
| brnt wrote:
| People say this, but I didnt have such issues using Gimp
| compared to PS. They are different, that's it.
|
| The main thing I missed were stackable layers, but it was not
| a huge issue for me.
| phendrenad2 wrote:
| People say it because it's true for them. User experience
| is after all highly subjective. I think that the open-
| source world largely ignores this fact and pretends that if
| any one person says "good enough for me" then it's done.
| Arainach wrote:
| You could replace that year with any year since the start of
| the GIMP project and it would still be true. It's the epitome
| of an open source project run by people who care about
| technical features, not real world users.
| pdntspa wrote:
| Photoshop had a pretty steep learning curve. "Users" had to
| spend some time getting to know the workflow.
|
| GIMP also has a steep learning curve. But these same
| "users" turn their noses at spending some time getting to
| know the workflow.
|
| As someone who is proficient in both, it is not hard to hit
| similar levels of productivity with GIMP as it is in
| Photoshop.
|
| I hate this attitude that people have with open source
| being "user hostile". Stop acting like spoiled children.
| Why must the software always come to you? Why cant you come
| to the software?
| Lord-Jobo wrote:
| I think the biggest hurdle is that the shortcuts, ui, and
| workflows all feel different for the sake of being
| different. Why reinvent the wheel on it?
|
| I also hate this idea that we aren't allowed to give
| feedback on open source software. I get it, it's an
| incredibly thankless thing to do, but feedback of "having
| to relearn all of this stuff is unpleasant" isn't a
| problematic thing
| mock-possum wrote:
| Last time I checked ( a few months back) there was a little
| package of configurations + plugins / skins that were
| geared towards tweaking GIMP to be more accessible to
| people who were familiar with Photoshop -
|
| And it wasn't perfect, but give credit where credit is due,
| it was better than it's ever been, it definitely got me
| close enough to complete a little photo collage project.
| jeroenhd wrote:
| GIMP definitely suffers from programmer UI design, but
| Photoshop isn't much better. Menus nested in menus nested
| in dialogue boxes, keyboard shortcuts that conflict with
| every other shortcut on any system still in use today, and
| of course the assumption that everyone already knows what
| every button does. It's not quite Blender levels of
| unintuitive, but there's a reason people take courses just
| to use the damn program. If it weren't for the branding
| popularity and the fact Photoshop was one of the first
| programs of its kind, I don't think it'd ever gain
| popularity with that terrible kludge of a UI, and that's
| without the ridiculous price.
|
| Ever since GIMP docked toolbars and windows by default
| (which also took a few versions in Photoshop) I don't think
| the interface is that bad anymore, at least not compared to
| Photoshop.
| 77pt77 wrote:
| What's your opinion on Krita?
| airstrike wrote:
| I don't think we're meant to take "recreating" literally
| bschmidt44 wrote:
| Check out https://photopea.com/
|
| I use it daily.
|
| bro who made it is a beast
| timnetworks wrote:
| The native keyboard shortcuts
| brulard wrote:
| Photopea is really nice. I was pleasantly surprise how many
| features they implemented to a free product. And even UI is not
| half bad. Kudos!
| busymom0 wrote:
| I have used Photopea for so many of my projects. I make apps
| and I use it for every app icon and App Store screenshots I
| have built. Also used it to make memes. Not having to install
| it on my Mac and just easily accessing it from browser is
| immensely helpful.
| urbandw311er wrote:
| Yep. Have it as a desktop icon and use it like a native app.
| mrandish wrote:
| > "It followed a set of five rules to benefit the end user: no
| installers, no archives, no registry keys, no additional runtimes
| and a single executable file."
|
| Reading this sentence made me feel warm and happy. I get why the
| registry exists and things work the way they do today around the
| Windows software ecosystem but... damn, I really miss the days
| when most desktop software was more like this. These days I try
| to use portable installs whenever they're available, I just wish
| it was more common. The time, inconvenience and uncertainty I'll
| be able to fully restore all my preferences makes me actively
| avoid reinstalling Windows.
| dkga wrote:
| That simplicity and lightness of design also resonated with me.
|
| By the way, really cool read-off. The only thing I missed
| though was a deeper discussion of some of the challenges that
| the author alludes to in the beginning. But that's just me
| being pedantic, the post is really nice and actually seems to
| be quite an impressive work.
| yndoendo wrote:
| That is one of the reasons I like GO language. Single
| executable, which makes tooling easier for others to use. My
| alternative method is using single executable packaged with
| NSIS that extracts everything to a temp directory before
| running.
|
| Sorry, Window Registry is a cornucopia of inconsistency and
| poor design. Gnome's Registry is well designed, comparatively.
| Key descriptions, value options with limitations and which is
| the default is a quality User Interface design. Just look at
| the Windows group policy to registry mappings, they are all
| over the place for the same logic layout with double negatives
| for keys.
| airstrike wrote:
| Obligatory comment saying you can do the same in Rust
| IshKebab wrote:
| It's not quite as seamless as in Go to be fair. But it does
| mean you can write Rust instead of Go.
| delusional wrote:
| You can in fact also do it in C
| eptcyka wrote:
| I can't target msvc or aarch-64-apple-* and compile a
| binary on Linux, without resorting to significant amounts
| of rectal dentistry.
| iknowstuff wrote:
| Can't you just replace the "cargo" command with "cross"
| cross build ---target=...
|
| https://github.com/cross-rs/cross
| jeroenhd wrote:
| I've built .exes for Windows just fine on Linux. I don't
| know about Apple stuff, though, I don't think there's any
| built-in Linux tooling to submit an executable for
| Apple's signature scheme.
| p_ing wrote:
| And .NET
| djfobbz wrote:
| Yeah, that's why Go is a solid win - single binary, no
| installer headaches, just build and run. Rust's powerful but
| comes with build complexity and dependency juggling. Go keeps
| it clean, fast, and dead simple to deploy.
| dgfitz wrote:
| I'm not sure what the best path forward is for making single-
| binary apps without static-compiling in of the libraries.
| Licensing usually makes that untenable.
| ryandrake wrote:
| The license is one of many the tradeoffs you make when you
| choose whether or not to include third party libraries. You
| don't have to use them.
| dgfitz wrote:
| I sure don't. You nailed it.
| maccard wrote:
| Pay for it, or open source your work (assuming you're talking
| about QT).
| TingPing wrote:
| The classic option is just a self extracting exe. I don't
| really understand the fear of archives personally.
| gkbrk wrote:
| Which license forbids static linking?
| 01HNNWZ0MV43FF wrote:
| They might be referring to *GPL libraries not allowing
| proprietary / permissive exes to static-link them. e.g. I
| think Qt requires its DLLs to be separate on disk as part
| of the LGPL, unless you buy the commercial license.
| rubymamis wrote:
| Please don't spread misinformation, there's a HUGE
| difference between GPL and LGPL, and you CAN statically
| link with LGPL you just must provide the object files to
| the user so they can re-link them with any version of Qt
| they want.
| thrdbndndn wrote:
| There are lots of useful actions an installer does that (some,
| if not most) end users actually want, including but not limited
| to adding shortcuts to start menu so you can find it or search
| for it, associating file formats, registering to Windows'
| program list, etc.
|
| I was a big fan of "portable" software, but nowadays if a
| software offers both ways, I actually prefer using installer.
| Otherwise I have to manually add them to Start Menu to be able
| to search for it, to begin with.
|
| I do hate registry keys, simply for the fact they are often
| lost after reinstalling the OS. Please just keep all the
| settings in %appdata%!
| pjmlp wrote:
| If only everyone actually kept up with Windows development
| best practices, including Microsoft teams themselves[0].
|
| Configuration via XML files, AppData, registry free COM
| activation, MSI installers, only to quote a few examples, are
| decades old by now, at very least since Windows XP.
|
| [0] - To be fair, nowadays many young employees seem to only
| ever used Windows after joining Microsoft, so what else can
| we expect, if apparently they don't get the right mentoring.
| CLiED wrote:
| Is there a book or site documenting these best practices
| somewhere? I'm getting into windows dev and am curious
| about them.
| p_ing wrote:
| https://learn.microsoft.com/windows/apps/get-
| started/best-pr...
| kibibu wrote:
| I cannot stand AppData, specifically the way it's often
| used to store files that should be in Documents.
| jeroenhd wrote:
| That should be covered by the part about "best
| practices".
|
| That said, I keep finding more AppData files in my
| Documents folders than the other way around. Linux
| software (especially legacy software that doesn't respect
| the XDG spec) is the worst for that, somehow spreading
| files and directories across my user profile directory
| and my documents directory.
| vlovich123 wrote:
| What about a standalone executable that just offered the
| ability to install itself without having a dedicated separate
| installer?
| restalis wrote:
| It would be annoying. If the use-case is as a portable
| application, but the application would want to let the user
| know (in a sufficiently loud manner) that it can install
| itself, then either the user would be forced to pay
| attention at that aspect every time it opens the
| application, or that "portable" application will have to
| somehow pollute the environment with (at least) a note for
| itself of the fact that user was offered but chose not to
| install anything. That note is usually just a first change
| in the system and, for a non trivial application, is way
| too easily followed by many other kind of saved changes,
| which in itself looks like a creeping install. Then, if the
| user would actually choose to install, the app will have to
| do what, make shortcuts to its current location, which may
| be a thumb-drive, or another less ideal placement for a
| program (because how many of us take time to think about
| file management anyway)? Or, if the application makes a
| copy of itself to a conventional place (for an application)
| in the system, then now the useless standalone executable
| either gets forgotten about or becomes a burden for the
| user (who has to decide what to do with it).
|
| The most appropriate behavior for a portable application is
| for it to stay clean by default and only offer the user to
| explicitly enable persistency-dependent functionality. When
| the application starts, it checks if there's any previous
| trace of itself and depending on that it either keeps its
| portable-like clean behavior or switches to installed-like
| one.
| klodolph wrote:
| I'm really fond of the way macOS does this, which is to stick
| this information in the executable.
|
| Back in the day, this worked via a flag in the metadata for
| each file. When you got a new executable, the flag was
| _unset_. The OS would see a file with an unset flag, ask "Is
| this an executable? What files can it open?" and then add
| this information to a database called the desktop database.
|
| This is why file associations work on a Mac without an
| installer, and without writing any code (you just have to
| write the code for "open file in response to OS request").
| alt227 wrote:
| > which is to stick this information in the executable
|
| This is neat, shame they went completely the other way with
| file metadata. It forces a hidden .ds_store file in every
| single folder a mac touches just to store info like access
| time. Every other system stores this in the file itself.
| manwe150 wrote:
| Not to be too annoying, but that file is how it supports
| the feature on non-posix-compliant file systems (usually
| FAT). On filesystems that support file-streams (or the
| original HFS), that metadata is stored on the file itself
| alt227 wrote:
| Considering how pushy Apple normally are when it comes to
| forcing their customers to use new things so they can
| obselete old ones, I am very surprised where Apple have
| drawn the line in supporting older systems.
| p_ing wrote:
| You're thinking of resource forks. .DS_Store is stored as
| ".DS_Store" even on APFS.
| NobodyNada wrote:
| Windows does the same thing with 'Thumbs.db' files.
| They're just hidden from you on Windows systems, just as
| .DS_Store files are hidden on Unix-like systems; but
| you'll see them if you use a thumb drive with both types
| of machines.
| alt227 wrote:
| So why are the smb shares on my linux file servers full
| of millions .ds_store files but zero thumbs.db files? I
| have to run automated scripts to remove them regularly,
| and try to run the commands on the macs to stop them
| writing ds_store files to network shares [0]. But still
| it seems to magically reenable itself every now and then.
| This is a problem I have never had with windows machines
| and 'thumbs.db' files.
|
| [0] https://web.archive.org/web/20190714230437/https://su
| pport.a...
| p_ing wrote:
| If I recall, Windows does not generate thumbs.db files,
| thus file icons-as-pictures, on any non-local device.
| Lammy wrote:
| Relevant: "The Mac, Metadata, and you" (2001)
| https://arstechnica.com/gadgets/2001/08/metadata/
| paulddraper wrote:
| I mean...that's just the same thing right?
| klodolph wrote:
| Same thing as what? Same thing as having an installer
| modify HKEY_LOCAL_MACHINE\Software\Classes, and having
| the associations break if you move the program to a thumb
| drive?
| cosmic_cheese wrote:
| Furthermore, the OS can pick up the extensions, services,
| etc the app carries within its app bundle and offer them to
| the user to enable this way. No need to copy files to
| obscure directories (be it manually or with an installer),
| and when you trash the app bundle they're all gone.
|
| This is why merely having a copy of an app is enough to
| make QuickLook able to preview the filetypes the app is
| capable of opening. The system picks up the QuickLook
| extension in the app bundle and enables it.
|
| It's not perfect since small .plist config files get left
| behind, but it's a whole lot more clean by default compared
| to the Windows approach.
| delusional wrote:
| After using Microsoft Intune I will never again complain
| about installers. At least installers mostly work, and when
| they don't you can run them again.
| Kwpolska wrote:
| If I want to use a program once, I'll just use a portable
| version. And I'll be angry if it decides to add itself to the
| context menu of all Explorer files.
|
| But I agree, for things I use more often, installers are the
| way to go, and I am not a fan of projects that just give you
| a zip and ask you to figure out where to put it.
| marcodiego wrote:
| > no installers, no archives, no registry keys, no additional
| runtimes and a single executable file.
|
| This is exactly the experience nowadays with AppImages.
| Narishma wrote:
| AppImages still leave traces in your home directory. If
| you're luck it's just a dot file or folder that can easily be
| deleted but I've seen some that pollute a lot more.
| tonyhart7 wrote:
| only works with hobby project with barebones feature
| StefanBatory wrote:
| Author of this article said he finished at Warsaw University of
| Technology - it was always considered to be one of the better
| ones here.
|
| That being said, what also strikes me is how different the thesis
| were back in times. I did mine recently in another university of
| technology in some bigger city (without wanting to dox myself
| that much) and 90% of our engineering theses were of very subpar
| quality; mine included.
| netsharc wrote:
| Is it any different nowadays? AFAIK the goal isn't to advance
| the field, but to prove to the people giving you the
| Bachelor/Master's degree that you're able to create a "paper".
| Some theses stand out, but most of them are probably quite
| boring.
| StefanBatory wrote:
| It seems to me like their tasks were way heavier. For us,
| most of us did basic CRUDs with some implemention twist, and
| our papers were your standard: do a short theoretical
| introduction to the domain, make a few UML diagrams, explain
| how it works + some code examples, then testing.
| nailer wrote:
| A friend from Phonegap got acquired by Adobe a decade ago and
| ported Photoshop to JavaScript for entertainment purposes
| immediately afterwards.
| nailer wrote:
| Not complaining about downvotes but it seems a very odd thing
| for Hacker News to dislike. I would have imagined an internal
| story about a SW eng's hack project would be interesting. Oh
| well.
| brulard wrote:
| I didn't downvote, but I fully understand if anyone would.
| Your comment shows some serious lack of understanding of the
| complexity of software like photoshop and the complexity of
| porting software. We may believe that's what your friend told
| you, but we have troubles believing he really did that. Maybe
| exaggerated (a lot)?
| aa_is_op wrote:
| Did it crash every 30 minutes?
|
| If not, how much are you selling it for?
| echelon wrote:
| It looks like you could have sold licenses to this or gone the
| startup route. Might have been slower and less glamorous than the
| gig you wound up getting, though.
|
| The UX looks simple and reasonable. Frankly better than Gimp.
|
| Really cool work!
| pessimizer wrote:
| > Frankly better than Gimp.
|
| Only for people who think that things are good to the extent
| they "resemble Photoshop as much as possible." [direct quote]
| The Photoshop UI isn't ideal, it's fairly terrible (not as bad
| as Illustrator, but they're both just _old_ ), but people don't
| want to waste the huge effort it took to commit all of that to
| muscle memory.
|
| Cloning Photoshop for a thesis is wild, though. From a comic
| book reader to most of Photoshop in one leap.
| IshKebab wrote:
| > It looks like you could have sold licenses to this
|
| Doubt it. There are too many good free options on this level,
| e.g. Krita.
| jeroenhd wrote:
| Today? Sure. Photopea blows any hobby project out of the
| water.
|
| In the summer of 2006? This could've been a commercial
| product for sure.
| echelon wrote:
| Krita blows though. It looks and feels like a horse of an
| app. I'd pay for better UX.
| pacifika wrote:
| The things people make and not tell the world about. Glad it's on
| GitHub, this is so impressive.
| dingdingdang wrote:
| Let's get a direct link to this beauty in place:
|
| https://github.com/f055/fedit-image-editor
| brulard wrote:
| There was a project called "pixel32" and later "Pixel Studio Pro"
| in the early 2000s. It looked really nice and was sold as early
| access. But became vaporware, people that paid became really
| pissed and the guy creating it turned from hero to villain
| quickly.
|
| https://discuss.haiku-os.org/t/pixel-studio-pro-in-past-call...
| 90s_dev wrote:
| > But I didn't promote it. A few months later, I landed a C++
| job. So in the end all that effort paid off.
|
| It's interesting how instinctively we know our hard work deserves
| to be paid off, but it's a shame how often open source developers
| put hard work into code that never really gets paid off,
| especially when it's widely used in production. I guess this
| explains why so often they look for reputation credits, or why
| NPM added the "maybe you should donate to the authors of these
| libs" feature, or why GitHub built in Patreon. There's got to be
| a better model than what we have now, that doesn't take advantage
| of naive but hard working young thinkers.
| theodric wrote:
| Slick. Runs pretty well under Wine!
___________________________________________________________________
(page generated 2025-03-16 23:00 UTC)