Avatar
hodlbod
97c70a44366a6535c145b333f973ea86dfdc2d7a99da618c40c64705ad98e322
Christian Bitcoiner and developer of coracle.social. Learn more at info.coracle.social. If you can't tell the difference between me and a scammer, use a nostr client with web of trust support.

The web of trust thing on coracle is just the number people you follow who follow the person, minus the number of people you follow who muted the person. Other folks are working on more sophisticated ranking algorithms.

DHTs are a nice tidy technical solution. It uses math to find the optimal solution for traversing a bunch of nodes. It's really cool, and might work really well for bootstrapping.

DHTs are good at storing an index, but not a massive amount of data (hence pubky's home servers). Nostr relays are great because they give us the ability to scale as much as the web has for both indexes (sub-optimal probably) and data (the only way it's been proven to be possible), while retaining decentralization.

I got nerd sniped. After being so annoyed with migrating to svelte 5 I started wondering how hard it would be to make a reactive framework *without* all the magic. Not all that hard as it turns out.

So I built nug, a very small reactive dom system. It doesn't use virtual DOM, and it doesn't use proxies. Instead, it just uses svelte stores, and some completely untested techniques I made up for splitting up large lists and render trees.

Source code: https://github.com/staab/nug

Demo: https://nug-n8tt.onrender.com/

Yes, the idea of a community calendar has been my north star for a long time

The proxy stuff was one thing, all my events get copied when they get saved to indexeddb, but since you can't detect proxies (except by copying them), there's no way to fix it in once place except try/catch every put operation. On top of that, the`$state.serialize` thing has to happen in a`.svelte` file. But I don't want to infect all my normal code with svelte stuff, I like to keep the two separated.

Other things:

- Reactivity has subtly changed. Stores don't see to be enough in every case. I've had to wrap a store in a`$derived` to get reactivity working.

- Reactivity is much more magical. Stores are extremely simple, but there's no way to dig in and debug runes.

- Runes also work the same way as react hooks do, which means implicit state based on when the variables are accessed or modified. This breaks timeouts, async functions, etc, and leads to hacks like`untrack`

It's not horrible, it's just... worse

I forgot to build before releasing the apk 😭 uninstall and re-install should do it

Flotilla version 0.2.7 has arrived! This will hopefully solve some stability issues folks have been having β€” if problems persist, let me know!

Also in this release is the long-awaited "Calendar" tab. Now you can manage calendars within relay-based groups! Give the new release a try and let me know how it goes β€”Β new versions are available via nostr:nprofile1qy3hwumn8ghj7en9v4j8xtnwdaehgu3wvfskuep0dehhxarjdp5hxurpdehszgthwden5te0veex2etydakksatzxyh8yet9d3hx2arhdaexktn9w5hszxthwden5te0dp38ytnrdaexzcmvv5h8xmmrd9skctcpypmhxue69uhkx6r0wf6hxtndd94k2erfd3nk2u3wvdhk6w35xs6z7qgcwaehxw309ahxverz9ehx7umhdpjhyefwvdhk6tcqypuvuma2wgny8pegfej8hf5n3x2hxhkgcl2utfjhxlj4zv8sycc86dwkfwk, app.flotilla.social, and (eventually) Google Play.

Changelog:

* Add calendar events

* Migrate to svelte 5 (fixes some bugs, probably introduces others)

* Migrate to new welshman editor

* Make reply indicator nicer

* Make share indicator nicer

* Improve feed loading

* Show marker for last activity in chat

nostr:nprofile1qy88wumn8ghj7mn0wvhxcmmv9uq32amnwvaz7tmjv4kxz7fwv3sk6atn9e5k7tcpr9mhxue69uhkscnj9e3k7unpvdkx2tnnda3kjctv9uqzp978pfzrv6n9xhq5tvenl9e74pklmskh4xw6vxxyp3j8qkke3cez0c7vk7 I was all thinking on how a decentralized wiki needed to work, so it is easy for anyone to publish whatever projection they have on a topic.

And then for any user to share, copy, comment and rate the pages. And after some hours of studying I came to see some #longform apps on nostr.

And I just think these longform content may is exactly what I was searching for.

#asknostr do you know what existing longform app has already a good search? So I could start using it similar to Wikipedia. Only decentralized.

When somebody sees other usecases or some misunderstanding on my side, I am happy to receive help on this.

Habla.news and yakihonne agre good for long form. But you may be looking for wikifreedia.xyz

Replying to Avatar arkinox

The language about duration here made it confusing

https://github.com/nostr-protocol/nips/pull/1752/files#diff-4907ffede99f12eecbdfdc7f6815d38fa44d8bdf6a13eee2bd161bbf6097a70cR32

I suggest you mention that timehash is a timeframe and provide an external reference like you did for geohashes. I wasn't familiar with timehashes until this so I had no context for the NIP.

The part I don't like about it is on the client side it's super clunky to query for this stuff since you need to publish a lot of timehash tags and query a lot of timehash tags. It just feels like a hack. But it will probably be a better UX than geohash stuff since it is only 1D and I can't think of a better way to do it! So nice work!

You're right, the duration language is my fault, I'll change that. You haven't heard of timehashes because I invented them πŸ˜‰

It's actually not too bad to either publish or query these, since if all three recommended levels of granularity exist as tags you can choose which to target with a filter depending on how wide your window is. The degenerate edge case is of course events that last for a long time, since you have to enumerate approximately every hour. I'm not quite sure what to do in that situation.

It might be simple β€” I didn't see a main.go. Is there a single binary for relay + dvm, or separate ones? Are the files in cmd the entry points? If the latter, how would I configure the relay and dvm to talk to each other?

Have you seen this one?

nostr:naddr1qvzqqqr4gupzp978pfzrv6n9xhq5tvenl9e74pklmskh4xw6vxxyp3j8qkke3cezqqxnzdenxgenzve4xyurgvfk9an8aq

I'm probably being dramatic, but I'm currently in the Anger phase of the 5 phases of grief

No, it's my bug, it just might take a while for me to solve 😐

I'm not sure, I think that might be better handled in some other software. There is a NIP for these controls, and moderations.nip29.com is doing some version of it, but it's not really there yet.

NINO quiz applied to the Gossip client

- [ ] There's no NIP for your data format

- [ ] There's a NIP, but no one knows about it

- [ ] Your NIP imposes an incompatible/centralized/legacy web paradigm onto nostr

- [ ] Your NIP relies on trusted third parties

- [ ] There's only one implementation of your NIP

- [ ] Your core value proposition doesn't depend on relays, events, or nostr identities

- [x] One or more relay urls are hard-coded into the source code

- [ ] Your app depends on a specific relay implementation to work

- [ ] You don't validate event signatures

- [ ] You don't publish events to relays you don't control

- [ ] You don't read events from relays you don't control

- [ ] You use legacy web services to solve problems, rather than nostr-native solutions

- [ ] You use nostr-native solutions, but you've hardcoded their pubkeys or URLs into your app

- [ ] You don't use NIP 89 to discover clients and services

- [x] You haven't published a NIP 89 listing for your app

- [ ] You don't leverage your users' web of trust for filtering out spam

- [ ] You don't respect your users' mute lists

- [ ] You try to "own" your users' data

Explanations:

* Gossip includes 20 relays to get people started. I tried to be as fair as possible

in choosing these relays with an algorithm. Every major release I run the algorithm

again and the top 20 go in.

* For a few relays that require the Origin header, we send it. Those are hard coded.

* Gossip doesn't publish a 31990 (NIP-89) because although gossip handles lots of event

kinds, there is no way to specify how to launch a local application in such a way

that other applications could do it automatically.

> there is no way to specify how to launch a local application in such a way that other applications could do it automatically.

πŸ€” still would be worth it just to get recommendations and promote the software

Replying to Avatar Liberty Farmer

Alright nostriches. I finally have enough done and feel comfortable to share my progress on HAMSTR.

You are about to witness perhaps the first ever(well outside of the 2,000 ones I have done testing, lol) nostr note retrieved exclusively over HF packet ham radio.

There is no Internet access on this browser at the moment at all.

It is a client - server setup. The client is fully off-grid. Only the server can connect to the internet. For this test, the server is was roughly 500 feet away using dummy loads on my radios putting out virtually zero watts. Yes, not far, but in theory it would similar at hundreds and even thousands of miles away as well.

This test pulls my most recent notes from my fake dev account following list. In this case 1 note. The number of notes is configurable, but keep in mind HF Packet Radio is SLOW. This one note takes quite a while for just tiny note from nostr:nprofile1qqsywt6ypu57lxtwj2scdwxnyrl3sry9typcstje65x7rw9a2e5nq8sprpmhxue69uhhyetvv9ujuumwdae8gtnnda3kjctvqydhwumn8ghj7un9d3shjtnzd96xxmmfdecxzunt9e3k7mgpp4mhxue69uhkummn9ekx7mq9hxafw. Future versions will have FM Data packets as well, but line of sight FM was not my goal. Global coverage was. HF radio is the only way for that.

Most functionality is now working, just ironing out some things and lots of bugs. Following, global, search, hash tags, npub search display names, are all basically working. Soon replies.

What started out as a project for me to use some social media and take camping and do some off-grid nostr stuff has now morphed into something that I believe will be able to help millions of people be able to bypass oppressive regimes, firewalls, tyranny, and allow them to interact with the nostr network using nothing but ham radios. This could be massive for learning, comms, and overall freedom. Could have a server running in France, and connect to it from Russia or Afghanistan for example. Easily within HF radio reach for half the world.

Much like the winlink email network, I hope people will be able to take my project and setup servers all around the world for people to access, read, write notes, send DM's, use various nostr kinds and even send Bitcoin(on chain offline transactions over HF radio and nostr coming soon).

Lots to come!

Note: pardon the phone screen cap, it isn't quite working fully android Firefox or chrome yet.

nostr:nprofile1qqsw3znfr6vdnxrujezjrhlkqqjlvpcqx79ys7gcph9mkjjsy7zsgygpr9mhxue69uhhqatjv9mxjerp9ehx7um5wghxcctwvsq3samnwvaz7tmjv4kxz7fwdehhxarjd93kztnrdaksz9thwden5te0wfjkccte9ekk7um5wgh8qatz7tvu4p

nostr:nprofile1qqszw48usckkhs9hcwt3q3np9k2z2c73s8qc0gu3uxqw66cqlq88ukcpz4mhxue69uhk2er9dchxummnw3ezumrpdejqzynhwden5te0wfjkccte9enrw73wd9hszgmhwden5te0wfjkccte9eek7an9wfjkjemwv4hxw6twv4jhy6twvuhxjmczv5ddh

nostr:nprofile1qqs9336p4f3sctdrtft2wlqaq5upjz9azpgylhfd3dplwf005mfrr9spzamhxue69uhkummnw3ezuendwsh8w6t69e3xj7spz3mhxue69uhkummnw3ezummcw3ezuer9wcq3qamnwvaz7tmwdaehgu3wwa5kueg6g89xw

#hamstr

#Nostr

#development

#hamradio

https://video.nostr.build/1830960c328baad59ce74bfb23e7d3ea12bb26ea09f085e8a14762bb2cac88d4.mp4

This is amazingly cool, great work. Is the source code released somewhere?

brb, being the change I want to see in the world

Images are usually sent as mutable urls, yeah, but nostr:nprofile1qyghwumn8ghj7mn0wd68ytnhd9hx2tcpz4mhxue69uhhyetvv9ujuerpd46hxtnfduhszynhwden5te0dehhxarjw4jjucm0d5hsz8rhwden5te0wdshgetvd35hgefwdpa8yep3xsujucm0d5hszrtpd3nk7tn4w3ux7tn0dejsqgpxdq27pjfppharynrvhg6h8v2taeya5ssf49zkl9yyu5gxe4qg55nf2h2q is fixing this with blossom, which extends the content addressability to files as well.

> wouldn't their WoT start taking hits as people who got rugged unfollow the npub?

Yes, but that's not really a complete disincentive. Maybe they don't care about their wot and they're trolling, maybe their already famous and they get to be deceptive about what they've said publicly (c.f. SBF).

There are other reasons listed in nostr:nprofile1qydhwumn8ghj7un9d3shjtnhv4ehgetjde38gcewvdhk6tcprfmhxue69uhhq7tjv9kkjepwve5kzar2v9nzucm0d5hszymhwden5te0wahhgtn4w3ux7tn0dejj7qgkwaehxw309a3x2an09ehx7um5wgcjucm0d5hszxrhwden5te0v96zumn0wd68yam0wf4hxtnrdakj7qpq80cvv07tjdrrgpa0j7j7tmnyl2yr6yr7l8j4s3evf6u64th6gkwsyvuudm's article he linked above, one of which is that edits with history are quite complex, and raise the bar for developers to prototype new clients.

Replying to Avatar cloud fodder

possibly yes. I had recommended this to nostr:nprofile1qqsf03c2gsmx5ef4c9zmxvlew04gdh7u94afnknp33qvv3c94kvwxgspr3mhxue69uhksmmyd33x7epwvdhhyctrd3jjuar0dak8xtcppemhxue69uhkummn9ekx7mp0qy2hwumn8ghj7un9d3shjtnyv9kh2uewd9hj7208x3z in the past, where a community can run an 'agent' somewhere (a bot, with the community root key).

The reason that devs keep wanting to put logic directly into the relay is that nostr has no official spec for moderation of a relay and the nostr world is very opposed to talking about moderation or making it easy, so it is a green field.

As a relay operations team (could be a person, could be a team): The requirement of moderating a relay will not be going away.

And then, we have communities that *also need the exact same same types of moderation capability.

So, this is why I believe nostr:nprofile1qqsrhuxx8l9ex335q7he0f09aej04zpazpl0ne2cgukyawd24mayt8gprfmhxue69uhhq7tjv9kkjepwve5kzar2v9nzucm0d5hszxmhwden5te0wfjkccte9emk2um5v4exucn5vvhxxmmd9uq3xamnwvaz7tmhda6zuat50phjummwv5hsx7c9z9 concluded in nip29 it would be simpler architecture wise, to combine these. Which does sacrifice the separation of the two and removes the ability of a community to use a relay that is multi-purpose. I'm unsure how 0x is managing to have multiple communities on their single relay, as my understanding is that the operator of that relay is also the admin for the community (the relay has the private key).

The basic structure of moderation I employ on relay.tools is for example: Relay is owned by a root key, this is 'super admin level' access to the relay settings. The next level of access is moderator level which can do anything except for change moderators and change relay profile/description. Then there are the relay user level which is the normal join/post/read. This could be refined but its what i started with.

Say I'm a relay operator and i want to contribute to a community by mirroring the content, if the group allows my relay into the list, ideally i should not need the community admin key for this..

Communities will likely want a similar tiered access scheme and it will *have to combine with the relay level access scheme at some point if the community wants to delete notes that they do not have a key for. This is all a lot to think about.

Enjoy 🌝

It would not be hard to adapt keys to relays in a transport-agnostic way. Just add a new event kind 3xxxx which means "I am a relay" with tags declaring relay address under different transport (wss, onion, etc).

> The reason that devs keep wanting to put logic directly into the relay is that nostr has no official spec for moderation of a relay and the nostr world is very opposed to talking about moderation or making it easy, so it is a green field.

This misses the point for me. Relays largely already have everything they need to do moderation (nip 56, auth, and deleting stuff), which means the best form of moderation is going to be implicit on the protocol level, explicit on the human level.

But I agree that the needs of a community for policy enforcement neatly match those of any kind of relay.

It's an unsolved problem. Many relays have a webpage you can visit that explains their policies more thoroughly, for example nostr.wine. nostr.watch is also a useful tool, but right now it's a pretty trial-and-error process. It would be nice to improve.

Only the client, although you'll want to make sure your relays support the kinds of content you'll be sending to them