Oddbean new post about | logout

Notes by brugeman | export

 I suppose that the alternative to advertising is direct monetisation with bitcoin, and without ads privacy invasion might go away. Can you please talk more about the scaling debate, and how things ended up on the server, which is counter intuitive - moving more to the client should scale better. 
 Hey yall 👋
Check out mapstr.xyz
It's a nostr based website I built to allow Nomads to pin loca... 
 Congrats on the launch! Definitely considering using kind other than 1, also welcome to publish your app on nostrapp.link 
 ⚡
nostr:nevent1qqs2t8sde2kw2ya0vv49zgvztel7v7qz299aum2vw6ptywkj036zfygpp4mhxue69uhkummn9ekx7mqzyplx3ujnml300ym6gr0hdtr7htjejekxqeluwqmj6j4wn9vf9d6ryqcyqqqqqqgr7pchm 
 What nostr influencers do you recommend to follow? I mean in order to catch up with trends, narra... 
 Check out trending section on nostr.band, also check out my lists on listr.lol 
 Create folders for your pinned apps in Spring v0.11

There are lots of apps, and now you can organize them with folders. And for new users the default pins are nicely grouped now. I hope this makes it easier to showcase the diversity of Nostr apps.

https://void.cat/d/FpyRTrL6UwUD1ySMYJYmBr.webp
https://void.cat/d/JSa3YnJh5xykzPaFdBXzR4.webp

Play Store: https://play.google.com/store/apps/details?id=com.nostr.universe
APK: https://github.com/nostrband/nostr-universe/releases/download/v0.11.0/spring-nostr-browser-v0.11.0.apk 
 Someday hopefully  
 SharedWorker + Indexeddb = Local relay for web apps?
My brain is telling me it would be way to sl... 
 That's how it will work in Spring soon. Right now it's in the main thread, moving to a service worker now. We'll see how slow it is 
 Super-sonic problem solving
nostr:nevent1qqspw2erw7gy6hfa0an3w9435razlcc5kl860txsy8kepzhux44yhwgppemhxue69uhkummn9ekx7mp0qgspwut66nfqu2jztndq5gv4vf9q5jnncnmfwhckk9vnljrl53hj6kqrqsqqqqqp5fzx4f 
 @JeffG Hey! All profiles on ostrich.work are 'undefined' :(  
 Hmm couple reloads made some of them show up, I'm guessing it just fails to find the profiles sometimes 
 If someone have redesign version, I'm ready to working to turn it into real
nostr:nevent1qqsph8z6... 
 That sounds awesome! 
 🥳
nostr:nevent1qqs99ftkzlz9y034e039we8ugujj5sq4vn85mutkl4xx6we9246ym4qpp4mhxue69uhkummn9ekx7mqzyqfxzqalmhyd7fttdc9tl4ln097gphxya2y00shc0h2pqs3qknt97qcyqqqqqqgm3qpx8 
 Still cant figure this NIP-46 thing out... the nip says I should use a nostrconnect:// URI genera... 
 nostrconnect is for app to redirect to signer, bunker is Pablo's invention for signer to app, and npub or token are nsecbunker-specific non standard ideas. 
 Take a look at this prototype. It's a Nostr signer web-app - it works in your browser, doesn't need extensions, and stores your keys locally.

I love the recent ideas by @PABLOF7z  and @rabble  about OAuth-like nostr signup/login flows, but OAuth is so smooth because it works on the web - no extensions or apps needed. And the only Nostr web-signing option we had until now was to give custody of your keys to a remote nsecbunker, or paste nsec into every app.

This app, though, is a pure web app, and it does signing locally. It uses NIP46 just like nsecbunker, so it shouldn't be too hard for apps to start supporting it - the one that already works is Snort. With nip05 names added on top we can make signup/login flows that are very smooth and users would only deal with email-like usernames and passwords, without the custody of keys by third-parties.

Ok, let's watch the demo. Your eyes will bleed, but it's a prototype. Maybe #nostrdesign team would help us turn it into something pleasant.

https://video.nostr.build/b3bbcd1aa40ca6d1a3175f6690171e859dc85d41d7f4878b1bbc8f9b9c264fa9.mp4

This approach technically works across devices, but that's unreliable on mobile if device is locked, plus your devices are offline sometimes, so the best way would be to have this app store keys on each of your devices so that at least one instance of the signer is always online (on the device you're using right now). That's why this app has built-in password-protected cloud sync for keys.

It's open source. 

App: https://login.nostrapps.org
Client: https://github.com/nostrband/noauth
Server: https://github.com/nostrband/noauthd 
 I'm hopeful too! 
 Yes! I was hoping this could help with wider nip46 adoption! 
 I meant not just 'password-protected cloud sync for keys', but 'end-to-end encrypted-by-password cloud sync for keys'. Your password or keys are never exposed to the sync-server.
 
 Yeah it's ugly, wish anything else worked  
 Yes please 😂 
 It is a bunker in your browser. Why does it need reverse proxy? It communicates through a relay, it doesn't need to accept connections... 
 nostr:npub1eu5yg8uclgwnqgvgxmt59kn674qmws0qsqdl4fdvx480cq7xraaq943nau similar to the NASCAR probl... 
 Challenge accepted 
 Thanks! I saw that this event is also present on relay.nostr.band. I only published it to my pers... 
 We crawl all relays we can find 
 Awesome!
nostr:nevent1qqsrdm327av9z20kj66quq7w6g9l09uaywvpl74tt2nxpcq990st8ggpz3mhxue69uhkummnw3ezummcw3ezuer9wcpzqcl7vvvdckzc8nlpdqg0smwsncvtl4m240py5qypec59dues2p8dqvzqqqqqqyn7n7wu 
 pls fund nostr.band / nostr:npub1xdtducdnjerex88gkg2qk2atsdlqsyxqaag4h05jmcpyspqt30wscmntxy 
 What would you like to see improved on nostr.band? 
 Thank you for the input, topics are an interesting direction.
Nostr.band is funded, there is no business model yet. 
 Sounds doable, would you prefer it as DVM? 
 Search as DVM noted, thank you. No plans to open source our relay, but maybe I could make an oss search dvm plugin for strfry...  
 True. But DVMs are 10x harder to work with, they add latency and UI complexity. I will eventually wrap some of our APIs as DVMs and we'll see if they get any meaningful adoption this way. 
 Spring browser v0.10.0 is out!

We've added full-screen feeds, not sure if we're going to make them full featured event feeds (there are apps for that), but having more space to display stuff will help with some planned experiments.

https://void.cat/d/8Wwy4nVpgSfHugfnpW1fST.webp

Also, if you like geo-location apps like Yondar, you can now go to Android settings and enable geolocation permissions for Spring. Only do that if you only use trusted apps - right now Spring will give access to your geo-data to any app that asks, so if you're concerned - wait until we implement granular per-app geo permissions.  

https://void.cat/d/X2SvQqAxKUEDppvqZ22d8X.webp

Play Store: https://play.google.com/store/apps/details?id=com.nostr.universe
APK: https://github.com/nostrband/nostr-universe/releases/download/v0.10.0/spring-nostr-browser-v0.10.0.apk 
 You should copy your alby address (email-like) and put into your profile into LN address field, then it will be done 
 Ok now I can zap you! 
 🚀
nostr:nevent1qqsqmusq79xa9ryxy3vl54n2em0szn7qt5at0ajxnx369vfaxx2n88gpz9mhxue69uhkummnw3ezuamfdejj7q3q07jk7htfv243u0x5ynn43scq9wrxtaasmrwwa8lfu2ydwag6cx2qxpqqqqqqzqrqdvp 
 Nostr Connect is Nip46 for remote signing, nos2x is nip07, your new naming is a bit confusing  
 how do I do a zap split with the zapper api? I see 100% to whatever ID I put in there but how do ... 
 Zapper app is for zapping events that have a zap-split set up - meaning first you have to create a zap-split event somehow, and then you can zap it with zapper.

Different apps create zap-split events for different purposes, but I haven't seen an app that allows you to manually build a zap-split - like choose event kind and choose zap receivers etc. I created the above zap-split manually from terminal, if you can do that try reading nip-57 - it's just "zap" tags with receiver pubkeys. 
 Which clients support nip-46 Nostr Connect? 
 How? I only see Extension or Key login options. Btw click on supported extensions does nothing  
 Trending hashtags in Snort look amazing!
https://void.cat/d/VYm4J81MJCmJCAAoGKWnzC.webp 
 List of hashtags is from nostr band 
 Does it read relays from kind:3 or kind:10002 ? If user has no relays - where does it write? 
 That's what I meant with "full support" - this new user has no relays in kind:3, and you're not reading from kind:10002 - so which relays are used when they post? Only your relay? Some default ones? 
 Iris is merging with Snort, and I'm not sure which version is served now at iris.to and whether it is maintained. That might be the reason why your messages aren't visible on iris. Or it might be the relays problem.

Try snort.social, login there, go to profile, settings, relays - make sure you have a lot of relays, try adding some bigger ones like relay.damus.io, relay.nostr.band, nos.lol - use nostr.watch to find some. 

Then try posting on Primal - they might not have full support of many relays right now because they use their own middleware, so I hope that if you setup relays in Snort then Primal would post there and it would be better visible outside of it. 

I mostly use Snort on desktop, other good ones are coracle.social, nostrudel.ninja, satellite.earth 
 Does it read relays from kind:3 or kind:10002 ? If user has no relays - where does it write? 
 Primal does care, they're a great team! 
 Now Blowater's native decryption is roughly 15X faster than any NIP-07 extensions that use nostr-... 
 Spring's decryption is in native code, I didn't measure the performance but from your description of the issue I'd say it's probably js-specific problem. 
 Not really, unfortunately. You'd have to use mobile Chrome and connect it to desktop dev console to debug properly. Spring only shows logs on the About page, and even those aren't convenient at all. 
 The way it works is that Primal is asking for your pubkey from extension every time you reload. They could cache it as 'last-login-pubkey' in localstorage or something, but they choose to just ask. That triggers the confirmation screen. Most other clients save the login pubkey and that's why won't re-confirm on reload. 
 Iris is merging with Snort, and I'm not sure which version is served now at iris.to and whether it is maintained. That might be the reason why your messages aren't visible on iris. Or it might be the relays problem.

Try snort.social, login there, go to profile, settings, relays - make sure you have a lot of relays, try adding some bigger ones like relay.damus.io, relay.nostr.band, nos.lol - use nostr.watch to find some. 

Then try posting on Primal - they might not have full support of many relays right now because they use their own middleware, so I hope that if you setup relays in Snort then Primal would post there and it would be better visible outside of it. 

I mostly use Snort on desktop, other good ones are coracle.social, nostrudel.ninja, satellite.earth 
 For me it's a bit weird that a have to confirm some actions with Alby extension too often while u... 
 The way it works is that Primal is asking for your pubkey from extension every time you reload. They could cache it as 'last-login-pubkey' in localstorage or something, but they choose to just ask. That triggers the confirmation screen. Most other clients save the login pubkey and that's why won't re-confirm on reload. 
 @cloud fodder do relay.tools relays support nip42 auth so that only specified authorized clients could post? I mean so that relay would accept events authored by anyone if they come from an authenticated client?  
 I see. I checked strfry issues, I don't see your bounty, maybe it should be there? 

Btw we've just added bounties to github issues on nostrapp.link, check the issues tab here https://nostrapp.link/r/naddr1qqvkw6t5dp6kytnrdakj76r0096x2cmg9aehgunxwfusyg9r89n595twyzwmaak70pgzfqvw076m0a5dnfkraeljrfmjtgfl25psgqqqwkjs2dxul7 - I've posted 300k bounty to the nip42 issue now.

khatru looks cool, especially for custom relays that aren't expected to handle high loads.  
 @Mazin  do you have an open-source nip42 middleware for strfry? 
 
 I'm not sure bounties and competition are bad. Right now there is total lack of competition for solving issues, so some incentives to ignite it would be useful IMO.

A simple implementation of nip42 with some fixed set of pre-configured pubkeys doesn't seem too difficult from what I see in the code. The scope of "full support" (relay+sync+stream) mentioned in the github issue plus the desire to make it an extensible plugin might be the thing blocking it.  
 Well we're looking into a simple "AUTH-for-write-access" policy, so if you have "“AUTH only” middleware and then connect the user directly to the relay backend" and can share it that would be awesome. 
 100% agree that the bigger the problem scope, the harder it is, but then a big problem scope is itself a problem. I think bounties for github issues are a much better way to do these incentives, as the scope is usually much smaller. And if the issue is of a big scope then you can just create another smaller-scope issue and attach bounty to that one. 
 I mean that if I want to create a relay for some 'curated' set of events then I would just allow only one pubkey to do writes (write anything, not just it's events), and let everyone else read. Curation could happen manually - I could use some tool to broadcast specific events to that relay, or by some software with keys that are allowed to write.

I think even this seemingly simple 'auth only for writes' case isn't trivial - if you send AUTH to every new connection then you're forcing readers to auth. And if you only send AUTH on writes (EVENT commands) then there needs to be a mechanism to handle the pending write - relay would either have to reject the first write attempt, do AUTH and then client should retry, or relay should buffer the write request, do AUTH and commit the write if auth succeeds. And since clients can't launch the auth flow, writers can't initiate it themselves, they have to wait until relay decided to run the auth flow. NIP-42 isn't great.  
 That's the point - I want to write any event, not only events I authored. 
 Maybe that's not a great solution btw. If a dedicated writer is mistaken and decides to delete some event from strfry - what should it do?...

Maybe a better solution is some relay management interface/port/etc. It could require auth for all clients and support more commands (at least delete). Do you know if there is anything like that planned/built for strfry? 
 Hmm interesting, yes that's also a possibility. Although it means I can't use existing tools to broadcast mod writes. But then adding nip42 for writers makes most tools unusable too. 🤔   
 That's fun, but it sounds like such logic should be handled by separate writer/automation process with custom logic.  

How about a bearer auth token in headers that allows writes? This would exclude most of existing software to rebroadcast notes to that relay, but it should be trivial to implement at strfry and then we could build various "plugins" that would handle the above or other interesting curation logics.   
 Ok that's interesting, although you can only boost a note. Well technically you can boost anything, but most tools don't allow that. 
 Oh shit that's true, no websocket headers from browsers :(
It could be a 'secret' included in url but then it will be logged by every damn thing in the middle of you and the relay, not sure if passing long-lived secrets in urls is a good practice. 
 Also not sure if using secret url is a good idea nostr:nevent1qqsrcndt8wmv7erlccjf6kcamsr2pzferkxa70fcc0fk3q2gny7wnmqpremhxue69uhkummnw3ez6ur4vgh8wetvd3hhyer9wghxuet59upzqv6kmesm89j8jvww3vs5pv46hqm7pqgvpm63twlf9hszfqzqhz7aqvzqqqqqqymcd79w 
 Yeah I remember most of this stuff discussed in nip42 PR 😉  
 Is there an app that explores notes from many or all relays, and only returns notes with a sole s... 
 There is a relay for that, wss://feeds.nostr.band/lang/{lang} - en, es, jp etc., i.e https://nostrrr.com/relay/nrelay1qq08wumn8ghj7en9v4j8xtnwdaehgu3wvfskuep0d3skuee0v4esg0z4rx 
 On nostr.band there is a Label button if you open some note 
 Or maybe https://labelmachine.org/ if you need a fancier version, feeds.nostr.band only looks at 'l' tag though, L is ignored. 
 Still working on all the edge cases, but now you can zap prisms faster than ever before. 

1. Mak... 
 Would be amazing to be able to zap by naddr, not just noteId - we have a lot of various zap splits published i.e. try zapping a github repo contributors https://nostrapp.link/r/naddr1qq0xw6t5dp6kytnrdakj7mn0wd68yttswfhhgmmrdakz7mnfwpesyg9r89n595twyzwmaak70pgzfqvw076m0a5dnfkraeljrfmjtgfl25psgqqqwkjs86rylq  
Event not found
 You should add your alby wallet address to your profile and we'll show you how zaps work 
 You're talking about a wallet you can spend from. Now you need an address to receive payments from others. 
 You should copy your alby address (email-like) and put into your profile into LN address field, then it will be done 
Event not found
 Welcome! Great to see you joining! 
Event not found
 I watched some crap today, should have watched that one