Avatar
Alex Gleason
0461fcbecc4c3374439932d6b8f11269ccdb7cc973ad7a50ae362db135a474dd
I create software that empowers people online. I'm vegan btw.

What's the best model for ollama? Deepseek genuinely sucks, llama3 is okay but we're not close to chatgpt intellect yet.

Didn't realize how much I was being sucked dry by parasitic corporations until I started keeping most of my funds in Bitcoin which they can't charge automatically. Still fighting against it.

That feeling when your diff is 221 files +3803 −2931 with over 9000 type errors.

https://youtube.com/watch?v=N8lLbcwCqPs

Can't fit anything bigger in the 1U case. Planning to get a 2U server dedicated to AI so I can use bigger cards. Also these are 8GB, but they're small (1 pcie slot), so you could fit 4 in a single machine.

ebay server graphics card for self-hosted AI (ollama). 8GB Tesla P4 from 2016. $120. It takes one pcie x16 slot. Small enough to fit in a 1U server. Should be enough to get started.

Theseus's ship misses the most important question, which is how do you rebuild a ship? People take it for granted that a ship can even be rebuilt.

https://en.wikipedia.org/wiki/Ship_of_Theseus

Indeed, that's the reason, but often if I start writing a post and don't submit it there's a reason. I don't want to be haunted by that. 😂

This is an old screenshot. Purple line is Amethyst "draft" events, which is unusually high compared to every other event kind. I was having performance issues. But it wasn't because of this. It was a red herring. So in the end, my biggest issue with it is that it pollutes my logs and makes it look like something bad is happening. I blocked them anyway.

It's INSERT INTO with an ON CONFLICT clause. If the row doesn't exist, it's created. If it exists, the fields are updated in-place, which has much better performance than deleting the row and creating a new one.

Replying to Avatar fiatjaf

I also remember when nostr:npub1qqqqqqyz0la2jjl752yv8h7wgs3v098mh9nztd4nr6gynaef6uqqt0n47m proposed the "d" tag for replacing events based on that parameter instead of based only on the author's public key. I couldn't see any use case at all for it for many months, and the use cases he cited were not very convincing to me either.

Then suddenly both I and many others started thinking about way too many things in terms of "parameterized replaceables", culminating with nostr:npub1q3sle0kvfsehgsuexttt3ugjd8xdklxfwwkh559wxckmzddywnws6cd26p's proposal that even poll votes and likes should be such "addressable" events. At that point I realized things had gone too far and now I see a healthy move towards doing more things as "normal" events, such as kind:20 photos and kind:21 video events, nostr:npub1v0lxxxxutpvrelsksy8cdhgfux9l6a42hsj2qzquu2zk7vc9qnkszrqj49 has also recently proposed getting rid of the notion of replaceables. nostr:npub1acg6thl5psv62405rljzkj8spesceyfz2c32udakc2ak0dmvfeyse9p35c, nostr:npub1xtscya34g58tk0z605fvr788k263gsu6cy9x0mhnm87echrgufzsevkk5s and Clojure lover nostr:npub1jlrs53pkdfjnts29kveljul2sm0actt6n8dxrrzqcersttvcuv3qdjynqn have also spoken against replaceables in the past if I'm not mistaken, even though I think both had a short period of love for them too. Me too, recently, every time I have to deal with addressable events in the context of querying handcrafted databases, feel their pain.

Most things can be "normal" actually, even if they have to change. If you control where they're being publish you can always delete them. But also dealing with events as "facts in the past" helps. If you liked something at some point that doesn't mean you can't dislike it at some other point in the future, and so on.

On the other hand, because of practical concerns since we don't live in the clouds of Rich Hickey, I think all user metadata stuff and all NIP-51 lists should be replaceable still, because these things are updated rarily and then fetched thousands of times by many apps and clients everywhere. Telling all these readers to fetch dozens of events for each target author-kind combination and compute the result locally would be too much of a burden.

I never believed reactions should be replaceable. Poll votes are too hard to count if they are regular.

I think replaceable events are very good if only for this:

"nostr_events_replaceable_idx" UNIQUE, btree (kind, pubkey) WHERE kind >= 10000 AND kind < 20000 OR (kind = ANY (ARRAY[0, 3]))

"nostr_events_parameterized_idx" UNIQUE, btree (kind, pubkey, d) WHERE kind >= 30000 AND kind < 40000

The fact they are unique makes lookups very fast.

If we allowed multiple, filters like `{ kinds: [0], authors: [alex, fiatjaf, patrick], limit: 3 }` wouldn't work right anymore and would have to be split into 3 different filters (now 3 individual REQs if only one filter per req).

Replying to unknown

Hey nostr:nprofile1qy2hwumn8ghj7erfw36x7tnsw43z7un9d3shjqpqjvnpg4c6ljadf5t6ry0w9q0rnm4mksde87kglkrc993z46c39axsus667r is there a way to get my nsec within ditto? 🤔 Because if not I just royally screwed myself because by accident I erased my proton account that had my password manager attached

You can get it from browser storage. Open the console (Shift+Ctrl+i) and go to Application > Local storage, then find the key called soapbox:nostr:keys and your nsec will be in there.

If you're only logged in on mobile, it's still possible, but you'll have to connect your phone to a computer to enable developer tools.