Oddbean new post about | logout

Notes by hodlbod | export

 "There are some seven hundred million non-Russian non-Communists now living daily lives of virtual slavery behind the Iron Curtain, some forty million of them in the actual slave labor camps of Russia and Red China, who only a dozen years ago, or much less, enjoyed practically the same personal freedoms as do you and I today. These people now say to each other, but above all to themselves: 'If I had only known! If I had only believed! There is no amount of work and sacrifice and suffering I would not have given, if I had only realized the necessity, the danger, in time. Now it is too late, and any amount of struggle and of sacrifice, even of life itself, is all in vain.'"

- Robert Welch, 1959 
 I'm thankful for both nostrils 😅 
 😂 one is enough for me 
 negentropy 👀👀👀🏝️🗽

any specific version? 😎 im still not upgrade to 1.0 🫠... 
 one point oh only, I have some beautiful parsing logic to try to guess at 1.0 support since the nip hasn't been merged yet:

```
export const hasNegentropy = (url: string) => {
  const p = relaysByUrl.get().get(url)?.profile

  if (p?.supported_nips?.includes(77)) return true
  if (p?.software?.includes('strfry') && !p?.version?.match(/^0\./)) return true

  return false
}
``` 
 New minor release of Coracle is out, now with NIP 55 (Amber) support! Thanks to nostr:nprofile1qy2hwumn8ghj7un9d3shjtnyv9kh2uewd9hj7qg3waehxw309ahx7um5wgh8w6twv5hszrnhwden5te0dehhxtnvdakz7qgewaehxw309aex2mrp0yh8x6rpwfjkwcts9ehx2ap0qy88wumn8ghj77tpvf6jumt99uqzpn0wjs7tkxw9r2uy0fndt4m5xua2na3a9peydw6ekzp8lf0xxaqqc2ztx7  for doing what was (for me) impossible.

The updated APK is not yet on nostr:nprofile1qydhwumn8ghj7emvv4shxmmwv96x7u3wv3jhvtmjv4kxz7gppemhxue69uhkummn9ekx7mp0qythwumn8ghj7un9d3shjtnnw3hkuetj9e3k7mf0qyw8wumn8ghj76r0v3kxymmy9e3k7unpvdkx2tn5dahkcue0qyjhwumn8ghj7en9v4j8xtnwdaehgu3wvfskuep0dakku62ltamx2mn5w4ex2ucqypuvuma2wgny8pegfej8hf5n3x2hxhkgcl2utfjhxlj4zv8sycc86trxjy7 , but is available on the releases page:

https://github.com/coracle-social/coracle/releases/tag/0.4.11

# 0.4.11

- [x] Add NIP 55 support to Android
- [x] Add negentropy support
- [x] Simplify sync for messages, groups, and notifications
- [x] Small UI fixes 
 nostr:nprofile1qy2hwumn8ghj7un9d3shjtnyv9kh2uewd9hj7qgwwaehxw309ahx7uewd3hkctcpzamhxue69uhhyetvv9ujumn0wd68ytnzv9hxgtcpzamhxue69uhhyetvv9ujuurjd9kkzmpwdejhgtcpzemhxue69uhhyetvv9ujumn0wd68ytnwv46z7qpqwf4pufsucer5va8g9p0rj5dnhvfeh6d8w0g6eayaep5dhps6rsgs5cank3  I'm having some trouble publishing again:
https://image.nostr.build/9f403e8be9c91562965e5f94d672e5bc0589163dd52cad3daf0e45cffa84dbe2.png 
 When I have a business model maybe 
 There is a lot of wasted space, that's true. Could probably be improved. 
 Radical community nostr client update:

I love how multiple projects and developers have reached ... 
 Yes, if censorship resistance is an anti-feature for a community organizer, they won't use nostr. That's ok, centralized use cases can use centralized solutions (although integrating nostr would still have benefits, if only for portable identity). This is a question I've been mulling over for a long time now. Nostr is really only useful for open and semi-permeable groups. 
 You could make exclusive content work, either with encrypted groups or some other method of signature stripping, but you'd be cutting against the grain. Still, this is something I'm very interested in experimenting with on nostr. 
 I can't see (and haven't been able to for a week or two) any #WOT  scores (though I do see the ci... 
 I've removed the numbers (a future release will add them back in to the popover), so that's working as intended. For the follow issue, my best guess is that you've denied your signer access to sign follow events. Go ahead and clear your signer preferences that and let me know if that fixes it. 
 This is my RADICAL approach to how I would build a community-first Nostr client:

First of all: r... 
 Attempted to build this with coracle.tools. It's mostly a proof-of-concept at this point, although I think what it's proven is that the approach needs to be slightly different, hence flotilla.coracle.social (WIP). I think chat over forums is probably a better emphasis, but agree with much of what you're saying. 
 I don't understand what I'm doing at all, but onosendai.tech is SO COOL. Definitely listen to your favorite synthwave playlist while you build your pow chain and deploy shards. And always make sure to remove your neuroactive interfaces before derezzing.

nostr:nevent1qyghwumn8ghj7mn0wd68ytnhd9hx2tcpzdmhxue69uhhwmm59e6hg7r09ehkuef0qyt8wumn8ghj7mn0wd68yetvd96x2uewdaexwtcpz4mhxue69uhhyetvv9ujuerpd46hxtnfduhszrnhwden5te0dehhxtnvdakz7qpq976defxuz4m7567yv4wqjqh5z68m85jafxzygmm7ghhumvqsf6lq2utxpc 
 Is there documentation on how to duplicate Nostrtalk.org? Would like to try to get folks from the... 
 Yep, check out coracle.tools. AMA here or set up a video call and I'd be happy to help you out. 
 I've spent over two years studying social media for communities, but nostr:nprofile1qyvhwumn8ghj7un9d3shjtnndehhyapwwdhkx6tpdshsz9nhwden5te0wfjkccte9ekk7um5wgh8qatz9uq3wamnwvaz7tmjv4kxz7fwdehhxtnnda3kjctv9uq3uamnwvaz7tmnda3kjctv9ec8ymm5v4ehgtnwv46z7un9d3shjqg4waehxw309aex2mrp0yhxgctdw4eju6t09uqzqak8r2hr5jglrk0wc37t59lz98x6gyf6pwaku6hpwakhvslznjh6ydpa6p  has spent two decades on it. I will struggle to find words for some ill-defined idea I'm grasping for, and he'll just come out with a pithy encapsulation of it that makes things crystal clear. He is an amazingly effective communicator, I'm glad we have him on our team. 
 Judging just from the readme, this is exactly how @welshman/app works. I found indexeddb way too slow to use interactively, so I hydrate once at page load and batch writes to it. I then use "repository" to store all my events, and "relay" to wrap in a "executor target" (see @welshman/net) so that I can use it like a normal relay. I then have some utilities in @welshman/store that wrap the repository in svelte stores so that I can reactively update my app. It works really well. 
 Welshman is decently composable, hence the separate libraries. Utils/net might save you some coding 
 I know right? Same here 😂 
 I used liveQuery for a while, and maybe I was holding it wrong but it seemed slow and sort of unreliable. Which client are you building? I could have something to do with data model, or just how much data is getting pulled in 
 Agreed! Should improve retention a lot. nostr retention is quite low nostr:note148fhu4yqpghm6szxw... 
 I'm of two minds about push notifications. On the one hand, they're probably the best lever for growth. On the other hand, the constant drive for engagement is one of the main things that makes social media toxic. Daily/weekly digests might be a good way to thread the needle. 
 nostr:nprofile1qyd8wumn8ghj7urewfsk66ty9enxjct5dfskvtnrdakj7qguwaehxw309a5x7ervvfhkgtnrdaexzcmvv5... 
 The error is coming from nos2x:

https://github.com/fiatjaf/nos2x/blob/b1c543ba62caea495e65df8e3a08917ead5b938c/extension/nostr-provider.js#L81

This might be nostr:nprofile1qydhwumn8ghj7un9d3shjtnhv4ehgetjde38gcewvdhk6tcpzdmhxue69uhhwmm59e6hg7r09ehkuef0qythwumn8ghj7enjv4h8xtnwdaehgu339e3k7mf0qyd8wumn8ghj7mn0wd68ytn5dpjhxctdv43kzapwd9hj7qgcwaehxw309ahx7um5wgh8x6tydekxzcnn9ehxctcqyqalp33lewf5vdq847t6te0wvnags0gs0mu72kz8938tn24wlfze65qkltc 's problem, at least because the error message is undefined. But I wouldn't rule out coracle passing something broken to nos2x. 
 I ran into the same error when trying to sync events into strfry 
 Sounds like it's a 1.0 version incompatibility, old strfry relays just need to upgrade 
 Can you believe I've been just raw dogging REQ this entire time? SMH

nostr:nevent1qyw8wumn8ghj76r0v3kxymmy9e3k7unpvdkx2tn5dahkcue0qy2hwumn8ghj7un9d3shjtnyv9kh2uewd9hj7qgmwaehxw309aex2mrp0yh8wetnw3jhymnzw33jucm0d5hszxnhwden5te0wpuhyctdd9jzuenfv96x5ctx9e3k7mf0qyg8wumn8ghj7cfwdehhxtnvdakz7qpqdzqt8py8sy8r02hx3gpqa5ptknqpkwmrwgmnr50504grd8dhv69sl7lmm0 
 Wow, negentropy is amazing 
 a one hour workout takes 4% of your day 
 4.16% ackcktually 
 Same here 😂 also "Our vast workforce" 
 This is crazy. The more I read it, the crazier it is. 
 This is amazing 
 I'm trying to integrate negentropy into coracle and running into some mysterious errors. I'm sending the following message to relay.damus.io:

```
["NEG-OPEN","NEG-78170247",{"kinds":[1],"authors":["97c70a44366a6535c145b333f973ea86dfdc2d7a99da618c40c64705ad98e322"]},"6100000216bbca77492e78267aea99c68a7d307ec0dd2b63c419e0be8611a3a669f3db908bf45ea7eee4cada66562498f2c226803c4e9f40161d4d3e33d624a08bbea4197fe00a3eb601abd0931fc2fbd37c21e866b992266deda52d9b50edf0a528a6f89cc53ab8ca7154c92c583071bcd9d96035c5c6c30c1b14015df8d3267ea29e12b8586142c8d0221f8840fa596b033c904bf0e6c37c00b6353acc4e47bba06ab60f94f556fb35469728719cd41a535d84ebf7a89a8a9d396d75ca40fba052401b95ec4470f5b85dc6d52f7fbd703d8fe22d5bd5284262908247f682c6096f6448c7588b5d394b5192b42570122c419a4d30f87efd3a8b9d1f0b26bcfc88f9b26c8e7555dab12c1db5ac948591075fd21005408ec8b6e20b9a92a59d7d80cb733bf32d44eaef840a596c354d2876534f7827c4e1e2c73c6be0372d2b34c7424d8e8d4448ddf614f95acca0e44f4f2403b136b9da6aeed86b8d00befd2c9dd8129ab45cca91f819cd665f0b2d4652ba74c34b223fd0b4c9838da43d157db8929d4a009ffa472b4554c3f57a7b64a65d40003b0c093b52cd84b2e2c9b5ab61f8c37fa37ce3710ccb936bd9776892dc5024ebb9557ef55b060f456852725e47f58743f703f02408373b59d3706a7c8b24f20746eff68626e47b75bd5dbeff429eaba2b1899301206ba198f0f3084b35fe30b3c64d21c42e93b8387a13fc7f063af5fca393e1998424d037c603f823ef8b87794fdca778f31dbd9b5752b0685deadbd5a52506094195e0017c1fefc20eb2d361db0a19f7b75782410360c27224059df257846d13ebdefcafc047706f0e631d25af70288685a6e4b24d69674dd527df9e592f9c41d6bdc8adeea672b588c0f4546615d0b611e1dd6bba9b62c61a27a1b2dac06b885269484114741b471da4c085bd7c1d6028ed7bca7d4a31b787ce802381de6f246e3352078ef1c21522ac628da87521d0e83ffdf1bf562079d2b7ebb0fa"]
```

Damus responds with:

```
["NOTICE","ERROR: negentropy error: negentropy query missing elements"]
```

You can find the bulk of my code below. I'm relying on the latest version of Negentropy.js

https://github.com/coracle-social/welshman/blob/master/packages/net/src/Executor.ts#L94

Any hints? Is it a protocol mismatch? nostr:nprofile1qy88wumn8ghj7mn0wvhxcmmv9uq32amnwvaz7tmjv4kxz7fwv3sk6atn9e5k7tcpremhxue69uhkummnw3ez6ur4vgh8wetvd3hhyer9wghxuet59uq3wamnwvaz7tmrvyh8yetvv9ukzcnvv5hx7un89uq3gamnwvaz7tmjv4kxz7tpvfkx2tn0wfnj7qpqyxprsscnjw2e6myxz73mmzvnqw5kvzd5ffjya9ecjypc5l0gvgkskcrj9w  nostr:nprofile1qyghwumn8ghj7mn0wd68ytnhd9hx2tcpz4mhxue69uhhyetvv9ujuerpd46hxtnfduhsz9nhwden5te0wfjkccte9ekk7um5wgh8qatz9uqsuamnwvaz7tmwdaejumr0dshszxnhwden5te0v9e8gtnwdaehgunxwfjkz6mn9e3k7mf0qqsr9cvzwc652r4m83d86ykplrnm9dg5gwdvzzn8ameanlvut35wy3gwau2us  nostr:nprofile1qyd8wumn8ghj7urewfsk66ty9enxjct5dfskvtnrdakj7qg3waehxw309ahx7um5wgh8w6twv5hszynhwden5te0dehhxarjw4jjucm0d5hsz8rhwden5te0wdshgetvd35hgefwdpa8yep3xsujucm0d5hsz3thwden5te0xaehyu3hvd58jcekwekxs7nsvvexsmpkd3uh2mn8wek82mmg0fex6aphxe4kyue5ddkhjergwfux7cttdd38zatpvshxcmmrv9kz7qpqye5ptcxfyyxl5vjvdjar2ua3f0hynkjzpx552mu5snj3qmx5pzjstgenpa 
 I'm pretty sure a 90 degree sauna makes time stop.  
 Read this as fahrenheit and just about had a seizure 
 nostr:nprofile1qyd8wumn8ghj7cnvdamkzar9wghxummnw3erztnrdakj7qgwwaehxw309ahx7uewd3hkctcpz4mhxue69uhhyetvv9ujuerpd46hxtnfduhszvrhwden5te0xgurwctkw4sksem8v9j8xepjxyehyee38pskwcfn09nnxamgvuuxwwrpvenju7re0ghsz9rhwden5te0dahxc7twda6x2uewd3hkctcqyp4em2fqcjmwe0evzgqc573dzsa5ml0es7xrh6kxncumkktcg8xxue4uszk  would you mind updating your negentropy npm package? https://www.npmjs.com/package/negentropy 
 Whoevet has it should maintain it, but I went ahead and incorporated the latest version into welshman, so I'm ok. 
 No, those are just based on a hash of the relay url. Where are you seeing this screenshot? It should now say "connected x times" 
 It's a proxy for how many people/groups/feeds the user wants notes from use the relay. If it's used a lot, it might be worth adding the relay as inbox/outbox. Or, if the quality of the notes coming from it is low, blocking the relay (not yet implemented). 
 I think (as usual) that more relay de-commodification will help with this. This is counter-intuitive, because it means that for each use case there are one or two choke points that handle most traffic.

- Looking for a profile? Use purplepag.es or relay.nostr.band
- Searching? Nostr.land or relay.nostr.band
- Looking for safe notes from your network? Use a wot relay

A new category of relay might be "newcomers welcome, spam managed by heuristics". A relay that's really good at assessing whether notes by a fresh pubkey are worth showing. Clients then would hard-code this relay when publishing notes from newcomers or fetching notes from new accounts, just like they already do for search/indexer relays.

Obviously, it would be ideal for many instances of each relay type to exist, and for discovery of these relays to be automatic rather than hard-coded, and I think we can get there, but it will probably require defining these use cases and advertising support for them via nip 11 or something.

nostr:nevent1qyw8wumn8ghj76r0v3kxymmy9e3k7unpvdkx2tn5dahkcue0qy2hwumn8ghj7un9d3shjtnyv9kh2uewd9hj7qg6waehxw309ac8junpd45kgtnxd9shg6npvchxxmmd9uq3gamnwvaz7tm0dek8jmn0w3jhxtnvdakz7qfqwaehxw309ashqmrpvdjkjmn5dpjhxatw9ehx7um5wgcjucm0d5hsqgruudcsejund0vhw6yjm3gzf6ae24l02kcxpazks5njterltp6r7u98pp3z 
 A new user who is getting shadow-banned from nostr:

nostr:nevent1qy2hwumn8ghj7am0deejucmpd3mxztnyv4mz7qg4waehxw309aex2mrp0yhxgctdw4eju6t09uq3wamnwvaz7tmjv4kxz7fwwpexjmtpdshxuet59uq35amnwvaz7tmsw4exzanfv3sjumn0wd68ytnvv9hxgtcppemhxue69uhkummn9ekx7mp0qqsv749n98jytusc545usuky5p9h8xzyl605rys9mpelyfre0yn4j3qd5kvzh

How can we improve this? I think the main fault is with primal here (just because nostr:nprofile1qy2hwumn8ghj7un9d3shjtnyv9kh2uewd9hj7qghwaehxw309aex2mrp0yh8qunfd4skctnwv46z7qgwwaehxw309ahx7uewd3hkctcpr9mhxue69uhhyetvv9ujuumwdae8gtnnda3kjctv9uq3zamnwvaz7tmwdaehgu3wwa5kuef0qqs92xycp9kys8cqyx09e9pfnggaj9prjjwd67t6t7zs3ra4fyh2u4gv4c4d0  is using it), for blocking notes from its own users, and not showing relay publish failures (maybe?). But the criticisms apply to all clients.

Probably the root issue is that relay policy is hard to infer via nip 11 and notice/ok messages. It's also one of those unglamorous chores like error handling that no devs (except go devs) enjoy. 
 Yeah, and compiling all this to a human-readable summary will definitely be impossible in all circumstances. I think policy might be best indicated by a combination of common, standard limitations (or rules, sure), and a human-readable description. Eventually, common configurations might be compiled into simple tags, like "paid inbox" or "fresh pubkeys". If a relay advertises that it's good for a given use case, they don't have to prove it and might not work well, but users and clients could at least make more intellligent guesses. 
 Only just realized this when rereading the nip. 
That's not ideal, mmmm. It incentivizes apps to ... 
 Does it? The client tag just helps people know what client published the note, which is a different thing from knowing how best to read the note, which is what handlers are for. 
 Coracle looks for recommendations from people you follow, and surfaces any handlers that are recommended. This is all automatic, and shows up at the bottom of a note in a drop down you can use to open any recommended handler. It is an extra step, but I'm not sure how you could get it shorter. 
 Is that the **Flotilla** app you mentioned? 

And sure! I'm always up for a Group Chat  :Check:  
 Yep, flotilla.coracle.social. WIP, but coming along pretty quickly now that I'm not trying to shoehorn it into NIP 29. I'll send you an email. 
 @asknostr

I'm trying to figure out the whole relay thing.
I send a note 3 times using  nostr:npu... 
 Great questions, relays can get complicated, especially since relay policy isn't surfaced super well. To get some hints on what a particular relay may or may not accept, you can look at the NIP 11 relay document and watch for error messages contained in NOTICE or OK messages. This may help explain why your notes are being rejected.

It's odd that primal would reject notes from their own users. For most of the rejections, I doubt that WoT would be the reason, since wot filtering is a relatively new thing on the relay side and not supported by a lot of relay implementations. My best guess would be rate limiting, or over-zealous spam filtering after the last few weeks of ReplyGuy. 
 oh yeah, me too.

I think the crux of it is, because it's a trusted relationshp (with the admin/o... 
 "groups" are a rorschach test, everyone has a different referent in mind when they use the word. Some people even have a different referent in mind every time they use the word 😂 
 This was epic confusing 🤣

I have so many questions now. 
 So do I 😂 
 I pretty much agree with everything you say there. I am also building a non-nip29 app based on some of these ideas. Would you be interested in coming on the tgfn podcast to talk about communities? 
 Wanting to burn down the system, is, in fact, high-time-preference fiat behavior. 
 nostr:npub1jlrs53pkdfjnts29kveljul2sm0actt6n8dxrrzqcersttvcuv3qdjynqn , the podcaster, is also a ... 
 Oh, you like me NIP 29 re-writes? 
 SIMPLEST GROUPS 
 SIMP G 
 🚀 zap.store cli 0.0.6 released!

Bug fixes and small improvements

To update:

zapstore instal... 
 Did the trick! 
 nostr:nprofile1qqsyvrp9u6p0mfur9dfdru3d853tx9mdjuhkphxuxgfwmryja7zsvhqpzamhxue69uhhv6t5daezumn0wd... 
 Coracle basically has this with nip 72 communities, although without the zap bit. What's that for? Funding relays? 
 If anyone out there is currently dissatisfied with their nostr client, may I humbly suggest Coracle. It is stable, reasonably fast, and has better feed customization than anyone else. It also now comes in "android" flavor as well. 
 Great, I'll take a look 
 Via safari PWA mayybe 
 Yes, but also it's a PWA wrapped in an APK now too 
 Amber is coming soon 
 Try zap.store or obtanium 
 I wasn't able to replicate, if you long-press in the input it should give you the option to paste. 
Event not found
 That is actually helpful, there are several indexers listed there which should do the trick. 
Event not found
 Yeah, I should get rid of those. NIP 66 is great, just gotta figure out a reliable way to locate the events.