Oddbean new post about | logout

Notes by Erik | export

 https://www.youtube.com/watch?v=czbLw6zvppQ

AI giving us the calmest abortion debate out there.  
 It got like 12 inches so far between last night and this morning, southwest of Denver. https://image.nostr.build/6bdbf27929afc91225852c055d1e490dd81ff56bcacec34a5e74aa688cc91858.jpg 
 People are gonna hate me but I'm going to officially remove docker support on the #haven repo thi... 
 Could even push the binaries for a few different OS's as part of a github release.  
 Just snagged a ticket to go see Weird Al next June. 
 I wanted to, but scalpers got there first. I can't justify $300 a ticket to see him. 
But seen him before, he puts on one hell of a show 
 This box was generated by software that was entirely AI generated. 
https://image.nostr.build/c9bd07bc7e4538eb1002626500746c8cef28556dcd4ced0423508434a342ef5a.jpg 
 If you like #ai, and you've used #fabric before, then check out this project (or even if you haven't, check it out anyways)
https://github.com/ebrakke/yt-fabric-ui

still a WIP, but I love having a place to summarize different youtube videos and decide what is worth my time to watch. 
 I've been playing around with fabric: https://github.com/danielmiessler/fabric
for a little while now, and it's awesome. Since the underlying software got converted to go, I decided to write my own little web UI on top of it for summarizing and keeping track of youtube videos.
Here's a little demo - You can paste in a youtube video, and it will go out and get the transcript for it.
You can then go to the video page and select and model and a pattern to use on the video - in this example I'm using the gpt-4o model and the summary type. However you can have this run against a local LLM as well (basically anything fabric supports).

My workflow here can now be that I'll just grab youtube videos that _might_ interest me. I can then get summarizes, extract_wisdom, or rate the video. Once I read through those, I can decide if the video is actually worth my time, or if I'm fine with skipping it.

Ideally I'd release this as a binary that anyone can run on their computer. Your own personal youtube time saver!

#ai #fabric #go #youtube #savetime

https://video.nostr.build/45f496b6ee251d7e4eae5e2608f712cf8a2a621fb71269a649d48d6462bfd2d9.mp4 
 @rossbates two things I'm thinking for the kind 2002 event that would potentially make it more interoperable / usable.

1) The "i" tag can just be any general information about how to find the song. The MBID schema is great if a user has it, but I don't think it needs to be limited to that. Having `spotify:track:{spotifyId}` or `tidal:track:{tidalId}` would allow clients to more easily link to a spot where the song can be played. 

2) I think adding a `source` would be fun, then a client like scrobble.nostr-music.cc can show which player the the scrobble event came from. Cmus, spotify, last.fm, etc...

This would also tie in nicely to building out a more structure graph of how to find music on the web. Something can ingest this data piece together the spotify link, tidal link, mbid link, etc... and turn that into a Song event.

I almost have a little app done that will handle publishing these events directly from your spotify plays, rather than having to go through last.fm, and I think that will open up this event kind to many more users. 
 I'm also trying to figure out the best way to link to bandcamp from the scrobble site. That's going to be next on my list once I get better integration with spotify. 
 Yeah, basically I just need to find a way to query for a bandcamp link by artist name, a quick look doesn't look like they really have a concept of IDs (at least not exposed in an easy way)

But I want my scrobbler app to have a link to checkout the song on bandcamp, so that one could buy a song from that artist. 
 Cursor is going to change what it means to be a dev in a very short timeframe. Those who don't embrace it will fall behind. 
#ai #dev 
 frustrated enough with nostr clients that i want to create my own 
 Honestly it's just fun to write clients. The more the merrier.  
 MAF training has been my goto when shaking off the rust. It can be painful to run slow, even walking at time. But after a month or two the results really start to show.  
 Solid plan. Nothing beats the plan that you can stick to consistently. 
 what's the best #nostr web client ? 

#asknostr  
 I've been enjoying ditto.pub
Buggy at times but I like the clean look. 
Nostrudel is great too, reminds me of the spirit of Amethyst (if it can be done, it will be done), but on the web.  
 Even though coding via go templates and plain ol' javascript is worse at scale for highly interactive apps, it's been really fun learning into htmx and Alpine and seeing what all I can do without frameworks and a build system. 

Turns out, you can do quite a lot. 
#go #htmx 
 I find myself using slack or discord a lot to send notes to myself. Especially if I want to send something from my PC to my phone. 

I'm sure others use services like notion or apple notes to just automatically do that, but I decided to create one using nostr. 

This webapp will send draft kind 23 notes to a server and it is stored in a relay run by that server. Everything is encrypted client side. 

Users get an nsec generated on first visit. You can "share your notes" and you'll get a link with the nsec so you can retrieve notes on another device. It's super basic and definitely lacking in more features. 

Try it out at
https://nts.fly.dev

Note: the DB backing this could be wiped at any time. So just keep that in mind. 

#go #notestoself 
 Managed a run with both dogs and my daughter. The first of many like this
#running
https://image.nostr.build/280dbef3d2b1ea17b752e674d508cf012e968b7684a6aeb10ad46e8cdeffde71.jpg 
 Nice! What elevation? 
 Sick! I'm Denver based, there's good running up here (when it's not 90+ degrees out) 
 The biggest benefit to learning Go as a nostrich is you can you use all of nostr:nprofile1qqsrhux... 
 Also scp'ing a single binary is pretty nice.  
 Khatru makes it really easy to customize a relay page. Do any other smaller community relays post regular backups? Might make it easier to bootstrap new relays, or just do data analysis. 
#asknostr
 https://image.nostr.build/8dd9684c1e90564658a8a9d0faff491812635d8dc8154105ea4f64f4442df0f6.jpg 
 https://po-box.fly.dev/

Is it useful? Not a clue. But just a random idea I had that I wanted to build.  
 If anyone is looking for a fun easy project to do, and you're a Spotify or Plex user, try writing a connected app and publish what you're playing on Nostr!

https://developer.spotify.com/documentation/web-api/concepts/apps

As long as you publish the kind 2002 event defined here https://github.com/ebrakke/nostr-scrobbler
Other apps will be able to display it!

Let's get as much data on nostr as we can 
 If you’re a nostrich and a last.fm user, please join us in building an open music graph on nost... 
 They were trying to build an open web for music listens before it was cool 😀  
 Agreed. Already working on another extension that I'm calling `window.scrobble`, so any client can just hook into that to publish the scrobble event.
Bridging existing data out of walled gardens is just one piece. I also agree on the "streaming by another name". I want to just own my music and pay you for it one time. 
 If anyone is down to try experimental chrome extensions, Here's my first early release of the last.fm to NOSTR scrobbler extension.
https://blossom.nostrava.xyz/ab947aa5809a66a3bd21c43fb6d1ecb345b114906a7eab7798c9adeff3d7a2a9.zip

If you have a last.fm account, and you have your streaming services hooked up to it, you should start to see them flow through this extension when it's in "syncing" mode. Then you can choose if you want to publish it.

If it doesn't work right away, try refreshing the page, or closing and opening the browser again. 
https://github.com/web-scrobbler/web-scrobbler/wiki/Install-an-unpacked-extension

All of the source code is here
https://github.com/ebrakke/nostr-scrobbler/tree/main/lastfm-nostr-extension

@rossbates 

#music #last.fm #scrobble #otherstuff

https://image.nostr.build/9fd9e53b9f72f9727894d870c5b792bbce422998404fcb0092440666c4d012a3.png
https://image.nostr.build/ed9e5b012f6e35577b69654966e30848c504ae4d4d010bbd1d995dcf479596c3.png 
 If it doesn't work first try, just try reloading the extension 
 Yes! I use it extensively with plex as well! Building on the backbone of what last.fm has done has made this process much easier. 
 Heck yeah! What'd you use to publish it?! 
 Glad it's mostly working! If you wanna try out the chrome extension, it might be a better experience.  
 The other stuff is exploding right now. 
 Okay one last one for the weekend...
Here's a chrome extension that will act as a last.fm to nostr bridge.
You just have a to give a last.fm API key, your username, and your nsec (for signing the 2002 events).

In this demo, I am play all this music through the spotify app on my phone. I have spotify hooked up to my last.fm account.
This extension is listening for those scrobble events from last.fm, and publishing them to the scrobble relay.

Finally, the app in the background is listening to new events coming in on the same relay, so in real time you can see my scrobbles getting added on the app.

Open protocols are awesome, I love the inter connectivity!
#music #scrobble #extensions

https://audio.nostr.build/5eb53525a26133e3ba5bb2a90f6861ad5699851bdf48b178b24c92ad62cfab0f.webm 
 https://nostr-scrobbler.pages.dev/

nostr:nevent1qqsg4takdkk8q66sgu3s98uw8l68x5dxgkud5fy6c99p6ytap2e9mdsprfmhxue69uhhyetvv9ujuempd368xem4d33kstnrvvhsygqlw9ud24u6uthtczg9ncwfr7f5zng7pjwrlg5p70qm57wft8x4typsgqqqqqqsk4h3x5 
 If you're a last.fm user and want to participate, you can run this script while  streaming, and it'll generate the scrobble events. When it's all setup, you should see your scrobbles at https://nostr-scrobbler.pages.dev/

https://github.com/ebrakke/nostr-scrobbler/tree/main/lastfm-to-nostr

nostr:nevent1qqswfur248655ulh2txa46wwuagtjtd0jc2cu8ghfu7fqqgcy0kg4ssprfmhxue69uhhyetvv9ujuempd368xem4d33kstnrvvhsygqlw9ud24u6uthtczg9ncwfr7f5zng7pjwrlg5p70qm57wft8x4typsgqqqqqqs9w67tr 
 Discover what other nostriches are listening to

#music #nostrability #scrobble #cmus

https://audio.nostr.build/e4a010afd727d0d7ae88dc87c6ab2957fd3fbefa6acfa42f9002b520f1754aac.webm 
 Playing around with a scrobbling nip: https://github.com/nostrability/nostrability/issues/79

Document these POCs here: https://github.com/ebrakke/nostr-scrobbler 
 https://nostr-scrobbler.pages.dev/

nostr:nevent1qqsg4takdkk8q66sgu3s98uw8l68x5dxgkud5fy6c99p6ytap2e9mdsprfmhxue69uhhyetvv9ujuempd368xem4d33kstnrvvhsygqlw9ud24u6uthtczg9ncwfr7f5zng7pjwrlg5p70qm57wft8x4typsgqqqqqqsk4h3x5 
 Woo! The power of simple open protocols, interop is the easy part 😄  
 I'm thinking that I'll periodically snapshot this relay and upload it to a blossom server. Then the server page can post a hash with the download link to grab the data.

Then anyone could run the graph if they want on their own relay, and they'll already get seeded all of the scrobble events. 
 Ha it sure did. Right now the server just stores everything in memory, probably a concurrency thing 
 Running #WoT relay.  
 nostr:nprofile1qqswd2dylpf7fvw5ym45f5x9mvylm3q4eegnuejprr6x7hlmagcye0qpzemhxue69uhhyetvv9ujuurjd9kkzmpwdejhgqgswaehxw309ahx7um5wgh8w6twv5q3gamnwvaz7tmjv4kxz7fwdehhxarj9e3xw84a563 check out https://relay.nostr-music.cc
You can publish your scrobbke events there to this relay, and this webpage will show all the music that has been scrobbled to it
#scrobble #music #nuds 
 Ha I did the same. Didn't realize uploads were disabled by default!
I've been finding my blossom server useful just for sending videos to friends as well. (Android to iPhone be damned) 
 I'm using blossom server (the one written by hzrd149)
I have that setup on a VPS with cloudflare R2 as the backend blob storage. The nice thing with R2 is you never pay for reads. Only writes and other operations. 
I'm probably going to set one up on my home network and use minio as the backend as well.  
 I've been using cursor for the past week for so. I just asked it to build me a go server that would query a relay for the scrobble kind and organize it into stats. And then serve up an htmx + Tailwind page to display it all

And it did it. First try. In 10 seconds

The amount of time this saves me just getting everything wired up is massive. Very bullish

https://image.nostr.build/b6f3c7d7c6bbce2e5affd1592894d826e7f795034c1dfe389e012300a6725461.jpg 
 https://github.com/ebrakke/nostr-scrobbler

Not really sure how NUDs should work, but I made this for music scrobbling. After reading the issue nostr:nprofile1qqsd6ejdteqpvse63ntf7qz6u9yqspp4z7ymt8094urzwm0x2ceaxxgprdmhxue69uhhg6r9vehhyetnwshxummnw3erztnrdakj7qguwaehxw309a6xsetrd96xzer9dshxummnw3erztnrdakj7qgnwaehxw309ac82unsd3jhqct89ejhxtccyjmzy posted about nuds becoming nips, thought it would be cool to have a repo surrounding a NUD (like and awesome-* repo per NUD)

If it gains traction it can make its way to becoming a nip. If not, people can still use it, it it just won't be "official". 

Maybe NUDs don't need to be an event on Nostr, just a concept and playbook devs can follow. 

#music #scrobble 
 Also if you're a #cmus user, I have the super rough initial release of the cmus scrobbler on the GH releases.  
 Built a little go CLI tool that can check with cmus which track is playing and generate a nostr scrobble event (WIP) from it. 

The best part is I was able to generate the code for this POC in about an hour using cursor IDE. Extremely bullish on the future of NOSTR and AI
https://image.nostr.build/68e653b6aa2915268344404dce897927f0a1b6519abf2c6e33fd02a5072283df.jpg

#music #scrobble #ai #go #cmus 
 Has anyone implemented a NUD? Curious what it looks like. 
As a dev, does it make sense to deploy a relay specifically for that NUD?
#asknostr  
 ☑️ onsighted Anna-Maria, 6c

Vacation = going climbing and starting to keep my scorecard as n... 
 Between that and MP trying to get everyone to sign up for onx and blocking a full quarter of the page with a sign up box, gotta get all that climbing data out of the walled gardens.  
 Currently working on nostrava.xyz 
 What #otherstuff interoperability are you most looking forward to? 
 Music. Scrobbling integrations. Decentralizing the entire music recommendation industry, as that is one of the main reasons I think Spotify still has such a hold on people.  
 Do you have a loose spec on what this kind should look like? I'd love to start figuring out how to integrate it into some of the music players I use (like cmus). Mostly just so I can publish to my own relay and keep track of my listening history. 
 Also if you have any links to the project source code you're working on, would love to take a peek! 
 Sad that libre.fm is in closed beta. I'm sure I could get added, but also seems like something that NOSTR would be perfect for. 
The scrobble protocol is pretty simple, and DVMs seem like the perfect use case for song recommendations. 

#music #tunestr 
 What music client is that? 
 https://www.youtube.com/watch?v=QAf0s-d9W0g

Wow, this is awesome. Can't wait to start playing around with this.  
 Anyone know of a or working on a scrobble like project on nostr?

#asknostr
 
 Adding image support to https://nostrava.xyz
All images are currently being uploaded to the #blossom server backing the app. Soon users will be able to choose whichever blossom compatible server they wish.

 https://image.nostr.build/b3b6c0d10091e5538b5fbe0e62178f770276bcf303a275a2e6b1e5ac324edf71.png 
 https://image.nostr.build/0988c17907a0e9ea8d52a3af3caf75aaa1664765e7639917eb41334e5507cd49.png 

#running #moving #nostrava #activities 
 Everything is starting to come together. Using #blossom in front of R2 has me excited.  
 I've been running long runs (20-30km) carrying a bottle of half a gallon of water in my hand. I t... 
 Big fan of this soloman vest 
https://www.salomon.com/en-us/shop/product/adv-skin-12-lc11657.html#color=66310

You can pack it super light with just the bottles (500ml each) or you can throw a full bladder in the back. Combine both and you can get 3L easily. 

Tons of space for phone, snack, jacket, whatever. Just make sure you don't get it too big, otherwise it'll flap around while you run.  
 Big outing this morning with my brother. Tried to speed run the biggest peak on the Idaho side of the Grand. Great views of the Grand Teton as well

https://nostrava.xyz/activities/3787f6b9-cb9a-492b-b715-57c7c7a6c0ea
https://storage.nostrava.xyz/072c1febfa2157c3911ae598c347b34ec9b3ccb96b97309bdbdd7572f16c3aa9.jpeg
 
 Are you working in an activity based nostr client as well? If so would love your input on the activity nip! 
 SDK per nip? Or one SDK that does it all? 
 First pass at an Activity NIP: https://github.com/nostr-protocol/nips/pull/1423

Anyone who regularly uses Strava, Garmin Connect, or similar - I would love some feedback on this flow. Especially if you're a developer!

#running #nostrava #nips 
 Yeah working on a new event kind to facilitate this stuff. The goal of the client I'm building is to give fine grained control over what part of an activity you actually share. 
Ultimately you'll be able to encrypt the data if you don't want to let others see all of the location data, or choose to not upload it, but allow people to still see stats.

Then utilizing DVMs, you could still get cool aggregates on the stats you choose to make public, like how strava will match a run and give you trends of slower or faster.  
 Suuuper rough, but here's a client that can handle nostr activites (like garmin / strava / etc..)
https://nostrava.xyz

It's still a WIP and will only use one specific relay current to write all of the activity related notes (relay.nostrava.xyz).

While the NIP is still being worked on, I figure it makes sense to not publish these notes to a bunch of public relays as things could still change.

Currently auth is only supported via nip-07 browser extensions (more auth support will come soon).

When you share an activity, you can expand "Share Settings" to choose exactly what you want to share as a NOSTR note. You can trim the Map file so that you don't dox your exact location, you can also choose to not upload your activity file.  In this case, only a summary of statistic will be generated.

I'm using the "sports-lib" javascript library to analyze the activity files. It's far from perfect, but it's good enough for now. My hope is that other who are better at this kind of analysis can create DVMs or other libraries to generate summaries from the raw GPX files, which other clients can then pick up on.

Relevant code is here: 
https://github.com/ebrakke/nostr-ava
https://github.com/ebrakke/nostr-activities-sdk

#running #nostrava #activities #cycling #gpx