I really enjoyed Zodiac. It’s reads like a thriller novel but it’s a little more grounded and less weird than Snow Crash. I think it’s a good entry point for Stephenson novels.
The first half or so of Snow Crash is a great entry point if the recipient already read some cyberpunk and thought "this has something interesting but also has a stick up its arse, it's about time someone ripped the piss out of it" - and I say this as a fan of Gibsonian prose excess.
The only problem is this puts the recipient in a too-cynical, too-stylistically-demanding mode for the rest of Stephenson.
- Posted on my Ono-Sendai Rig, from some kind of Zone, while experiencing Hacker News as some kind of geometric hallucination, under a sky the colour of a television switched off...
Zodiac is the easy introduction because it's the least Neal Stephenson book of the lot: short, minimal infodumps and tangents, and it really doesn't get much nerdier than the protagonist being a chemist [as well as a wetsuit-wearing crime fighter] or much weirder than there being a metal band in there because Stephenson wanted there to be a metal band.
Yes, this is why many larger media sites opt to use header bidding. The decrease in CTR (click through rate) is offset by increased demand for each ad unit, driving up CPM (effectively the price of the ad).
The downside of this for websites is more middlemen extracting away value - but it’s usually still a net gain, otherwise publishers just wouldn’t use header bidding.
(I’ve worked in several large media companies and have implemented header bidding solutions for them in the past)
Yjs is an impressive project and probably the most production-ready text CRDT library out there today.
One of our goals was to write down a clear spec for how a rich text CRDT should behave separately from any particular algorithm, as a resource for people working on tools in this space.
In the process we also found some examples where we felt Yjs didn’t maximally preserve intent. One of them is documented in the paper in the section about control characters, and Peritext handles that case differently.
Also, as an implementation note, our prototype sends incremental changes to the Prosemirror editor, whereas I believe yjs sends changes that replace the entire document, which can break the behavior of other plugins [1].
Are there plans to make Peritext production-ready like Yjs, or is this more of a sketch for people to build their own collaborative rich text editor integrations?
I used Yjs for a project earlier this year and so will try to explain the main difference.
They way I see it there are two (or maybe more of a spectrum of) types of CRDT, from generic and to domain specific. Yjs actually has multiple different types, very generic types (Array and Map), slightly more specific types (XMLFragment and XMLElement), and then there is the Text type that covers both a generic plain text type but also has provision for rich formatting if needed. Peritext is basically a different method of implementing the Text type which aims to maintain a little more editor intent than Yjs currently does (although Yjs already dose a pretty brilliant job!).
For a full document, you need to represent both text elements with rich text formatting marks, but also block elements. With Yjs you would do this with the XMLElement type which as you would expect has attributes and can nest further XMLElements or Text within it. Peritext does not yet have support for block types.
So, although the most common use of Yjs is for collaborative rich text editing, it can be used for many other things such as 2D/3D drawing or even gaming.
Domain specific CRDTs aim to implement an algorithm that ensures when you merge two branches of a document the resulting document maintains intent and is a "valid" document, as in it would still match the "schema" of the final document type, for example valid html. I think this is what Peritext is trying to do for inline formatting.
Whereas with generic CRDTs you may find that when you merge two branches the resulting document is no longer "valid" and doesn't match your schema for the document. In this situation you you need to manually resolve any conflicts. With Yjs and Prosemirror, Prosemirror defines the schema of the document and will throw away any part of the document that does not match. In reality this if fairly rare occurrence but still needs some consideration when designing the document and how a user can interact with this (such as toiling different block types - and that sub elements those blocks support).
The reality is if you have lots of changes in close proximity it becomes much harder to maintain editor intent as the intents can conflict with each other. However this is mostly edge cases and the vast majority of documents won't have multiple people working in such proximity to each other. If they do they will find themselves with bigger problems like the actually grammar/language not being legible at all and loosing it meaning.
A lot of the code create-react-app generates is for the build/compile step. Hopefully leveraging things like native browser module loading, perhaps with polyfills for fallbacks, will become more commonplace for major frameworks in the future. Generally I think this post makes some very good points.
It's redux under the hood so with this library you'd be able to use existing redux tooling such as redux dev tools. Usually that's not possible with bespoke state management libraries (although I'm not familiar with Recoil)
Thanks. It uses useDispatch behind the scenes which I believe has a bit more overhead compared to using connect. It should be comparable performance-wise to using the normal react-redux hooks.
Insider Inc. is growing at a great pace with publishing platforms in many continents and the most popular business news site in America. In addition to Business Insider, we run INSIDER, http://thisisinsider.com, and BI Intelligence, a premium subscription service for industry professionals. With a global family of sites across Europe and Asia, we are quickly closing in on a billion page views per month.