HNHacker News
TopNewBestAskShowJobs

danabramov

9,769 karma · joined February 4, 2012

submissionscomments
danabramov··on Japanese verb conjugation the simple hard way
Maybe it’s not very clear but I don’t suggest studying from articles like this alone. Obviously you need to do sentence drills and talk to a tutor or native speakers to have any chance of success. I still find documenting my mental model helpful because most articles I’ve seen before were not teaching it clearly enough for my taste.
danabramov··on Japanese verb conjugation the simple hard way
> And yeah the fact that the article-writer hasn't internalized this sound change yet

I don’t understand where this misunderstanding about my article comes from. I am saying that the sound at the intersection of “s” column and “i” row is “shi”. My article uses romaji so this is self-consistent. I am also mentioning that there is an alternative system that would romanize it as “si” but that’s not the one I’m using in my article.

danabramov··on Japanese verb conjugation the simple hard way
The article literally says:

> there is no "si" in the hiragana table, so s_ + (i) = shi. […] this is why it's important that you don't actually "think in" romaji. […] i'm using romaji as a convenient way to refer to phonetics in text. however, your "mental algebra" should match the hiragana table.

danabramov··on Japanese verb conjugation the simple hard way
I feel like you’re going out of your way to misinterpret the article. As the article says below:

> this is why it's important that you don't actually "think in" romaji. i'm using romaji as a convenient way to refer to phonetics in text. however, your "mental algebra" should match the hiragana table.

Then the article includes an exercise that verifies the reader’s understanding.

I also included a note:

> (note i could also have used a different romanization that renders し as "si", つ as "tu", and ち as "ti" for this article. i decided to not because everyone else uses romaji, and once you understand this point once, you shouldn't have a difficulty doing this in your head.)

Where is the factual mistake here? “si” is invalid romaji, my article uses romaji, therefore it’s invalid.

danabramov··on Japanese verb conjugation the simple hard way
> It isn't. It falls slightly apart in the `s` column, and completely in the `t` column which contains both "chi" and "tsu".

All of this is described just below, in the section called “why romaji is actually bad”, with these specific examples being tested.

> It also breaks for godan words that end in "u" which become "wa" in the negative form.

This is also described further below in the post.

> as you frantically try to back-translate everything into romaji, but also removing excess w's and converting nda's as you go

I see “understanding the system” and “applying it fluently” as two separate activities. I find romaji more illustrative for the former because the system is phonetical on a sub-mora level. Whereas kana is more helpful for the latter. I don’t assume my reader is an idiot, and so I assume that they would be able to pick the right tool for the job on their learning journey. The fluency always layers on separately anyway, understanding doesn’t “help” there. It’s just that personally I find understanding a great motivator (and fallback) for developing fluency.

danabramov··on Japanese verb conjugation the simple hard way
Why would you expect the article where I’m describing what worked for me to “discover something new”? I’m literally sharing the mental model that I personally found helpful. There’s nothing “new” in learning or teaching a language. But this is the most minimal model I’ve found useful, compared to others, and I wanted to share it with other people.

I think you’re taking a lot of stuff for granted. “Just” do cards etc. You’re using the word “stem” but what’s a stem? Why do we sometimes inject -i or -a (or -wa) there and sometimes we don’t? You still have to learn that and understand that. That’s what I’m describing in the article. If you already know stems and how they compose with suffixes, congratulations, you won’t find my article useful.

danabramov··on Japanese verb conjugation the simple hard way
I explicitly address my reason for choosing it over kana in the article. If you disagree, please engage with the argument that’s already there.
danabramov··on Japanese verb conjugation the simple hard way
I’ve explicitly addressed this in the article. Cmd+F for a section called “why romaji is actually good” and then “why romaji is actually bad”. You may disagree with the approach, but I outlined my reasons for choosing it (as well as its downsides).
danabramov··on Japanese verb conjugation the simple hard way
Author here. Strong disagree.

I prefer having a system to simply memorizing. I don’t know what you mean by “so much effort”. I am literally just describing the system as it is brick by brick. If you see an opportunity to simplify, you’re welcome to provide a specific suggestion. I find this system rather elegant, and I tried to build it piece by piece because that’s my preferred way both to learn and to teach.

>the whole page barely mentions the interesting ones 80% of the way down

The te/ta-form is genuinely a separate system linguistically with its own heritage. So it makes sense to look at it separately. I don’t consider it more “interesting” and I’d argue getting the details right with other forms is much more useful coverage-wise. So I didn’t spend much time on te/ta-form. (That said, even for -te/ta form, I find it calming to think of -nda as a contraction of -nita, and so on, which AFAIK is in the ballpark of what historically happened.)

> Language learning and exercise are the two things where I've found the programmer's instinct to "work smarter, not harder" works against you

I agree you need to put time to practice and all that. But if there’s a genuinely simple system underneath, I always prefer to see it. Even if there’s a layer of memorization and repetition to achieve actual fluency. Japanese conjugation is a rare case where the system actually is very clear and methodical. The article is written for people like me who also prefer to know it. There’s literally thousands of resources that teach it your preferred way, so I don’t understand the impulse to complain about someone teaching it differently for a change.

danabramov··on There are no instances in ATProto
> What steps do I have to follow to get the majority of users to see my content?

You can’t “get” the majority of the people to see anything, that’s not how anything works. Neither on centralized systems, nor on Mastodon, nor in real life.

On a centralized platform, if you get banned, there are no steps you can take. Your account is down — goodbye.

On a Mastodon instance, there are also no steps you can take. Your account is banned on the instance — your entire identity goes down with it.

On atproto, it depend on whether you’re banned at hosting or app level.

If you get banned at hosting level (usually something clearly illegal would trigger this), you’d have to find another hosting (assuming apps haven’t banned you too).

If you get banned at an app level, people will see you through different apps. You’re right that this presupposes that there are apps that (1) people use, that (2) haven’t banned you, (3) and that display the same type of content.

But, even if you’re looking from solely censorship resistance perspective, atproto at least enables competition in moderation space to happen. If enough people disagree with the lens, it is possible to build a an alternative lens over the network.

This isn’t theoretical — there was a situation like this where a person got banned at Bluesky app, but the Blacksky community wanted to reverse the decision. When Blacksky got an independent app database running, they overrode it. But yes, this does require investment and a subset of community being interested in alternative moderation / features / etc. You can’t “force” people to hear you but there’s a market for alternatives.

> How do I build a relay that fetched all content from people I follow, plus all replies to those posts (no matter who sent them), plus automated backfilling if I click on the profile of someone who I'm not following yet?

The realtime part is trivial. You just filter the stream of everything as it comes in.

Backfill would either require you to index the network yourself or to rely on existing indexes. You could use Constellation (https://constellation.microcosm.blue/) to fill up threads (query by thread root ID), and you’d hit the user’s PDS to fill up their profile page.

You could actually see that in practice now at https://reddwarf.whey.party/ which my article links to. It’s a Bluesky client that doesn’t have a server at all (and doesn’t hit Bluesky API). It’s lazily getting stuff on the client purely from PDS’s and from Constellation. It’s a bit slower than an appview-backed experience but it works fine.

danabramov··on There are no instances in ATProto
I kind of started calling them all “apps” with true appviews being “independent apps”. I think sometimes it makes sense of think of this as an implementation detail. For example, Mu could actually switch to its own database if they do a bunch of technical work in the future. From the users’ perspective, it wouldn’t be noticeable.
danabramov··on There are no instances in ATProto
Maybe we’re just ideologically misaligned here. I think every single little community hosting a copy of every single app is insane, and not where I’d like to end up. It’s like the extreme end of the spectrum compared to centralized Web 2.0. I think atproto’s ethos falls somewhere in the middle — community is mostly a “soft” primitive, and there’s only so many full-scale “copies” of some app as there are strong opinions+funding bundles that motivate their existence. So maybe not too many for large scale ones.
danabramov··on There are no instances in ATProto
You can trivially host an appview for your atproto app on your own. I have a hobby atproto app, and I host an appview for it. I mean — an “appview” literally just means “a server with a database that ingests stuff from the network”. It’s not some mysterious thing or some concrete distribution. It just means you’re aggregating stuff into your database.

It’s just as cheap as hosting any webapp.

But what you’re asking is not that. You seem to be saying “I want to host my own Bluesky appview”. That’s resource-intensive for the same reason “I want to host my own Twitter backend” is expensive. It has nothing to do with the protocol! If you want to host a database application server that stores gigabytes of data from millions of users forever, you’re gonna have to pay for that. This isn’t some kind of gotcha with the protocol, it’s just common sense.

That’s the “instance brain” from my article. You’re used to the shape where the only thing you can host is a “isolated copy of the same app that only deals with a few users”. But that’s not the atproto topology! What atproto lets you host is the real thing. Like a second real Twitter app that “just works” with all existing users. That’s the value proposition here. Or — if you’re not actually in the mood to host a product with millions of users — you can make your own app that has nothing to do with Bluesky. And of course your own app aggregating its own data would be cheap to host because it won’t be aggregating millions of records.

Do you see the disconnect? Atproto allows competition at big scale — actually forking real products — which AP doesn’t do in principle. But you’re using this ability as a knock again atproto. Atproto scales arbitrarily up, so you take the highest scaled up example you can think of (Bluesky app with all its users and posts) and compare it to the cost of running the most scaled down version of AP (an isolated app for some people).

To make the comparison fair, we’d need to scale atproto down in your example. You can definitely achieve scale identical to Mastodon (and thus identical in costs) by taking the Bluesky app server and adding custom logic which ignores all events that aren’t relevant to some hardcoded lists of users (your “member list”) or people they follow. That would be an accurate comparison, and yes, you could totally host that.

People don’t do that because it’s kinda niche. Maybe it would be nice if there were ready-to-go distributions of Bluesky appview that do this kind of filtering. But also — it’s just kind of a non-goal for most developers on the platform. Most developers create their own different apps, rather than host alternate projections of the Bluesky content of the whole world.

danabramov··on There are no instances in ATProto
That’s the whole point of “apps”. Apps are opinionated points of view / prisms over the network. Of course they’re able to apply their own moderation decisions. That’s how the whole mainstream web works in general — you can’t even get an unmoderated app into App Stores.

The difference is that it’s competitive. New apps can rise up that provide alternative lenses over the network. In the crudest case, literally showing everything. Which is what you wanted. Maybe that won’t get into an App Store but it definitely works if there’s demand for that.

danabramov··on There are no instances in ATProto
I don't know what your first sentence says at all. This doesn't seem related to atproto.
danabramov··on There are no instances in ATProto
No tools meaningfully "default" to it — it's something you set up at the app level. And no, it's not hard to change, it's literally a single string constant that you put yourself into the code. If I were making a serious app, I'd likely run one myself for peace of mind. It's not difficult, you just spin up the Docker instance with it.
danabramov··on There are no instances in ATProto
Right, which is why my article has this paragraph:

>I say “Mastodon” here because if I say “ActivityPub” instead, a crowd of people will show up and say that actually what I’m describing is how Mastodon chose to implement ActivityPub. Whereas ActivityPub by itself does not really specify how to actually use it in practice.

I understand there's other ways to use AP, but when people say "where are Bluesky instances" they are specifically comparing AT to Mastodon's AP topology.

danabramov··on There are no instances in ATProto
Here's a list of active alternative hosts: https://blue.mackuba.eu/directory/pdses

As I mentioned in the article, I literally migrated to https://eurosky.tech/accounts/ yesterday.

danabramov··on There are no instances in ATProto
>It seems a lot has happened since I last looked at this stuff a few years ago.

Yes, a lot has happened! The scene still has very much indie vibe, but there's a lot going on in the Atmosphere. Atproto blog has recently started showcasing some community projects so check it out: https://atproto.com/blog

>That still leaves governance of the protocol as a problem. That would ideally need to be untangled from Bluesky as well. But that seems doable as well.

The core part of the protocol is literally going through the IETF process now: https://atproto.com/blog/taking-at-to-the-ietf. It's happening.

Re: other things, it's up to the community to do this. You can get involved. BridgyFed is doing cross-protocol federation and has been doing for a while: https://fed.brid.gy/. I'm sure there are other things that could be done in that space.

danabramov··on There are no instances in ATProto
My bad, I misread your post as asking about single-user atproto "instances" (which confused me) but you said ActivityPub.

I still don't quite understand your comment.

>If there are advantages to ATProto over ActivityPub in this kind of deployment setting, they don't seem clear enough to offset the weird corporate parentage

The advantage of atproto is that it's literally "the web". Every app can aggregate from entire network, there's no isolation by default. It reduces to the degenerate smallest case just the same — you can have a single-user app that simply displays content from your PDS. But you can also start aggregating things (e.g. comments left by other users, which are stored on their PDS's). The whole big idea of atproto is that every app is effectively a CMS for app-agnostic "model" web.

What is the concrete thing bothering you? AT is already in the IETF process. It's not some weird corporate thing.

danabramov··on There are no instances in ATProto
You’re right that this is confusing!

Bluesky is two things. There’s “Bluesky hosting”, and there’s “Bluesky app”. Conceptually and on the network level they have nothing to do with each other. These are different pieces of software running on different stacks and they are agnostic of each other. Bluesky the company happens to run both because it’s kickstarting this whole thing. But you can swap hosting (I just did) while using Bluesky app, or you can keep Bluesky hosting but use other apps in addition (like Tangled) or instead of Bluesky (like Blacksky).

Eurosky is a hosting provider primarily. They happen to also develop an app (Mu Social) but afaik currently that’s just a skin for the Bluesky app (it talks to Bluesky app API). Nothing stops them from removing that dependency (like Blacksky did) though and making it an independent forked app though.

So the answer is — companies and organisations in Atmosphere often provide services for different roles in the system. Some do just hosting, some do apps, some do other kinds of network infrastructure that is used by many apps, and many do multiple things at once.

danabramov··on There are no instances in ATProto
I wouldn’t say censorship alone is the primary motivation here so I’m a bit wary when people bring it up. But the way to think about it is that your data being on PDS is the mechanism that creates a market opportunity for other apps that, among other things, differ in moderation strategies.

Concrete example: Bluesky banned a person, and Blacksky community disagreed with that ban. When Blacksky switched http://blacksky.community app to have its own complete stack (including its own database), that person’s posts became visible there (despite them being banned on Bluesky app) because they reversed that moderation decision. This was possible because the data for this person’s posts still lives on their PDS.

In general, the data being “pulled outside” products is what enables new products (or forks of products) to come onto the scene and immediately begin competing because they don’t have to solve the “cold start” problem. If you log in, all your stuff is “already there”. And it’s the same shared world so the community doesn’t get forked. You’re just looking at the same underlying data under a different lens, and products act like lenses rather than boxes.

This doesn’t mean that “censorship” can’t exist (every layer can ban you, as always) — but it means that every layer of the stack has opportunity for competition that isn’t possible with centralized platforms. In fact, arguably, it’s more flexible than a Mastodon instance because you can’t fork a Mastodon instance “with all its users” and offer a version that reverses some moderation decision. In atproto, you can.

danabramov··on There are no instances in ATProto
I don’t know what you mean by “instances” here. Leaflet (https://leaflet.pub) is one of those “blogger on atproto” things — is that what you mean?
danabramov··on There are no instances in ATProto
I agree with you but I think the technical capability intersects with politics here because anyone is able to make new stuff out of old data. That’s not the same as Google carrying it through to another Google product. I’m not aware of the FOAF/XFN stuff but it’s also different if that isn’t the entire graph perfectly preserved, easily queryable by everyone involved.

When developers feel empowered to revive products or fork them, I think that eventually seeps into communities. That it’s another way of doing things. It doesn’t happen overnight but this energy exists in the Atmosphere. Maybe loss of Bluesky is not survivable culturally at the moment, but maybe it will be in a few years as Atmosphere grows and matures.

danabramov··on There are no instances in ATProto
Sure, you could say it’s a set of conventions on top of what you’re describing — that imo is sufficient to shift the incentive picture. It’s a firehose of typed JSON that’s canonically stored at URLs that survive hosting changes and can link to other JSON. It’s signed and verifiable and links to other JSON.

So the new thing here is that if everyone’s data exists in this format, the competition between apps is guaranteed. Because a competitor doesn’t start with nothing: they start with the same userbase and the same content. They can immediately start competing on features, moderation, product experience, etc, without first “luring” everyone to register again and start their entire graphs from scratch.

I think that makes a big difference. Don’t you think?

danabramov··on There are no instances in ATProto
Yeah! In fact some popular ecosystem services are (or at least have been) running on Raspberry Pi. See here: https://bsky.bad-example.com/can-atproto-scale-down/

Also the best algorithmic “For You” feed on the app runs off someone’s gaming computer at home

danabramov··on There are no instances in ATProto
In Mastodon/AP, different instances talk to each other which creates the scale problem you’re mentioning.

AT doesn’t have this kind of issue even without Relays. This is because PDS never talks to another PDS so there’s no quadratic growth of edges. PDS only talks to apps, and there’s limited amount of apps on the network. And end users hit apps which cache stuff, so apps tend to take the user traffic hit.

Relays are helpful more on the app side because you don’t want to teach each app to crawl PDS’s and subscribe to them.

I didn’t dive into Relays in the article because they’re kind of a “next obvious optimization” but not really inherent to the model. There are other models like apps hitting shared backlink caches (like Constellation). Relay isn’t fundamental in the way hosting and apps are.

danabramov··on There are no instances in ATProto
>This is the implicit idea in my comment when I said it's expensive. If Bluesky banned me and I could not find another AppView with comparable reach and audience, I lose, the ban is effective.

Okay, but that's always the case when you get banned from a service. The difference here is that it's possible to build a competing service with different moderation decisions being a lens over the same data.

danabramov··on There are no instances in ATProto
Well I think "can move later" makes all the difference because the initial choice doesn't matter to the individual user. It isn't even blocking. Most people don't know they're making that choice, and I think that's fine. In Mastodon, the choice is very high stakes.
danabramov··on There are no instances in ATProto
The cost for consuming the firehose of the entire network is very low. So the actual cost that can blow up is storage and computation.

If you want to filter for events based on some heuristic (e.g. only from follows of server list), you can do that. You can then specialize that further. E.g. for ongoing threads that already pass your filter, you could add their IDs to an array, and accept all replies for those threads as well into your DB.

You already get a stream of everything so you can scale down what you write to DB to exactly the characteristics you need. Including keeping threads cohesive.

← PreviousPage 6 of 34Next →