Im here to being told I'm wrong. I would love to, specially since we can transpile clojure to dart
Im here to being told I'm wrong. I would love to, specially since we can transpile clojure to dart
[1] https://www.get-plume.com/
EDIT: Is the app down? It doesn't load the "Browse" content for me.
All of the Qt apps I know about (Ripcord, Dolphin) are fast but the aesthetics of the UI was just terrible. So I gave up on learning Qt. But this thing you made, Plume, actually looks good. If there isn't a monstrosity of hacks and boilerplate underneath this UI I might give Qt another shot. Otherwise I think I might just build my own thing from scratch on top of OpenGL or something....
And it's actually pretty easy to write the C++ code. I don't really use custom sub-classing much. I use Qt's QtObject which allows me to create C++ object that work beautifully with QML. Bryan's course doesn't delve deeper as that, I had to do a lot of searching to figure it out. I hope to open source some of Plume's components to inspire others to do the same. Another point regarding aesthetics, it really takes effort, but Qt can be extended using community libraries. For example, if you want your app to look native on macOS and Windows with a sexy frameless border with a transparent window, then you could use the awesome qwindowkit[3]. Another example, I wanted to position the window buttons on macOS (the traffic light buttons) differently, but couldn't figure it out, and obviously this can't be done using Qt alone, so I looked at Electron's source code and saw how they do it there in Objective-C and incorporated it in my app (ChatGPT-4 wasn't very helpful at that). Now I really want to have these buttons' fill color transparent like Things 3 does, so I'm looking at how to achieve that haha. I already got some ideas. If you need any further help, let me know![4][5].
EDIT: A cool feature of combining Qt C++ with QML is that you get the performance of a compiled language like C++ with the reactivity, ease-of-use, fluid and easy animations (and more) of QML. You can see on Plume's website that it's 4x faster than the fastest comparable native app on macOS.
[1] https://www.udemy.com/course/qml-for-beginners/
[2] https://www.loom.com/share/b40009316f6b420b9ece15a1f99e987c
[3] https://github.com/stdware/qwindowkit
[4] https://twitter.com/mamistvalove
[5] ruby AT mamistvalove DOT gmail
Outside of the that the next closest I’ve tinkered with is GTK, but since version 3 it kinda gave up on looking right running under anything but GTK/Qt-based desktops. It’s easy to make idiomatic bindings for which is nice though.
It uses an old version of ObjC? Are you sure that's correct? ObjC is open source right? There is no reason to be using an old version.
Yeah the frameworks are kinda old but the new frameworks (since ~2014) don't really bring anything new to the table. And Swift is overrated anyway.
Disagree regarding frameworks, though. The newer snapshot-based APIs for NSTableView, NSOutlineView, and NSCollectionView (added in 2020 as part of macOS 11) are a massive improvement over the old index-based ones for example, and there’s been numerous polish and quality of life improvements scattered throughout.
Also disagree about Swift if only for the large number of things it comes with out of the box that’d require a third party dependency with Objective-C, but so many more errors being caught at compile time, no need to maintain header files, and no awkward split between C and Obj-C for basic types are nice too. I still enjoy Obj-C for some types of projects but as project complexity increases so too does my preference towards Swift.
Yea I mean the ObjC vs Swift thing.... a matter of preference. I trust Steve Jobs more than I trust Tim Cook. I hate the feature creep in Swift. I hate Swift optionals. ObjC compiles faster than Swift. The ObjC ABI/runtime is superior to the Swift ABI/runtime (which allows for cool stuff like https://cycript.org). I like the dynamic typing a lot. Managing headers is a non-issue for me, I just consolidate everything into one monolithic header file.
I've worked in pretty big ObjC codebases (1M+ lines) so I know most of the tricks to deal with complexity. For Swift, max I've dealt with is 100k lines and it was crippled with tech debt. Frankly, the other engineers on the team were terrible, so maybe that's why. They abused the shit out of RxSwift and refused to use the `!` force-unwrap optional feature
Now tbe modern tech stack is to build a bash+python app in an env, add a touch of R, some js, and bundle it into docker container, then make that docker container into wasm with container2wasm, and give that out as the executable.
It's wonderful honestly. You can get just about anything working with stitching together stuff, and then serve your 10GB executable to anyone :).
So MuCh BeTtEr ThIs MoDeRn WaY!
I think that if these performance issues were to be solved, Flutter would see a bigger adoption. In any case IMHO Flutter >>>>> Electron
That sounds about as good of an idea as the old Java desktop GUI framework that used to (poorly) imitate native UI elements of Windows and macOS: Everything always looked three major versions behind and felt extremely janky.
The problem is that, on the web, the performance is extremely poor, so Flutter is still not worth being used there (IMHO).
I was very unimpressed by flutter when we PoC it at work, but that was years ago, so maybe it’s gotten better since.
When "multiple windows" is a feature to be announced (as if weren't trivial on any native stack), you know it's a sad state is affairs.
That sounds like Microsoft deflecting blame. You've been able to do multiple windows for a very long time in Electron, I remember being able to do so in 2019 at the very least, and the book "Electron in Action" (https://www.manning.com/books/electron-in-action) even have a chapter dedicated to it, a book which was released in 2018.
What it couldn't do, though, was to have a single workspace span multiple windows (ie "detach" tabs).
Whether or not this was caused by an electron limitation or a design flaw in VSCode, I can't say. Though I find it hard to believe that it would have been impossible to implement had they really wanted to.
Now with Spotube it appears it has gotten better. But I can still see:
- "off feeling" scrolling with the scrollwheel
- some kind of framepacing issue when using the scrollbar at the right hand side
- Click latency that's better than electron but still worse than anything QML/QT has to offer.
- DPI set in KDE/X11 seems to be ignored. I'm not sure about this, could be a personal preference of the developer to have things this size.
I'm using the flatpak build with a 6700XT.
Although similar to something like React Native - Flutter does paint the screen. Personally I see it as a potential Electron replacement in the future.
From what I’ve seen Impeller is also a big help on iOS. Screen jank was pretty bad for us when Flutter was using Skia as a rendering engine, although when I last messed with Flutter (~6 months ago) Impeller felt almost production ready but iirc there were still a couple small things, not sure if they are better now.
Personally I’ve become a big fan of Flutter, especially for back-office/utility type apps. We would follow all the Material Design 3 guidelines and when it comes to time spent, if you need to develop the same app on more than 1 platform, it’s worth consideration.
I’ve found some people will say: “But it’s hard to get it to look like a native app in Flutter” but for me I’ve always seen that as more of a skill issue. You are literally painting the screen, you can get whatever pixel perfect design you want, if it can be Figma’d it can also be Fluttered and to be fair there are Cupertino widgets and you absolutely can get the best of both/many worlds if you want. Just like how on the web you can do a transform based on device width to switch between the mobile or web view, if you desire you can have different widgets show up for different platforms and give everybody a native feel. I personally still think that’s easier than writing/maintaining multiple individual apps.
I think the biggest downside though is that search engines don’t do well with Flutter Web. It isn’t the nice easy to crawl HTML, and it’s really hard to get a flutter app indexed or to give it good SEO. There’s also silly rules that search engines have about how the content displayed to the user vs crawlers has to have the same data. (I.e. when the web-crawler asks for your page, you are supposed to give it a page with the same data you would give the user.) The best we could do to improve SEO was to make the landing page a page that in the background ran all the same queries and shoved the data into HTML tables, with a popover that said “this is a page for robots that had a button that said “Take me to ABC.com” and a check box that said “automatically redirect me next time” that we stored in a cookie. It was hacky and not a good user experience.
For now, whenever I need to do anything GUI I will use React for the web and Flutter for everything else, but it would be nice to truly be able to only use 1 framework for every platform, which to be fair I’ve used Flutter web and it isn’t all to bad if it weren’t for the issue with search-engines web-crawlers. For apps that don’t need SEO.. Flutter is a great choice. I suspect we’ll see a lot more SaaS apps building in Flutter in the next few years. I think it’s on the cusp of being mature enough to be seriously considered for production scenarios.
I’m just mostly worried about the ecosystem. Google chose Dart for flutter after the results of a lot of research that only Google scale companies can do and to be honest although it IS a lesser known language it isn’t a bad one. It’s AOT and JIT so the hot reload is amazing. It reads like “insert most language you know” here. If you know how to code nothing in Dart should be drastic or surprising. If anything I’d almost say Dart is boring, which I like boring things. I’ve experience with a handful of languages, and for me Dart ranks highly in terms of usability/ergonomics. But there’s a not unsubstantial risk that Google could decide to drop the ball and Flutter could become kind of like the Windows phone. Really great, but canned because people didn’t build enough things for it.
If I were on the Flutter team I’d be most focused on figuring out how to deal with SEO issues. (assuming impeller does indeed provide a full fix for the screen jank, I’d assume it’s gotten better in the past few months, can anyone comment as to if it’s “there” yet or not?)
It's enabled for ios by default. Android probably in two more releases if I had to guess. If you were doing a lot of custom stuff you may run into issues with Impeller on some CPU bound tasks regarding tessellation but for a regular flutter app it will almost always outperform Skia especially around previous pain points like scrolling and animation.