This is great, thank you! Python's asyncio has certainly confused me more than other languages' async-await implementations.
Nit in [1]: When timing durations inside of a program it's best to avoid the system clock as it can and does jump around. For Python, prefer time.monotonic() or time.perf_counter() over time.time() in those situations.
Rather simple methods are surprisingly effective [1]. There's sure to be more NN fanciness nowadays (like Apple's proposed NeuralHash), but I've used the algorithms described by [1] to great effect in the not-too-distant past. The HN discussion linked in that article is also worth a read.
As I couldn't find the nice page about the IAP policy that I read and found quite clear ~4 years ago (you should verify, don't trust people on the Internet): the old rules prior to the Epic and other court cases would say "Only for those users that set up payment while using the app." From what I gather, the current rules would be more lax, but the old can then serve as an upper bound.
The main rules were:
1) A user making a payment that has any effect on app functionality (this is very broad) from inside your app must go through Apple IAP (paying 30% commission). There were some exceptions, but mainly think buying physical goods - Apple isn't forcing the use of IAP for EBay or Amazon retail.
2) You may not link to, or even mention other payment methods.
Really it comes down to: if there is any difference in what the app will do for a user before and after they pay money then that money paying must go through Apple and then Apple will give it to you (minus 30%). So what a lot of apps did is just open to a login screen. No sign up button, no link to your homepage, heck, no links anywhere. The downside is that users have to know about your app from at least one more channel than searching on the App Store, but that's not a very high bar. Probably less common if you're B2B, but for B2C a lot of them would pay their subscription through Apple if possible, the experience is great: one central place in system settings showing all your subscriptions with easy cancellation buttons and enforced standard refund/proration semantics.
In the US, Zelle vs. Venmo is comparable to debit card vs. credit card. With Zelle/debit, you're basically mailing cash - it might get lost in transit, your money is gone right away. With Venmo/credit, there's a middleman with a big pile of cash that assumes the risk of money being in-flight, and usually eats fraud/errors as a cost of doing business in exchange for selling data about your spending to advertisers.
This exactly. And this is the reason that Venmo or Paypal need to charge fees for commercial transactions, because they're providing a service. What bugs me is that Zelle seems to be marketed as equivalent to those other digital payment platforms, but in reality it's very different.
For things like "there's" vs. "there're", not too much harm besides a loss of precision, Grammer can be sloppy and meaning is still understood. But for "could care less" or "cannot be understated" or "irregardless" they're _literal_ negations of intended meaning used unsarcastically and unironically. How does that not irk you at a visceral level? Learning English is already hard enough, and we want to sprinkle in "sometimes what is meant is the exact opposite of what is said, good luck figuring out when, rely on context I guess?"
Not sure if you're being sarcastic or not, but Windows 11 users who use Google chrome are only really a crowd at the User Agent string level. Chrome allows much deeper fingerprinting.
Nit in [1]: When timing durations inside of a program it's best to avoid the system clock as it can and does jump around. For Python, prefer time.monotonic() or time.perf_counter() over time.time() in those situations.
[1] https://github.com/anordin95/a-conceptual-overview-of-asynci...