Why we maintain desktop apps for OS X, Windows, and a web application
medium.com
medium.com
I expect native app to be written with Objective C (OS X/iOS user here), having very low memory usage, fast startup and offline usage. Also I expect as much integration with the system, as possible, native controls (not that buggy emulation without my favorite emacs-like keybindings) and native behavior.
Probably we miss an important piece of technology: installable web-apps. Website opened in the frameless browser window, identifiable as a different application which could be easily pinned to Launchpad. With all advantages that "separate webview" has, but with some important difference: sandboxing. So I can feel safe when I launch this application, because I don't need to trust all my files, passwords and system to another application. I've seen that kind of technology in the iOS: website bookmark could be pinned as a desktop icon, but it's just a bookmark.
google-chrome --app="http://app.com"
And get a frameless window.Firefox used to have something like this, but it doesn't appear to work anymore. You can do
firefox -chrome "file:///some/local/file.html"
But obviously that's not quite the same, and I believe is limited to local files.It's also easy to lose track of which window they were in quite fast. A separate app is faster to find on almost any WM/OS.
You can to check our own messaging to it's speed at our old hacker news thread: https://news.ycombinator.com/item?id=9757243 It is faster than native apps.
On the flip side, though I really appreciate that I can create more feature rich applications with the likes of nwjs or electron. There's a lot of things you can do that go a fair bit beyond just web applications in a thin shell... though most of the better ones are app centric first, and web instance second.
I do wish someone would build a nice mail client for Chrome/ChromeOS though... That part really sucks imho. I mean there's a browser based SSH client for chrome, so it's entirely possible to do.
That must be pretty hard to do. I think going without a browser+javascript would be pretty primative... I mean, I pay my bills, send emails, hell view the site I'm on as browser applications. I remember being online in 1993 (vga, bbsing, dialup ftw), it wasn't nearly as diverse or capable as today.
That's not at all what they said. Some of us use browsers that are not chrome. That would mean having to run 2 browser runtimes to get a thin wrapper with chrome.
If you're using Opera or Safari, I have no idea.
How is that different from using gtk or some other gui toolkit?
...maybe I'm crazy, but the primary metric I would evaluate a tool designed to increase business productivity is not how much time I spend using it, and in fact would normally be summarized as the exact opposite of this metric...
It could be that the people who download the desktop app are already the heavy users.
Whether it's the desktop app driving increased usage or it's heavy users preferring the desktop app, it suggests that one way or another, the desktop app is better for heavy usage.
Given that the desktop version and the web versions are the same, the assumption is that both are at least similarly productive. Therefore the desktop version is actually helping people accomplish more (or it's more useful for high-usage people? Or it's just correlation)
So I'm happy companies like this still provide desktop applications. It would be great if it were more of a trend but I'm not sure that it is yet. If there were better frameworks to use that would allow code reuse across all platforms it would certainly make this easier.
I feel that this is exactly what web applications try to solve in the first place.
Yeah I think so too but I don't think it really did. Native apps are almost always so much better. The biggest issue is discovery and installation of native applications that make the web more approachable.
I'd love to see some better development frameworks that let me use native UI components to build an application that can share business login across iOS, Android, Windows, Mac OS X and even Linux. It's kind of a hard problem though.
Yeah I expect re-writing of views. Honestly I think that's unavoidable and perfectly fine it would just be nice to keep the business logic everywhere I go.
I do this with C#, not sure how many other languages support this approach. I wish it was all of them.
And then there's the integration: both look&feel and functionality can make a huge difference.
I don't think this is true anymore in Windows 8+. From my limited experience in using it, once you install something it disappears into a mass of icons and is never seen again. If you can remember the name you may be able to search for it.
nwjs (node-webkit formerly) is a Chromium wrapper that lets you deploy web apps as desktop apps, simple as that.
kinda like cordova/phonegap for desktop
[1] https://groups.google.com/forum/#!topic/nwjs-general/V1Fhvfa...
I can just make a separate chrome instance for it and move it into its own xmonad workspace and switch to it much more conveniently than through alt-tab.
Even at that, it's still not as rough on system resources as a browser tab with Asana loaded and left open for a couple days, and all of Google's "applications" are hogs of course. Web Apps: the way of the future! [gag, gag, vomit]
And that's the story of why I have an 8GB machine now :-/
Consider this though:
• You have an app that doesn't need to perform actions in sub 10-milliseconds. 11 milliseconds is just fine.
• You don't require access to a whole host of system processes, but maybe access to the file system, or the clipboard, would be a big help to your users.
• Your users are not super technical and won't even know what a hybrid app or native app means.
• You want to get your app to market on multiple platforms in days/weeks, not months, and without spending a ton of money.
I think hybrid might be a good option there. Not the ultimate best ever piece of software ever I know, but compromises and all that.
Why? This is cumulative, across everything in your app. Why are you spending the user's resources on yourself?
> You don't require access to a whole host of system processes, but maybe access to the file system, or the clipboard, would be a big help to your users.
Native integration is a lot more than access to the clipboard and file system. Drag and drop. Editing key shortcuts. Consistent components.
> Your users are not super technical and won't even know what a hybrid app or native app means.
You don't need to be a professional chef to tell the difference between home baked cookies and chips-a-hoy, and you don't need to be highly technical to know that an "hybrid" application doesn't work as well as any of your other well-written apps.
> You want to get your app to market on multiple platforms in days/weeks, not months, and without spending a ton of money.
Blah. So we'll ship things that suck because it's a better product for us, the person making it? What if shipping genuinely good applications is actually integral to your success?
Remember: MVP is all about reducing the risk to VCs by decreasing the costs to get a product to market, by increasing the risk of a "false negative" market failure due to your shipping a poor product.
If you're that false negative, MVP hasn't done you any good.
Except you're looking at 3 seconds to power up your cell radio, before you can actually download the HTML.
> You don't require access to a whole host of system processes, but maybe access to the file system, or the clipboard, would be a big help to your users.
Until you need more, at which points you're spending all your time extending your hybrid framework.
> Your users are not super technical and won't even know what a hybrid app or native app means.
They do know "it's slow," in the case of Facebook.
> You want to get your app to market on multiple platforms in days/weeks, not months, and without spending a ton of money.
Until you spend six months rewriting all your apps.
Hybrid apps, on mobile, trade short term gains for long term maintenance nightmares. On the desktop, with a high bandwidth connection, and lots of power, they're less bad.
With a well written model layer on an iOS app, maintaining a desktop UI for most apps is the work of one or two developers. Sadly, desktop usage isn't worth it for most consumer facing startups. I've accepted that business reality.
You can cache all files in the app bundle with Cordova so the download happens during the install.
Until you need more, at which points you're spending all your time extending your hybrid framework.
Cordova makes it easy to build bridges through plugins. Moreover this promotes proper separation of concerns which lets you use the SAME view layer on different platforms, changing only the "client api bindings". It lets you truly think through a crossplatform system design AND the business logic of whether you'd like your invited users to start on the web experience and download the app for that + expanded functionality. So it informs your business model as well.
They do know "it's slow," in the case of Facebook.
When Zuck said that HTML5 was a mistake, Sencha made fastbook demo three years ago to show that facebook could have been sped up and was slow for a different reason. Since then it's been three years and two generations of phones. Things are even better now.
https://www.sencha.com/blog/the-making-of-fastbook-an-html5-...
Until you spend six months rewriting all your apps. Hybrid apps, on mobile, trade short term gains for long term maintenance nightmares. On the desktop, with a high bandwidth connection, and lots of power, they're less bad. With a well written model layer on an iOS app, maintaining a desktop UI for most apps is the work of one or two developers. Sadly, desktop usage isn't worth it for most consumer facing startups. I've accepted that business reality.
Business reality you say? Well at least for mobile, it's this:
http://blog.venturepact.com/8-high-performance-apps-you-neve...
Hybrid apps have 20% HIGHER RATINGS in the app store than native.
Many top companies heavily use WebViews.
MacGap is getting better and this will become standard for the desktop, too.
Take our own Calendar app for example. It has over 60,000 active users in any given month (http://qbix.com/calendar) and having WebViews would SIMPLIFY our port to iOS and Android. Here is what we wouldn't have to rewrite and additionally maintain:
1) The view layer incl all reusable components 2) Caching of view models 3) The server side communication, incl websockets and realtime
And we get one more bonus:
4) Invited users can click a link and instantly get an account on the web, after which we can send them transactional notifications until they sign up. As opposed to being taken to an app store with a description, pictures and some ratings. Higher virality for the win!
Now your apps is resembling a native app, but a whole lot more complicated.
> Cordova makes it easy to build bridges through plugins.
Everyone I've talked to who went down this path regretted it.
> Moreover this promotes proper separation of concerns which lets you use the SAME view layer on different platforms, changing only the "client api bindings".
Except views are ultimately platform dependent. You've created a leaky abstraction.
> Business reality you say? Well at least for mobile, it's this: http://blog.venturepact.com/8-high-performance-apps-you-neve....
That article lists Twitter, which is wrong. I was the tech lead.
(It's also wrong about half the other apps on the list)
How big is the iOS team at Twitter? This is old picture (https://pbs.twimg.com/media/BYBiL8MCUAAiB7r.jpg)
>as long as you browse the web, you keep coming back to google.com to navigate efficiently. This is why Google wants you to spend time in a browser. This is why they offer Gmail for free, Chrome for free, Chromebooks at a loss, or why they fund their own competition!
Two moves in completely different directions. Would be interesting to see the results down the line.
Using Node JS as the backend to a proper native rendering system would work fine, and in fact if the application was written to properly handle everything asynchronously, it may well be faster than an app written entirely in the native language of the system.
So nodejs is now faster than C/C++? I guess Javascript really can do everything.
Perhaps I should have said "may well be more responsive than".
The only time it comes up is when one opens an extremely long file which contains one extremely long line of code.
Of course, users are more likely to try out your app if they don't have to go through an installation process first, so it's a tradeoff.