That Time I Recreated Photoshop in C++(f055.net) |
That Time I Recreated Photoshop in C++(f055.net) |
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.
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%!
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”).
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.
This, I don't really mind unzipping some random small utility, but for things like games and larger applications where you'll actually be saving data and preferences, a real installer that knows how and where to put things following the correct methods for the operating system is much preferred. Then I can run the uninstaller to clean it up when I'm done with it.
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.
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.
You still see that in there with HKEY_CLASSES_ROOT.
You can technically create objects without the registry, if you load up the DLL, then call the exported functions to create a Factory object, then use the factory object to create instances. It's what COM itself does.
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.
This is exactly the experience nowadays with AppImages.
In 2006, GIMP had a ton of features, but compared to Photoshop’s UI it was positively awful.
As a student I used a ton of warez software in the 90ies. As such, I didn't have any real prejudice back then, and photoshop was the worst of the bunch from my perspective. I held that view for a long time, akin to how I consider autocad from autodesk one of the worst cads you could use despite being outrageously popular.
I have no longer an opinion on it as I didn't use it for such a long time. I'm cycling between krita and GIMP, and GIMP's UI is just fine to me, in the same way I suppose a ton of designers-with-big-opinions are more familiar with photoshop due to all the training they did on it (and probably, _mostly_ on it).
The main thing I missed were stackable layers, but it was not a huge issue for me.
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.
https://discuss.haiku-os.org/t/pixel-studio-pro-in-past-call...
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.
In this case, replicating Photoshops UI seemed to be the hardest. Maybe using something like MFC, Qt, C++ Builder instead of straight Win API would have been easier.
I remember a long time ago when I was in high-school and tried to implement a paint program under DOS, that had windows using Borland C++ and BGI graphics library. How hard should it be to implement windows, buttons and dialogs, I thought? After all, with the power of OOP and C++, every problem is easy to solve, I thought.
If your app needs two inputs and a button then this won't be so much of an issue, but I've wrestled with qt in the past for more complex layouts that I hate it with a passion.
If not, how much are you selling it for?
Which is now infuriatingly lacking in the entire domain of image editors. Thumbnail browsers used to be an expected feature of image editors, even shareware ones. Now? Fat chance. Good luck even finding a stand-alone one.
Recently one called FlowVision surfaced for Mac, and it's pretty much the lightweight browser that many of us have been looking for for years. It has some rough spots, but the developer is responsive to issues. https://github.com/netdcy/FlowVision
The UX looks simple and reasonable. Frankly better than Gimp.
Really cool work!
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.
Doubt it. There are too many good free options on this level, e.g. Krita.
>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!
Such modesty...
No.
He had access to the source code as an Adobe employee, he's a well known low level JS engineer (hence making Phonegap) and there are LLVM to asm.js webassembly compilers.
Krita is very functional as a digial painting program. But I think the dev team took the "painting" part of digital painting too literal. They clearly spent a lot of time developing niche brush features (the only painting app has more detailed brush settings I know is Corel Painter), which is nice, but some other areas are neglected.
In comparison to Photosho, it's quite painful to add any text in Krita. The layer styles and filters are much less performant. But if you only do painting, Krita is totally fine.
Though my favorite UX (and features) of all time is Paint Shop Pro 7 which i find superior to Krita (i have it installed alongside Krita, GIMP and Kolourpaint -used for minor edits since it starts instantly- on my Linux setup via Wine). I used it since Win3.x days in the 90s until PSP8 was released and they screwed up the UI. I moved to GIMP some time later when i started using Linux and used that for years. Some years ago i found a boxed copy of PSP7 anniversary edition, reinstalled it and despite not using it for more than a decade i found it much easier than GIMP and i'm using that since, until i wanted to make a plugin to assist me with texture painting for 3D models. Making plugins for PSP7 was very cumbersome so i thought to try Krita instead (Krita has an MDI mode which i like when working with images) and ended up sticking with it since making the plugin was relatively easy[0].
I'll download Krita's source code and try to build it and add the features i miss from PSP7 at some point, KDE people do not seem very allergic to having options so i might be able to recreate the stuff and behavior i miss from PSP7 in Krita.
In order of preference:
1. PSP7
2. Krita
3. Pixelmator (only under macOS of course and i only used an old version before App Store with the only alternative being GIMP running under XQuartz - i think GIMP got a native version later but i never used it)
4. GIMP (i found older versions easier to use, but every time they introduce a new major UI change i find it more awkward than before and now they're switching away from Gtk2 to Gtk3 -which i dislike the feel of- i decided to stick with Krita)
5?. Photoshop, maybe (i only used it a little in the past, always found it more cumbersome than GIMP or PSP, but it'll do if nothing else is available)
[0] https://www.youtube.com/shorts/tFYkGyaXCw0 1 minute example of the procedure for editing a brush style
https://docs.gimp.org/en/gimp-brush-dialog.html
Which says:
It is a general rule that you cannot alter the resources that GIMP pre-installs for you: brushes, patterns, gradients, etc; only ones that you create yourself.
It's okay to be annoyed when something doesn't work the way you want it to, but RTFM before you make a rant about it. It's the bare minimum.
Actually check it out yourself, and give yourself some time to get used to it. If you care about not using PS of course.
"done" is defined by the creator of the software. If you're the creator of GIMP and it's suitable to your purposes, you can call it "done". But ostensibly, you made it free so that others could benefit from your efforts, and possibly even open-sourced it so that it would be accepted as safe to use. If that's the case, then something isn't "done" unless you're happy with the number of users who find it acceptable.
I suspect that the creators of GIMP fall farther on the side of "suitable for our purposes" than on the side of "suitable for a large number of people's purposes" (however this may be unintentional and/or laziness or bad strategy on their part).
> Actually check it out yourself, and give yourself some time to get used to it.
Assuming I haven't is an extremely bizarre but inexplicably commonly-made mistake. Can you explain what leads to this mistake?
> If you care about not using PS of course.
You might not realize it, but this is a (perhaps unconscious) "no true Scottsman" fallacy. I take it you're not a creator of GIMP, so you don't have any authority to say what GIMP is intended for. So the idea that it's for people who "care about not using Photoshop" isn't a valid assertion. That's your opinion, but you should try to back it up with something. I see nothing on the website or the Wikipedia page that backs up the claim that it's for people who "care about not using Photoshop". It seems like it's for a much, much wider variety of people than that. Why gatekeep like that?
cross build —-target=…
https://github.com/cross-rs/crossThat 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.
Seemed like a bunch of disparate things with the most common probably being a dumping ground for programming language library caches (Maven and NuGet and maybe another couple).
Which programs do that? Or do you think things like preferences for programs should live among your documents?
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.
Same goes for post install - not too hard to arrange to auto delete the old copy.
It didn't work so well (probably not programmed that well I guess).
Yes, it was very poorly programmed. It always surprised me how popular it was. I think it was kind of a middle- to high-school meme game. I think the main popularity was that A) it was edgy, and B) kids could run it in school computers.
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.
- How to set 'C' key as to open color palette? Surprisingly, you can't do it in Photoshop.
- Photoshop is the only painting app that needs a completely new interface for liquifying, instead of just implementing it as a brush.
- Photoshop's 3D, vector path and animation feature are all abysmal. I guess it's to push you to buy other Adobe software.
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.
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?
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
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.
Either way, the end result is still better than under Windows because at least macOS doesn’t go out of its way to keep the Application Support folders (user and global) hidden with magic URLs and such. Tick the checkbox to not hide the Library folder in your home folder’s Finder inspector window and the only thing making access harder is gone.
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.
It always seemed suspicious to me that Apple, a company that is famously obsessed with UI/UX, would settle on such a ridiculous process for storing file metadata.
[0] https://web.archive.org/web/20190714230437/https://support.a...
The way to access your folders in windows is literally exactly the same -> show hidden folders - the "urls" (%APPDATA%) are just shortcuts because of the historical moving around of stuff. Most devs leave all sorts of trash in OSX application support, check it out, its jam packed. Some apps are now running from there.
And yeah, Application Support is full, but as noted the worst offenders are consistently cross platform apps that don’t care to adhere to convention. The Application Support folders for Mac-first apps are usually pretty lightweight/clean, with exception to apps like Logic which use it as a place to keep downloaded assets.
I think they finally stopped the re-hiding behavior.
None of that compares to the mess that is Windows's user directories. I mean... WTF is all of this stuff? There are two or three copies or shadows of the user-directory structure, and everything is "forbidden..." Windows is just painful and infuriating to use at this point.
Let's just call it what it is: a complete mess. Some apps install their binaries in there, some just config files, some all your data.
If there are guidelines (and they are not conflicting) about 1/3 of apps are ignoring them.
Also good luck trying to back it up with robocopy or anything, maybe windows' own backup tool can read it while running on that account, I usually get errors, which I think are mostly fine to ignore.
They switched to storing thumbnails locally.
The next Mac visitor who comes along will overwrite the turd with his own, so that's a blunder.
Then there's the fact that they could have stored all the turds on the local machine, keyed by URI or path or network address. This would solve both the dickishness and the overwriting problem. And if a remote machine's path or address changed, whoop dee doo... you lost your Finder layout for that directory. Pretty low stakes.