My return to desktop applications
ashlan.com
ashlan.com
The separation has two benefits: One can work with the data independently from internet access, and one can choose between different applications that understand the data format, including writing your own, without having to depend on a third party. Controlling what is shared is then also independent from the chosen application.
Lastly, native applications can have the benefit of improved usability by adhering to the platform conventions and having better integration into native features.
Which is arguably "just" a much deeper form of "owning your data." One that I wholeheartedly agree with by the way.
By the way, I think what the author should have phrased it as is "local first" applications.
For instance, I host TinyTinyRSS on my Sandstorm server, and if on a machine that isn't mine, I can just use the web interface to read for a bit. But I definitely have preferred client apps on both my phone and desktop OSes for devices which I use regularly.
If you want me to send you the Appx, hit me up at me (at) ocdtrekkie.com
Also, if there's a TTRSS client you really want to get working with the Sandstorm version, kick open an issue on the repo and let's see what we can do. (https://github.com/zenhack/ttrss-sandstorm/) Usually I've found the biggest challenge is many client apps don't support HTTP Basic Auth, which is what the Sandstorm API requires. If the server-side plugin will work in the Sandstorm environment and isn't detrimental to the package, maybe we can include it.
There is a bit of a general runaround to maintaining app store presence, keeping versions up to date and stuff, if someone doesn't want to use an app anymore personally and also aren't making money on it, I definitely can't fault them for delisting it.
I think you've hit the nail on the head, its like an extreme version of software rot.
Is there any good FOSS middleware to handle this? CoreData (based on sqlite) can sync data to an iCloud CloudKit container[1]. Firebase can do this[2]. And Couchbase-lite-C can do it with JSON documents[3].
Couchbase is the only system I know of that does this transparently and is open source across the board. But for some reason no one seems to be using it.
[1] https://developer.apple.com/documentation/coredata
[3] https://help.obsidian.md/Obsidian/Obsidian#How+we're+differe...
[5] https://braintool.org/2022/04/29/Tools4Thought-should-use-Or...
Retaining your data is important, but so is retaining the application. Google Takeout is a great example: You can download all your data but literally nothing ingests most of it and makes it at all useful, so it's mostly pointless to download a bunch of JSON files.
I use and contribute to Sandstorm.io, but also on the open source side there is also YunoHost, and on the proprietary side is Cloudron and Umbrel.
Self-hosted applications can still be closed source, but hosting them locally means you can monitor their behavior, and they should continue to work even if the developer shuts down and abandons it.
This is perfect, thank you so much. I'm going to try it.
Highlights:
* You can drag-and-drop plugins from other wikis you come across
* You can write own plugins and customise everything
* Hostable as a self-contained file (one index.html) and it builds itself (a quine)
* You can host it in Node if you want stand-alone note files
Still didn't figure out a good mobile workflow though.
And unfortunately also Flutter.
I am developing my own cross-platform, desktop-only GUI system. It is rough going for me, but the ideas in it are really not that hard. What surprises me is that no company has stepped up to fill the gap left by GTK, Qt, wxWidgets, and the OS-specific frameworks other than Flutter and Electron. Flutter and Electron can't even manage multiple windows. It's a shame. Because for a team of competent folks, I really don't see any massive barrier to creating a cross-platform, desktop-only GUI framework. And for some reason, academia doesn't seem to be interested at all in GUIs and other such things, despite there being a lot of interesting and difficult problems.
To be honest, I never wanted to create this. I originally wanted to experiment with making my own desktop programs but found the existing solutions too unsatisfactory or complicated. I also do not want to use C++. The closest I got was using Racket's GUI toolkit, but I found I was going to have to be writing a lot of custom widgets anyway, and I was also dealing with bugs and slogging through terse documentation.
How so? I use multi window Electron apps, VS Code is one of them
I think parent is thinking about a behavior like the tool panels in Photoshop.
https://www.electronjs.org/docs/latest/tutorial/process-mode...
This is not how native desktop applications handle multiple windows, although they could obviously.
What I mean by "managing multiple windows" is a single OS-process and application managing multiple windows: creating them, destroying them, hiding them, etc. Electron cannot do this. You are basically creating separate applications that talk to each other through inter-process communication. I mean, it says it right there in the link you posted. The process model of Electron is complex.
Here's how you create multiple windows in my in-work prototype:
let windowing = Windowing()
windowing.Initialize()
windowing.CreateWindow("Window 1")
windowing.CreateWindow("Window 2")
windowing.CreateWindow("Window 3")
while(windowing.WindowsAreOpen) do
System.Threading.Thread.Sleep(100)That would be quite a load if the user decides each current pane is now an independent window on the screen.
I remember JVM apps hitting this same issue. There are many ways to make two entities talk together (if IPC wasn't an option, a local IP channel would work as well, albeit way more costly), but then the performance would be abysmal, for apps that were already handicapped. Same process windows are way lighter than that.
Developer adoption is a big one. Why should I trust your NewGui to still be updated and improved 5 years from now?
Even Microsoft has a whole graveyard of dead GUI frameworks (WinForms anyone?)
Microsoft is one of the examples of what not to do. They have made great strides with .NET Core and now .NET 6+, but I have no idea why they're doing what they're doing in the GUI scene.
Here's one: cross-platform GUI apps will, without exception, feel subtly wrong on every platform. Each platform has its own "way" of doing things.
I imagine you could make something that at least gives you as much opportunity to fit in as electron, with accessibility support, and some new ideas, be it from a development paradigm, inbuilt widget sets, or something else.
Sometimes, developing a simple tools should be simple (without all the overhead of shared business logic, etc.), but in my experience, there is too many obstacles to make simple GUI tools that just works. It's a shame, I believe that many teams would have increased their efficiency if there were easier ways for individuals to make simple tools adapted to their specific needs. Now, they are typically stuck with Excel...
No you won't. We've had cross-platform libraries like SDL to do that for ages.
The "interesting" part, if anything, is using a document-based paradigm to build a GUI-driven application, with separation of concerns between code, layout and semantics. But none of that has to be done with webcode.
Except that the backend part of the app doesn't run in the browser, it runs in Node. So it's not shipping applications in containers, even if one views a web browser as a container.
You're stating as an objective fact what is you own aesthetic opinion.
Yes, different platforms are different, and the same app behaves differently on different platforms. But most people don't switch platforms or use the same app on different platforms routinely, and it wasn't an issue prior to Electron, when the most likely manifestation of this would be the use of the same browser on different platforms.
Then you have something that looks as if it should behave like a certain widgets you’re used to, except they behave in subtly different ways. That’s where that idea comes from.
Now if you go all 90s WinAmp and create all your own widgets, then that mostly goes out the window, until you enter a text box…
I'm using all of these in my ui-mock,[1] which is a GUI for a game without the game. It has 3D graphics with 2D GUI elements on top. I'm using this to shake down all the cross-platform problems for my metaverse client. My own code, which is 100% safe Rust, has no platform dependent code.
Results are pretty good. There's minor dirty laundry in those libraries, which has been reported to the various maintainers. Stuff like this:
- You can get a file dialog hidden behind the main window, which, in a full screen program, is a real problem. Mostly a Linux problem; works fine on Windows.
- Full screen on Windows mode under Wine 7 crashes Wine. Known Wine bug.
- Warnings from WGPU, but it works around all of them with some minor performance loss.
- Cross-platform packaging, to make a Windows installer without Windows, isn't implemented yet.
So, not big stuff. A lot of stuff works that you might not expect to work, such as profiling with tracy. Wgpu is taking care of Vulkan vs Apple's Metal. (Apple just had to Think Different, to the annoyance of everybody doing 3D.) Opening a web page in the default browser is cross-platform. You can cross-compile - I build the Windows version on Linux, without using any Microsoft tools.
With some more work, I could make this work on WASM and Android as well, but that requires some special casing, mostly because WASM doesn't have proper threads.
So cross-platform desktop development is working pretty well. Most of the problems I'm running into would not appear in a more typical application.
EDIT: and also libuv which is the cross platform event loop for node.
Is that really true though? No one cares about this for webapps, so why do they care about it on desktop apps? In my opinion, this is one thing that web apps have taught people, in that there isn't much sense anymore about having OS-specific "look and feel", if that is even a thing, and I think the OS-makers agree because even Windows and macOS are chock full of inconsistencies. And in general, I hate moving across apps, like Visual Studio and Outlook for example, that adopt the OS-isms of their host OS, because it means you gotta learn the same app twice.
About the only real difference are the way menu bars, toolbars, and docking are handled, and probably file pickers. Outside of that, I don't see why an app that looks the same across three different OSs is bad.
Web apps are easier to learn and functionality is more discoverable often at the price of having less functionality.
Desktop apps are consistent, and have more functionality, but unlocking that functionality takes a lot of effort on the user's part.
This is, in theory, what you're asking for. It's not perfect. But nobody uses it and there are few contributors. In most threads lamenting Electron, it barely gets mentioned. So:
>I really don't see any massive barrier
I think the barrier is a lack of interest. If anyone thinks about building a cross-platform native-widget GUI framework, they only have to consider briefly the near-total obscurity of wxWidgets and how much work it would take (a lot!) to even reach feature parity with the same.
Disclosure: I'm a Developer Relations Engineer for Flutter
Flutter still cannot manage multiple windows on desktop, which makes it a no-go for my use cases, and it doesn't look like it's coming anytime soon: https://github.com/flutter/flutter/issues/30701. The original issue has been sitting around for four years.
Probably not in writing C++ apps.
I'm still hopeful we'll get a high-quality cross-platform GUI framework out of the Rust ecosystem at some point. But unfortunately it's looking like it might be at least a decade away at the moment.
Given the way Rust has evolved, I don't really hold much hope that it'll be any better than the existing options. Rust keeps intriguing me, but then I start looking into it, and everything is just extremely complex. I'm not sure I have the time to really learn it or will even like it. For my own work that I'm doing, I'm using F#.
What happened to Qt? As far as I've seen, it's actively developed and as good as ever.
It's not that these toolkits are gone -- it's that the desktop metaphors you are looking for are gone. Or at least, as gone as these toolkits: neither of which is dead by any measure, but your assumption that they are dead likely comes from the fact that the target users for these have almost completely vanished.
Even most builtin Windows apps these days are single window square boxes with a webpage inside. There is a reason Qt the company was trying like crazy to target the "single window, no widgets, 3D graphics" market.
And I don't buy the argument that the market is gone. Everything we interact with on the computer is through a desktop app. The fact that so many apps are written in Electron tells us two things: (1) many people still need to write desktop apps, (2) there is no good cross-platform framework to do so.
Chrome and Firefox are pretty good cross-platform frameworks. They are so good than the OS vendors keep coming out with workalikes like Edge and Safari (and by the way, both are really good).
As a software publisher I love it because if it works in Chrome and Firefox, I mostly don't have to even care if you have a Mac, PC, smartphone, or something completely different. You go to my URL, and there it is. Stuff like PWAs and Electron are great, too, because I can make it easier for users to get into my app - just launch the application. No more two step, launch browser, type in URL or click on bookmark.
For web app development, you need, at a minimum, three separate programming languages but typically more, a host server, and a desktop app to render your app. That is not a "good" framework, in my opinion. And the number one thing support people ask is "have you tried it in Chrome?". Isn't that weird thing to ask? "Can you use another desktop app to verify that my app is working or not?"
Web and mobile apps do not support the types of apps and functionality that I am interested in. That's fine that people are happy enough with web and mobile app development. That's also why I do not care to even address those scenarios, not to mention that they are completely different from desktop apps.
The barrier is opportunity cost; there's plenty of actively maintained, cross-platform—often desktop-only or desktop-first—GUI frameworks, both ones with many language bindings and ones that are specific to particular languages. Sure, a competent team could make and maintain another one that maybe fits their preferences better than the existing ones—or they could make a useful app using one of the existing ones.
> And for some reason, academia doesn't seem to be interested at all in GUIs and other such things,
Academia is interested in them if it's about new UI paradigms or something, but not it is just bikeshedding.
If JavaScript isn't your comfort zone or you don't come from frontend web development, Qt in particular is awesome. It comes with a ton of primitives that you don't have to reinvent from scratch. It has UI controls that do the complex stuff you want without having to pile a bunch of event binding code on it. You don't even have to write C++.
It bothers me every time I read about Electron's redeeming quality being that it allows web developers to build native apps. Python is a "web" language, and you don't need to write anything but Python to make a great Qt app. A famous Electron app like Slack could have very well been written by web developers using Python, and I bet it would feel snappier than today's Slack.
Good luck with your GUI system, btw. I'd love to see what you make.
It's written in Java with JavaFX. Short term I'm reasonably comfortable with folks downloading a "fat jar" and then grabbing the JDK on their own, and, perhaps, firing off a .sh or .bat file to run it. Mostly because I don't have a Windows box to try the whole jlink or jpackage process.
But then I started packaging it up for delivery.
JavaFX has platform dependent shared libraries, all of which would need to be bundled in the fat jar.
After building it, the result came out to 48MB... .. .
This "app" is a pane with about 20 controls on it and a GO button. It's less then 2000 lines of code. And the deliverable is 48MB.
I know, I know, that fancy animated GIF icon on that forum for someone's Avatar is probably 48MB.
But that doesn't mean it doesn't chafe me to do so. That's not even including the JDK.
I shouldn't care, but it was soul crushing.
On total whimsy, I tried Flutter. I downloaded it, and built "Hello World" for macOS. Not only did it take an eternity to compile (on my modern, SSD enabled, eleventy gigablip iMac), the result was 108MB. And that was just for the Mac version, I'd need 2 others for Linux and Windows. The compile time was glacial (I know, its got hot reloading to speed things up).
I'm sure the Electron vesion artifact is similar.
I should just shut up and take it, but it rubs me the wrong way. I'm currently exploring the possibility of doing it as a PWA targeting Chrome, dunno how well that will work, but apparently with Chrome you can save and load local files (which is something I want to do). But I can't see my large vision being done as a PWA.
I should put my head down, blinders on, and push on through.
But for the moment, I'm irked.
Can you tell me more about what's missing in PWAs in terms of support and UX?
PWAs are well supported in Chromium browsers. Can't speak to Firefox support, but I hope as adoption and usage grows we'll see them add more support.
Something else I feel would make PWAs much more interesting to most people is if the browser _prompts_ the person to use the PWA, if I'm not forgotten Chrome does this on mobile but not on desktop. You also don't really have much option when it comes to customizing the PWA if the provided manifest gives a bad icon or something like that.
But overall the Chrome browser is the best for PWAs right now on both desktop and mobile. Firefox however has dropped support _completely_ for PWAs which is why I personally don't even consider it an option anymore. Some discussion here: https://connect.mozilla.org/t5/ideas/bring-back-pwa-progress...
AFAIK Apple doesn't really support them too (although theoretically Steve Jobs really liked them when the iPhone first launched) because it undermines their business model of the App Store. I wish companies would use them more because they truly are the best way to develop cross-platform right now (and the PWA size is just the size of the page load for the SPA!)
I know we are living in a bubble as HNers, but this can be disproven quite easily. I opened the website of MediaMarkt (a major European electronics retailer) and clicked (literally) the first laptop I saw:
https://www.mediamarkt.nl/nl/product/_acer-aspire-3-a315-35-...
4GB RAM, 128GB SSD.
OK, maybe you consider that one too cheap (although there must be people buying it). Let's click the first 'reasonable' one:
https://www.mediamarkt.nl/nl/product/_acer-nitro-5-an515-57-...
512GB SSD but 'only' 8GB RAM. (And this is supposed to be a gaming laptop!)
I won't dispute electron apps are also often slow, but there are counter examples, such as VSCode, that are actually reasonably snappy on fairly modest systems.
What's the counter example that runs on JVM where I might not notice it's running on the JVM? (I'll also freely admit I've spent the last decade avoiding java apps when I can, because I've never had a pleasant experience due to the combination of performance and early-2000s aesthetic. Maybe the situation is vastly different today and it's just me that's outdated)
Otherwise on the JVM in general, something like jwhois is very snappy to start up.
I know there are other frameworks - imgui, for example, which uses GPU rendering for its widgets - but none that I’ve found check all the right boxes.
To me, those boxes are: “I want to write an app using one framework, and when it’s done, I want the person on Mac to think it was made with AppKit; the person on Windows to think it was made with UWP; the person on Ubuntu to think it was made with GTK.”
Qt is the closest I’ve found, and it’s still not totally what I want (not including it’s licensing scheme, which also is a huge turn-off).
It really is a fun framework to develop with and it’s signal/slot feature is a delight. I’ve recently developed a Wt web app and the learning curve was basically zero after having the Qt “expertise” I do, quoted because even after 10 years with it I’m always learning something new. The more I learn the less I know kind of thing.
I've been dabbling in GTK and if it's just a personal or linux app then I'll do it in GTK using javascript/typescript (and I'm very curious to try out GTK for windows/mac at some point), but for now a serious app, Qt is the real choice.
- the native platform framework. - electron/web
As much flack as slack gets for example it looks 50x better than any QT, GTK, Java, or WxWidgets app I’ve ever seen.
Another thread here was talking about how they WxWidgets to make an app that looked native on each platform with a small binary.
Unfortunately not a single one of these screenshots looks like it belongs in a modern desktop. https://www.wxwidgets.org/about/screenshots/
- wanting a single code base that I could compile for Mac/Win/Linux
- startup times measured in milliseconds
- snappy and native looking UI
- a executable size of 10MB (Mac) / 17MB (Win) / 12MB (Linux).
The bulk of that exe size is the wxWidgets UI library I statically compiled in. If you wanted to get that crispy couple of hundred kilobyte sized binary you'd probably have to directly use the native UI API of each platform, and therefore be in for not being able to reuse very much between each platform. (github.com/allanrbo/filesremote if anyone wants to see the result)
Real desktop app development feels like a dying art. (And arguably my use of wxWidgets made it not even "real real"). And I feel like it's not even harder than trying to shoehorn the web dev tools into desktop apps with things like Electron. It's just different and sort of forgotten it seems :-)
Doesn't wxWidgets wrap and abstract over the native APIs for each respective platform?
Seems real enough to me.
I once decided I'd write a GUI in pure win32 (when Windows 7 was new) and the experience really, really sucked. In my book there's no shame in using a GUI library any more than a socket library.
No need for three different native code bases, you should simply use FLTK. It's actively maintained, works on win/lin/osx and is just 300kB when statically linked. However it doesn't look native, if this is a serious issue for you.
Either of these two would give you Windows, Mac, and Linux coverage for your app (and in the case of Delphi, also mobile apps).
* Lazarus - https://www.lazarus-ide.org
* Delphi - https://www.embarcadero.com/products/delphi
I'm curious how you got 108mb. Here's what I'm seeing:
$ flutter --version
Flutter 3.0.4 • channel stable •
https://github.com/flutter/flutter
Framework • revision 85684f9300 (7 days ago) • 2022-06-30 13:22:47 -0700
Engine • revision 6ba2af10bb
Tools • Dart 2.17.5 • DevTools 2.12.2
$ flutter create hello_world && cd hello_world
Creating project hello_world...
Running "flutter pub get" in hello_world... 1,764ms
Wrote 127 files.
All done!
In order to run your application, type:
$ cd hello_world
$ flutter run
Your application code is in hello_world/lib/main.dart.
$ flutter build macos
Building with sound null safety
Building macOS application...
$ du -ah build/macos/Build/Products/Release/hello_world.app | tail -1
44M build/macos/Build/Products/Release/hello_world.app
Note, the release build is significantly smaller than the debug build, which includes a full Dart VM for hot swapping application code: $ flutter build macos --debug
Building with sound null safety
Building macOS application...
$ du -ah build/macos/Build/Products/Debug/hello_world.app | tail -1
98M build/macos/Build/Products/Debug/hello_world.app
Note, on the glacial compiles, here is what I'm seeing on my M1 mac laptop: $ time flutter build macos
Building with sound null safety
Building macOS application...
flutter build macos 1.20s user 0.59s system 47% cpu 3.801 total
It's slower than building web pages in vim, but this is comparable with compiling desktop applications in Xcode.Disclosure: I'm a Developer Relations Engineer for Flutter
Hard to make a good point about binary size when they outright lie.
I mostly use Qt these days though for desktop apps I build. It takes a minute to learn but once you get the basics down you're off to the races. And the cross platform story is awesome. I literally don't even test on windows or mac anymore until right before a release, because if it works on my linux dev machine, it's gonna work on windows/mac.
It was a 3D model viewer that allowed me to load some common 3d files including vrml and do some basic manipulation like picking a face, moving it, changing its color etc.
This was all in a single static executable. Maybe OpenGL was linked dynamically don't remember.
What the fuck happened in the last quarter century? The desktop apps of today that do little more than my viewer take three orders of magnitude more space and run slower than my thing did on a 350MHz Pentium (GPU performance excepted as there have been impressive progress on that side).
And yeah, no they are not "fast enough".
The closest modern equivalent would be Foobar2000. Foobar2000 is much larger than Coolplayer ever was, but it's also far more capable, has plugin support etc.
On the other hand, both players are small compared to some modern alternatives.
I know you are trolling but I cannot keep myself from reacting. Well done!
Try ProGuard, which can remove classes that aren't being used from your fat JAR. Sometimes you'll have to tweak the configuration to keep classes that it doesn't realize are being used, though (due to reflection use or whatever).
Try GraalVM, which can compile the entire thing to a native binary without a dependency on a JVM, even. I believe this will mean a separate build for each platform you want to support, though.
Not sure if these will lower the size of the download, but they're worth a try.
On my end: being born two years before 2000, makes me a desktop apps powered man and frankly I've been moving away from them. I'm seeking order and density so I've moved to the dark side of the spectrum, towards clis.
There's hope in TUI like apps: like cashiers softwares terminals which displays some of both extremes. Until GUI are able to visually convoy meaningful symbols without ever using explicitly written characters, there's little gain in using them more the a solely characters driven interface.
Thise are personal considerations,
Hopefully I'm just a maniac that enjoy that intimate vibe interacting with a machine rather than clicking it.
Do you mean the best side? CLIs are were the power is at, because it's the only place you can convert human thought into instructions the computer can understand. It's the only place raw desire can be converted into a string of demands that the computer can meet. GUIs offer a static sub-set of this functionality in exchange for accessibility of the masses (which is fine... Instagram doesn't need to be a CLI tool.)
> There's hope in TUI like apps: like cashiers softwares terminals
When I worked in a Vodafone call centre many, many moons ago, we had a system actually like this. The F1-F12 function keys were critical and the entire thing was insanely fast. They eventually switched to a web based solution and it was terrible.
Modern technologies favour the technologist, not the end user... they just happen to like it because they have no choice. GUIs, the shite they're built on, hold a monopoly.
The real issue isn't Desktop vs. Web, it is "people don't want to run their own servers".
Take email: with Dovecot, Postfix and SpamAssasin anyone can build their own email server. Almost no one does.
With Syncthing or Owncloud anyone can build their own Google Drive, iCloud or OneDrive. Very few do.
There are alternatives to WhatsApp/Telegram where you'd create your own server (e.g. Matrix). Almost no one uses them.
I also don't have the requirement for anyone to be able to join a project-specific IRC channel I'm hosting. In fact, quite the opposite, I DON'T want just anyone to join it.
For secure communication, I still use S/MIME (I may be in one of the last clusters of people to do so.)
It's entirely possible this article was not intended for you. It sounds like you have different requirements than the OP.
But a lot of things don't require internet connectivity at all, not inherently. They largely stay on one device and that's fine. If they're to be shared between people or devices, very often attaching them to an email is better than "share this link with your friends (all they'll have to do to see it is sign up for our service so Growth can report those sweet sweet activations)"
As with most nice things the bad actors (spam, phishing, etc.) in society will abuse things to the point that we can no longer have them.
Now, the cracks are showing in this approach, mostly because of the ones who do it poorly. Perhaps the ones to watch out for though, are the ones who do it well, e.g. Google Apps?
Eventually I gave up and moved to Fastmail. The few dollars per month are worth it.
Syncthing on the other hand I found pretty reasonable when I still had need for it, with my only gripe being that the only UI surfaced by several clients is a webpage which feels a bit janky.
Example: I prefer to run Google Earth desktop instead of Earth in a browser. It's faster, has more features and doesn't suck up as much memory.
I use Notepad++ instead of google docs for most note taking.
I use Kusto Explorer desktop instead of Azure Data Explorer.
Outlook desktop instead of OWA.
There are exceptions. The facebook messenger app I prefer in a browser, because, do I trust Facebook software to not scrape my screen and send it back to FB servers? I would much prefer it to live in my taskbar as a discrete app otherwise.
Running your own email server is a pain, having a client that pulls down your emails and stores them on a NAS so that your email is only briefly stored in the cloud is not a pain.
Never used WhatsApp or Telegram so no idea what the alternative for those is.
And setting up your own email requires intricate knowledge of modern anti-spam protocols and reputation management.
If I want to use a bookmarking tool I want to use the same tool to store entries in during my work day. I'd also want to check something if I'm outside with a friend and want to show them something I bookmarked a week ago.
I use Linux and FOSS mostly. I always have anyway, but it's nice to be able to still be in control of things while the Apple and Microsoft worlds keep pushing Cloud and SaaS on their customers (last time I installed Windows on a dual boot I needed a Microsoft account just to log in to MY computer ... WTF?!?!?!). And for work I need an Apple ID to use my MacBook... at all. WHY?!
Why? You can use the computer perfectly fine without an Apple ID.
That doesn't seem like an unreasonable requirement that you need an account with the platform vendor for that.
I'm a node / javascript developer. I make web applications. I remember having to install XCode for some dependencies. I don't make native Mac / iOS software, so it's a faulty assumption to assume that devs using Macs will be doing native dev. Even if I did, when working for a large-ish organization individual devs are not going to be the ones signing or publishing releases.
If you really don't want to create a free developer account to download the Xcode command line tools (That's probably what your dependency refers to, as the full Xcode is usually not necessary) you could just install or build the dependencies from another source?
You could also just download them via curl (There's direct links to the latest version out there) or `xcode-select --install` which both don't need an Apple ID.
Of course, if you wish to access iCloud or the App Store, it's required. But in fairness to Apple they don't push it in the same sneaky way as MS.
Most of the connections are from the nsurlsessiond demon, for which I have been unable to figure out the actual request url contents. Some of them have to do with update checks, some with notarization checks, who knows what else.
But yeah, I accept that's still an issue. While I'll concede that I'd rather have the ability to choose zero, I think iCloud connections are expected if you're actually making use of its services.
Perhaps the best compromise is Apple hardware with Linux software. I've considered that if I ever lose patience with Mac OS.
Having 1:N but the user controlling where those N are stored, and that storage being portable between backends, seems like the right choice. Bonus points if apps can share data between themselves M:N style, although that is fearsomely hard to secure (exhibit A: windows registry).
A localized database stored in a non proprietary single file format that can be moved around and rsynced, dropboxed etc at will, plus a common, network independent access protocol so that open/read/write semantics work whether the thing is local, at a URL, etc just work would seem to be very desirable and possible with todays tech.
I liked the article and agree with the sentiment. I myself have trouble trusting my data with companies nowadays. The constant cyber attacks, misuse of private data, and the monetisation of user data deeply disturbs me and makes me think a ton before using a new service.
I'm currently building my own budgeting tool for myself and my partner. The pros: all the data is mine, never leaves my own network unless via my home VPN, and I build the features I want. The negatives: I have to build it myself, won't have as much fancy features and nice UI.
This certainly won't be for everyone, and is not viable for most, but there's a not a lot of viable alternatives at the moment.
(I also build an app which is basically bookmark manager and it's based on PHP and SQLite.)
Web apps are just real convenient on the usage side even if I loathe building them most of the time.
One issue is that local and online isn't an either/or situation. People bring up keepass and self-hosting for example, but pretty much any online pw manager stores your data both locally and online, and you can export it. Going local only or self-managing my data has no benefit to me.
Second point is about control. We have encryption nowadays. I'm always confused when people hide their password vault or throw it on a next cloud home instance or something. The entire point of encryption is to enable the transport of secure data across insecure or adversarial channels. You can either own things and keep them secret, or encrypt them. Doing both kind of defeats the purpose of the latter.
Third thing is that empirically speaking, Google has a better track record of not losing my stuff than I do, so I think there's also a lot of illusions going on when people think that data is more safe if they have close on hand.
An scenario where encrypting locally makes sense is protecting confidential data when an attacker has physical access. For example, encrypting your disk so that losing your laptop in the train does not expose all your local files.
Two examples:
I had a YouTube channel that was created before Google bought YouTube and switched to using/requiring Google Accounts. That channel/account became orphaned and I could no longer gain access to it. I contacted YouTube support and the only remedy they could offer me was to serve a DMCA notice to have the content removed.
I used Google Play and had bought music through the service. When they shut down the service I lost music that I had paid for. Meanwhile I still have a local mp3 library that has some content in it that has persisted on various hard drives since the 90s.
Doesn't windows offer something akin to that?
But still you need download some exe's here and there.
I suppose Arch/AUR might have had one. But there's a huge difference between a Windows store, which publishes author-provided executable files as-is, and Debian / Ubuntu / RedHat repositories which are all built from source.
From like 1993 To 2008 i used microsoft office. Bought new versions often, etc... When I started using google docs I haven't touched office since. Zero desire to go back.
There are plenty of other apps I'd consider for web only if good ones existed. For example I'm not a super fan of Google Slides, just because I find the feature set lacking. But seeing it and similar sites work it's clear to me someone could make a vector drawing app for the web that I'd be perfectly happy to give up Affinity Designer for.
[1]: https://web.dev/progressive-web-apps/
[2]: https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_A...
even Adobe is moving towards browser-based solution, unless you have a very special niche market that must be addressed by Qt/etc, I feel browser-UI is fine as a decent desktop UI app at least for my taste.
browser, like it or not, is the new cross-platform UI now.
Video games are the key example: all video games are competing against other games for what comes down to more complicated physics calculations (often light-based physics: "more realistic" shadows from Raytracing, or "cooler" shaders like Dragonball FighterZ / Guilty Gear (very "unrealistic", but clearly requires modern GPU-shaders to calculate).
Though Google tried to get video games "into the cloud", it still required data-centers full of high-end GPUs... and even then had latency issues.
Other performance critical applications include Stockfish Chess, LeelaZero Go (and KataGo), Blender 3d modeling, etc. etc. Having the user "spend the money on more compute" is economically a more feasible move, than centralizing compute costs to a server somewhere (especially costly GPU-hosting).
--------
Good news! There's plenty of performance-critical applications waiting to be explored.
But if you just need to deploy a simple application with low compute costs, centralizing the compute into a single server (or even mild decentralization through the Javascript interpreter) is good enough.
They are specifically talking about the issue of data ownership, not performance. They are talking from a user perspective, not from a developer perspective. And they are specifically not talking about how centralizing is "good enough" - because it fails exactly at the data ownership point.
Desktop applications shine in this performance situation. Video games, 3d renderers, chess analysis, go analysis, deep learning, compiling, video editing.
-----------
If we're talking about "Data moving with you wherever you go", that was a Floppy Disk back in the day. If you want bookmarks to be portable in some kind of modern day setting, you'd store it on your phone and connect that up with your Desktop-app, or maybe keep it on a USB drive in your pocket.
they could also be running on the top GPUs where you might locally have some low-end notebook.
I haven't used it but as one example there is Clara.io and even if Clara.io isn't perfect it at least shows a path
Local, native apps are just better. They're faster, they can better respect platform interface and behavior conventions, and you can use them on an airplane.
This new situation is probably good enough to keep me off gmail for good.
Unless legislation forces application providers to be accountable for privacy breaches, with tough penalties, I don’t see why privacy-sensitive users should forego applications that work with local files, moreso if those applications are free.
Unrelatedly, the author explicitly states that Electron apps aren’t real desktop apps. So he’s talking about native apps.
Mainframes -> microcomputers -> appliances (phones, tablets) -> whatever's next... (home servers?)
At some point it will swing back. It won't look exactly the same, but the industry will swing back. It might not be for speed, but as you say, for privacy. It's easier to protect data that is physically close to you.
We will probably also swing back from microservices with HTTP APIs towards monolithic applications. But that's another thread!