For anyone who’s interested in doing this, but doesn’t want to manage the infrastructure you should check out Supabase. (I’m not affiliated, just a fan.)
5,293 karma · joined April 30, 2011
@ianstormtaylor
co-founder of segment
For anyone who’s interested in doing this, but doesn’t want to manage the infrastructure you should check out Supabase. (I’m not affiliated, just a fan.)
Oso looks really well considered. Wish I had this in the past. Well done!
Congrats on the launch and good luck!
It’s great that both approaches exist, because they surface different conclusions. If you want to see where the actual emissions are being emitted, or what “industry” they’re from, then the production-based accounting will give you that. If you instead want to see what different consumer-level behaviors are responsible for most emissions then you’ll need a consumption-based accounting.
That duality is what makes it hard for people to grok carbon accounting estimates sometimes.
1. HTTPS everywhere has zero impact on the usability of a website, but makes visiting those sites much more secure.
2. Apple's App Store model for installing applications improves security and is also easier to use for the average user.
3. 1Password with Touch/Face ID can actually be easier these days than entering emails and passwords manually.
4. And more…
Security doesn't always have an immediate effect on usability, and even when it does it isn't always negative.
I'm not sure where you're getting the 3% number from. If you read the New York Times maps page data[1] and just divide the total deaths by total cases you get 3.7%, but that isn't the death rate because it doesn't take in to account a lot of factors.
Instead, there's a good article[2] about how bad the virus will get, that says estimates put it in the range of 0.1% to 3%. (With the seasonal flu being somewhere around 0.1%, but the Spanish Flu of 1918 being somewhere around 3%.)
That said, the general intuition that less reporting of cases means that some part of the death rate is over-inflated makes sense. But also consider that there are factors that go in the other direction. Anyone who currently has the virus but has not recovered or died can be under-inflating that rate. And there are likely lots of other factors, which is why articles often mention that the "true" death rate cannot yet be calculated.
(Also the death rate varies a lot with age, and isn't the only factor in determining the "badness" of a virus. Which that second article goes into more depth on—things like how contagious it is, and how early a vaccine can be developed. So the average rate being half of the current numbers doesn't necessarily mean the concern is over-inflated as well.)
[1]: https://www.nytimes.com/interactive/2020/world/coronavirus-m...
[2]: https://www.nytimes.com/interactive/2020/world/asia/china-co...
Ehhh... sounds (and looks) very much like a clone of Stripe to me. And saying, "we're different because we are infrastructure", is just icing on the dishonesty cake. Not sure why Sequoia would ever have invested in a copycat to Stripe in first place.
- https://bugs.chromium.org/p/chromium/issues/detail?id=102937...
- https://bugs.chromium.org/p/chromium/issues/detail?id=608393
- https://bugs.chromium.org/p/chromium/issues/detail?id=608162
The gist of it is that they "canonicalize" the DOM selection when you have two adjacent inline elements, so that it can only ever be at the ending edge of the first inline element. Which makes certain selection states impossible. And on top of that, they don't draw the cursor in the right spot when doing the canonicalization. So for instance, it might look like your cursor is here:
<b>one</b>|two
But it's actually here: <b>one|</b>two
Drawn in the wrong place. And impossible to put it at the beginning of "two" at all! It's crazy!I don't know how much the take "starring" into account, but it can't hurt to star them in the hopes they're fixed sooner.
---
Edit: If you want to see the craziness in action, check out this sandbox:
https://codesandbox.io/s/amazing-breeze-6elsy
1. Try to put your cursor at the end of the word "one"
2. Try to type a character at the start of the word "two"
I really love this naming system.
- https://bugs.chromium.org/p/chromium/issues/detail?id=608393
- https://bugs.chromium.org/p/chromium/issues/detail?id=608162
If you star/comment on them to increase the understanding for Chrome's team that they are incredibly frustrating that would be amazing!
I've been using this practice and I agree that it's incredibly useful. I think because people tend to think in terms of "logs", they end up overlooking the much more useful construct of "canonical logs". Many fine-grained logs themselves are almost always less useful than the fewer fully-described canonical logs. Other observability tools often call these "events" instead of "logs" for that reason.
There's a tool call Honeycomb [1] that gives you exactly what this article's talking about in a really nicely designed package out of the box. And since it handles all of the ingestion and visualization, you don't have to worry about setting up Kafka, or the performance of logplexes, or teaching everyone SQL, or how to get nice graphs. I was a little skeptical at first, but after using it for over a year now I'm completely converted.
If you record fully-described "events" for each request, and you use sub-spans for the smaller segments of requests, you also get a waterfall-style trace visualization. Which eliminates the last need for fine-grained logs completely.
If this article seems interesting to you, I'd highly, highly recommend Honeycomb. (Completely unaffiliated, I just think it's a great product.)
setcfg({'framework': 'React'})
I immediately think to myself that the designer of the API either (a) values tiny function names over understandable ones, or (b) hasn't given naming enough thought to be consistent. Either way, it's not a good sign and turns me off from investigating further.In case anyone else is interested I wrote a similar style of article about refactoring GitHub’s interface a few years ago too:
I’m still waiting for one of these providers to crack infinite scaling (similar to Aurora). Seamless patching is a good step though.
Also, does ZEIT have any plans to offer hosted databases like Heroku and others do? That's one the biggest blockers in my mind to trying it out.
I agree, having queries live in the client is a great goal for DX on the frontend. The ideal being to have them co-located right with the components that need the data. But the issue is that these kinds of solutions are often presented without discussing their tradeoffs. From the article:
> Because persisted queries are static by definition, they also give you the possibility of optimizing execution on the server for specific queries, for example by hand-crafting a highly efficient database query.
Well, that's a bit harder when the client controls the queries and they're automatically "recompiled" on each new deploy, because now you're optimizing a moving target that could change dramatically with little notice. It's not really a benefit, since it's such a fragile situation to be relying on in the first place.
Persisted queries also kind of make co-location of queries with components a non-starter. Maybe Apollo doesn't want to allow co-located queries, which could be an okay decision, but isn't really discussed much as a tradeoff.
And then it doesn't solve the larger issue that these solutions don't work for public-facing APIs. So you end up having to solve the same issues (eg. bandwidth, security, caching) again in an entirely new way.
I think it's something the community will need to address if public-facing GraphQL APIs are going to flourish.
It's the same kind of thing as Express.js competitors showing that their routing logic handles 50k requests per second instead of Express's 25k, but only for "simple" use cases—AKA ones that don't involve a database. You should almost never be evaluating a server on these parameters.
It does bring up something that I think the GraphQL community hasn't really addressed well yet though... Part of the way Quiver works is that it only allows pre-defined queries which can then be compiled ahead of time.
> Only allow certain queries from a document store.
This is becoming a common response for how to make GraphQL performant and "secure". [1]
But this solution only works for internal APIs. If you're trying to expose a public GraphQL API it isn't viable.
Not only that, but to sync these "persisted" queries from the client to the server, lots of the persisted query tools require you to hard-code GraphQL queries as `.graphql` files in your repository... effectively re-inventing hard-coded REST responses. Except with an extra build process between the client and the server for each new deploy. You no longer really have each component requesting exactly what it needs.
The more research I do into GraphQL, the more it seems like the promise of "query anything" that libraries are selling is often discarded when you get to actual implementation. And you end up with a situation that is much more similar to REST/HTTP than originally intended.
[1]: https://dev-blog.apollodata.com/persisted-graphql-queries-wi...
Case in point, the Hacker News title was renamed to be "more clear" to "Google is rebranding storage plans as 'Google One'", totally missing the point.