Avatar
Water Blower
6b9da920c4b6ecbf2c12018a7a2d143b4dfdf9878c3beac69e39bb597841cc6e
Creator of Blowater & I self identify as a Pro Sleeper

I still think AI is a nice idea to Nostr. Using GPT4 to help with Nostr development. It’s cheaper than a cup of coffee per day and I can work much less.

Blowater will release a new reply feature.

A problem has been bugging my mind since the ever beginning.

What should be the role of relays?

If we treat it as a node of a distributed system, such as a Cassandra node, then it should not differentiate and clients just treat it as an opaque network & storage layer. All the replaceable events & consistency discussions come from this angle.

If we treat it as a discord server or a Slack workspace, then each relay differentiates in content and possibly in functionality.

Right now, most developers seem to want relays to be both. But these 2 have very different design trade offs . Wanting to be both might just end up being good at none.

Or, maybe some developers haven’t thought of it consciously.

Fruit for thought: should relays be aware of each other? Should the awareness be mandatory like a distributed system or just a nice to have?

For example, a DM client has very different needs for relays from a social client.

NIP19 is overrated

After 2 weeks of intensive bug fixing, blowater.app is much better now. Next week we will redesign the signin & onboarding flow. The mobile version of Blowater is also not painful, finally

Assuming meta data leak is solved, does relay choice matter for DMs? Maybe all DM clients should implement gossip model or other routing strategy to solve delivery issue.

There is one surprising observation I have.

Blowater has been reliable in Feb and March. Starting April, I started to address many of the pain points of it and half-a-year later, it has been becoming more and more unuseable.

For the past 2 weeks, I have been removing many of the "upgrades" of Blowater and now it's back to Feb level reliability.

Why did more work cause the software to be worse?

There is a meta lesson to be learned. I don't know yet.

nostr:nprofile1qqs04xzt6ldm9qhs0ctw0t58kf4z57umjzmjg6jywu0seadwtqqc75spz9mhxue69uhkummnw3ezuamfdejj7qgcwaehxw309aex2mrp0yhxxatjwfjkuapwveukjtcpzamhxue69uhkummnw3ezuun9d3shjetj9eek2tcwrcz23 Relay reconnecting has been the most mind bugging part of implementing a client.

WebSocket() constructor is blocking and sync and no "force close" on the client side for web socket.

Relay may disconnect at any point of time. Reliable re-sub of queries is crutial.

What's your experience of implementing NDK's networking layer so far?

Am I too crazy about testing coverage? I feel I might be over engineering the relay pool and under engineering the application.

setting up their own relays and config this relay to be very unreliable such as randomly rejecting events or disconnecting after very short amount of time.

Testing against unreliable relays should be mandatory for all client developers.

A well designed application does not need an onboarding / tutorial step. The tutorial is emerged into all the UIs.

We have 10+ PR today for all the projects under Blowater umbrella. Amazingly productive day.

Relay records of events are finally implemented in https://blowater.app

NDK has 3X more features. nostr.ts is more comparable to nostr-tools.

More than 10 PRs to just address relay connection & auto reconnection issues in the past 2 weeks. Now https://github.com/BlowaterNostr/nostr.ts has probably the most reliable relay connection layer in all JavaScript clients.

Now I just need to adapt Blowater to the newest version of nostr.ts

Auto relay reconnection has been moved from Blowater application to nostr.ts library. All nostr.ts users now get better network stability.