Have you considered that different things are difficult for different people? Learning hiragana and katakana has taken me about a month, and I found it very difficult. There is no need to make it prerequisite for starting to learn grammar, forming sentences, or pronunciation.
Notice how I didn't say that I "learned" both in a day, I "remembered" them. Of course actual learning will take some time, especially with less used characters.
But remembering shapes and differentiating between them using mnemonics should not be too hard for most people.
This is unnecessarily pedantic advice, and I encourage fellow learners of Japanese to ignore it. You will definitely need to learn hiragana and katakana but you can do it at your own pace, and it is orthogonal to learning the basics of grammar, forming sentences, and pronunciation, so you definitely don't need to think of it as an obstacle. For pronunciation in particular, obviously watching Japanese movies etc helps. And yes, I have a native Japanese teacher who recommends the same.
>Yes, the user data is decoupled from the apps, but aren't both stored on some kind of instances?
There are two main kinds of "nodes" in atproto:
- Hosting aka "personal data servers" (PDS). This is dumb JSON hosting that you can query by HTTP or watch by Websocket. Super cheap to run. They don't talk to each other. You can have one per user, or one per many thousands.
- Apps. These are your normal webapps. (But they ingest data from everyone's hostings.) They also don't talk to each other.
So yes, there are "instances" in the sense of "boxes which run software" but the topology is completely different from Mastodon or such. Data flows from hosting into apps (and then apps write to hosting). There is no hosting-to-hosting or app-to-app connection. Hosting is app-agnostic, and apps are hosting-agnostic.
To make all of this practical, there are things in the middle that make the situation easier for app developers — either relays (which combine event stream from many hostings), or caches like Hubble[1] and Constellation[2] (which let you query the entire network in one request).
>Aren't we making some kind of federated network by deciding on our app server which event streams or which users/apps pushing updates to listen to?
Ideally you would listen to every relevant event from the entire network (and filter out every irrelevant one). It isn't hard today — you can either use an existing relay or run your own for ~$30/month or pool with someone. The discovery mechanism is that (1) a hosting can request any relay to crawl it, and (2) a relay can discover more hostings it hasn't crawled yet by following links — similar to how Google crawls the web.
It works on the type system level instead of at runtime. So you don't actually need to "run" any code to verify it, and you can verify it for all possible inputs, even infinity of them, rather than for the ones that exist in your test.
Lean is super cool. If you're curious how proof checking works (on the type system level), I wrote an article about that: https://overreacted.io/beyond-booleans/
reply