Release a free app that requires a user to log in. In order to access the content in the app, the user has to log into a web browser with that account and pay directly via the developer's website. Amazon Kindle and Netflix kind of do this. With Kindle, you have to buy the books with a separate app instead of a website, and Netflix has the option to buy inside the app as well as outside.
Apple has rules against circumventing their billing system. Netflix gets to do it because the service works if you don’t have any iOS devices.
I’m not sure someone like Fortnight could get away with bypassing it. If they did it would only be due to being a special case due to pull. No normal app could get away with it, you’d get pulled fast.
This may work for Amazon only because their own brand is also directly known to the user, and a lot of users would also be visitors of their website. But for a newcomer trying to sell digital goods via an app, good luck
They may have some sort of ‘free pass’ due to their size/influence. It’s eqsy to say that Amazon’s content is meant for Kindles too, and just happens to work for the iPhone.
But if you have an iOS only app? Good luck arguing your way out of the rule.
The Kaldi toolkit is state of the art, but you have to know quite a bit about speech and natural language processing to create a comparable service that works well (or invest the time to learn it). Definitely not plug and play, though.
Some of those optimizations become irrelevant (or downright bad) with http2. Inlining CSS ans JS is no longer best practice when you can do a server push of those and avoid sending the extra bytes once the files have been cached by the browser.
Some optimizations can backfire. Adding async to the external JS is a great tip.. unless you have dependencies between your different scripts (i.e. you need one to be loaded before the other one gets executed)
Relevant to http2 push but slightly off topic, I love how I can add a single line of code to my Django project (to include a middleware library I wrote) to have automatic http2 push. The middleware will parse the static media on the page and push them to the client, it's much faster with no effort.
That should take approximately as long as a client<->server ping, right? So shouldn't it be irrelevant for JS/CSS that loads within that time (say, 50Mbps & 15ms ping --> everything below 93KB gzipped?)
Yes, you'd download some things you don't need to. Last I heard, they're working on an extension so the browser can tell the server what media it has when it requests the initial page so they won't get sent at all.
Didn't we all have this conversation years ago already with nocache query parameters etc.? Reminds me of number 6 in RFC 1925: "It's easier to move a problem around [to another protocol layer] than to solve it."
I still don't see how HTTP/2 Push is solving any real-world problems [1] besides Google being able to push ads so that it counts as an impression even if the client blocks ads.
[1] I don't count the slightly faster initial page load since I'm getting that junk on every page load via push even if I already have it, so I'm paying with my data allowance. If you want your site to load fast, just fix your goddamn bloat.
Unfortunately it doesn't. There is no mechanism right now for the browser to cancel the pushed resources.
H2 Push's Cache Digest will introduce this ability, but it's still being designed.
You might better be working on caching so that the resources are loaded only the first time. Otherwise you need some way to know whether the user has the resources cached or not (a cookie maybe?).
Asynchronous JS scripts are a great choice. But you better makes this choice on early stage, because changing scripts from sync to async on a large legacy website can require a lot of time, there will be many bugs etc. You cannot just add "async" attribute.
That's something that really astounds me with this async thing.
Why on earth when they introduced it they didn't add a way to tell the browser the order of execution ? Or may be it exists and I haven't heard about it ?
There is a way: ES6 modules. If you can account for the order of execution (with modules or custom loaders) async is, in almost all cases, the best way to load your scripts. Defer (or body-end) scripts also specify the execution order, but only in a strictly linear fashion which usually has a performance hit.
Important note: so-called "live" air quality measurements are in reality never "live" due to the nature of the measuring stations (taking measures takes time) and the way data is compiled and shared by the monitoring agencies. As a result typical delays range from 1 to 6 hours, which means you end up using "old" data or signaling a peak when in reality the pollution peak is already over.
This is solved by using models that predict air quality levels down to the hour. One option is to use https://plume.io