Web vs. native: let’s concede defeat
quirksmode.org
quirksmode.org
Look at a site like YouTube today. All the tooling we've created and all the progress of the open web platform that has made that site happen is incredible. If we've just given up 10 years ago, saying to ourselves that the web should only be for documents, then we would be missing out big time right now.
It’s not for every site to try and push the envelope. And mimicking native can often lead to bad results. But to go from that and say that we shouldn’t try. That’s just sad.
The first site I ever saw that used Javascript to produce a useful application rather than annoying frippery was Google Maps.
(Rhetorical question: why does everyone use youtube rather than hosting videos on their own sites? Unpacking this question will show the obstacles that "redecentralisation" faces)
Two reasons: Bandwidth and Speed. Google has contracts with most major ISP's for caching Youtube videos. This gives them access to the best CDN money can buy! No matter how awesome or powerful your current datacenter/CDN is, it still wouldn't be able to match the fetch-straight-from-the-ISP performance. Interestingly this also creates a hidden monopoly since the barrier to entry is costly.
Flash DRM replaced with another closed source DRM. No progress whatsoever. And now it has embedded in the browser itself, greatly increasing its vulnerability.
What exactly is incredible about YouTube today (apart from it being a huge repository of videos, of course)?
That it almost works like a 2000 era video player, only slower and clunkier? The new fangled DRM? That it can bring a decent computer to its knees with the fans blaring playing HD video? The automatic non-skippable ads?
YouTube is about as proven as you can get. The fact is that it didn't just edge past 2000-era video players in popularity, it totally trounced them. I think we should try to figure out why that is instead of arguing against YouTube's viability—it's about a decade too late for the latter.
How many people watch movies on YouTube? Because that's what video players are used for, not for small videos, music clips and curios.
>I think we should try to figure out why that is instead of arguing against YouTube's viability—it's about a decade too late for the latter.
We were talking about it's performance compared to native, not it's viability.
YouTube rules as a huge video repository. Other "web" apps that don't have that stronghold, don't fare so well compared to their native counterparts, especially on mobile.
What are you even talking about? If you click on a YouTube link, a video your computer has never seen before is playing in less than five seconds, streaming over the internet. You can instantly seek to any part of the video, even if it hours long. You can speed it up to 2x, or slow it down to 0.25x, without changing the pitch of the sound. If you have a Chromecast, you can display the video on your TV instead.
Nothing in 2000 had a remotely similar feature set.
Nothing about this is "web" specific. That's just "streaming over the internet" as you said. Lots of native apps do it too (for both music and video, internet radio, iTunes video rentals, etc.). The reason we didn't have this as widespread before was limited bandwidth connections (a limitation of internet, not of being native).
>You can instantly seek to any part of the video, even if it hours long. You can speed it up to 2x, or slow it down to 0.25x, without changing the pitch of the sound. If you have a Chromecast, you can display the video on your TV instead. Nothing in 2000 had a remotely similar feature set
Again, nothing about what you describe is web specific. Native can do it all and do it better and with less battery crippling cpu usage.
And nothing described -instant seek, pitch shifting with retime, etc- was impossible in native video players in 2000 (or even 1995), while all of it was impossible for the web in 2000.
Which also means things possible for native apps now are impossible for web apps now, which makes sense since native is a superset of what functionality is available in a web sandbox, and with faster potential speed. (And of course being web is not a requirement for accessing internet resources).
Moving the goalposts. You were saying that YouTube is a slower and clunkier version of a 2000 native app. Now you're comparing 2015 native vs web.
> native is a superset of what functionality is available in a web sandbox
Web sandboxes have a killer advantage over native: no install.
And if we're talking about native desktop, there's another killer advantage of the web: you don't have to trust the app.
You said: "Nothing in 2000 had a remotely similar feature set."
Not that Winamp 3 (released in 2002) was a svelte piece of software[0], but it could do realtime pitch/speed shifting and stream audio and video from the Internet. With a sufficiently fast connection, three seconds from link click to video stream start would be quite doable.
Streaming and decoding audio and video isn't anything new. The two new things that The Web brings us are "zero-install" and a the benefits of the large amount of sandboxing work that's been put into the major browsers.
[0] WA3 was slow because of the UI code, not because of the media stream and decode code. :)
Fans blaring haha
And yet any media player beats it at its core functionality: video playback.
Often I find myself using youtube-dl to fetch a youtube video and just play it in a regular media player because it just works better than what browsers have to offer. There even are addons to export YT playlists to VLC and stream them.
pdfjs is great. but every 3rd scientific paper I read tends to be somewhat broken (missing diagrams/images) or sometimes fails to render completely. native readers provide a better experience and better render times.
>And mimicking native can often lead to bad results. But to go from that and say that we shouldn’t try.
Maybe sometimes it would be better to provide better integration with native applications?
Native applications and browsers really don't like talking to each other.
That's it exactly. The author claims it's an unsolved problem, I think it's the inevitable solution (that web and native will merge).
web and native will eventually merge to the point that for most intents and purposes the user can't distinguish between them. It'll never be perfect, but it'll be "good enough", that whether an app comes from the web or from the HD, the user won't really notice except perhaps in the initial startup time, and probably not even then (everyone expects to "install" an app).
1. There is no X.
2. There are no comments about X.
3. There are no comments about comments about X.
4. (recur away)
Oh, wait. This sounds like censorship.how about http://some.storage.service.tld/path/to/video.mkv or even rtmp://some.streaming.service.tld/path/to/stream ?
For sharing that would be sufficient.
Of course there are some business realities (ads, copyright, paying for storage) that make direct, free access to videos unlikely. But that's basically arguing that the web is a superior platform for monetizing things, not necessarily a superior platform as far as user-experience goes.
> The other key piece is discoverability, and on that front, YouTube is far, far better
I'll give you that one.
But then again there are dedicated media-discovery-sites (imdb, last.fm) that do not have playback as their core functionality, even though they may offer some playback.
No, it is not. Playback would get stuck, sound would go away for no rhyme or reason and what not. Better experience? - no - quite the opposite.
I got rid [1] of the native nuisance completely. And the experience of search, comment and history on native was simply terrible. Much lesser control on ad-blocking too, and really the ads on YT are sometimes seriously irritating.
[1] Evidence: https://twitter.com/marvindanig/status/598701509963083777
Evidence: ^
Raw streaming urls don't get me any of that. URLs aren't just pointers to bytestreams. From a user sharing perspective, they're humans pointing to a unique thing. And what they're pointing to is often much more complex than a single raw file.
you want to share youtube comments with people? they are a significant value-add to you?
And here I'd concluded the comments section existed to allow pre-teens to practice their ability to make racist remarks.
https://mytube.com/$username/my_first_video.ogg
With such a scheme, you immediately know who made it - $username - and (if this hypothetical mytube.com built a proper website) navigating to mytube.com/$username would return a list of videos (maybe with some additional routes for playlists or categories).Sure, now the user would have to go through the additional work of editing URLs if they want to access this endpoint manually, but then this article's points come into play: if your users expect more functionality than what the World Wide Web does well - delivering content - then a native app is probably preferable for everyone involved (and, indeed, exists for sites like YouTube).
And even with the URL alone, that's still significantly less opaque than YouTube's current method of https://youtube.com/$some_random_gibberish. At least someone could see something like https://mytube.com/j_random_hacker/how_to_computer.mp4 and guess that "j_random_hacker" is a username and "how_to_computer.mp4" is a video uploaded by that user.
This isn't much different from, say, reddit, where URLs are actually part of normal discussion; a redditor will talk about a subreddit called "/r/mylittlepony" or a user named "/u/Unidan" or somesuch, directly referencing paths (to https:/reddit.com/r/mylittlepony and https://reddit.com/u/Unidan, respectively). Granted, reddit's userbase is somewhat more tech-savvy on average than, say, Facebook's or YouTube's, but it shows that URLs are not necessarily opaque to typical users, and it's certainly not hard to even manually demonstrate such things to new users.
This also isn't much different from many (most?) news sites, which provide URLs that resemble the name of the article (with some adjustment to make everything lowercase, turn spaces into underscores, strip or substitute special characters, etc.).
Like a web browser?
There's no reason why a native app can't do this - in fact, many native apps for things like YouTube and Pandora and such already do this.
They're asking: what person or persons did this, what might I know them for, what do they look like, how popular are they, do they have a logo I might recognize? YouTube and Vimeo provide that information right next to the video, which is where people want it.
If a native app really is preferable, then I'm sure we'll see YouTube wind down their web interface once everybody stops using it. But my guess is that they'll still have an HTML version long after you and I are both in the ground.
And yet it's existed for years using p2p/torrents. So they're more like business fictions
The "4th option" is that you've got the causality completely backwards in your head: it just happens to be the case that the cultures where distributed tooling became important were the ones where it was necessary to promote an "all information is free" mindset, not that it's necessarily a part of distributed tooling that you take that mindset.
If we start with a centralized metadata server/peer tracker, a set of "base seeds" to keep videos alive, and a commenting system, we can still revoke access to individual videos (our app will simply not support peer discovery except through our tracker, we take down the seeds, comments, and tracker entry on a revocation) while distributing bandwidth for the viral videos that need it.
The point is germane.
Not at all, YT solved it many years ago with ContentID.
Now imagine having to install all the plethora of apps on every device, one for videos, one for music, 500 for different types of documents, etc. Instead, you install a (hopefully) standard-compliant browser, and done.
Sorry, there is some ambiguity in English about this. I am regarding a "solved problem" as a "problem" (i.e. classification) whereas you are regarding it as "no longer a problem" (i.e. interface). Yes, right now YouTube's interaction with the problem is highly limited (though not nonexistent), but if one is, say, trying to disrupt YouTube or talk about YouTube's history, one still classifies it as a problem in general that exists within YouTube's problem domain.
> Now imagine having to install all the plethora of apps on every device, one for videos, one for music, 500 for different types of documents, etc. Instead, you install a (hopefully) standard-compliant browser, and done.
I mean, I agree that it helps that particular problem somewhat to have a cross-platform virtual machine (the browser) and to distribute an executable (your JS app) on that machine rather than (or sometimes alongside) your content. This also creates its own problems, of course, like simpler browsers (spiders, text-only browsers) not being compatible with your website, as well as some new buggy issues when, say, the JS doesn't load properly. But HTML+CSS+JS is not new in this town and the cemetery has some gravestones -- like the fact that there aren't many desktop Java applications, the complete failure of the Java browser plugin, and the waning of the Flash plugin. It is peculiar among these only because its dreams are less lofty: not "write once run everywhere" but "write once, then write a (hopefully graceful) downgrade path if they do not support the features that I want to use."
I'm not sure I understand. AFAIK youtube currently makes money (from ads) and much of what people view is copyrighted music that isn't properly licensed, and which yt doesn't pay for.
Sure, some, music is taken off yt, and some content is properly licensed -- but are you seriously claiming that yt isn't (any more) making money from copyright infringement?
There's some digital content distributed via p2p legally -- and it'd not be a stretch that yt owes it's current market dominance to "flaunting copyright law" as the copyright lobby might put it.
If one relegated content (video, meta-data, comments) to torrents/magnet-links (there is an issue of loops in the links in content-addressed systems -- but with a pretty modest central server (cluster) serving up a few lists of magnet-links should be affordable)) -- I think it would be quite feasible to distribute digital media in way which the consumers shared in the meagre cost of distribution through mostly donating bandwidth.
Well said, you should tell this to Disney, MPAA, and MAFIAA so they'll stop trampling the rights of the commons by extending the length of copyrights everytime something profitable to them is about to expire. https://en.wikipedia.org/wiki/Copyright_Term_Extension_Act
Well, if I click on the first link, a video doesn't play (that would be the case even if the link were to an actual MKV video). The second URL isn't even a hyperlink on news.ycombinator.com. But if I click on a valid YouTube link, a video plays nearly immediately.
If I could stream directly to VLC or a player of my choice I'd be happy with that.
It was a nightmare. Each media player would try to hijack every link type it knew about each time it ran. But there wasn't full compatibility. So you'd click a link, RealPlayer would try to open it, and the player would crash.
The major players actively fought open standards, because they each had dreams of controlling a DRM & patent gated empire.
Flash brought some sanity to web video. Although initially it had performance issues (it had issues with hardware overlays on some video hardware).
With that said, I'd be more optimistic of a kind of "media plugin renaissance" like what's being discussed in this day and age than I would be back in the 90's, what with all the insistence on standards-compliance and all that jazz. Eventually, with platforms like the .NET CLR / Mono catching on and becoming increasingly popular for cross-platform "native" (not quite native, but much more native than web-based) development, the chance of successfully reaching the goal that Java tried (and - arguably - failed) to reach back in the 90's is much higher nowadays.
Simple playback of video? Not so bad. But if you want to swap the source of the video to your 240p version if the video is buffering 'too slowly'? YouTube-like annotations? Show suggested videos after? Developers aren't going to want to support all environment configurations, so you'd likely end up with a separate supported player for each website.. which doesn't sound better than visiting a webapp tested against the popular web browsers.
Additionally, there's a lot of great research going into browser sandboxing and user-driven permission granting. Allowing content-compatible-but-unsandboxed XYZPlayer to take over content playback negates a lot of the potential benefits.
This sounds like something that should be a feature of the protocol used for streaming (in fact, I'd be surprised if most streaming protocols didn't support such functionality). Even without, this should be possible to do even with a native media player, and many streaming providers offer streams with different bitrates and encodings and such (for an example, check out soma.fm).
> YouTube-like annotations?
Most video players have subtitle and even captioning support; it shouldn't be hard to extend this to arbitrary annotations, be it as part of the streaming protocol, part of the media encoding, or even as a separate stream or file.
> Show suggested videos after?
Could be hypothetically done with an API call on the player's part to the video source (or some other source that indexes videos), which then provides the list. The player could then display said suggestions.
All three of these things could be worked around with a standard "metadata" path that such a video player would access and fetch an HTML page or JSON/XML document or somesuch.
> Developers aren't going to want to support all environment configurations
Nor should they; they should instead support agreed-upon standards, like how web browsers support agreed-upon standards for HTML/CSS/Javascript files and HTTP(S) 1.x/2.0. I don't use separate web browsers for different websites, after all.
> Additionally, there's a lot of great research going into browser sandboxing and user-driven permission granting. Allowing content-compatible-but-unsandboxed XYZPlayer to take over content playback negates a lot of the potential benefits.
Part of the issue is that operating-system-level sandboxing has historically been insufficient. Bringing some modern server-grade sandboxing techniques (containers, VMs, chroots, etc.) to the desktop and mobile realms in an easy-to-use manner would alleviate the need for browsers to try and implement this themselves.
Nor should they; they should instead support agreed-upon standards, like how web browsers support agreed-upon standards for HTML/CSS/Javascript files and HTTP(S) 1.x/2.0.
There are web standards now, but, in practice, when you're supporting multiple environments, you're also testing against them. For webapps, fortunately, this usually just entails testing the top 5 browsers for a few versions, and mobile devices if you support them.
If the user comes to support saying something is broken with the video on their native app, trying to troubleshoot their native environment can be difficult, and telling them that their environment might be configured wrong often doesn't solve their problem. Which is why I suspect each site would support specific players.. not being a real improvement over the Gecko or WebKit <video>, <audio> in my mind..
Similarly, you can do this right now on Android. When you click on a link, it fires off an Intent with the URL. Apps can register for this Intent and the user will be prompted for what program they wish to handle the link in. This is how the official YouTube/Google Maps/G+ apps work.
It turns out that for certain types of content, users really, really don't like to wait for external programs to load. It's not a technology issue; the technology has long existed to use rich clients, consumers just don't prefer it.
And yet they click through full page ads, wait for "loading showcase" animations, scroll past parallax scrolling banner images and also wait for the ads on youtube videos and for the video to switch from 360p to HD.
Users are strange creatures.
I think if some effort were put into streamlining the native <-> web boundary then users would be quite happy with it.
> This is how the official YouTube/Google Maps/G+ apps work.
The question is, could this be standardized further? Basically a web standard that browsers agree to when it comes to talking to native apps that might offer specific services.
At the risk of getting stoned to death for this: WebD-Bus?
Although I think anything like that isn't going to happen. Browser vendors put security over everything else. Talking to native apps which already have access to the system would probably be construed as some sort of security risk, even if the user had to opt-in.
As for the last point, Spotify has some version of this. My native (mobile) Spotify app knows when I'm playing on my computer and vice-versa.
I'm not sure how that's a valid point. My native media player loads in literally less than a second. (I timed it at 0.59s from when I double-click a file and it starts playback.) This is faster than any webpage can ever dream of loading. And unlike Flash or HTML5 video it gives me completely hitch free playback, whereas browser integrated player tend to drop frames quite frequently.
I would much rather use it than any player integrated into a web browser.
https://www.reddit.com/r/WatchPeopleCode/comments/3273es/pro...
It wouldn't be hard to make that work on other sites that have a flash player. But we aren't quite sure if it improved the performance or anything, it just felt right.
If you open an .mp4 file in Firefox you can set it to open in an application through your "Applications" settings. By default it prompts "Open with..." or "Save as..." in a dialogue.
If you open a direct link to a video you can open it to play in VLC (or player of your choice).
http://en.wikipedia.org/wiki/Google_Videos#Google_Video_Play...
The same disappointment hit me with the early releases of Chrome browser - just Firefox with stuff removed.
I seem to remember being able to do that two decades ago. I imagine you still can (assuming you're up-to-speed with the configuration UI of the week for your browser), but it's not something people seem to do a lot.
What about URLs mean that a native player can't use them?
Synchronized play state and playlists on all the devices. Offline handling of the media files with streaming as an option. Feed subscription but also podcast repository and ranking/trending screens.
All media files are by definition in independant feeds, and sharing a file URL is supported.
It brings a hugely better experience than youtube pr any online video service I've seen. I actually switched to my podcast player all the youtube channels that also have a separate feed.
I'm always baffled by the suggestions when watching videos from some common series. There would be mostly accurate suggestions, and consistently two or three videos completely unrelated taken from my viewing history. For instance there would be 'Howto repair your dishwasher' in the middle of all the videos of a math channel.
I tend to massively subscribe to channels and watch in batches, so I have (and want to have) a very good idea of what's coming next in my queue.
The only reason youtube is better on that front is because google.
And at it's core, BetMax is better than VHS. HD-DVD is better than Blu-Ray.
Often, it's not about what is "better". It's about who has the most moment, is easier, less encumbered by DRM, etc.
Sometimes it's better to download Youtube... more often than not, Youtube "just works".
Actually this is exact reverse of a Betamax story - better and more expensive long term improvement won over short term and cheaper one.
Do you report these? It's been ages since I saw a PDF that pdf.js misrendered.
Remember, on the web, you are the product.
The same goes for many other things:
- Movie theatres in the last few years (commercials before movies)
- Television since the days of black-and-white TVs.
- Radio dramas "sponsored by X" before TVs existed.
How has anything changed?
This is what I use instead: mplayer -fixed-vo $( youtube-dl -gf mp4 $* "$link" )
If you have the HTML player enabled, and if your GPU supports hardware H.264 decoding (most do these days), this plugin may help:
https://github.com/erkserkserks/h264ify
Otherwise Youtube might send VP8, which your CPU has to decode.
That isn't its core functionally, it's a social video sharing site, not a video playback site. It's core functionality is social sharing and all that goes with that, comments, related videos, channels, etc.
I would argue YouTube's core functionality is "making it easy to share videos with family, friends, and the world". Allowing playback of the videos on the page makes this functionality easier.
>Often I find myself using youtube-dl to fetch a youtube video and just play it in a regular media player because it just works better than what browsers have to offer.
I do this too - although only because an addon I have causes Firefox to memleak if I leave a YouTube tab open too long. Rather than finding the problem and fixing it - I download a video I want to watch and close the YouTube tab. Honestly my video player of choice (MPC-HC) does exactly what the YouTube player does. It plays the video. Not a whole lot of bells and whistles needed to do that.
Examples of this hampering is that they only stream 20sec ahead instead of the whole clip in one shot. There are many other annoyances like this, like not giving you the HD version even though it says the video is HD and you've selected HD, or when it re-streams the movie when you switch from windowed to fullscreen, probably because the windowed version was too low quality.
Related to that, if you try to scrub to a position BEFORE what you are watching right now (say, 1 minute before), which is obviously buffered since you have just watched it, it goes full loading-retard again. It's like it just throws away the data it buffered and showed you. It is insanely infuriating.
But can you build a democratic 24/7 music/video feed with a native video playback app? Maybe, but it is much easier with the web. And it has already been done:
http://botwillacceptanything.com:3000/video
https://github.com/botwillacceptanything/botwillacceptanythi...
I invite anyone with the time and inclination to submit a pull request that changes the content of the video feed.
But the interesting thing to me is what happens when we move past the existential despair that comes when we first recognize the true nature of things. Sure, things are fucked, but they always have been. What's next?
When I was as bitter as you sound here, I took a break. Burnout sucks. But eventually I found myself coming back to technology because it's my best chance to make the world suck slightly less. Or, put more accurately, to shift it in the direction of my irrationally high ideals.
So maybe take a break? Go hike the Pacific Crest Trail or work on a goat farm or something. You're not going to help anybody, yourself included, by soaking in something you hate indiscriminately. At least rest until you can come back and focus your hate in a laser-like beam on one particularly awful thing.
You do not have to learn a new framework to do things on the web. The browsers all seem to support stuff that's worked for years.
The problem is that web developers feel the need to learn new things because they fear getting out of date. "oh, dude, I learned React this weekend. It's hot stuff! You need to learn this."
No, you really don't. You have a plethera of choices, and one of those choices is to rock it like it's 1999.
Otherwise, there's an extent to which you have to accommodate the absolutely rampant fetishization of current fashion for How We Do Things Now Because It's Better(TM) so you can sell yourself properly.
In more concrete terms: right now if you're looking for a gig as a front-end dev, you're going to have a much easier time finding a job if you can put Angular and React on your resume. The fact that this isn't particularly rational (or fair) as a hiring filter doesn't really matter.
If you're good at web development... that means you understand HTML, CSS, and JavaScript and you understand them at the level you should if you want to call yourself a web developer, then learning whatever framework a hiring manager wants you to know this week is trivial because you understand how the web works.
The problem is a lot of people just learn Angular for a gig. Then they leave 12-18 months later and go learn something else. It's never enough time to actually get good at anything.
And let me tell you... the hiring managers are taking instructions from development teams looking for talent. Those teams often inform management what is the hot new tech that needs to be used. But none of these things that people think they need to know have been so battle-tested yet that they are for sure the "next big thing."
I think experimenting is great. I don't think developers should worry themselves to death over having to keep up with whatever's new this week. I think devs would be better off investing that time in getting really great at the web. Really learn what semantic markup is. Really understand floats, clears, various display types. Really understand the fact that the web, without any JS or CSS, works great on mobile, because when it started, screens were 640px wide, and as a gang of developers, we've layered on boatloads of code to make it not responsive, only to make it responsive again. :)
And then, I believe everyone will be in a much better position to make informed decisions on whether or not "hot new thing this week" is really worth learning.
But what do I know?
Trust me -
Perhaps where we part ways is on the question of whether the industry leans towards sensible agreement. My impression is that it doesn't.
At the same time, i can't imagine how hellish it would be to work for a company that always wants to use the latest technology -- the framework market seems saturated to me, and I would wager it's probably better for a company to find a few technologies and stick to them, tackling problems/weak points as they arise and brewing custom solutions for those if necessary. Having to stop and shift over to a new framework every now and then seems like it would be a massive productivity hit.
I also don't like it when a framework becomes a crutch. Though I don't think that happens too often for most people.
I've also run into the heavy weight problem -- there have been a few instance where I've wanted to create something simple, and in most cases using a framework in that situation becomes the very definition of over kill. So instead I'll usually just write a simple php script or something to do whatever I need to get done, but even that feels a bit unnecessary. While I'm not sure if javascript should be elevated to all the use cases it has been recently, I do think it should be a language that enables a developer to natively(that is to say, w/o a framework) handle any simple functionality that might be expected for a site that is just a little bit fancier than a static site, so handling very simple data such as bare-bones blog or a simple mailing system. While it is getting there you still can't do something like write a simple form based mailer in pure js as far as I know, you can only open the client's native mailing app. You'd have to write a single php file or some other mechanism for that simple purpose.
But yeah, it seems like bloat is a tricky thing to avoid these days, especially since frameworks are the easiest, usually most error proof, and quickest way to get your website full of some modern bells and whistles, when in reality you may only be putting half of the technologies features to use.
The article says exactly that! It just says we shouldn't shoehorn native stuff into the web (e.g look at Synology's UI mimicking a nested desktop and windows).
> We shouldn’t try to compete with native apps in terms set by the native apps. Instead, we should concentrate on the unique web selling points: its reach, which, more or less by definition, encompasses all native platforms, URLs, which are fantastically useful and don’t work in a native environment, and its hassle-free quality.
Youtube example perfectly fits that bill.
Yet there is also a critical difference to be made between "the web" and "web technology": while the former is operated in a browser, platforms such as Electron leading to apps such as Atom or Slack that totally don't try to mimic the native platform they're running on, powering cross-platform applications that nonetheless do try hard to respect† the platform they're running on, achieving something Java's cross-platform WORA GUI toolkit thoroughly failed to††.
† there's a clear, visible boundary between the native system and the webtech app, but that boundary is easily crossed, whereas historically we've been trying to erase the boundary and pretend it doesn't exist, only to veer straight into an uncanny valley.
†† dare I say Firefox sits right there too, forever battling the tide of mimicking native components with each OS release, from UI elements appearance (vanishing scrollbar, input fields...) to behaviour (non-"sheet" modal windows on OS X), in subtle but aggravating ways, if only because it erodes the product's image and detracts development resources from other efforts.
Video player functionality aside (I understand the complaints), that thing full-screened just feels like a native app.
You mean when they were using silverlight or now when they are using HTML5?
Is it only for mobile? I didn't see any "mob" or something in the URL. Anyway, with regards to being indistinguishable from native, I guess there is nothing quite like being reminded that you are "native" than an app complaining that you are on the wrong native device. :-)
In Firefox (my default br.) the message is: "Youtube on TV is not supported on this device, for more info go to: www.youtube.com/devicepartners" which is unclickable and unselectable. Modern web...
I get full <video> playback capability in FF nightly on windows and linux
Over the chain of ownership of any website I would say starting out trying to mimic a native experience will inevitably lead to a bad UX. Maybe not at first but it will. Part of the reason I use HN as a web site on my phone/tab is because it doesn't try to get fancy and just gives me a great web experience. Shocker.
MPlayer can kick the pants off of YouTube in some contexts. Likewise, MPlayer wouldn't be viable for a vast number of YouTube use cases.
I can benefit tremendously from using both Audacity and SoundCloud. Why does one have to "win?"
I think the problem is the hype about native apps and everyone wanting an app without understanding their purposes, utility, and unique characteristics. There are situations where a web app / site is the exceedingly more appropriate solution, but there are other uses where a native app is equally exceedingly more appropriate. The problem is that people are having a difficult time discerning the two and the appropriateness of each.
I don't agree with this article and the sentiment about the critical question being whether people want your icon on their homescreen as being the differentiating characteristic. What is not discussed is the possibility for putting the icon on the home screen as a link to a web view that can function the way a native app can function. It even addresses a question regarding distribution if you simply ask your user whether they want to "install" or add an icon to their homescreen to install your "app" / web app / site. It can be designed in such a fashion that it is indistinguishable from a native app of a certain type that has rather narrow requirements.
This, a million times. Mobile websites and mobile apps have completely different strengths. The current trend is to develop them both with the same HTML-based toolchains and make them as similar as possible, which ends up being to the detriment of both.
Users don't want mobile apps that are simply a website packaged up behind the "icon on the homescreen". Those apps lack the essential benefits of native: fast and seamless access, smart use of local data, integration with device services like notifications...
There's nothing more annoying to a mobile user than an "app" that takes 10 seconds to start up because it first loads a browser engine, then makes a hundred HTTP requests to fill up that embedded browser with content. (And if the 3G network happens to be clogged, the app may end up showing nothing after 20 seconds.)
For developers, Cordova/PhoneGap-style tools are not a panacea either. It's easy to get an 80% solution done, but then you run into problems with mobile browser performance, browser differences between devices (even Android devices with the same base OS can have very different web view browser engines), etc. With all that, the last 20% of a Cordova app may well take 80% of development time, and that's rarely been budgeted in.
Shameless plug: my startup Neonto makes a UI design tool that creates usable iOS and Android code from visual layouts. It's a great way to remove the friction in creating real native apps: http://neonto.com
To be fair, that could be said about most software projects. "80% done, now the last 80% remains."
Not that I disagree with you, I had the same experience trying to make an Android app in Phonegap. It's lacking, like most cross-platform frameworks (for most types of apps, but typically not games) I have tried. They are only suitable for basic stuff where the native feel isn't critical.
Yes, absolutely true. The difference here is between "known unknowns" and "unknown unknowns", to paraphrase a certain renowned military strategist...
With Cordova/PhoneGap, it's easy to get the initial impression that you're dealing with "known unknowns", just the typical web development project pitfalls -- "This is HTML, I know this stuff".
When the "unknown unknowns" hit the fan, it's often pretty late in the development cycle, and so things blow past original estimates even though they were competently planned. It's just that the plan was for web development, not the shifting art of websites-in-drag-pretending-to-be-apps-development.
Waterfall approaches are really only appropriate when there's nothing particularly risky. I plead with the HN audience: never let a manager choose the waterfall model by default. They often happen because they make contract negotiation easy. But that's only because they save all the trouble for later.
I tend to think it's good when running in a browser but not when it's made mobile web app capable and running full screen without native controls. Unless it's a super simple single page app.
At the other end there are things like Instagram where you basically can't do anything on the website (can't sign-up, can't upload photos). Everything requires the app.
You can use much of your JavaScript skills and still get to go native.
I'm excited to play with React Native but I fear it will suffer from the same issues.
you start having to litter your code with `if(isAndroid)`/`if(isIOS)`
That's an inevitable drawback of a cross-platform framework like this. XCode and Android Studio only work with one OS, so they sidestep it.
You're joking right? ;)
> There's nothing more annoying to a mobile user than an "app" that takes 10 seconds to start up
Try this on your mobile browser http://hn.premii.com/
Now download this. Android : https://play.google.com/store/apps/details?id=com.premii.hn Or iOS: https://itunes.apple.com/us/app/hacker-news-yc/id713733435
And play with it. Download top 5 native HN apps, and launch those, and tell me which one takes 10 seconds on which device.
No doubt that you will have to deal with different version of webkit browsers (webview) on android. As long as you follow standards and not use latest CSS rules, you will be fine. And with Android 5.0+, its much much better.
---
Now try this page on your mobile, and tell me how bad it is. This is few hours of work (Flipboard style animation), and works on iOS/Android Chrome/WP8: http://reddit.premii.com/#/r/news
There are issues with browsers, but performance is not one of the issue.
----
It takes time on Cordova not because of HTML, but because how each platform works natively. I am not a native developer.
Android 5.x has less than 10% marketshare, and 4.x seems quite resilient in low-end devices. It's going to take a while until you can build hybrid apps exclusively for Lollipop.
If you don't think mobile browsers have performance issues, you must use high-end devices exclusively.
Twitter is list of stories with notifications. For me its more like HN app. HN has list of stories, Twitter has 140 characters tweet. When you click on the HN story, you get list of comments or article. When you click on the tweet, you get replies and retweets and so on.
Facebook is a same thing with pictures and videos. Try this http://reddit.premii.com/#/r/pics - enable pictures view from top right dropdown and http://reddit.premii.com/#/r/gifs to try gify/video
---
I didn't start with Android 5.x. I started my app with Android 4.x. I don't think you use low end Android device. Even native apps on Android has lot of issues related to performance.
On my Nexus 5.0/Android 5.x, Facebook scroll is not smooth when there are pictures. I only get non-important notifications from my twitter app.
I test my app in first generation of iPad 2 (My iphone 4s broke) and galaxy s3.
---
Now show me 5 meaningful 100% native apps (Non-game) that are not developed my a startup with a huge capital or big company, available on iOS and Android, and has 4.x star ratings.
Now, these are all Android apps, and few (if any) have iOS versions. But they all have iOS equivalents -- and I don't think most of them would've been as good, as non-native apps.
Note the absence of stuff that works well as a website, like facebook or twitter. For games, I think the choice between native/html should probably be governed by the answer to:"Is it as much fun as html/webview?". This is a good yardstick for other "apps" as well.
For eg hn, there's no need for an app, but of course hn is a pretty terrible web page. There are a number of easy fixes that would make it more usable, especially on small screens, but the maintainers don't care. And that's fine -- it's not accidentally bad, it's intentionally bad.
One could make a similar site that didn't break voting, threading, screenlayout on small screens quite easily. And it should probably be a web site.
One can make a "web app" to schedule meetings (see doodle.com) -- and one could augment that with something native[1]. Or one could make native apps like the ones mentioned above.
Could one make a web-rtc proxy for ssh and allow logging in to edit firewall rules via web browser? Absolutely. I'm not sure I'd want that though. Not as long as web browser security refuses to learn from office macros: unsigned js code, all or nothing execution etc.
There is some middleground, as google docs demonstrates. Personally I prefer content creation/editing to be local, possible to do off-line (with sync) -- and I'd like competing apps to be able to easily share data (via eg: the file system).
Now, that twitter can't be bothered to make a decent web-site isn't really an argument against web-sites. It's an argument against poor web-sites.
Folks were saying the same exact thing about 2.x when 4.x came out. By the time 6.x comes out, everyone will be yammering on about how 5.x marketshare is still strong and "seems quite resilient in low-end devices", blissfully ignoring the point in time when 4.x - like 2.x - fades out of view as it's increasingly ignored by app developers.
Meanwhile, in the actual low-end space, you have things like FirefoxOS where there's zero difference between "web" and "native" because "native" apps are just web apps with special hooks for things like cameras and sensors, or you have things like "feature" phones where the closest thing to a standardized platform you have is Java ME.
Featurephones are largely gone. Microsoft bought Nokia's featurephone business, shut down further development and has been converting it to low-end Lumias as fast as they can, but Android is nibbling away most of that market.
And feature phones are still dominant in places like Africa and South America, particularly due to their lower cost and power consumption (smartphones are still unable to reach the battery lives of even dumbphones from a decade ago, which is an important consideration in environments with limited/inconsistent electricity). Even in "developed" countries, feature phones are popular with the elderly and disabled, since they usually feature physical buttons that are easier to work with (better tactile feedback, easier to find with poor vision, etc.) and have simpler interfaces.
It seems like apps are less maintainable. Right now pretty much all of the Android HN apps are broken in some way, or missing a core feature of the desktop experience.
I have not updated my downloaded app in long time.
For HN, official APIs are very limited.
The hard part about X-platform mobile development is that oftentimes you need different product concepts on Android & iOS, because the idioms, best practices, device capabilities, and user expectations are different on each platform. So your client generally has to be ground-up development by an experienced expert in the platform, you can't just take the same layout and make it run on both.
Well, for some definitions of "usable" and "visual layouts"!
Our goal is to make a designer's tool that can output complete, store-ready projects for simple apps and for both platforms. That includes three things that neither Xcode nor Android Studio does:
1) Interface Builder and Android Studio's layout editor are not meant for designers. (Seriously, try giving them to a Photoshop-educated designer.)
2) Xcode and Android Studio let you define views, but neither of them produces the controller-level code from visual designs. (We do that and also produce model-level code for simple apps; there's a plugin API for more complex situations, or you can of course do that in handwritten code.)
3) Cross-platform. Anything you do in Xcode or Android Studio needs to be rebuilt from scratch on the other platform.
...the idioms, best practices, device capabilities, and user expectations are different on each platform.
I feel that this doesn't hold true anymore. iOS 7+ and Android 4+ have largely converged on a flat style where a 3rd party app can define its own style that is easily compatible with both.
With Windows 10, even Microsoft is coming into this "common mobile" UI fold. They're giving up on the idiosyncratic (and interesting) Windows Phone concepts, and instead adopting a generic look that makes it easier to port Android/iOS apps directly. They're also offering new APIs and runtimes for that.
(Edit: To clarify, you can customize layouts separately for iOS and Android in Neonto Studio.)
For a random example, look at Periscope's new Android version -- the differences from the iOS version are minor, yet it fits in nicely on Lollipop: http://www.theverge.com/2015/5/26/8657349/periscope-android-...
As for the "I sincerely hope you fail" part: we're a startup, so we're likely going to fail anyway. Thanks for the honest sentiment, I guess.
A word on Windows 10, mobile or otherwise. It is indeed a mess, with almost no coherent design language, something that Phone 7, Phone 8 and Windows 8 actually had, for better or worse. Windows 10 throws many of the good design choices for a faux Android look, and a very bad one at that due to complete lack of consistency. Android also lacks consistency throughout, but at least a somewhat coherent design language exists now.
I do not wish to argue here. Do not take my wishes personally. As someone who wishes to only see good technology succeed, and I do not see this as good technology. I do not wish personal failure to anyone individual, and wish you personally all the best.
Notifications are completely different on iOS and Android. Sharing data between apps is completely different. Wearables are different. Communicating with a server is different. Accessing contacts is different, as is accessing the camera. Sensors are different, and often differ between Android models.
Most of the big mobile success stories we've seen in the past 5 years have come from people utilizing the unique features of the phone, not treating it like a 5-inch dumb terminal.
That is a thing of the past. At the current rate of smartphone/phablet specs growth the differences with desktop are laughable (you can currently get 64bit octacore@1.7Ghz mobile devices with 3Gb of RAM for around $100) [0]. And this will only continue to grow. 16core and 32cores will be here in 2-3 years [1].
IMO, hybrid apps are already the present. The difficult times when we didn't have the required performance in our pockets are long gone... and frameworks like Ionic are really convenient for certain use cases.
> browser differences between devices (even Android devices with the same base OS can have very different web view browser engines)
That has been already solved with xwalk [2]... but again, this will be irrelevant in a couple of years.
[0] http://www.gearbest.com/cell-phones/pp_152602.html
[1] http://www.xbitlabs.com/news/cpu/display/20130304235830_Pres...
Plenty of websites doing advanced html5 gunk bring top of the line systems to their knees.
Are they native? No, they're JS apps
Do the users care? No, cos they do the "job" pretty well
We're reaching that computing power with mobile devices. In fact current mobiles are like desktops of 3/4 years ago. For certain kind of apps it won't matter if they're built with web technologies. (I'm not saying that you should bet on WebGL vs OpenGLES)
It's all about the use case.
Why does everything need to be a "rich experience"? Note I didn't say app-like, because many apps themselves are straightforward.
If we don't make that distinction then we risk throwing out the baby with the bathwater. He cites having to build "2 native apps" instead of one website, but that's only true if you ignore everyone who is not on recent versions of Android or iOS (certainly you're not going to support iOS < 5, right?).
The web is no-install, ubiquitous and accessible in a way no platform has ever been and which is impossible for any proprietary platform ever to be, and is backwards-compatible. Given these strengths, the effort to bring app-like functionality to the web is well-founded, because difficult though it may be, the converse of bringing the web's benefits to native apps is just plain impossible.
If when marketing wants to create these experiences we tell them to go native we're just shoveling the problem off to the poor native developers. The first step should be determining the value of said "experience", is it there to serve the user or is it there win awards?
If native installs could cater more for this scenario it could win some more ground, especially on windows, there you have no control at all over what goes into your machine. Android Play store and and Apples App store would also need to improve on this. They pretends to have support for it but the permission categories are all to vague, they are either all or nothing, and they have been abused to the point where nothing can be trusted any more.
But it never caught on because it was a poor implementation of a dubious idea. It started up many hundreds of time slower that Flash, required you to context shift out of the browser, was pretty ugly, and obfuscated the fact it was getting unrestricted access to your machine behind confusing security dialogs.
I think the underlying programming language was the least of its concerns.
I know this flies in the face of this article but I just don't think we should stop trying.
When was the last time someone told you about an app idea and you had any vision of a Win32 (or WPF) app? The web is the defacto app platform for desktop today. Sure, there are some legacy and niche apps that are native on desktop, but mostly everything new is web based on desktop.
Mobile is a different story, but I think its due mostly to the fact that mobile HW is still changing rapidly. New sensors and other capabilities to tap into, where a standards web has to catch up. But I think this gap too will go away as mobile HW matures.
What does a specific widget toolkit have to do with native applications in general?
Sure, there are some legacy and niche apps that are native on desktop
People still use office suites, raster and vector graphics editors, CAD, 3D modelers, meshing and texturing tools, media players, P2P clients, text editors, various format readers and writers, etc. that are largely dominated by native.
Even most non-HTTP network clients (like IRC and FTP) are still predominantly used as native apps because of the far superior experience they bring.
1) Office suites --> Largely a legacy app suite... and web use is increasing for both Office and due to Google Apps.
2) Media Players -- Playing local media is done by native apps, but that is becoming an increasing niche scenario. I posit that Netflix, Pandora, and YouTube dominate other media players.
The most important native app that most people use is their web browser. :-)
Not that I think it's particularly true. I think the desktop form factor is going away, but what replaces it is not so much web as it is responsive / adaptive, and web is a subcategory of that, with mobile being another. Having a UI which is only usable through keyboard and mouse sitting behind a desk just doesn't cut it anymore.
I'm not saying that's what they use, it could be WebSQL, IndexedDB, FileAPI - local data storage is built into your browser.
I think the biggest change is that people have mostly stopped paying for desktop apps, outside of professional tools. I have yet to buy a program written in HTML and JavaScript, though I have paid for content and services provided through such apps.
a) Tooling: yes, it's still much easier to debug a native app than a pseudo-native app.
b) "Emulating native leads to bad UX": this section is absolutely right. Stop hijacking scrolling and building in cruft.
c) "Hassle-free web": absolutely right. You don't need an app for that. Just give us the information and let us have the basic interaction we want. No, you shouldn't present your menu as a PDF either.
d) News: this is where I disagree. Users don't go to news sites so much; they go to aggregators which link them to individual articles (reddit, facebook). It's hard to deep-link into an app. This is a case of the app existing to further the commercial needs of the content provider (increase lockin, ads and tracking) in direct opposition to the wants of the user.
People keep trying to make the "magazine app" happen, and I've seen very little evidence of it working.
If there's anything where you wouldn't expect significant value-add from the native or pseudo-native experience, it would be news. Certainly as a consumer I have no news apps installed - I go to the website.
I strongly disagree. I see "the news" is a perfect counter example because technology has changed what news is. Its not daily static content anymore, its now real-time, multi-media, interactive and interconnected.
The types of media on a news page include: recorded video, live feeds, audio, pictures and embedded digital content from other services like twitter created by both journalists and amateur eye-witnesses. These are not just value-less decoration like cute animations on landing pages but real content from the event being reported.
When news is data like election results, tax changes etc. interactive data visualiations are essential for digesting it. Interactivity lets us understand the impact of the news to us personally instead of single homogeneous national agenda. We expect all this and for it to be real-time and provide ways for us to be notified about changes, to share it and discuss it with friends and strangers.
I'm arguing against the parent that claims Web 0.5 (vanilla hyperlinked documents) is enough for the news. This is only sufficient to duplicate a newspaper and present prose\pictures of what happened yesterday. I claim that technology has dramatically changed the fabric of news itself which now requires the modern Web with its document/app blurring to include dynamic behaviour, interactivity and multi-media.
Disagree. Case in point: steam://friends https://www.iana.org/assignments/uri-schemes/prov/steam
/s/ steam for news://home or news://business/26-05-2015-oil-prices
The content could (and definitely should) still be html, obviously not everybody you link to is going to want to install the news app and it should fall back to opening in a browser, but if you want to wrap a fancy interface around what should just be text there's your solution.
Also from that link: "Security considerations: Unknown, use with care." Great!
(news:// is already taken by Usenet NNTP to refer to articles by ID)
The few successful native apps with linking (iTunes, Spotify) go via the web.
It's not much easier to debug multiple versions of multiple native apps than it is to debug one web site.
> Our working assumption has been that all web sites should be app-like, and therefore tooled up to the hilt.
I don't think that's true. Some people create horrible scroll jacking functionality for whatever reason - maybe they thought it was more 'native app like', maybe they just thought it was clever. But many other web developers already consider that bad perf is bad perf and aren't willing to put up with it.
Browser based applications are much easier to distribute and adds a security layer, so that you do not have to worry as much about trojan/viruses, compared to installing executables from cr4cksnh4cks.com
The browser is the perfect container. And it also helps a bit that the API's are super easy to work with. Making even the novice programmer productive and able to create powerful applications.
One reason why native is bigger on the smart-phone market is that Google, Apple and Microsoft want to completely control their ecosystem and lock people in. What I can not understand though, is why Google does it, as the majority of their income still comes from the word wide web. They have however made major advances on that front lately, to there is still hope.
As the virtualization technology advances, the gap between running on bare metal and in a container continuously decreases. So there will be little incentive running native/bare metal in the future.
We have a long way to go though. If you want to build something that make full use of the hardware, you still should go native. But I hope that changes in the future.
Not in the least, you have to be comfortable in a half-dozen technologies at least to make a half-decent web application. You want performance, animations, etc then you better be an expert. And even then, your perfect container is a limited container.
By comparison, building a native app is much simpler. The complication comes in with cross-platform applications.
thousands, absolutely. great and/or well-documented? Unlikely
I recently had to help somebody with their public library and a particularly magazine publisher for digital issues. They require a web app to read the issues. They were trying to use their Mac, but the site refused to load. The public library staff had no clue why it didn't work ("well, it works for us", and their attempts to contact the publisher was your stereotypical tech support horror story.) Long story short, their website doesn't work on all browsers. They implicitly know that it doesn't work in Safari because they apparently wrote a native app just for iOS. However, they have no native app for Mac and never bothered to fix their website.
You generally don't have those problems in native. Apple in particular designs their APIs to steer you in the right direction and make it painful for you to do something that goes against their UX guidelines.
If you're not used to writing desktops apps, yes it will take longer.
With Glade + Python 3 I was chucking out GUI code faster than the Visual Studio + Win Forms because there was no compile step. No over engineered MVVM ala C#/WPF for a simple app - load a glade layout file, hook up callbacks - bam everything works together. The MVC is already there because the content pipeline (model) is already separated and views are defined in glade files. I had a prototype functional by the end of the day - it would take me that much just to choose which tools to use if I went Javascript client/Python server.
Seriously - couldn't believe how fast you could get stuff done with it - everything works as expected, you get all the controls you need - no need to learn random stuff like that qtscript, no build process (this is actually huge !), insanely fast iteration (faster than web-dev). I always thought of GTK like some obscure C gui lib but the Python wrapper makes it very usable.
My only complaint so far is that Glade seems to be getting progressively slower as you remove/add stuff so you need to restart it from time to time (eg. once per hour) but it starts instantly so it's not really an issue.
Note : I haven't yet tried to get it running on Windows or OSX since we all use Linux internally.
Anyone that has ever used RAD tooling for GUI applications can easily see how the HTML/CSS/JavaScript combo tooling is still miles behind from a 90's desktop developer experience.
One thing that is more and more important is batterylife. The more layers involved, the more energy they suck.
The VM approach allows the VM to synchronise application wake-ups which can increase battery life.
Google chrome on Android is acting much like a VM to developers and I'm willing to bet the Android Chrome team are spending a much time as the Java runtime team are on optimising.
People always go on about Cordova etc, but I've never used one of these that wasn't a clunky, slow non-native looking mess. Do you have any examples of Cordova apps which aren't noticeably more crap than, say, an average-quality iOS app?
* the very first animation (a slide transition to the left) was janky
* The app was unable to get my GPS location (it's being shared properly, and I have intermittent GPS signal, but if it was using the native fused location provider this would work perfectly)
* Buttons have no touch feedback.
* It's not the platform standard navigation drawer
* It's not the platform standard action bar
* The touch drag on the navigation drawer lags behind the finger position more than it should
* Non-native map has really bad pinch-zoom-pan gestures
As an Android developer I'm sure I'm consciously noticing things that lots of other users might not, but if this is the best Cordova still has to offer... :/
Having talked to a lot of users, they do notice. They may not be able to articulate it, but all the things you mentioned give them the feeling that the app is not as good as some other app.
Companies like Famo.us have proven this is incorrect mathematically over 2 years ago. That is precisely why Famo.us built its own rendering engine that subverts the DOM and renderings content similar to a gaming engine (Unreal Engine). The DOM can't render as many surfaces as a native app in one view smoothly.
You can still make a very performant cross platform DOM based application (http://hn.premii.com is an excellent example), but in order to get that performance you need to limit your interface to very basic UI elements.
Define your criteria for "winning". If I'm truly building a user experience, then I don't know a single hybrid app that has "won" (my definition of winning here is an app I use daily, and I don't know of a single app I use daily that is hybrid)
> 90% is easily good enough for most applications
The problem is most applications (80%) don't really even need a native app to begin with.
This is true only if you're working with people without experience. Someone who is experienced with the mobile toolkits is going to be able to develop the app just as fast, with more functionality.
I whish this phrase would die and be replaced by bad "teams" produce bad software. I have worked on some projects with fantastic developers, but awful or no UX, or a misguided vision, rushed to market etc etc.
I have also worked on projects with awful awful code base but the end product is actually alright (so long as it doesn’t need any maintenance).
Perhaps we should flip it on it's head and say, "good technology doesn't guarantee good software".
When a group of individuals takes such a strong position and they are proven to be wrong, I personally think some crow eating is due :-)
Like many things, native is perfect in theory but in practice comes with massive drawbacks. A happy medium may indeed exist, but "conceding defeat" of the mobile web isn't going to get us any closer to it.
But what if the browser is the OS?
I agree with the point though that we shouldn't be trying to emulate native to the T with web applications, that we shouldn't be stuffing them full of JavaScript. I think the Google IO 2015 web app [1] is a good example of what can be done on the web right now with minimal overhead.
Then the user has chosen, for whatever good reasons, to run a pretty limited OS, and in doing so has chosen not to be able to take advantage of all the things that having a much less limited OS would offer.
This is only true right now and only if browsers were not working to make more low level stuff available. There is very little limiting about being in a browser these days. Drivers, perhaps. Kernel stuff, perhaps.
But as far as a game is concerned? Or an email application? Or anything in the context of this discussion? Not too much limiting them.
It will always be true forever, or at least for as long as a web browser is a program run within an actual operating system.
It's not a competition. Pick the right tools for the job. If the job is getting your eMail or playing a relatively simple game, and a web browser abstracting as an OS can support your needs, knock yourself out.
If the job is something a bit bigger than that, use a more powerful OS.
Lets not try to limit the web, but try to make it better and then let the users decide which they would prefer to use.
Right tool for the job. That's all.
Browsers (especially mobile browsers) are unnecessarily limiting what can be done on the web. Adding additional permissions could enable browsers access to more system resources and components, especially on mobile.
Could you provide some examples of applications that don't require a lot of data that couldn't be run in a web-based environment, because of physical (and not current browser or software) limitations?
Google IO 2015, I believe, stores it's data so that when you load it up it loads from a cache that it's service worker will reload once you have it open. Allowing it to work offline and removing the cost of transfer at the beginning.
I believe, not 100% on that.
There's still an extra layer, because the browser's API is far more complex and higher level than that of an OS.
Recreating the glory days of whole-page Flash sites, or those old Macromedia multimedia CDs?
Look at Google Docs, which has changed the way teams collaborate. Look at Unity which recently ported their player to the browser. Look at the Autodesk 123D suite.
With technologies like WebGL and Emscripten, we're just starting to see the tip of the "native on web" iceberg. And it's awesome. I know because I'm helping build the iceberg... :)
It's awesome on the desktop though, but there are frustratingly good reasons that Google couldn't just run that code on phones and expect it to be anything other than a terrible experience.
Not in my experience. I've never had a native app pop-up a dialog saying "You can't use that menu to copy and paste, you have to use the keyboard shortcut." Instead, the standard platform way of doing things just works. Then there is the fact that Google Docs just refuses to open certain docs in certain browsers.
It's impressive for something on the web, but it's not better than a native app by any stretch.
But Google Sheets has transformed many collaborative functions in our organisation. Especially at budget time.
The ability to have concurrent access to the latest version always is wonderful. No more emailing attachments.
Also being able to sit down at a budget meeting and everyone can view the work-in-progress as it develops on their own device.
In all of this we've never had any one bothered by lack of speed.
Unfortunately lots of websites and web apps are not very well developed. They serve bloated HTML that hasn't been minified, let alone compressed. The page is unresponsive or blank until a dozen JavaScript files have been loaded. Hardly anything is cached. jQuery is loaded to do select a single element and animate it when CSS would have done.
Most well written, architectured and developed web[site|app]s will not be too different in UX for end users than a native app. Sure, you can't write a great 60 fps first person shooter game for the web, but there's nothing saying you shouldn't be able to create an RSS reader or photo sharing app or social network or anything else with either the web or native.
you can, you know WebGL is hardware accelerated and there is Asm.js - even the Unreal game engine runs in Firefox and Chrome.
But a lot of games do run quite well using WebGL. Just not the jaw-droppingly realistic ones.
The rough edges of web tech will only get smoother over time.
Yeah. This shouldn't be overlooked. In some cases (solo founder, bootstrapped, etc) a hybrid app might be a great choice for v1.0. Sure, it won't be fast on the phone... But it probably will be pretty fast to develop and release on multiple platforms. Especially if you don't have experience in iOS/Android dev but plenty of background in Web. Sure, if it gets traction you should rewrite it in mobile at some point. But as a prototype, I am totally cool with hybrids.
I'd guess these are not the cases that the OP meant, but still I wouldn't say that the web lost. It has fair share of use cases.
I trust app devs to choose the best tools for the job.
We're being way too short-sighted here. In 5-10 years, I don't think smartphones will be the primary way we get information anymore. Yes, we will have mobile, but it might be mobile VR, with an infinite canvas.
I think the reason native works well on mobile today is simply because there isn't much room to work with. Once the viewports start getting larger again, the web will take over.
So from here it looks like native apps are winning. Especially since I despise two of the three web apps (TeamCity, Jira) for being laggy, buggy and very slow.
That's a common belief but isn't correct, of course. Otherwise ChromeOS would have crushed the competition and it's hardly made a dent.
Many, many people use and heavily rely on native desktop apps every day. Usually for getting real work done once they tire of procrastinating on hacker news/facebook/etc :-)
Just consider the importance of MS Office to the global economy!
This is despite the fact that the shepards of the native desktop app platforms all screwed up big time and dropped the ball in major ways allowing the totally unsuitable yet somehow still good HTML platform to take over:
• MS/Apple/etc STILL have never shipped non-terrible software update mechanisms. Only Google managed to get this right and their online update engine was basically just for them.
• No discovery or sandboxing mechanisms worth a damn.
• Heavy reliance on languages like C++ that many developers can't handle (whereas web was fully built around scripting languages)
• The only people who cared about doing cross-platform desktop apps were Sun and Trolltech, and they sunk into the swamp of pretending to be the real OS-specific widget toolkits. Web apps collectively said "fuck that shit" and we saw a glorious explosion of styles with every web app branding its own widgets differently. Users, it turned out, wanted attractive apps rather than native-looking apps and so the web won on this count even though the HTML widget toolkit is a joke.
• Speaking of widget toolkits, the web is so primitive that it forced developers to abandon UI design paradigms that were actually rather user unfriendly, but commonly used because the platforms made it so easy. Prime offender: tree widgets. Hardly ever used these days as they have terrible usability. HTML has no such widget. Also: context menus. Users never find things in them. HTML simply doesn't let you customise the context menu at all.
So the combination of uber-simple programming languages, a cross platform UI story that ignored the massive must-look-native timesink, clean/invisible online updates, etc ....... almost by accident it ended up being compelling.
Now compare to mobile, where native apps are doing a lot better. Android is Java based so no problem with C++ being unapproachable. Objective-C kind of sucks but is still easier than C++ in many ways, plus iOS is big enough that developers just have to suck it up. There's built in sandboxing and app updates have been a part of the platform right from day one. The widget toolkits are way more modern and result in simpler/more intuitive UIs than classical desktop toolkits, so dysfunctional design patterns like nested trees with tiny icons don't crop up. The toolkits almost force simple, intuitive designs. And because mobile is (a) very new and (b) very restricted, writing the app twice with two different user interfaces isn't necessarily a killer problem, whereas for gigantic mature desktop apps with a 20 year feature set like Photoshop/Office it's just really expensive to do that. So the not-quite-native issue is less prominent.
There is nothing to concede or regret about. It's just how things evolve. Get over it.
Agreed. I was just watching this talk the other day called 'Making web apps appy' froom Chrome Dev Summit: https://www.youtube.com/watch?v=QbuLq4f6DGQ
It talks about a lot of new incoming features, like push notifications from the browser, adding icons to home screen directly, offline access, etc.
As someone has written on his tweeter account "Web APIs are hipster RPCs".
> Web APIs will and should become the standard way of
> developing apps across platforms
God forbid. There are few lamer things than those Web APIs. Why do you think the gazzilion of frameworks exists, if not to work around all the things broken?
And take a look at the web in 2005 and now, see what real progress was made. Yep, we got a bunch of half-baked APIs, which will never mature, because all the crowd already run forwrad to tick another checkbox.Actually, most frameworks don't work around anything.
Terrible ones at that. In native applications you can bypass abstraction layers when you need it. In a browser you are restricted to a almost comically crippled version of what any native APIs provide.
Look at the <canvas> API. It's fairly modern, and yet I can't even turn off premultiplied colors, which I would need for doing even semi-decent image processing.
server sockets? udp? no dice.
even the most primitive file management? with the file API i can open individal files now. But can I grant a website access to some cordoned-off subtree of the filesystem? No. Which in turn gives rise to "store everything in the cloud" mentality, because there are no alternatives.
What are those? If you're talking about alpha, that can be bypassed.
> server sockets? udp? no dice.
The web platform doesn't allow protocols which bypass its security model, sure. But you do have other ways to communicate, WebSocket (over TCP) and WebRTC (over UDP).
> But can I grant a website access to some cordoned-off subtree of the filesystem?
Not yet, but you do have your own filesystem.
which brings us back to the crippled versions of the native APIs.
And lets not forget: developing for android is hard. You have a variety of models, with varying versions of android, running on different carriers; i've read some horror stories, and no thanks.
I'm quite quite happy developing for the web and keeping it on the web. I don't have to answer to any gate keeper or ask for permission for a new release. I don't have to share 30% of my profits, or be careful about implementing native functionality.
They just need a browser that can render HTML/JS/CSS. That browser will only get more optimized over the years, the network will only get faster, and the technologies to optimize the web for mobile will only increase.
I say more web, not less.
No, it will not be perfect. Yes a native app would perform better. But I don't think my users (who continually ask me for a mobile app) are really going to care that much if the page transitions jump a tiny bit. And once Safari pulls its head out of its ass and supports AES-GCM in its WebCrypto implementation, I can do fully-native crypto in my app, and the largest performance hit goes away.
HTML5 is the poor person's write once, run everywhere. Although not perfect, it continually strives to be better. It enables someone like me, who can only work nights and weekends, to build something useful and usable for a lot of people in a minimal amount of time. If people don't like Turtl mobile because it doesn't have seamless transitions, they can use Evernote instead and have their plaintext data leaked all over the web.
Web apps don't try to recreate the native UI anymore - something that used to be the case some years ago in the iOS1-6 era. Nowadays the UI of Android 5+, iOS 7+ and WinPhone7+ look very simple and Web-alike.
Simply avoid bloated outdated big JS libraries and use a minifier to shrink the JS and CSS files.
I thought the trend reversed as many little commerce switched from offering a Android/iOS app to a mobile-friendly website. This may not be a global trend.
quirksmode.org used to be great resource in the IE6 era. Nowadays http://caniuse.com and Mozilla's MDN have replaced it completely for me as it offers up-to-date information.
For now, the URL click is king, and it's hard to beat easy when you want people to use what you've made.
It isn't a competition between platforms, and we aren't trying to make them look and act the same. We just pick the platform that offers the simplest workable solution.
Maybe I just run in a more pragmatic crowd...
PPK ignores the original reason that the browser won so long ago though... it is the universal GUI for the Internet. We've had access to 'native' extensions for web apps for a long time (Java applets, Flash, Silverlight, ActiveX, etc, etc), yet these things are all but dead. Eventually the Apple vs. Android war will probably go nuclear, and users will demand that things 'just work' too. If its time to revisit this conversation, then fine... but there is nothing new under the sun.
In the future I envision, noone in their right mind would ever think native is the way to go.
I get the impression that the huge diversity of linux distros is enabled primarily by the fact that more and more development these days is web and not native.
And I don't think we'd have to fear the OS will become a "glorified browser shell" if it wasn't the primary "app development platform".
Right now native app development is feasible. You have pretty much 3 platforms you really need to worry about developing for in order to have access to the largest amount of market share for the least amount of effort. Imagine even one more player enters the market and gains any respectable amount of market share.
Instantly every mobile app development team's efforts need to grow or every developer on each team's responsibilities grow linearly with the total number of platforms they need to develop for. From an operational standpoint it's not sound economics to make business decisions based on approaches that don't scale well.
But we haven't even considered BSD-flavor. Perhaps if we expanded to include BSD-based operating systems. To name a few: FreeBSD, DragonFly BSD, PcBSD, NetBSD, OpenBSD.
All of the BSDs mentioned above have a very unique mission.
It's easier for me (as consumer) to choose any one of those to run my desktop / laptop knowing that I'm going to pretty much get all the same access to apps that I would if I were to run Windows or OS X.
Without any reassurance that I'm going to be able to do what I need to do on a BSD or Linux machine, I'm probably going to be stuck choosing something created and maintained by Microsoft or Apple.
No offense, but I'd trust PPK's beliefs about the mobile ecosystem more than any random HN user.
This can only lead to one result which is for developers to want a unifying platform on which to develop. I would argue that this exists, and is improving. It's called the web and web browsers enable this unifying platform.
Diversity is good, but too much diversity can be detrimental. A one-mobile-OS world is a terrible thing, since there's no need to push forward and improve. A two-mobile-OS world is better, as long as it's easy for users to switch to whatever is better at the current time. Once you get beyond three, you end up with a situation where it takes more and more development time to cover less and less of the market, and it becomes more likely that a single winner emerges (for example, the DOS-to-GUI transition in the 1980s-1990s).
One of the reasons this would be possible is because the responsibility of app development theoretically wouldn't be aligned vertically with the company that developed the OS, or with some platform that company is responsible for developing.
Certainly not. In my opinion, the problem with the web is that it has become too complicated. In an effort to make the web simpler for the ordinary user, the web has actually become a more complicated place for the (advanced) developer.
HTML, CSS and javascript have grown so complicated that they lack certain desirable properties, such as verifiable security, flexibility. For instance, a developer has no choice of programming language, but has to resort to javascript; we are stuck with the cooperative multitasking of the 80s (webworkers support only message-passing, no shared state); also, the developer has no choice of render engine, and to make matters worse, the developer has to write code that is compatible with about five different platforms (desktop/phone/tablet). And of course, the fact that those platforms are not identical is also due to the fact that the web is too complicated.
I'm hoping that in the future, we can make the web more simple and elegant for the developer. We need simpler primitives, not the complicated and restrictive building blocks that we have seen thus far.
(I haven't used web workers, so maybe they're in fact awful to use. But from what I've read, it looks like the right decisions were made, pretty much.)
Also, shared immutable state is a useful (often perhaps even essential) property for building efficient code in a multithreaded environment, even when using the message-passing style.
Verifiable security? You can't statically verify a program is secure.
Flexibility? The complexity has given it greater flexibility.
> For instance, a developer has no choice of programming language, but has to resort to javascript
Just like on native platforms, where the developer has no choice of programming language, but has to resort to machine code!
Unless you use a compiler. Which you can do, and it works very well.
I thought you thought complexity was a problem? Introducing "native" other-language support would only increase it.
> also, the developer has no choice of render engine
I thought complexity was an issue?
But this is also not true. You can use your own if you really want to.
Although why you need your own rendering engine is a good question. Almost all native apps use the OS's GUI framework.
> the developer has no choice of render engine, and to make matters worse, the developer has to write code that is compatible with about five different platforms (desktop/phone/tablet)
Who said they did? They can choose to write code that doesn't work well on other platforms. Though that's largely a UI thing, the code will run on any without changes.
> And of course, the fact that those platforms are not identical is also due to the fact that the web is too complicated.
What? From a code perspective, if it runs on one, it runs on the others. The API is the same. The only difference is UI: screen sizes and input methods.
> We need simpler primitives
We have those. If you want to run a 50MB C++ GUI framework in the browser, you can! It's just a terrible idea.
The theoretical maximum benefit of writing a program once that runs everywhere (watch, phone, phablet, tablet, laptop, desktop, tv) and is always up to date (computing is done in the cloud) is extremely enticing but has serious performance implications. What you always end up with is a developer friendly framework that contains cases for each platform and in most cases, doesn't have all of the features each individual developer needs (Bootstrap, Appium, Node.js, React, Angular, etc...).
I want the web to win, but in most cases the DOM was not built and designed for the direction that native applications are going.
And from there, they need to stop building abstractions such as WebSocket, IndexedDB etc. and start exposing raw OS capabilities such as UDP, TCP and FS. Basically packaging node.js would do the trick here.
Also see Tim Berners-Lee in "Installing web apps":
"If I can't give power to apps, then the web app platform cannot compete with native apps."
https://lists.w3.org/Archives/Public/public-webapps/2012JanM...
He asks for something fine-grained but the main point is to expose the real power of a machine to an app if the user so wishes. That's not possible today with browsers.
Browsers need to stop controlling innovation, and push core services out to the edges and let innovation happen there. Stop drafting specs for WebRTC etc. and give UDP etc. back to the people.
If the browsers don't do it, maybe someone will make a new kind of browser that will with something like Electron.
1. Web apps are no longer the answer to breaking Windows hegemony on apps.
2. The Web is a mouse UI. That may seem like a small thing, but look at how much trouble Microsoft has had turning Windows into a touch UI.
3. Mobile devices are the end of overlapping windows. The Desktop Metaphor was a cute idea, but it isn't appropriate for mobile devices. Web browsers, and Web apps, are made for resizeable windows.
4. The Web is great for simple interaction with dynamic content. Which is another way of saying "The Web is a big, linked, interactive e-reader." You can stretch it to try to do other things, but it isn't a comfortable stretch.
5. Pure canvas apps... ... ... </crickets>
6. No one development idiom. Nor two. Nor five. This is much less of a consensus than Android or iOS. IOS developers will be making a language transition, and Android developers will probably incorporate a dependency injection idiom into nearly all Android coding once a consensus is reached on what flavor of DI is favored, but that's about it for uncertainty.
Also, while I agree with the "home page" question, the author makes no mention of the other important criteria: are notifications important?
There's no reason that mobile browsers couldn't expose more internal access to components or controls (and UI options) that are currently only available to native apps.
Do we really want to be restricted to a environment where if we want to release an update to our app, we have to submit the update to the third party for approval? (which can take days) and where users have to download your app to try it out?
We shouldn't concede defeat. We should demand more from mobile web browsers.
Thanks! <3
The original issue was opening different types of files from within an internet message.
No matter how browser-centric today's computer users have become (thanks to marketing) the past remains close to the surface. As far as I can tell, the original solutions were never replaced; they were just ignored in favor of "middleware" (for lack of a better term) like Adobe Flash.
In fact today's developers probably are very familar with the original solutions, though they might not recognize them as as such. I wonder how many could tell you where the Content-Type: header actually originated from?
What is MIME?
What is mime.types?
What is a mailcap file?
My browser of choice still has full MIME support so I can configure it to launch other, dedicated programs ("native apps"), based on file extension.
For example, in theory I could launch ffmpeg or a video player (mplayer, vlc, etc.) from "within the browser" to transcode or play video. I imagine all the major video-serving websites used or still use ffmpeg in some capacity, not to mention any "web browser" that attempts to play video itself.
Now the truth is I actually do not use MIME anymore. I prefer to download video first to my own localhost server using my own scripts and a program like tnftp, and then play it on any device I choose, with whatever "app" I choose. I like my video as a file that I can manipulate, not a pseudo "broadcast".
As a side benefit perhaps, I have observed that with few exceptions I never see any preroll advertising when I download video to a file and then play it.
The only time I have seen such advertising is when using a "modern" browser to "stream" (or progressively download) video.
Not sure what this means if it means anything but I am happy to avoid the advertising.
But I don't think the solution is to give up. Native apps are great, but there's a vast gulf between the binary running on your device and the server you got it from. Downloading and updating take forever. Connecting to other apps is barely possible. Everything is horribly siloed. The brilliance of the web is that it allows people to quickly connect to computers anywhere in the world and get at whatever stuff they might want to serve; native apps will never have that level of flexibility, barring some horrible proprietary ecosystem.
Unfortunately, the web was designed primarily with content in mind, not presentation. The only way servers can provide interesting and slick user experiences is to hack up the content presentation system, which is as silly as using spreadsheet scripting to build enterprise software.
So I think the best approach would be to revisit the design of the web. Instead of having the web be strictly document-centric, I think there should be a higher level above that, through which HTML, CSS, the DOM, and everything else are implemented. A sandboxed, scriptable, low-level canvas that only gives you the bare essentials, allowing you to create native-quality experiences without having to piggyback on the DOM or reinvent the universe via canvas or WebGL. A "Vulkan" equivalent for web software. Not making a document? Feel free to not use HTML — or only embed it in the parts of your web-app that actually present content.
It should be possible for a user to go to facebook.com and immediately retrieve an equivalent to the Facebook app in their browser — smooth scrolling, gestures, and everything. (Or whatever the future equivalent of a browser might be.) But if a user navigates to a simple blog, it should still appear as it does in the web today, because this new web would be a superset of today's web.
We've been interacting with other computers through a seriously constrained pipeline this past decade. Instead of bowing our heads and conceding defeat, why not blow it wide open?
You might argue that canvas and WebGL nodes in the DOM already serve this role, but I disagree. In their current form, these nodes exist inside the document-based world of the web rather than containing it, an inversion of what I see as the proper hierarchy. This arrangement poses a number of problems for designing rich apps, including very poor performance related to content reflow. Some companies[1] are trying to fix this by manually doing all their rendering inside canvas and re-implementing HTML and CSS along the way. Unfortunately, this is a ton of work and results in a web experience that is non-standard in many ways, including for things like accessibility and text selection. The fact that this actually does work to significantly improve the user experience, however, points to the fact that something needs to drastically change for the web to remain healthy, useful, and relevant.
My understanding is that the DOM is already implemented as a series of texture-backed views in many browsers. That would still remain the same — nobody would have to reimplement this functionality. I just think it would be a great idea for us to be able to use those same texture-backed views for custom UI unrelated to HTML and CSS, and to separate the rendering concerns of text and document flow from the design of user interfaces.
Right now, we're very much faking it. Every time you go to a website, you're downloading a document that unpacks into code and data in your client. Caching aside (because the cache timeouts are never long enough), you have to do that dance every time you visit. The performance hurdle ppk describes is less about having to go through the DOM to get to your elbow (though that's true) than it is about never being able to precompute and locally cache view logic. That's a performance hurdle that can't be crossed.
In contrast, native apps divide everything quite clearly into "code" and "data." The code is the app you download from the store; it can auto-update, but it isn't trying to pull in a new copy of itself from scratch every time you use it. It can also be pre-optimized for your architecture. The data is only what is needed for the app to present it appropriately to you.
I'd be willing to wager that if a real standard for downloadable client-side cached web apps ever caught on, ironed out the optimization issues, and stuck, quite a few of the performance issues of web vs. native could actually be addressed.
(Of course, we'd still have to deal with the DOM really being the wrong language for a lot of high-interactivity use cases, unfortunately).
I don't see why any reasonable developer would choose building the same app on multiple platforms over building it once on a standardized platform and having it just work everywhere.
That is, of course, if the standardized platform had all the capabilities and great UX of the proprietary platforms. This is where the web often falls short, and the companies behind proprietary platforms have some very sweet incentives to keep it that way, i.e. developer lock-in and maintaining complete control over the platform's direction.
Despite all the impediments, I still firmly believe an open platform will triumph eventually, because developers love efficiency, and the current landscape of wasting work on rebuilding for proprietary platforms is anything but efficient.
In fact, the web is already capable of competing with native in terms of general UX, not yet quite enough to match or surpass it, but definitely within striking distance. Just take a look at some of the apps made with Ionic: http://showcase.ionicframework.com/
Additional tip for for Android Cordova development: bundling an external WebView like Crosswalk makes quite a bit of difference for <5.0, both in terms of performance and in terms of not having to worry about legacy WebView quirks for older phones.
Because it provides a better experience for the user, and because it allows for access to hardware native features.
"That is, of course, if the standardized platform had all the capabilities and great UX of the proprietary platforms. This is where the web often falls short, and the companies behind proprietary platforms have some very sweet incentives to keep it that way, i.e. developer lock-in and maintaining complete control over the platform's direction."
Given the choice of a standardized platform that offers the same UX and features, would anyone still choose to develop for proprietary platforms?
That ideal standardized platform doesn't exist right now, but the web is getting closer and closer to being that platform. It doesn't make sense to give up all the progress we've made so far and resign to native when the web is already almost there.
Further, to talk about the speed hit associated with web apps, laptops and desktops are still primarily sold with old-school hard disk drives instead of solid state (unless you pay a big premium, which most people don't want to do). Frankly, opening a native application on an older machine (and for most users, one which hasn't been defragmented even once) was an awful waste of time. But Google Docs? Heck, you didn't even need to be on the same computer to access those files. Not to mention trying to update these apps being a massive chore on these slow machines. Heck, most people didn't ever update their browsers until Mozilla and Google imposed it upon users.
While I'd like a world where the browser is not an abstraction layer for an OS, I do recognize that these web apps exist for a reason.
Instead, I see a future, like we're starting to see with devices such as the Synology NAS where the interface is a website served on the device.
Things like the ESP8266 make it possible to add Wifi capability to pretty much any device.
The future isn't about an app store nor about search, it's about discovery.
The problem is there's no stuff like "web/native app": there's a bunch of functionality that solves user's problem to greater or lesser extent. Although there are needs which are technically complex, usually what the user can ask for is pretty simple. Clean UI, button here, button there, some lights and pop-up notifications, a couple of graphics, which actually represent something pretty trivial internally. Sometimes the data needs to be pushed to or retrieved from some centralized storage or it needs to talk to some other "service". "Browser" is absolutely awful and pointless invention, but unfortunately we have accepted it somehow and learned to satisfy the needs of typical customer using it. HTML might be stupid and CSS might be inconsistent, but it's actually pretty easy to make the UI user wants with that and a handful of js code.
As a bonus, it will work on Linux, on Windows, on Mac, your Android phone and even some not-a-real-OS which happens to have a capable browser.
And what we have on the desktop? I don't know a single good UI framework for Linux ("good" in a sense it would make it easy to achieve what I want). There's somewhat usable WPF for Windows, which still doesn't really allow to implement anything user could wish for as easily, as I'd do with HTML. Somewhat usable, but pretty verbose is Android UI framework. I don't know what happens on Mac. And, yeah, none would be compatible between different platforma (except Qt, maybe, which is overly complicated by itself).
So there isn't much choice between "web and native". The "native" is currently pretty much non-existent.
And it isn't the real thing anyway: in order to be a good platform for building GUI apps all that functionality should be directly provided by the DE in the first place (like it is in Android, for example). You cannot play with representation the same way in (say) xfce, as you can in the browser console, moving containers and changing colors as you like.
If Android had ever-so-slightly better permissions, then the clear answer would be to stick with native apps, period.
What we need is a language to build apps natively and serve them securely thru the browser using an app:// protocol.
Working with html to build apps is a nightmare. Google, Apple and Mozilla should take the best from android and ios and work on something universal and truly disrupting. No, not java. No, not obj-c. Perhaps swift, go, nim or something better. Remember the hobbyists.
Best of both worlds.
One writer argued the reason the Web took off was a standard, usable presentation format (HTML) combined with easy distribution (hyperlinks) and instant updates (connect for freshest version). This spread across both users and platforms. Its continual improvements gave it new features. To this day, the standardization and easy distribution makes it easier to push content to most users via a web browser.
Yet, even big Web companies such as Facebook are switching to Internet-style apps for mobile and Internal use. That's saying something. I guess they don't want around 500 bytes of HTTP overhead to send 1 byte of data. The best solution is a portable platform that solves the presentation, linking, and updating issues that web did. There's a number of older vendors and startups doing this. Hopefully we'll see more take-up and network effects on that side of things.
Note: Anyone still thinking the Web was the best route to go, but wanting native advantages, should Google Tannenbaum's Globe distributed toolkit that supplemented Amoeba distributed OS. They even ported the Web to run on top of it and side-by-side with its applications. Compare work like that to the web of the same time period and you'll see why Web is inherently inferior due to bad (or misappropriated) design. It always will be to a comparable, native product.
The web platform wants to have powerful features that are dangerous and/or easy to abuse, but haven't found a good way to allow them safely.
The "solution" we've settled for is to blame the user for clicking "OK" on permission prompts that have unclear consequences to non-technical users.
The Free Web can't do that (and I strongly prefer it to remain Free with low barrier to entry), so it needs a better approach, or needs to give up on having dangerous features available.
The same problem exists on native.
I'd prefer the Web to stay safe and hassle-free, and use native apps—with the risk of letting malware in—only when I really need more powerful features.
As a user, I have no interest in that. On the front screen of my phone I have the 'google news' icon which is a link to a web page with links other news web pages. Why would I want 20 siloed apps for the various news sites I visit occasionally?
1. The systems and hardware they run on are usually controlled by one company.
2. There's no View Source.
Where would we be if 'native' applications had won over the '[worst is better][1]' approach of the web? What do you do if you lose your phone and the only way to get information is through an app that was installed on it?
[Alex Martelli][2]:
> Our culture’s default assumption is that everybody should always be striving for perfection – settling for anything less is seen as a regrettable compromise. This is wrong in most software development situations: focus instead on keeping the software simple, just “good enough”, launch it early, and iteratively improve, enhance, and re-factor it. This is how software success is achieved!
Good enough is usually good enough and can be accomplished through a web browser if your design is good and not compromised by 'business decisions'.
There is a place for native apps. Communication applications such as Whatsapp are a good example. Applications whose main purpose is to provide information, such as websites, are not.
Finally, lets not forget that the internet is not a thing, [it's an agreement][3].
[1]: http://hypertexthero.com/logbook/2013/07/europython-2013-not...
[2]: https://ep2013.europython.eu/conference/talks/good-enough-is...
I think he underestimates the web, though. In particular, there is one aspect that he fails to mention and that I view as one of the best aspects of web development: the stateless request-response-replace-UI model of remote application development. This model is incredibly simple for developers to understand and work with, and eliminates a whole slew of complex problems found in traditional client-server development.
(I would note that these problems are being reintroduced with client-side web technologies like Angular and de-reintroduced by technologies like intercooler.js.)
1) blind to all the progress we've made closing the gap with all the other platforms
2) Irresponsible to the future by basically saying "let's drop the only open and common platform we have and let's embrace the corporate fragmented world, let's relive the 80s all over again just because of some short term performance issue!"
The win is huge if you have a web app that works well as a mobile app and does so on the same code base. And that does happen, it just doesn't happen every time -- but I don't think anyone ever said it was supposed to.
I think the web should continue innovating and that trying to compete with native apps is a worthy goal.
The web is the most compatible and universal format. There is a lot of benefit to having a universal development platform. With Node.js the web has been brought server-side as well. There is a huge convenience factor to being able to use 1 platform for browser, server, and mobile.
I don't like being locked into a vendor or being uncertain if this platform will be around 5-10 years later. Having the web around as an app platform creates certainty that encourages commitment from companies.
- URL's are a great starting point for interactions (see The Physical Web).
- App stores (in their current shape?) just can't be the future.
Really weak argument, it reminds me of High level languages will never replace ASM... Windows 95 will not replace DOS...
Software is composed by abstractions, doesn't matter how much levels of it, better computers allow it.
Thinking that hardware<->OS is better than hardware<->OS<->browser is an oversimplification.
As a developper I look at native app development the same way I saw the web in the early 00's. Different platforms, screen sizes, versions, programming languages, paradigms ...etc.
I don't believe it is that clear cut. I think you are ignoring the fact that native developers have frameworks of their own. Using Boost, GTK+, or Qt gives various layers-of-thickness over the OS so the native code is portable. Some, like Qt, also cover mobile operating systems as well as desktop ones. These frameworks are not young either; so while websites had browser-specific-detection-code (thanks to IE), native apps were already running cross-platform by leveraging frameworks of their own.
"Practical Cross-Platform Mobile C++ Development"
https://www.youtube.com/watch?v=ZcBtF-JWJhM
MuseScore
http://showroom.qt.io/musescore/
Qt show room has many others - http://showroom.qt.io/
This is because you are using tools and paterns to avoid having to think about the differences. Those tools are also on native platforms, and those differences apply to the web.
My money is on hybrids for the near term. A native app with a webview gives you a lot of local control but still leverages the server power and advantages of centralized web apps. The Youtube examples mentioned in these comments are a parallel of this approach (I doubt they use webkit, probably just access the streaming protocol, but effectively similar).
I'd love to hear some comments/opinions on these thoughts!
I don't have the same opinion as the author of the article. His arguments read like the article is from 3-4 years ago when the old iOS UI was still hip and Web Apps tried to recreate it with slow JS libraries.
Let data be data. Let features be features. And let user interfaces be user interface. So many websites mess this up in order to deliver a quick working site that only works on the desktop and sometimes only Windows. And now we have sites making seperate ghetto mobile versions or mobile apps missing features. We still have data that can't be accessed through URL with text that can't be selected or shown without JavaScript loaded.
Unless you are doing something more complicated than content devilery (ie games or utility apps) there is no reason to override fundamental features of the web.
Either way, it's about figuring out which model works for the problem you're trying to solve. If you advocate for one, you're missing opportunities in the other.
I will take any of those over CSS, thank you very much.
However, from my observations over the years, the cost of "browser specific" behaviors is equal to or less than the cost of learning entirely new styling paradigms every time someone puts out a new UI framework. CSS also has the benefit that over time browser specific behaviors fade away as standards take shape, which is inherently not the case with UI frameworks.
As far as the namespace goes - I guess, but there is nothing to stop you from coming up with your own namespacing scheme using nested CSS classes.
This doesn't work when you are just yet another developer on the team.
https://www.youtube.com/watch?v=yJDv-zdhzMY
some better-than-most discussion here:
http://arstechnica.com/the-multiverse/2015/04/from-the-vault...
I care about my privacy and I won't install your app just to get a slightly snappier experience or because you didn't want to make a web version.
There's way to many "apps" that don't deserve to be anything more than a website and I take a hard line when it cones to my privacy.
Ask yourself if this can be done in a website. If the answer is yes, then why aren't you?
Yet somehow, users manage to navigate the web despite Apple's app store gatekeepers not setting policy. And really the debate about emulating native exists because of app store policy, not because the native standards are inherently better than what someone might invent left to their own devices...or even that they are necessarily better than the command line.
Just don't. Well, OK, if you have an enterprise shop full of C# coders, you should evaluate Xamarin.
But unless that's your story, and unless your tool is as well-engineered and well-funded as Xamarin, trying to get one code-base across Android and iOS is going end in pain and regret.
It's back to a future of multiple platforms with fairly strong differentiation in features and toolchains. Deal with it.
IMHO, the reason for this is that once web technologies almost catch up to native, native buckles down and fights back (e.g., Swift), and as long as native can keep developers happy, it will always own serious market share, since it is closer to the metal (faster) and necessarily has access to more APIs (more features).
They may look good, but they tend to break things like back/forwards have text that can't be copied and pasted.
Some have embedded video, which eats everything.
That's not a requirement for building a single page app, there have been ways of emulating history in spas for a while now.
> have text that can't be copied and pasted
What do you mean? SI'm not aware of any sites whose text 'can't' be copied unless they disabled right clicking.
It is a full-fledged CAD design software (think Solidworks) that runs on the web.
And it's blazing fast.
Actually I think they're doing pretty good with that.
Additionally how many of those laptops are actually running ChromeOS, instead of being replaced by a proper Linux distribution?
Looking at Germany, which was was I mentioned on my post, the scenario doesn't look like that anyway.
I think the future of remote web-like apps lies in something like QML[0]. A completely native UI with full access to the desktop widget suite can be downloaded in QML in a few kilobytes. Stick a browser like loader on the front of it, and provide a decent (seamless) asynchronous RPC, and you've got yourself a replacement.
In Mobile there are 2. Web wins over 20 competitors, but just 2?
The main workflow of a web browser (urls and browser history), don't seem any more restricting than having to use an app store to download an app or using the home screen to launch an app. (I would argue that they are, in fact, less restricting). The restrictions are a factor of the operating system, not a inherit restriction of a web-based workflow.
- Distribution is easier and doesn't require approval from a third party (such as app stores), providing less of a barrier to entry and more freedom to create what you want to.
- It can be easier to develop and you may not have to provide support for multiple versions of your app (because you can easily ensure that everyone is running the latest codebase).
- Common components/libraries that would be used across different applications can be part of the browser itself or cached for one app and re-used for other applications, instead of having to be packaged into a downloadable runtime application.
- Depending on your application, creating a cross-platform product may be easier and require less development and have built-in functionality like copy-paste and other functionality provided by the browser (history, bookmarking, etc).
- The user and other people have more power to use your application in more flexible ways (due to browser plugins), and the content can be crawled and made searchable/discoverable by a variety of companies.
- The hyper-linking built into the web offers easy, cross-site (and application) integration that may be difficult to accomplish in a native app. In fact, you may be limited to a certain application provided by the operating system (like a particular map provider on mobile)
I will take "the Web" to mean, essentially, that the rendering of the front-end is done in a browser. Then, what you have to do (I learned this the hard way) is stick to things that get rendered well in browsers on all the platforms you plan to target (which usually includes Android, and that means no fancy scrolling). Develop your aesthetic around that. You can put out native versions later, when you have the budget to support all the platforms.
Now, this has several advantages. One is if you want your app to become popular. If your app involves inviting friends in any way, realize the friends don't have the app, and the invitation will probably happen via SMS/email/facebook/twitter. When that link is clicked it takes the friend TO THE WEB. Yes you can have the friend look at an app in the store, download it, launch it, confirm their phone number again, and then finally engage with whatever they were invited to. Or you could have a WEB EXPERIENCE ready for them and create an account with 0 steps!
And since you've already coded this web experience, why not wrap it in Cordova/PhoneGap and add bridges to the underlying OS APIs via plugins. This keeps separation of concerns and actually maintains much better than many native apps. And you'll also instantly have access to many cool components like Mobiscroll, which have been tested and work everywhere. Compare that to downloading some native lib for iPhone, like Layer, only to realize it doesn't work on other platforms like the web, and you have to wait or roll your own.
So now you've got a unified codebase which renders in a browser, you can wrap it in MacGap and other wrappers, hire specialized developers on each platform and pay them to maintain ONLY the part they need to. Not the interface, not the server interaction, backend etc. Which all has a standard and RICH environment to build in, including localStorage, local database, sockets, even WebRTC for peer to peer time topologies! All that stuff is good enough in 99% of the cases to build an app.
Well I'm a little biased. My company has been building a plaform for years to make apps successful and viral, a sort of open source alternative to Facebook (which just shut off app access to people's list of friends, something that was the biggest selling point at the very beginnng and the reason you shouldn't build your business on someone else's centralized platform). The idea was to have a standard platform finally to power SOCIAL apps, that was all well designed and take care of everything for you, so you can focus on write your app, not getting cordova, user signup invites and privacy / security right etc. It also supports a growing ecosystem of reusable widgets and plugins that you can just plop onto a page, like chatrooms or docs. I thought it would be done in a year but it's been four years and we're still at 0.8!
Some comments above mention about loading 100+ assets for a Phonegap app...why would you load 100+ remotely when you are building a phonegap app?
Every tech comes with a trade-off, at the level of dev-cost vs. runtime-efficiency. It also depends on what kind of existing code base and developer team you have to build the new product. A typical right or wrong clickbait like this one is not even worth the lengthy discussion bordering on random mass venting.
- Run offline
- Access large files stored locally
- Start from the command line or from clicking buttons on your desktop
- Use graphics cards and other peripherals
- Run quickly
- Tune performance to your platform
- Come pre-installed on your system
- Exist for all time
- .. and don't require servers and money to host them
- Security is pretty easy to solve
- Coded in pretty much any language
- Interop with other native software
- Run in windows or fullscreen
- Easily convince people that they ought to be purchased
- Obfuscate their functionality from users [important for, say, video games]
- Handle large amounts of data without network bandwidth constraints
- Standardized UX, so it's less easy to screw up.
- .. and when you do get an app running, you get a lot more UX for free [well, depending on what you're doing]
Things webapps do well (and sometimes get for free) that native apps do really, really badly:
- Save data across multiple systems
- Allow you to login anywhere
- Get off the ground with a UI + basic functionality in O(1) lines of code.
- Receive updates from their maintainer
- Run multiple instances at once with a single click
- Are completely sandboxed from other apps (app freezes? just refresh the page)
- And are sandboxed enough that you can pretty much trust them (barring tricking you into downloading viruses / exploits, etc, you don't have much to fear from a website,, at least compared to running untrusted executables)
- Live in easily manageable tabs
- Are easily augmented using scripts (Greasemonkey, etc) or simple scripting (JS in the URL bar) or plugins (browser extensions, etc)
- Are globally namespaced and addressable and bookmarkable. Every webapp runs in the same container so other programs can manage them in a uniform way: via bookmarks, hyperlinks, etc.
- Support an intuitive format for entry points into the internals of an the application, via URLs. Compare to: save files for a video game.
- Must forcibly reveal their source code (except for Flash & similar plugins) to the client, so it's hard to deceive [technically savvy] users.
- .. and are largely open source by default (except for Flash & similar plugins)
- .. which means anyone, even someone who's never coded in their life, can learn to peek under the covers and see how things work.
- Use global identities (logging in with Google/FB/Twitter/etc) and sometimes global configurations (Google cloud sync, etc)
- Elegantly support collaboration (send someone a Google Doc link and you're done)
- Standardized ways of handling authentication and security - Default implementations for hotkeys, linking, text editing, scrollbars, image insertion, etc.
- Default implementations for caching of resources, shared libraries, and asynchronous messaging [sort-of] - I'm sure there's lots more.
It seems to me that web browsers accidentally solved a very general problem with a very specific solution.
--
The problem: how do I run software that's dynamically loaded over the Internet with minimal barriers to my users?
(Well, initially, it was 'how do I display text from the Internet to users', but we've moved passed that.)
The solution: I'll build an application that interprets a single programming language (Javascript) with a single standard UI language (HTTP+CSS) and supports a global namespace of all other apps (DNS,etc) and allows data to be encoded in resource identifiers (URLS) and maintains state across sites and across sessions (cookies), and I'll call it a Web Browser.
This relatively arbitrary solution got a lot of things for free, but it left us with a lot of implicit constraints that divided the line between web and native applications. Ever since then everyone has been trying to break back out: adding tabs, isolating tab processes, supporting extensions, embedding Java, embedding Flash, supporting SVG and Canvas and WebGL, etc. We're still largely trapped in the interpreted-Javascript world.. but Dart gets points for trying, and alternative languages/paradigms (stronger-typed variants like TypeScript, from different programming paradigms like React, and from entirely different languages (asm.js, GWT..)), are gaining traction. Meanwhile, AWS S3/Lambda/etc, Dropbox-based storage, Google cloud sync'd settings, or global credentials via Twitter/FB/Google/Etc.. these are all reducing the amount of work you have to do to build and maintain a simple app in a website.
I wish I could use Dropbox or Google Docs as my 'filesystem', if that made sense, or use the local filesystem as my filesystem, if that made sense instead; I wish I could use local keyfiles or global accounts at will, or build low-level compiled libraries and mix them with deployed, interpreted website code at will. I also wish my window manager and my tab manager were the same application, and my Omni-bar searched my desktop and the entire internet, and my stickynotes were synchronized on any computer I log in to. And I also wish I could write a native (but sandboxed, except for the permissions I grant it) application with a UI that interops with my OS and other programs by simply writing 10 lines of code and then saving the file with a .html extension. Basically, I don't particularly want to write native apps; I just want to casually slide back and forth over the line between native and web.
Why is it virtually impossible to read long articles on a web browser? After 25 years, why do web designers need to create their own page transition mechanics for long-form articles, for example, when the basic purpose of the web is designed for reading documents? Why weren't multi-page transitions built in by default?
The same with photo galleries - after 25 years, why isn't there a standard user experience for viewing photos related to articles? Why are there a million JQuery photo gallery plugins?
In fact, why do we need to write CSS to create a basic readable document in the first place? Why doesn't HTML/CSS default to a high-end and legible reader experience out-of-the-box for basic text? (proper fonts & spacings, limiting column widths to 8-15 words max, etc..)
The reader-mode that web browsers are building in, that should be the default standard UX for HTML, and CSS should build upon that. But instead, it's a non-standard option.
By contrast, corporations can more easily make these sort of decisions – by fiat – which is why native app frameworks are more "opinionated" / make more design decisions for you out of the box.
This topic is as much the story of two historical forms: the operating system GUI and the World Wide Web hypertext project as it is about two organizational forms: hierarchical corporations and decentralized design-by-committee non-profits / multiple competing corporations.
I recall when I used Opera, you could scroll down, hit space, and it would go to the next page as long as the website provided that information (forum softwares often do.)
I also mentioned the column width because this site has the obvious problem of long horizontal text, which is a no-no. People naturally read in chunks of 10-15 words scanning vertically. Long, horizontal text is easy to lose track of location.
> Size Matters
Strong disagree on both of these points. I view most webpages (including that one) at around 66% zoom these days, because the text is so goddamn big. And anyone advocating for less contrast needs a shovel to the head.
Or they have the thing where high contrast makes the letters jiggle and therefore difficult to read. I get that when tired.
Maximum contrast does not make for good general usability, even if you happen to like it.
While grey on white may look better, actually reading text is easier as black on white.
Why do you need page transitions for articles at all? The only reason I can think of is for more ad displays. Ok, if you have, say, a long manual with multiple chapters that would be several hundred pages when printed it can be nice to break it up, but that's probably not what you meant.
> photo galleries - after 25 years, why isn't there a standard user experience for viewing photos related to articles?
Because there's no one size fits all solution. Look into magazines, newspapers, etc. After a few centuries there is still no standard. Grouped, with captions, position, size, etc.
> why do we need to write CSS to create a basic readable document in the first place
You don't. Browsers can display semantic markup just fine without any CSS. The fact that you even ask this question is why you write CSS, because different people in different times expect different styling, and they don't think the default style is pretty. I agree that the default styles could be improved though after 20 years, but that could lead to breakage of current CSS styles, and why risk that if everybody uses CSS anyway?
And the fact that I wrote this comment is just another reason why you have to write CSS: because not everybody agrees on how the web should look.
Actually yes this is the use-case I was referring to.
HTML has semantics to define sections, headers, etc.. but it doesn't manage them in any way.
If you write HTML that define sections, for example, it's no different than if you write HTML without sections.
Ultimately, I don't think of the web as a page-based medium, it's document-based. Electronic documents that want to mimic pages are a relic from the past, imo. What you seem to want should probably be implemented as browser plugins.
What I read was that it's not for "more ad displays", although closely related. It's because news sites keep (and market themselves based on) a "pageviews" metric, so they try to get as many pageviews as possible out of each piece of content.
Long articles and books are more comfortable to read if they are paginated: one small tap, one pageful of new stuff. Far more convenient and less prone to losing your place than scrolling.
I am not talking about fixed pages or clickbait websites where you have to scroll anyway and then click a "Next" button, but about having a flexible way to enable pagination of content.
That pagination is one of the reasons why for me the best way to read something like the stories in http://longreads.com/ is on Instapaper (or a similar tool).
You may like pagination but I do not, and I would argue its better suited as an option, not dictated by the author.
90% of the JS being loaded is for tracking to increase advertising revenue. Much of the styling for a site that has no advertising can be fairly light.
If we focused less on revenue generation we'd have a much much smoother web experience that would run quickly on mobile devices.
I would flip that: we need to explore ways to generate revenue which don't rely on practices like trackers, structuring content to inflate page-views, etc. which don't benefit the user.
The most obvious example I'd use is ArsTechnica's approach of disabling ads for subscribers – I notice this any time I use a new browser and pages take twice as long to load because web performance just isn't a priority in the ad world.
But then rather than poor content, there would be next to no content (for the masses) because business have expenses ;)
Speaking seriously, yeah I see what you mean. Maybe reducing ads and improving speed would result in better UX, which would lead to better user retention, which would leave to more ad clicks. But that's a lot of maybes. Why risk that if people are used to ads? Ads often come when subscription is not an option.
You can explore other revenue sources (e.g. affiliate) but they are usually not widely applicable. And other than that, there's not much to do. I don't really think there exists a business model which could replace ads (when, again, subscription is not an option).
Yeah. That sucks. But that's the reality.
This is only true if you constrain the "web" to mean the Tim Berners-Lee document-centric HTML and its http hyperlinks.
The "web" also means the whole internet stack, TCPIP, DNS routing, etc. In that case, the web is a foundational tool for anything that connects people or Internet Of Things. To say the "web works best as a document platform" is like saying "the electricity grid works best as a lightbulb platform." We've gotten past the historical motivations of a interconnected electricity and have done other things with it.
Do some "native" apps do nothing more than what a 100% static HTML could do? Yes, abuse of a Javascript widget framework does happen. However, the bad examples don't mean the "web" should be held back by the original visions of HTML or Hypercard. The Google maps app is not traditional HTML+CSS.
EDIT: The replies misunderstand my position. I'm not trying to redefine the traditional technical meaning of "web" and make you like it. I'm attempting to explain that "the web" has evolved and what it now means to the world out there. (E.g. see non-document usages like Dropbox, google maps, online Sudoku games, etc.)
Because http & https is ubiquitous and they have a defacto pass through most firewalls, the modern "web" is the "internet" as far as application interfaces are concerned.
The idea of a pure separation of concepts such that http is "documents" and some other protocol on some other port is "apps" is not going to happen. All those IT departments' security teams and Cisco admins at Fortune 1000 companies are not going to adjust their firewall rules to open new ports and protocols. The "http port 80" has become the "internet" on top of the old definition of "internet". It's not ideal but that's where we are today.
Maybe things will be different in the IPv6 world.
In this context, it can be safe to assume that everyone knows this technical distinction (even for those of us who are not web programmers). In other contexts with less computer-technical people, I don't think being annoying and correcting every "technically incorrect" mention of "The Internet" when they mean The Web is helpful. But I think it is helpful to remind them of the distinction if you are actually talking about the subject (as opposed to just saying things like "look at your internet, I just sent you a facebook message"). Computers are magical enough as it is; it doesn't help anyone to make it even more so when they are even slightly interested in discussing some part of computing or IT.
Explaining that The Internet is the infrastructure and the Web is just one the things that uses this infrastructure seems simple enough to grasp, and isn't an oversimplification at all. People understand that the electricity grid has to exist in order for them to make toast.
How about a native app based on a "web view" that uses HTML, CSS, JS, etc. (the whole W3C stack) and doesn't even talk to HTTP/S but uses some other port and transport mechanism?
Also known as Ethernet protocols, nothing to do with "The Web".
It's about the evolution of how society sees the web and not about what its original purpose is.
Dropbox uses html and http. Drew Houston and his team are not going to submit an RFC so that the internet has a new protocol and port "dropbox://myaddressoffiles:8675". No, Dropbox the application will just use "http://". It's because they did not pursue conceptual purity of having "dropbox://" that allowed everyone inside and outside of corporate networks to use the service and share files.
That is "the web" we have today and in that scenario, the non-technical use of "web" includes the underlying internet stack to make web apps possible.
What's the alternative? Tell millions of Dropbox users that such a service is outlawed because "the web is best as a document platform?"
The "web" as in Tim Berners-Lee(TBL) "world wide web" is http+html which is "documents".
Saying TBL-web is "best as a document platform" makes perfect sense. It was defined that way therefore, use it that way. It's tautology.
Back in 1993, if we want to say "X is best though of as a network app platform" we'd have to use the word "internet" instead of "web" for "X" to be conceptually pure and technically correct (the best kind of correct.).
But now we have things like Dropbox (and thousands of other "web apps"). Dropbox runs on "http".
Dropbox "syncs". Syncing is an app. Dropbox is an app. Dropbox runs on http. Http is "the web". Apps run on the web. The web is platform for apps. That's the reality of where we are today.
This is they beauty of the network communication protocols.
It is is just a consequence of what network protocols happen to be open by default.
This is only true if you constrain the "car" to mean the Henry Ford, transport-centric engine-and-chassis.
The "car" also means the whole transportation stack: pavement, asphalt, road signaling, etc. In that case, the car is a foundation tool for anything that transports people or inanimate objects. To say the "car works best as a transportation device" is like saying "the electricity grid works best as a lightbulb platform." We've gotten past the historical motivations of a horseless carriage and have done other things with it.
Instead, I'm pointing out that the world out there without permission from any savvy HN readers has moved on. The "web" has become the "internet" for both documents and applications.
It's descriptive, not prescriptive. (See my other replies to illustrate how usage of http has evolved to coexist with corporate firewalls that lock down ports.)
The world has not moved on. Part of the world has dug itself into a technological hole. Most of the people who work in it have never seen what's outside it, so they think the solution to all their problems is to keep digging.
Edit: crap, I sounded so snarky and aggressive. Sorry about that. It's not something personal -- I obviously got the point that you don't think everything about that is a good idea.
The point I'm trying to make is that not ever technological move is necessarily a "good" evolution. Every narrow street in technology was once thought to be a superhighway that everyone flocked to.
I remember everyone being so bloody enthusiastic about this whole Web 2.0 thing back then (and I was one of them). Then all this data crumbled as people paid less and less attention to information structure and semantics and focused on the flashy stuff. Then it turned out a lot of problems were intractable if you clung tightly to JS, CSS and the web browser.
Yet for some reason, people thought those problems happen just because we don't cling tightly enough to JS, CSS and web browsers.
Oh -- and twenty years after operating systems that aren't full of memory leaks, security problems (eh...) and performance clunks became reasonably accessible to people everywhere, people are trying to promote ditching those for web browsers. Which, I would estimate, will need another twenty years or so to stop having memory leaks, dubious security and privacy practices, and embarrassing performance clunks.
To clarify, I'm not saying "moved on" as an objective measure of superior technical progress.
The "moved on" is referencing a descriptive (not prescriptive) state of affairs with how the world now defines "the web". The existence of sliding around map tiles in maps.google.com, syncing folders in Dropbox, etc is evidence that the world does not think of "web" the way Tim Berners-Lee thought of hyperlinked documents in 1993.
"The web" is defined by a set of traits (hyperlinks etc.). When whatever we're doing stops having those traits, it's no longer the web. Continuing to call it "the web" is not some form of philosophical awareness, it's just ignorance.
I 100% agree that ""The web" is defined by a set of traits (hyperlinks etc.)".
I'm also adding that "web" also now includes expanded perceptions by everyone else beyond "hyperlinks+http" and that enlarged perception is unavoidable. We could ask the world at large to *not" call it "web" but that's like asking us to quit calling "machine calculator" a "computer". Sometimes we invent a new word, but many times we don't.
Yes, a person uses a "web" browser to read a "document" on New York Times. But they can also use that same browser to play a Sudoku game that's not a document at all. To the layman, both actions are "surfing the web".
But the World Wide Web is very much here and very present.
> To the layman, both actions are "surfing the web".
To the layman, a server and a computer are the same thing, and yet calling Apache a computer is incorrect.
And educated programmers call various text styles, "fonts" even though technically, a font is actually a specific size, and specific weight of a "typeface". The "font" is a subset of "typeface". Even though typefaces still exist, almost everyone uses the word "font."
And programmers will also call SQL (without CTE) a "programming language" even though it's not Turing Complete.
Even binary black-&-white-thinking programmers will exercise a lot of leeway with how words are used.
I want to emphasize that this all started with my response to the "web is best as a document platform."
I think most of us can substitute "web" to say "http+html is best as a document platform." That's what TBL meant.
Today... if we have Dropbox/GoogleMaps/Sudoku/etc, with millions of users as reality, what does "web" in "web app" really mean? The "http+html" has become a universal transport mechanism (with some apps even tunneling through http to do interesting things.). As the years progress, there are more examples of http becoming a "dumb and dumber" generic transport pipe for things that are not documents.
Let's say a startup company wants to create a website to crowdsource music promotions. They want the service to offer programmable access so people can write open source clients. The presentation slide / whitepaper will not use the phrase "internet api". Instead it will use "web api". If every corporate firewall and user' homes computers with Microsoft Firewall had wide open UDP ports, it's possible for the phrase "internet api" to have more currency than "web api". But that's not how history has played out.
HTTP + HTML does not include "the whole Internet stack, TCP/IP, DNS routing etc.", as you mentioned above.
However, that wasn't the level of conversation I was trying to have.
There is another viewpoint of http+html that is not the specification. That viewpoint is the usage of http/html/TheWeb.
For example, the White House is building made of stone. It is not a human. So how can newspapers say "the White House has signed the Internet Freedom Act into law." Well, we're not getting anywhere going round and round in circles insisting that stone buildings have no agency to pick up a pen and sign a document and that only a human like President Obama can do it. There are multiple meanings of "White House" and we seem to get along fine with it.
There are also multiple meanings of "web." It's possible for the industry to invent a totally separate word besides "web" for the abuse/reuse of http+html as a transport for apps but that didn't happen. If a startup in Silicon Valley has a goal to release an app that makes use of TCPIP+DNS with the best chance for wide adoption, they can entertain the idea of using a custom UDP+port scheme... or they can just piggyback on http. They didn't use http as Tim Berner-Lee's specified in 1989. It's the out-of-spec usage that's adding new color to what modern "web" means.
I'm not saying I approve of it or it's technically superior. They didn't ask TBL's permission for it to evolve that way. Is it anyone's fault?! Too late to assign blame now. It is what it is. The phenomena I described above exists no matter what label we give it. It would be awesome if another word besides "web" described it but it doesn't exist (yet).
If the "White House" can act as a synonym for "human", it's not impossible for "web" to act as synonym for "whole internet stack." (Again, the synonym mapping is using the other evolving definition of "web" instead of the official RFC specifications.)
I'm pretty sure there are different protocols for email, torrent, etc. And I don't see how that is a bad thing, or why The Web has to be a frontend to everything that comes from The Internet (desktop email application for instance).
No, absolutely not. The "web" refers only to what you mentioned above. It's only a recent bastardization that we started referring to the "Internet" as the "web", because of the dominant nature of HTTP. You're right though that the Internet is important, but the GP's point stands that HTTP was really only intended as a document protocol (Hypertext, yeah?) and it has seems a somewhat strange perversion that we've bent it to doing so much more.
Someone not in the know may call the transmission in a car "an engine", or call the differential a transmission. Just because someone outside of the industry does silly things like that doesn't mean all of a sudden obfuscate the usefulness of terminology at all, as it really helps no one.
As far as I am concerned those things only exist to inflate ad views, they have negative usability impact. I don't really see why a long document should be broken up in pages to be readable.
> The same with photo galleries - after 25 years, why isn't there a standard user experience for viewing photos related to articles?
There is one: right click → open in new tab. It work very well, much better than the jquery kludges that people come up with.
> In fact, why do we need to write CSS to create a basic readable document in the first place? Why doesn't HTML/CSS default to a high-end and legible reader experience out-of-the-box for basic text?
I find plain un-styled HTML to be much more readable than the tiny light gray webfont on white background that designers usually settle for these days.
Except when people nest the images as deep as posible and overlay other elements in front of the images so you can't simply right click the image, you have to inspect source and hunt for that image URL (or check resources tab in developer mode, or whatever).
/rant
I've done it. The one thing it requires is a lot of coordination. Notify the users to keep their equipment on the network from time X to Y. Notify the infrastructure team to schedule a push. Have the dev team on standby in case the push goes bad. Have the software protect itself when inevitably someone's install is corrupted or skipped.
Compare that to the web. User opens Chrome; they get the new app. No push. No real notification of any team. Hell, Ops probably doesn't have to be notified if they automated web app deployment to servers. The whole thing is very easy. Even if you have the added complexity of a Chrome-app wrapper, still pretty easy.
Given the ease of deployment and the mitigated risk of data corruption due to version issues of the app, the web looks pretty good. Given the advancement of hardware and software, UX can be close to native. If not native, app-y for lack of a better word.
If it lacks UX for native, don't target native. Target app-y. This is between native and document. It might become complex to manage local state, but that shouldn't be a deterrent.
Tangentially related, to the general question: does the user want to have a link to your product on their desktop? The answer is probably no. They want easy access to your product, but the link conflates how this occurs with a sense of permanence. Your app is not the product. Your app is tool to get the product: information. UX and installation are both just means to the end.
You still have to push the apk and stay alert for the feedback, but you have to be careful with web apps update too anyway.
I'm not sure about Apple because it appears the auto-update process is not that smooth and people don't upgrade their app as often as Android users.
Beside that I think virmundi above has his points, and I agree with him. App updates are not instantaneous.
The auto-update process on iOS is basically the same as recent versions of Android: check a box for completely automatic background updates or see a notification with the available update count and an “Update everything” button. The main difference is for things like games which hit the legacy 100MB cellular transfer limit which Apple added back when AT&T had grossly underprovisioned their network.
Apparently, these things called "app stores" are so good, that on these new things called "mobile devices," native apps are more popular than web applications!
Sorry for being a pedantic. Updating applications is quite painless on every platform except for Windows. (On Mac, you can use the app store or include Sparkle in your application.) It's only Windows that makes updating difficult; and this is the fundamental weakness of the operating system.
To me there should be a bit of a feeling when to use native vs web on mobile. If you're making a fairly static, pretty booklet app, I'd use web. Cordova makes this simple and clean. If your moving much beyond that, from personal experience, I'd go native. I've tried all of the free-to-type hybrids. The tools try to smooth over the issues of complex API centralize business logic in JS while having multiple views to target different OSs. Sadly, most only really support iOS. For example, Ionic tries to support Android, but it's general appearance is iOS. Appcelerator is the same.
What about the detriment the web brings to having apps that work offline reliably and ensure control over their own data?
> Notify the users to keep their equipment on the network from time X to Y
Not your problem. Have your packaged app in the place its expected to be updated from (a HTTPS server for something like Sparkle framework, and/or the respective App stores).
The client will periodically check for updates and download the new version.
If your back-end functionality somehow changes in a way that breaks the old version (or something changes such that the old version cannot be allowed to operate, such as a law changing) - you simply use a versioned API in your backend, and respond to requests to the old version of the API, with an error message telling user an update is required.
> Your app is not the product. Your app is tool to get the product: information
That makes a huge assumption about the purpose of the app. If the app in question is a game, or an image editor, or a word processor or any number of other types of app - the app very much is the product.
> If it lacks UX for native, don't target native. Target app-y
And say goodbye to customers. People like the experience of a real native app.
The web has supported this for years, but few use it.
If the data is tied to a browser, how do I back it up/save a copy of it? How do I persist it when the browsers local settings/cache are cleared (either by clearing or eg. when the OS is installed)?
I meant your wording was strange. I had to reread it several times to understand what you meant, and I think the parent poster also didn't understand what you meant.
If the data is tied to a browser, how do I back it up/save a copy of it?
In Firefox, back up your profile.
How do I persist it when the browsers local settings/cache are cleared (either by clearing or eg. when the OS is installed)?
If you clear it intentionally then why should it persist?
that's hardly the same as having a file i can copy and use anywhere.
> If you clear it intentionally then why should it persist?
In Safari at least, "local storage" is cleared when clearing other data like cookies etc. I would imagine that's not unique to Safari.
You also failed to cover the concept of "the OS is re-installed" or "a new device is purchased".
"Backup your firefox profile" is an unbelievably short-sighted suggestion - am I supposed to keep transporting a Firefox profile around forever? What if I want to use a different browser? What if I want to use my data on a device that doesn't expose the raw filesystem to the user, and thus I can't copy my profile to the correct location (assuming it was even binary compatible)?
I can't believe I have to explain the benefits of a regular file with data in it, to a directory containing a mix of browsing history, cookies, crash dumps, plugin information, and somewhere, an SQLite database containing my data.
Yes?
It's like asking whether you should keep your homedir or Windows Roaming User folder around forever. If you want your data and/or settings, you do. And both of those fit the description in your last line pretty well.
You're offended at the suggestion but it's the same way it works in native apps in reality.
No it isn't. A Firefox profile is a folder full of a mishmash of data, the vast majority of which is inherently not data I want to keep.
I deliberately don't keep my entire home folder when I re-install/upgrade OS X. I get much better results taking a short time to re-set a few preferences than deal with the effects of a carried-over ~/Library folder.
That's exactly what the Firefox profile folder is like - it's not just user data from local storage, it's fucking cookies and crash dumps and shit. Why would I ever want to keep that stuff forever?
> it's the same way it works in native apps in reality
It just really isn't, and it's not surprising that you chose to ignore all the other issues I raised with this suggested "solution".
* the customer is powerless when it comes to deciding whether to upgrade when e.g. the company decides to change strategies.
* the customer data lies unsecured, covered by a standard privacy policy in some foreign jurisdiction somewhere. HTTPS by itself is useless when the data is available to pretty much anyone working at the company and in some cases the server providers too. I think this covers 99% of web services out there like Evernote, Dropbox, FB, Google's stuff, etc.
the www is great for content. wikipedia. awesome.
but it just sucks for apps. the constraints it puts on UI and hacks needed to get around them is staggering. let's center something on the screen with CSS.