Today I met the great Melvin Carvalho. We discussed life, love, and the future of the web. Thank you for the fun times!

nostr:note1rearkgycmkzl4p7n7p6vkjqax8k9h7azsxpjnce6gr3lt43mewtq0v37c2

https://image.nostr.build/97c415992d94dc1f8ec43386f20e6d0b46e189bf764ac98eeb99ded1719eb5cd.jpg


Yes! 🍄


I don't care about my privacy, in fact I prefer transparency. This is a feature not a bug.


Crack pipes in #Prague

https://image.nostr.build/5efd7b2ceea59d6dac0da6ace759b4c28d10867e60c0962904c9ab1baf2ccc2e.jpg


It's vegan btw


Breakfast in Prague ✨ 👌

https://image.nostr.build/03554be2e0f2678d90abb49e991664579011c429ea81334e2d76dc5fd846245e.jpg


I like Czechia

https://image.nostr.build/5968bfe34445b91a0c25045c74f946b7796e2ac5b8da7a80c4ca42a256b0460f.jpg


You tagged them through the bridge. I like that.


Ditto's relay lets you filter events by the author's nip05 domain like this:

{ "kinds": [1], "search": "domain:gleasonator.dev" }


I tried deploying it on the free plan of Deno Deploy, but then people used it like a normal relay even though it isn't so it got essentially DDoSed.


I have 4x Ditto servers pointed to the same database and I don't do stat updates inside a transaction, so currently stats get inflated by up to 4x just due to a technical issue. Anyway enjoy the dopamine rush while it lasts.


Finally fixed the issue in #Ditto with apostrophes in mentions. It's kind of stupid that mentions are URIs, but oh well.

https://image.nostr.build/08f05f588b7637c679efa9cbdfd63b579b66380696f073de794b84c757c78d6d.png


Oh, he's referring to this post: https://njump.me/nevent1qqsz482rhd6pvtg6y8ddxv4dg8h57f9mrw0j6p39wpy47a2ny6q9rxczyqlhwrt96wnkf2w9edgr4cfruchvwkv26q6asdhz4qg08pm6w3djg6tjels


Ditto supports deletes. Refresh the page? I don't see it.


It was great to meet you! 🔥 Awesome experience 😃


In US supporting Ukraine is viewed as woke. In Europe Russia is "totally not that guy anymore who did WWII"


Being in Europe gives a new perspective on WWIII


It doesn't support chats. Maybe now that we're getting good encrypted DMs we can put it on the roadmap. 👀


Ditto is like a mini Primal. It does not read data from relays at request time. It works in the background to gather data from relays, then at request time it reads from its own database. When you publish it does publish to the relays in your relay list.


I was always a fan of nature documentaries, so it wasn't hard to get me watching dating shows.


As I ride the train to Prague, all I can think about is the little Czechia girl on 90 Day Fiance who moved to the United States, converted to Mormonism, and then cried "I vant to go back to Prague!!! 😭"


The blue spikes are clients getting rate-limited by my relay. 🤦♂

https://image.nostr.build/6f77be1454f45d199db1468865aa9879dd238ea4e47d22d6d0e82606c939c2d4.png


Poland is yellow here, but I see mixed messages from different sources: https://en.m.wikipedia.org/wiki/Developed_country


I lied, it makes coffee.

https://video.nostr.build/1d94b197374f3d9c530fe49dc173cbcadd7b053bb8f9b7374604d5b38abeea95.mp4


The guy is fixing it right now, so maybe it's still developing after all.


They say Poland is a "developing" nation, yet their train station has a fully articulated robot arm serving lemonade.


nostr:npub1yaul8k059377u9lsu67de7y637w4jtgeuwcmh5n7788l6xnlnrgs3tvjmf feature request: Nostr calendar that other people can use to schedule appointments with me, eg calendly


DM me @gleasonator


There is so much to do!


There's a great opportunity to name a Nostr project "Nostalgia" and I hope whoever does it uses it for the right project.


The spiders are wild in Warsaw. Biggest orb weavers ever.


Are you on Matrix or Telegram?


Yes, we can do a Jitsi voice call when I'm back in a non-Polish timezone in like a week.


cześć

https://image.nostr.build/8bd5be82c45da98600f94ec55f7241959b1d0e7111cee4092b3d1ce4c0871eca.jpg


Cheshch

nostr:note1875rrqncv3jjpjjtrf9ec6l2eq2tfhln5wtpfat298x6ndcgy78swd4t73


I think the pierogi crossed my blood brain barrier.


I brought this weird stoned out of his mind Mario knockoff in #Poland

https://image.nostr.build/d6f5cc6f9d7ea2baa1ec9eb2140628315fa87b222e9c22dd5d4e66f977914991.jpg


Yes.


Slava Ukraini

https://image.nostr.build/571e535c313cd86bce1098310a990fa87bf16acc2bca93cacffb8342dcac87d7.jpg


Try running with DEBUG="ditto:nip05,ditto:fetch.worker" and see if there's any useful logs.


In theory any nip46 signer, but the only perfect one right now is a command line tool called nak: https://github.com/fiatjaf/nak

Eventually I'll improve this situation, but Mastodon apps besides Soapbox are mostly a cool tech demo, so it's more of a side quest.


This is the only way such a thing would be possible, but I really don't want to do it because I think it defeats the purpose of Nostr.

I started working on a tool that individual users can use to migrate their own posts to Nostr with their own key, but I gave up when I realized all replies, likes, reposts, etc would have to be lost because you can't import other people's posts.


I run Ditto and Postgres on separate servers, because I point multiple Ditto instances to the same Postgres. Ditto itself should have 2 cores and maybe 2-4GB RAM. Postgres should probably have at least 4 cores. On the same machine you could probably do 4 cores, 4GB for Ditto+Postgres to start with.

You should absolutely bring your Discord people there, but I don't think it will replace it because there's no private group chat. Check 0xChat for that.


Just saw an edgelord wearing a Cannibal Corpse shirt in Poland.


We're ending in Amsterdam, but I would love to visit Madeira!


Traveling across the world, what the people build is different but Earth looks more or less the same.


DVMs are a request and a response, with optional status updates. It's like a long-running HTTP request on top of Nostr with status updates. It is very annoying to deal with unless you build an abstraction on top of it, basically a method like fetch() with an updates listener.


Witam z Polski!


Wild.

I think I just need to build a custom relay so it will scale better.


Yes. But I'm not sure which spam, because I'm already blocking a lot of it.


YouTube seems to have broken this on purpose. We implement OEmbed. YouTube also implements OEmbed, but they made it stop working. We can work around it, but we have to fondle the dick of Google a little, and hardcode special support YouTube URLs. It's on my to-do list.


I set up metrics for #Mostr. This will be very helpful.

Now I have to wait a few hours for them to populate. But my preliminary thought is that we have a suspicious amount of 404s, and I had to kick the relay to get it start producing events for the bridge again. So the strfry relay itself is a major problem of this bridge.

Also it's interesting that in both ActivityPub and Nostr, people write posts more often than they Like/React to posts, which goes against the conventional wisdom.

https://image.nostr.build/eb0211cf46cc255033c06d0e80695c94a1ded3c3f4452c5402fa488ce3bb329f.png


Of course. I think I could give a separate speech about only that subject.

1. Nostr is a different group of people, and already an established censorship-resistant protocol.

2. A little bit of fighting is good, as long as the network isn't broken by it.

3. Nostr is fundamentally an Independent's protocol created by and for Independents. Not custodying the keys is the most important choice I made.

I think there are major advantages to this design and you're underestimating how seamless it is to move between servers. You can use multiple Ditto servers (and regular Nostr clients) at the same time. Megalomaniac admins will still prefer to just use Mastodon.


If it's not for you it's all good, you're an "independent" like in my diagram. However I solved a LOT of technical problems while building this.


Anyone can apply to the creator program.

Eventually yes, I would like to make something self-service. One step at a time.


Yes. We're currently working on building a hosting service for applicants of the creator program.


This was an incredible speech. Your analogies are on point. 😂


I'm in a goddamn "American bar" in Lithuania! 🤣 🇺🇸 🦅 🎆

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


Yes, listen to this (starting at 5:00, ending at 7:00) for the story of how I got started at Truth Social:

https://tgfb.com/podcasts/thank-god-for-nostr/

nostr:npub1jlrs53pkdfjnts29kveljul2sm0actt6n8dxrrzqcersttvcuv3qdjynqn


Nope. If the post is like "/@:user/posts/:id" rewrite it to "https://mostr.pub/objects/:id"

I will improve fediverse interop soon.


You got it!


It is relays


Thank you!!! Thank you for your work making it happen! 🔥


100% I was also thinking we need a US meetup or conference. But Nostrami sounds like a meat product. 🤣


Fixed by nostr:npub1e6tnvlr46lv3lwdu80r07kanhk6jcxy5r07w9umgv9kuhu9dl5hsk9gqft https://gitlab.com/soapbox-pub/soapbox.pub/-/merge_requests/74

Thanks!


If you missed my speech on #Ditto at #Nostriga: give it a watch!

https://youtu.be/iZyqVGHjDGo


Egyptian cab driver in Lithuania just told me to vote for Donald Trump so he destroys America.


Please reach out if you need any help!


A big monkey in Lithuania.

https://image.nostr.build/971f67c0481c915c68db203f07f2debdda12aa256e31d4ef5ba62b6253c8e742.jpg


Thank you Jack! 🔥 ❤


Vilnius summit

https://image.nostr.build/0b1beaca4bbf91f855c21b35cec36a23920acf7a8aaa05fdf3a9a1101a830ae5.jpg


The solution to everything on Nostr is that we are a team of activists who will fight and never give up.

Not everything is a technical solution.


The first step is to not deny the problem but to acknowledge the problem. That's what too many people in this community can't handle. Because... BULLISH!!! 🤪


You are right, but the spread across different countries would require coordination between governments.


God bless Lithuania!

https://image.nostr.build/999d36eb8857dc63980f2077c97c2c0ff6b9f29ac0d749f1d6afeebf894c1ce5.jpg


No matter if you're born, to play the king or pawn, for the line is thinly drawn tween joy and sorrow!


Nosotros looks nice!


In Lithuania I started getting bit by mosquitoes for the first time on this trip, then it dawned on me, Riga Latvia does not have any grass at all. It has potted plants. But no grass.


If you ever feel bad that your Nostr project doesn't work right, it should inspire confidence that not a single Wix website has ever been good.

https://image.nostr.build/e61e7cb6e82a7938355452a9584a85e409c9a22eb6f64c798b841948881fb55b.jpg


Dilapidated "coexist" on top of a building in Lithuania

https://image.nostr.build/07ccdbf3f3ec3f8be3d09986147008cef80f879d2d35863b234c8954c82d6808.jpg


Hot air balloons in Vilnius, Lithuania!

https://image.nostr.build/22d8fbdec26fb8efc7bbd61ad587ea660b824f54018ccfe68e606fba6824dfdd.jpg


The problem is the part where you have to open a link to nsec.app as part of the login flow. This really should not be in the nips. It's a hacky workaround for the fact it's a PWA, and very difficult to surface to the user in some situations (like Ditto where this is happening in a backend as part of an http request).


I have not seen any Bitcoin romance novels, so I assume the OP is referring to Bitcoin tiddy girls, which I have seen.


It's buggy, and uses an alternative flow that was shoehorned into the nips and almost impossible for clients like Ditto to support.


The only nip46 implementation that seems to always work is nak by nostr:npub180cvv07tjdrrgpa0j7j7tmnyl2yr6yr7l8j4s3evf6u64th6gkwsyjh6w6

This proves it can work but I can't be telling people to run a CLI program.


Porn is not the same thing as a romance novel. I think you might be retarded.


...to 50% of the population while alienating the other half


One thing I forgot to mention in my #Ditto presentation is that people could implement other APIs besides Mastodon. If someone did the Telegram API we could make Telegram clients work on Nostr with small modifications to them. Even better to implement Matrix/Element, which could mostly work without modifications.


On the bus to Lithuania, a woman pulls up a Facebook reel that says "Places That Don't Seem Real". She goes to share it, and in the comments it says "They don't seem real because they're no-" but she ignores this and shares it anyway.


I saw a suspicious looking purple tent in rural Latvia and my mind filled in the rest.


People say censorship resistance is not a winning argument. Well, I think it depends on whether or not people are getting censored.


Get the clowns on Nostr. clowns.social Ditto server


Driving past a clown settlement at the border of Latvia and Lithuania.


This is correct.

I also think it would be great to see traditional forums on Nostr, mainly because we could move so many legacy communities over. Movie Forums, Smash Boards, even Church of Satan forums! For now I'm hoping to get these people on Ditto servers, but I get why people like forums.


The Grim Reaper dual wielding katanas lighter only available in Riga, Latvia.

https://image.nostr.build/9384e6eb0b47d94f4ca68bd96cadadbc9c97d19c5fe83ab7be8a0e3c234f159a.jpg


GM. My eyes are red but my heart is orange.


Went to Eastern Europe once and already have Red Army Choir stuck in my head.


GM nostr:npub180cvv07tjdrrgpa0j7j7tmnyl2yr6yr7l8j4s3evf6u64th6gkwsyjh6w6


Good luck! Latvia was awesome. Glad you could join us!


Self-hosted or? What URL?


I control the key. It's one key and the subkeys are derived from it at runtime.


Kamala Harris still has no official platform on her website and that makes me slightly mad. https://kamalaharris.com/


Mostr is running again. I've been neglecting it to work on Ditto, but soon I will spend a few days updating it and making a nice Grafana dashboard so I can monitor it better.


Only in Riga, Latvia

nostr:note1uukrh99ughgh8nnhszqqhwezmk4kmfqdqqrdd7hcrn9mqls5vcesw3dmr2


How dare you put bacon in my vegan photo. 🙅


Yes. It's getting attacked. As soon as I get home I'll add metrics to it and figure out what's happening.


nostr:npub1gujeqakgt7fyp6zjggxhyy7ft623qtcaay5lkc8n8gkry4cvnrzqd3f67z nostr:npub1sg6plzptd64u62a878hep2kev88swjh3tw00gjsfl8f237lmu63q0uf63m #Nostriga !!!

https://image.nostr.build/e0cb6ba1b7c00a32bf2b1a95b812c83c0f87c08e74901e9d61c45597bf258116.jpg


Riding scooters in #Riga with nostr:npub1gujeqakgt7fyp6zjggxhyy7ft623qtcaay5lkc8n8gkry4cvnrzqd3f67z and nostr:npub1jvnpg4c6ljadf5t6ry0w9q0rnm4mksde87kglkrc993z46c39axsgq89sc !

https://image.nostr.build/8e66750333dc2d0ab4868e1b2fd64a3b6c8cc5fb35d4548993b717534f111ff4.jpg


The bathrooms at Fantadroms are basically a violation of human rights.

nostr:note1adhwmjv85xrhemm3l8djwj32e2pexk3lq9x8dazxnfahwsdjm5mqfr6wt0


Russian hackers are attacking the bridge and I don't have time to deal with it right now.


Someone is going to run this in production.


Space monkey.

https://image.nostr.build/6b409d364ec89495e01b44cd771ce79919cdfd59fe256f9c761d80d9091855ca.jpg


#Nostriga is looking awesome!

https://image.nostr.build/1c9d4ed3a66d8728457801c3067eaa2e3c1c3f372a542e172783a663a91f8270.jpg


GitLab issue please


The Riga airport is like if IKEA was an airport.


Can't do anything about it in the air


Nostrbros unite at Frankfurt airport! nostr:npub16c0nh3dnadzqpm76uctf5hqhe2lny344zsmpm6feee9p5rdxaa9q586nvr nostr:npub1j8y6tcdfw3q3f3h794s6un0gyc5742s0k5h5s2yqj0r70cpklqeqjavrvg nostr:npub126pll3ll3fej2egnt2k4dn0ljn46ekdxzmgnzwh23t2g53rtl6vs5ca7vm nostr:npub1zga04e73s7ard4kaektaha9vckdwll3y8auztyhl3uj764ua7vrqc7ppvc nostr:npub1ds3hmzemzgp9rsuvyvxqdk0y3uxnq9m903dktjxrvyfwk9w99t4sc2hzcn

https://image.nostr.build/ca0a9db642f6b1345a8a8893ffc364c28ccb17f91874eeb40583afe683719987.jpg


Flying over Germany, looking down at all the little cottages thinking, these are the guys that started WWII???


This looks pretty good.


Nostr's Best Moments

nostr:note1rxrhcgwn0haett5mcn5t3vfjprtschwmd9z3x49akfmanwf2a0tqjkprfg


Surprised how many Germans are flying to Germany. I thought people only fly to Frankfort to fly to other places.


My vegan meal on Lufthansa is labeled "Jain Meal". Think I'm going to start a cult in India after this.

https://image.nostr.build/35084322d8795b3a9646cc3d00c015088bd62b687f90745011cdd0646c046a70.jpg


Open an issue in Primal to add imeta tags.


Bab changing st. All gender.

https://image.nostr.build/25bd16b900e499d75981bdf4a52e67ba386e639a72751afbec56473ff19be71d.jpg


The clients aren't adding metadata for the attachments. We have to letterbox to prevent the feed from jumping.


The server is extremely slow and I don't know why.


I guess so. I am rebooting it.


Probably a wise choice.


I want to catch em all.

https://image.nostr.build/f94f9b891cdcd2ceabf32126c6ca2e1d177082faadff6f9a1db9b425c882336e.gif


I hate that they do this. scum of the internet.

https://image.nostr.build/375c7fdfb0ac585c911608a2c4be8c7509095122f492308774e5c92d0fc646d3.png


I don't think any embedded database will work, like I originally hoped. Because JS is single-threaded and it gets absolutely destroyed in a single thread. We could do a lot of work to try to improve performance, but it will never be as good as Postgres.


>Scientists research man missing 90% of his brain who leads a normal life

What the heck? How is that possible?

>These scans of a French man's brain

Oh ok.

https://www.cbc.ca/radio/asithappens/as-it-happens-thursday-edition-1.3679117/scientists-research-man-missing-90-of-his-brain-who-leads-a-normal-life-1.3679125


Lol

https://image.nostr.build/4639edff5537aedac451fcad15df4daa17018d9a28edbe9adf08fbd68526ce6a.jpg


During who's season? 😂


Can we get a dog?

https://video.nostr.build/0497865943fe9d40e60ca7866dbe13842ca331759c01d223748c7cb2787d6027.mp4


This is probably the greatest food that India ever produced.

https://image.nostr.build/00394ca9e631760947c1cda6748fec5d37613c4297dfe716a36442f38819f4f2.png


Honestly, maybe we need to bring forums back.

https://image.nostr.build/c7a7a5d2cf6c082643aa6d443dd5e3a20856c9c05adb4ff566d63398b867158f.png


This is peak Gleasonator, 2009.

https://image.nostr.build/2931a05ed4507c86fbf787bb3faddd4954abdb6f8c053552dd81425124710c24.png


You should have nostr:npub1xtscya34g58tk0z605fvr788k263gsu6cy9x0mhnm87echrgufzsevkk5s run this on the damus relay:

apt install goaccess

wget https://download.db-ip.com/free/dbip-country-lite-2024-08.mmdb.gz

gunzip dbip-country-lite-2024-08.mmdb.gz

goaccess /var/log/nginx/access.log -o report.html --log-format=COMBINED --geoip-database=dbip-country-lite-2024-08.mmdb

This will give you a portable html file report with a full region breakdown pulled from nginx logs.

https://image.nostr.build/5a1ab6182bf50ca2976facaeb93b2fad0db33cb8dc31ee9addf90a84621c5213.png


Lot of fuckers from France in both cases. Oui oui 🥖 🇫🇷


Here's gleasonator.dev and ditto.pub

https://image.nostr.build/0f10af7f133a1d480ce6795cbe4213188d76b05fe3e182cffd4409459e6ba210.png
https://image.nostr.build/1577c534b47df890061709427d61c5a45755b47aad8efa5532a58fac7bcf6969.png


Only way is to run a relay and geolocate IPs from requests, but you'd have a small sample size and lots of false positives. I think relay countries is a better indicator. I can give you stats from my servers, one sec. Not sure how helpful it will be.


nostr.watch has relay country


Try getting it from relay.nostr.band instead. Sometimes I have to wipe the Mostr relay. This seemed to work:

nak req -k 0 -a d289dd9064d34695e7e46cf3f0d9e5317be2ebd36c0b79652fe0e7976937af7b relay.nostr.band | nak event freespeech.social/relay


That's cursed but I respect the hustle!


Ditto supports IPFS media attachments: https://docs.soapbox.pub/ditto/media#ipfs


The pictures came in out of order


You need a nip05. Go here. Fill out the form.

https://image.nostr.build/3938b09bb31e788ff6bcfaa374a2af90ec09f42a02180b5fbedfdda58ed62fa6.png
https://image.nostr.build/50d3ff4de0d8505e071417a4ee9273ede56c3e13f9d850ca1a2a5d205a69876a.png
https://image.nostr.build/5bd80335fcc0811bf36f91f9eda29bf4e06c2c7b068e545888ee9849dfdc8613.png


Nice!!

To set the color scheme, make sure you're an admin then go to "Dashboard" > "Soapbox Config" > "Edit Theme"

To set the site name and tagline (this is weird), look inside /opt/ditto/.env and copy the DITTO_NSEC and log in with it, then go to Edit Profile and set the display name and bio. Later I'll make this a separate screen so you don't have to do that. Also, it might not work due to a recent change I made to the code. 🤦 You might have to run `nak -k 0 --prompt-sec event freespeech.social/relay` first to create an empty profile event, then you can edit the profile. We're still early.


When I need to write a test post, I've stopped writing the word "test" because then you get a bunch of people saying "it worked!" But they didn't even know what I was testing. So now I just write "yolo" and that results in comments like "Debatable ☺", which I prefer.


Who do you play in Smash Bros?


I would fight a New York subway rat for a slice of vegan pizza.


There is no "if it works or not", you have to fight for it.


I fixed the problem in Ditto where you can accidentally overwrite your follows/profile. Now it just throws if you try to create a new replaceable event and there's no prior event. You have to use a backchannel to create a one. Will improve that UX later.


yolo


I opened a PR to Alby: https://github.com/getAlby/lightning-browser-extension/pull/3226


cornychat feed on #Ditto! nostr:npub1yx6pjypd4r7qh2gysjhvjd9l2km6hnm4amdnjyjw3467fy05rf0qfp7kza

https://ditto.pub/timeline/cornychat.com

https://image.nostr.build/98ea3db8593972d037878acb057c4b8a78c45f026b2576a3d7473c3702800d6a.png
https://image.nostr.build/cb95f3c4558f09eb89703d8af7074599dd2a22b2224a2525d2edf2b7534750f2.png


Secure Cloudflare with UFW

https://habla.news/a/naddr1qvzqqqr4gupzqprpljlvcnpnw3pejvkkhrc3y6wvmd7vjuad0fg2ud3dky66gaxaqq8xxmr0w4jxvmrpwfjj6atxwuneukw5


Cloudflare is controversial among FOSS/decentralization enthusiasts due to its reliance on a centralized third-party. But if you're going to use it, you should at least use it right.

By default, Cloudflare intercepts DNS traffic, but does not protect your webserver at all. This means anyone with your server's direct IP address can still attack it. Attackers might be crawling all IPs, or they might be able to figure out your server's IP if it makes outgoing requests.

When you use Cloudflare, requests should only be coming from Cloudflare's upstream IPs: https://www.cloudflare.com/ips/

Therefore, you should block traffic from all IPs by default, and whitelist only Cloudflare's IPs for the best protection. UFW is a firewall that comes installed by default on most Linux distros, so you only need to configure it.

## Default rules

First configure ufw defaults, so that outgoing requests are allowed and incoming requests are denied by default.

```sh
ufw default deny incoming
ufw default allow outgoing
```

## Allow ssh

Next enable ssh so you can still shell in from anywhere.

```sh
ufw allow ssh
```

For extra security, you should also edit `/etc/ssh/sshd_config` and set `PasswordAuthentication no` so only login by key is supported.

You can also whitelist certain IPs for SSH, but you can accidentally lock yourself out this way. For most sites I run, I find this is good enough security (as long as something like [Heartbleed](https://en.wikipedia.org/wiki/Heartbleed) doesn't happen again).

## Enable UFW

Now you're ready to enable UFW. Your SSH connection should stay intact since you allowed ssh, but this will block all incoming web requests. If you're doing this on an existing production webserver, delay this step until the very end.

```sh
ufw enable
```

## Whitelist Cloudflare IPs

Next we allow traffic from Cloudflare's upstream webservers. This will allow our website to work normally as long as requests go through Cloudflare first, essentially blocking any sort of direct attack on the webserver.

Cloudflare IPs are taken from: https://www.cloudflare.com/ips/

```sh
# ipv4
ufw allow from 173.245.48.0/20 to any port 80
ufw allow from 103.21.244.0/22 to any port 80
ufw allow from 103.22.200.0/22 to any port 80
ufw allow from 103.31.4.0/22 to any port 80
ufw allow from 141.101.64.0/18 to any port 80
ufw allow from 108.162.192.0/18 to any port 80
ufw allow from 190.93.240.0/20 to any port 80
ufw allow from 188.114.96.0/20 to any port 80
ufw allow from 197.234.240.0/22 to any port 80
ufw allow from 198.41.128.0/17 to any port 80
ufw allow from 162.158.0.0/15 to any port 80
ufw allow from 172.64.0.0/13 to any port 80
ufw allow from 131.0.72.0/22 to any port 80
ufw allow from 104.16.0.0/13 to any port 80
ufw allow from 104.24.0.0/14 to any port 80
ufw allow from 2400:cb00::/32 to any port 80
ufw allow from 2606:4700::/32 to any port 80
ufw allow from 2803:f800::/32 to any port 80
ufw allow from 2405:b500::/32 to any port 80
ufw allow from 2405:8100::/32 to any port 80
ufw allow from 2a06:98c0::/29 to any port 80
ufw allow from 2c0f:f248::/32 to any port 80

# ipv6
ufw allow from 173.245.48.0/20 to any port 443
ufw allow from 103.21.244.0/22 to any port 443
ufw allow from 103.22.200.0/22 to any port 443
ufw allow from 103.31.4.0/22 to any port 443
ufw allow from 141.101.64.0/18 to any port 443
ufw allow from 108.162.192.0/18 to any port 443
ufw allow from 190.93.240.0/20 to any port 443
ufw allow from 188.114.96.0/20 to any port 443
ufw allow from 197.234.240.0/22 to any port 443
ufw allow from 198.41.128.0/17 to any port 443
ufw allow from 162.158.0.0/15 to any port 443
ufw allow from 172.64.0.0/13 to any port 443
ufw allow from 131.0.72.0/22 to any port 443
ufw allow from 104.16.0.0/13 to any port 443
ufw allow from 104.24.0.0/14 to any port 443
ufw allow from 2400:cb00::/32 to any port 443
ufw allow from 2606:4700::/32 to any port 443
ufw allow from 2803:f800::/32 to any port 443
ufw allow from 2405:b500::/32 to any port 443
ufw allow from 2405:8100::/32 to any port 443
ufw allow from 2a06:98c0::/29 to any port 443
ufw allow from 2c0f:f248::/32 to any port 443
```

## That's it!

Now your server is protected from direct IP traffic, and requests must go through Cloudflare.

This is a long form article, you can read it in https://habla.news/a/naddr1qvzqqqr4gupzqprpljlvcnpnw3pejvkkhrc3y6wvmd7vjuad0fg2ud3dky66gaxaqq8xxmr0w4jxvmrpwfjj6atxwuneukw5


Thank you!!


pubkey.bar feed in #Ditto! nostr:npub1aeh2zw4elewy5682lxc6xnlqzjnxksq303gwu2npfaxd49vmde6qcq4nwx nostr:npub1key55ax33gkl50uqemvl4khrtqrhzm7wzpc7fhseutt5ddkcwcrqgxlt3h

https://ditto.pub/timeline/pubkey.bar

https://image.nostr.build/4a5d3da2dc90cf1a7880c8113dc6066c3e9f34d088f8b2deb06571c55510605c.png
https://image.nostr.build/c5199d2f81d7169adef151a784701074e48b9176d1a3845eda8ca7caaa3bc293.png


Thank you!! I completely reworked the database. Now it's optimized for Postgres and uses a jsonb column for tags, making it much faster.


coracle.social feed in #Ditto nostr:npub1jlrs53pkdfjnts29kveljul2sm0actt6n8dxrrzqcersttvcuv3qdjynqn

https://image.nostr.build/eb861f5f430e04489f7b39f215748663bc293c098315650f7d2290d49a425de2.png
https://image.nostr.build/f746303939f0ab583a573f607760885fa51a81400c327840c8bf6aaefc893691.png


Good idea, I could add tabs to let you switch between them.


nostr:npub1vp8fdcyejd4pqjyrjk9sgz68vuhq7pyvnzk8j0ehlljvwgp8n6eqsrnpsw stemstr.app is all you buddy. #Ditto

https://image.nostr.build/d7a304c903257f640ec1014002072ad17b6798dc39e71cdb678c6bb479c19e94.png
https://image.nostr.build/709ae1679771928d8f5c4dddd3b0795e99e0f0b133ebdab4bc133767d7e8fb67.png


Nostr Plebs feed now live on ditto.pub and gleasonator.dev nostr:npub18ams6ewn5aj2n3wt2qawzglx9mr4nzksxhvrdc4gzrecw7n5tvjqctp424

https://image.nostr.build/0323813711a0fe5e974df0ec8e866f32721c19f70018dac2d95f8eca66992f38.png
https://image.nostr.build/552c432da74cfdebc15c034f09c50d315400f27f183971514d9581a2a292f83b.png


Database? Who needs a database when you have an LRU Cache? https://gitlab.com/soapbox-pub/ditto/-/merge_requests/461


I think you will be interested in my Riga speech. 👀


jsonb columns. Performance was so bad until I reorganized my database around Postgres-specific features.


Nice!!


Next version of Deno will support pglite. 🤯 If the performance is acceptable, I want to drop SQLite support in #Ditto and switch to pglite for local development.

https://github.com/denoland/deno/issues/25028#issuecomment-2293856707


The SQL standard from ISO is really bad. They introduced a JSON syntax that goes against what everybody is already doing, and they still haven't added a standard upsert syntax in decades. Postgres, MySQL, and SQLite need to form a working group with the W3C to make SQL a web standard.


events.jsonl: the Nostr interchange format
 https://njump.me/naddr1qvzqqqr4gupzqprpljlvcnpnw3pejvkkhrc3y6wvmd7vjuad0fg2ud3dky66gaxaqqxx2an9de68xtt2wdhkumqajfqqc


Nostr events are transferred between clients and relays over WebSocket, but that requires servers to be online. A universal file format is needed to store events for backup and transfer between people and systems.

[JSONL](https://jsonlines.org/) is a simple format that stores one JSON object per line. This is ideal for Nostr events, and is already compatible with a bunch of existing tools including [nak](https://github.com/fiatjaf/nak), [strfry](https://github.com/hoytech/strfry), and [Ditto](https://gitlab.com/soapbox-pub/ditto). It is memory-effecient because only one line needs to be processed at a time, and it is universally compatible because it's just Nostr events.

## Storing Events

JSONL files should end in a `.jsonl` file extension. Each line should have a complete, valid Nostr event.

```sh
# Example storing jsonl events with nak
nak req wss://ditto.pub/relay > events.jsonl
```

## Importing Events

You can `cat` a JSONL file to stdin of various programs.

```sh
# Example importing jsonl events with nak
cat events.jsonl | nak event wss://ditto.pub/relay
```

## Filtering Events

Use the `jq` command to filter down an JSONL file.

```sh
# Get only kind 0 events
jq -c 'select(.kind == 0)' events.jsonl
```

You can filter before importing:

```sh
# Get only kind 3 events then import them with nak
jq -c 'select(.kind == 3)' events.jsonl | nak event wss://ditto.pub/relay
```

Or filter while exporting:

```sh
# Get all events and then post-filter them
nak req wss://ditto.pub/relay | jq -c 'select(.kind == 3)' > events.jsonl
```

Of course you can chain many shell commands together to do all sorts of useful things!

## Sharing Events

JSONL events can be shared on cloud services, compressed, emailed, transferred with rsync, or any other method. Another powerful method is to host the file on an HTTP server, allowing users to `curl` it and pipe it directly into other programs.

## Suggestions to Relay and Client Developers

Relay and client developers should allow users to export/import events from their software in JSONL format.

For relays, since the public interface is often restricted, relay software should add direct import/export of jsonl. That way relay operators would be able to shell in and run a command to get events in jsonl, and to import from jsonl. Ideally these commands would use stdin and stdout so they can be piped to other commands for filtering or direct transfer.

Clients should also offer an import/export screen inside the app in jsonl format. I would suggest a separate export of all "your" data, and another one for all cached data.

## Usage With Existing Tools

Here are examples of how to use JSONL events with some existing tools.

### nak

Change the relay to your desired relay. Try `nak help req` to see all the available filtering options.

```sh
# Export
nak req wss://ditto.pub/relay > events.jsonl

# Import
cat events.jsonl | nak event wss://ditto.pub/relay
```

### strfry

See strfry's [README](https://github.com/hoytech/strfry#importing-data) for more information. `--since` and `--until` flags are supported during export.

```sh
# Export
./strfry export > events.jsonl

# Import
cat events.jsonl | ./strfry import
```

### Ditto

```sh
# Export
deno task db:export > events.jsonl

# Import
cat events.jsonl | deno task db:import
```

events.jsonl: the Nostr interchange format

This is a long form article, you can read it in https://habla.news/a/naddr1qvzqqqr4gupzqprpljlvcnpnw3pejvkkhrc3y6wvmd7vjuad0fg2ud3dky66gaxaqqxx2an9de68xtt2wdhkumqajfqqc


The man who designed the website for JSONL (https://jsonlines.org/) is named Jason Long. His name is literally Jason L.


Very interesting gender.


Blocking porn hashtags if the post also contains an attachment or link, blocking posts with "t" tags with no matching hashtag in the text, and finally posts where the "t" tags aren't all lowercase. This blocks the majority of spam.


Almost a reality: people with NIP-05's get a favicon by their name. Click it to open their domain feed. #Ditto

https://image.nostr.build/8a9e4e46b94c46afc13606d6dc3644e64fc60e2c44f23e9e2be145530d237899.jpg
https://image.nostr.build/d797eea4b778123cd3aeb374bb54013eb71dc72240d7226ec1ef77855f85771e.png


events.jsonl is the ideal Nostr archival format.

It's just one Nostr event (JSON object) per line.


Don't let your memes be dreams: https://github.com/nostr-protocol/nips/pull/1428


> 'こんにちは'.toLowerCase()
"こんにちは"

Seems fine


I thought we decided in the NIPs it should be lowercase. But I can't find it now.


I am a client and relay, can't afford to store 2 versions of every event.


I was just looking at it. You answered my question of what kind 9802 was. I should display this better in Ditto.


You running a relay?


The tags in text can be #AnyCaseYouWant, but the "t" tag in the Nostr event data must be lowercase.


The horror!!


Bitcoin


"Web of Trust"
"Rate Limiting"
"AI Curated Feeds"

My guys, all you need to do to stop spam on Nostr is block hashtags. I'm serious.


If I knew I would tell Jack Dorsey to delete them off Nostr.


Steamrolling y'all mothafuckas.

nostr:note1dpy8uek38qqtc5frzf77hnhtsw0xyerpatfldm3gk0jq2sspjt7q3ykm5j

https://image.nostr.build/4913feac2fcc58a67c0c5442f42b0e34ff8c1b603bc76029935269923933514a.png


I am going to just start rejecting events that include uppercase "t" tags on my relay.

nostr:note1dpy8uek38qqtc5frzf77hnhtsw0xyerpatfldm3gk0jq2sspjt7q3ykm5j


nostr:npub17s0e4xf099huc78skpk267pvaf0rmm558w4d303e570uayapl68qryfadk stop this nonsense right now.


Dude, please include one "bitcoin" t tag, do not include "bitcoin", "Bitcoin", and "BITCOIN'. I will find out where you live.

https://image.nostr.build/6228438c9130d0179b108d09f184dc3ab974d7a982891034c8c959fe65fbf7ca.png


To protect the world from devastation,
To unite all peoples within our nation,
To denounce the evils of truth and love,
To extend our reach to the stars above...


They probably did this in Twemoji 15+, which they have since moved to closed-source so other people can't use them.


Whoops, I think that should be disabled for now. I am merging this to disable it: https://gitlab.com/soapbox-pub/ditto/-/merge_requests/457

The intention is for it to be fully configurable with an admin UI. By default it shoulod split to the admin and a smaller amount to Ditto. The admin UI will take a few more weeks to develop though.

https://www.figma.com/design/yV6D4PbVb9pKPsEmn5q2AL/Zap-Split?node-id=0-1&t=hKs4zKRqlI7W51X9-1

cc nostr:npub1e6tnvlr46lv3lwdu80r07kanhk6jcxy5r07w9umgv9kuhu9dl5hsk9gqft nostr:npub1gujeqakgt7fyp6zjggxhyy7ft623qtcaay5lkc8n8gkry4cvnrzqd3f67z

https://image.nostr.build/dfe04ec6dd053703c09e7d29ef20f160c663ba9355fe5a1f39e5d7e333d7d456.png


Microsoft Corporation just singlehandedly destroyed millions of dollars of developer productivity and as the clock is ticking it's like stacks of money are on fire.


GitLab doing just fine.

nostr:note1jdj26flr0j9xlyy7hayfwpa87del6z008hjpv79enrwatyqymgwsjdrm0p


Good point 😂


These self-driving death traps on wheels need to at least be open source so we can share the responsibility as a society when it kills someone. https://www.reddit.com/r/mildlyinfuriating/comments/1ertef9/self_driving_waymo_cars_honk_at_each_other/


Very true king.


This has been an issue on the Fediverse before Nostr existed.


The idea that you "can't delete stuff on Nostr" is a misdirection about what Nostr actually is. Nostr relays are just independent web servers. You absolutely can reach out to a relay operator and ask them to delete your stuff from their relay, as you can with any other website. In some jurisdictions they are legally obligated to do this. Kind 5 deletion events just automate this process. When people say "you can't delete stuff on Nostr" they mean you can't easily automate the process because of the same problem Outbox Model aims to solve, and/or that there are jurisdictions where relay operators don't have to care or choose to ignore you anyway. However this is not actually different or special from anywhere else on the internet, except that maybe on Nostr your content can travel to more places faster to begin with. It's not really an excuse not to try. When you delete stuff on the Fediverse, it gets removed from 99% of places automatically because the developers have decided to try instead of resigning themselves because "it's too hard" or will "never be perfect anyway".


This Reddit update is for sure the fault of some incompetent project manager, but they will blame the developer.

https://image.nostr.build/96c93c7d1bab0708f52a14d81914bdedce158ac330c6f6f802ebdbb5ad40d250.png


Hopefully the performance is better too.


People will think twice before reporting security vulnerabilities. Mentality of somebody who wants to get hacked.


Nice!!


That's amazing 😂


#Ditto admins: another big database migration: https://gitlab.com/soapbox-pub/ditto/-/merge_requests/453

This one uses a jsonb column to index tags, which works way better that what we did previously and saves a lot of space.

gleasonator.dev, ditto.pub, and henhouse.social have all been updated.


Beautiful. But why? Whose script?

https://image.nostr.build/d5ca29f9a470112654d4a229b25eea35496717c10e051bbc926a7199768e66aa.png
https://image.nostr.build/0609c40a8f9aef3205678985d06d516b4529ca01f6bddced69e0d61e9d427839.png


hello


Oh yeah. We have those too, they are absolutely gigantic. It's surprising.


He did it!

https://image.nostr.build/2bdd0b42ae2d47dd19055c41363bcd7c77839d4df75e3cfe503429f60ef42c88.jpg


I fixed your profile manually. Other events incoming-

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


Cicada emerging from its shell on my garage.

https://image.nostr.build/8c75ab2a1f94ea97ff9c791312236ac42bd9d9e81d1c2c9fe0a31bce6d84a591.jpg


Switched gleasonator.dev to a new database with a special postgres shema for improving performance of tag queries. Importing old events now. 🤞


Yes I switched the database. I'm importing old events now, may take a few days.


testing


Finally got reads working fast, now writes are impossibly slow.


This is how it looks on my end:

https://image.nostr.build/6f5b1117fefc00c0a386f1aa7f7f6f38b11094db07a58b97acdbc135feb5f37d.png


Hitler died in 1945, yet I wonder how many people in the world have said the word "Nazi" in the last 5 seconds. I believe it's a constant stream of "Nazi Nazi Nazi"


Does anyone have a Blue Eyes White Dragon?


#Ditto will promote creation of a lot of new relays. I'm taking performance seriously.

nostr:note1wnc0wqz6he5dqan58u2v9uccr53fgljtdxpj58653l3mdlz20vaq7l3vg7

https://image.nostr.build/4f9d53141fb89717e6f97b7ac15f29986518e4b8682c6c8fc648f7f3a69b8942.png
https://image.nostr.build/95de0763347480258af1fe23d27bd01d7ab6ac656b564af03d2f5303aec21c1a.png
https://image.nostr.build/394199c5af9167db8f49a56b911895c62a52909b115ee4fb837727e054350dd8.png


Check out gleasonator.dev to see what it's supposed to look like. You might have some sort of firewall/proxy/outgoing fetch problem.


HTTP imports paved the way for URI imports like npm: and jsr:, which is still an awesome solution.

I don't really think the downsides with HTTP were so bad though. People just weren't ready for decentralized coding, so to beat Bun and Node, Deno has to bridge the gap. It's a little unfortunate because I think Deno is ahead of its time. Issues like semver could be fixed by proposing a standardized URL format for HTTP modules.


Deno workspaces are so good. I reworked Nostrify into a monorepo to break things apart if they have external dependencies. The "core" library is actually @nostrify/types now.

https://jsr.io/@nostrify


Check: https://docs.soapbox.pub/ditto/install

To try one, use https://ditto.pub or https://gleasonator.dev


Link previews working in #Ditto!

https://image.nostr.build/ad64488d7e7a99172ba66460cf48ca3bbd3e17d153780baff620b8cce2e92d9a.png


Sengi with #Ditto works!

https://image.nostr.build/ad3179360384b3d977b8e28792eff24cbd79bd9521f42ef2451ac6b021925daf.png


The tiny mosquitoes are the worst.


nostr:npub1gcxzte5zlkncx26j68ez60fzkvtkm9e0vrwdcvsjakxf9mu9qewqlfnj5z visit Mr. Stallman one last time.


Oof! That hurts. I have fond memories of that place. But it probably makes sense in the 21st century to not have an office.

https://image.nostr.build/2e9b09f6630efee6ca47247c4c34342da45840889aa7adf7cd974e7532bc3ec6.png


I stand by that she used the word racists. But it wouldn't let me rewind to check.


Pretty sure I heard the announcer lady say "they are proud to be racists" of the Olympic runners.


This is a good idea.


I've lived in Texas my whole life and I still want to live in Massachusetts.


I added a semaphore between the firehose and pipeline to flatten out requests to my database, and this is a perfect example of it working. Basically that the green line is shorter and wider than the blue line. I should probably decrease the semaphore size even more. #Ditto

https://image.nostr.build/984da20ffe50ab8e3c045db313551db90cb332dc5e132de1c81cb6cb7564fe62.png


I tried the cloud-hosted Alby Hub. It's nice, but I want to be able to onboard other people, especially people on my team, so we can develop Zap features on Nostr. I think a Team account would go a long way to improving this.


That's annoying. But it was never very good. Vite is the best way at the moment.


KYC sucks and is harming Bitcoin. But it's a UX problem that can be solved for 99% of people. It is even possible for non-custodial Lightning to have a UX that's acceptable for mainstream users?


A spectre is a ghost. Spectacular means hauntingly good. And a specification is something that isn't real.


Everyone talking about Bitcoin privacy is wrong. The public ledger is not a bug, it's a feature.


I've been thinking about how Lightning was designed for payments, but for donations (zaps) we don't need some of its defining properties:

- instant. It doesn't have to be instant. It just needs to pay out within a couple weeks. We can still have instant gratification - a promise of it - but you don't need the ability to spend it instantly.

- foolproof. This is a donation, not an exchange for goods or services, so there's no reason for someone to double-spend. And if they do, oh well, it was a donation anyway.

So my first thought it, for zaps, instead of Lightning why don't we just send regular Bitcoin with very low fees? You should get it eventually, and in the wallet UI we can show it instantly with a "pending" state.

Though I'm told this won't add up, and low fee transactions will be dropped. I don't know. Someone should investigate the lowest fee transactions that do eventually succeed to see if it's viable.

Basically I'm wondering if we can use Bitcoin directly and just work around it as a UX problem.


The vision step is for sure more of an art. The "making it work as good as possible" step is a science.


Sad. I tried

https://image.nostr.build/c7d7d70b260b87e5b139d3b53e87bbfb05189d7fad2139c1e5a6b5630f82f606.png


People in the comments saying I'm wrong aren't offering any solution. Give me an open source, custodial wallet that "just works" without requiring me to self-host something or pay for something.


I know it's bad. I'm working on redoing it again with a jsonb column. 🤦♂  At least notifications work now.


Miyamoto knew so much.

https://image.nostr.build/b5aee552aadd2eba303fb505e31693f803fdda450ea2f499875a7109f6d1b2ad.jpg
https://image.nostr.build/c4e405155848bc39bcfc5ee5d7c96f13d0f6676c26e8d9b09a29daecd731fccf.jpg


Good point.

https://image.nostr.build/def6ab4fd860baf5cde5387656b19949a5dd9adf5456aeb4761843b231dfe2c4.jpg


Fucking up the production database, please be patient


Has anyone built a Nostr relay with Cassandra for the database?


Yes, there's a migration that could take 2+ days to complete. Just leave it on, and check it with journalctl. In the meantime you can try ditto.pub. Thank you for being an early adopter of my software. I think this won't be the first migration like that. I'm still sorting things out.

Actually if were you, I'd revert to an older commit and then delete the row in kysely_migrations table for the failed migration. And stay off develop until I sort this out. So you only have to deal with this once, later.


hi


I've very tired of everything being cutting edge. I need to use at least one old thing or I'm going to lose it.


Convert IN operators to = ANY() operators on Postgres

https://gitlab.com/soapbox-pub/ditto/-/merge_requests/439

https://image.nostr.build/eca8a5d418a2037b12e23e25896388f574ae2b897b6488806eb509fa23222f84.png


Been feeling frustrated by the lack of high quality database libraries in TypeScript.

Then I discovered that Postgres ITSELF does not support query cancellation properly:

"Query cancellation works by opening a new connection [...] That means there is no guarantee that the query will be canceled, and due to the possible race conditions it might even result in canceling another query."

You cannot actually cancel a query. You can only cancel a connection. 🤦 Race conditions are inherent to the design.

Wow! Postgres sucks. How is it so popular? MySQL is looking better and better. It's like the bell curve meme with Postgres in the middle and MySQL on the outside. Nothing is ever easy, everything is hard.


Osama was a gamer.


Grafana lets you add links into your graph, so I can make it easy to see what different Nostr event kinds are displayed.

https://image.nostr.build/bb866aafd72756aceec2e86c1ed5c1bdcd8437df1ce6f524a2421505162687d5.png


Is Cashu an alternative to Lightning or works with Lightning?


Can't believe I'm still fighting with database performance. I'm in denial. Squarely into week 2.


Is "mints" a shitcoin? Every time I hear this term I get a headache.


Lightning is in a very sorry state. Alby is the only thing that works, but when even Alby doesn't work there is no alternative. LightningTipBot was the only thing until it shut down. Is there any other option? We have dozens of clients with zap support but users who can't access it without getting a PhD in Lightning.


I'm considering building an API and dashboard directly into Soapbox.


I need a pg_stat_statements GUI


I think I finally fixed tag queries in Ditto. 👀


hello


Did you check either of those before posting?


If I delete it now it'll just look worse.


Michael Saylor told me to do it.


I think so.


Dripping pickle juices all over the ground in front of a rural Texas Quicky Mart.


Seeing Donald Trump in person is very different from seeing him on TV.  It's more obvious that above all he's an entertainer. He's a man named Donald Trump playing the character of Donald Trump, and he knows it. It's like he's doing a standup act, and listening to the crowd to see how his jokes hit, and adjust his speech accordingly.


Probably for being a Trump bottom feeder and doing this: https://youtu.be/FaGb5ooswYA


He's a spokesman for Rumble, and Rumble is full of shit. They did nothing to change anything, they're just a different king, but they use words like "decentralization" as if our work doesn't exist and they're the first to ever think of it.


The admin account has no avatar. Are you sure it has a kind 0 event? With no profile you can't be an admin.


One of my favorite parts of the Bitcoin conference was seeing people walk out on celebrities. About 50% of the room walked out during Russell Brand's speech. After the Trump speech, Vivek Ramaswamey came on and 90% of the crowd exited during his speech.


The Vivek one between them is scheduled for an hour. The last thing I want is to sit through that for an hour.


So bored waiting for Trump to apply his makeup and inspect his balls. They escorted some man out so I assume he was a national security threat due to shitposting on Twitter.


How many sats can a Zimbabwean dollar buy me?


Selling my second kidney to buy more #Bitcoin


Ron Paul is a rambling old man now, but I still prefer Ronald to Donald.


Ron Paul is 88 years old, I think he could win.


Ronald Jake Paul McDonald


You would use NOTICE to respond to an unparseable message.


I guarantee you somebody is going to yell "Free Ross!!!" during this Trump speech.


That's a separate issue, the top one is being injected into the search results but the search result isn't removed. nostr:npub1gujeqakgt7fyp6zjggxhyy7ft623qtcaay5lkc8n8gkry4cvnrzqd3f67z


It's this: https://gitlab.com/soapbox-pub/ditto/-/issues/161


Some guy is talking who isn't Trump.


I watched Michael Saylor and now I'm selling my house to buy more Bitcoin.


Redy 2 c Bonald


I met nostr:npub1gcxzte5zlkncx26j68ez60fzkvtkm9e0vrwdcvsjakxf9mu9qewqlfnj5z ! FINALLY!!!

https://image.nostr.build/68d532d16e3b775264f3f40b66460c48625d10818bb730f55cdc59fb165097c8.jpg


It was an honor!! Hopefully the first of many times!


Yes! I'm by the live music


nostr:npub1gcxzte5zlkncx26j68ez60fzkvtkm9e0vrwdcvsjakxf9mu9qewqlfnj5z How do I find you?


Edit your profile and set a display name and it will fix it.


Oh my bad, just approved you!


I just drove past it.


It is, under Settings > Identity. I want to improve the UI of it soon.


So Memphis, Tennessee erected a goddamn pyramid for Bass Pro Shops.

https://image.nostr.build/70e96086a0bc69651952393b9f4591f62f4b448a7a93b8e7fd1dadfaa45e478f.jpg


Arkansas is meth central.


Fellas, I'm headed up to Nashville. But first a stop at the Fauke Monster Mart.

https://image.nostr.build/87fd60c219040e40fbe28a241467f2f8ceb4cfe712c1fb04284c89dc6003ab02.jpg


Why does it cost one hundred and ninety four Swiss Fancs to read the SQL standard?

https://image.nostr.build/d5629c8f90949d533a7681468a78cf7058bb7a34fbd1b191a241ec8f22badd86.png


TIL you can force the SQL query planner to do two different steps if you use a CTE:

> In PostgreSQL, a CTE (Common Table Expression) is an optimization fence, which means the query planner executes the CTE independently of the rest of the query and stores the result set in temporary memory (it essentially materializes the CTE). Then that result set is scanned one or multiple times depending on its use in the main query.


I am a man broken by Postgres inner joins.


Context https://earthstoriez.com/india-coconut-myth-folklore


Doing surgery on the Ditto production database. Please be patient.


There could be a lot more unity on the issue.


They wanted mentions in the text. They got mentions in the text.


You can scuba dive just a little bit. Skydiving is all or nothing.


There's no way the DNC planted a 20 year old boy as their shooter. They would have hired an 89 year old man.


Pretty good, thanks. Check out ditto.pub 😂


After 5 days, I am almost done creating the indexes needed on my giant Postgres Nostr database to just TEST whether it improves performance or not.


I think it will work, but strfry is still forced to parse and process each message to some extent before it can reach the policy filter.


It's just a kind range, so you should be able to block it. Rate limiting should work the same.


There's a similar problem with draft events. I would say this problem is not about ephemeral events specifically.


Houston, TX be like: would you rather die from methane asphyxiation from city sewer gasses being pumped into your AC, or would you rather turn off the AC and die from heat?


Ooooo. This is a good one.


I think strfry should send a CLOSED here. As a client I wouldn't worry about this. I would send a patch to strfry if anything. As a client you need defensive measures anyway, like implementing a timeout.


Life hack: sometimes a round trip flight is significantly cheaper than a one way.


But what is the error?


Enjoying a nice #vegan meal.

https://image.nostr.build/a9f81330f441008f51c2b9df4ec94a37c000fedc78c95c3b2f803f54de98c613.jpg


What is the error? Trying to understand why you would care as a client.


If there's an error, close the subscription and use CLOSED.


cc nostr:npub1q469xmf77nt9ltu4ks3excgts36ayt6v99ryn4rv2r2axmm4ye7q3vnkqp


Perfect, now people should use it.


Skydiving just seems like an unnecessary risk. No thank you, I don't want to pretend to die.


Why is there no standard Bitcoin invoice URI outside of Lightning? It's very awkward to pay an invoice by copy pasting the amount.


y'all just tryna pretend you're special from each other but you really ain't

https://image.nostr.build/bd6f553579fca5fbec342ea1fde1ab430f204f123f3daf01a1269f0039d87166.png


Do you think Nancy Pelosi yelled at Joe Biden?


Brothers, let us unite in the name of Barrack Hussein Obama, to elect the first woman president, Kam-Allah! ✊ 🇵🇸


Just fell out of the coconut tree


There's a meme that techbros really want to just grow corn in the mountains, but I believe once you've been consumed by the void you can't escape the bits.


Should we bring back Flash?


After Nostriga I heard they're going to do NostrWyoming.


Okay I'm starting to learn there is more than just time series line graphs. I can see the value in gauges for example.

https://image.nostr.build/ce40889d4e5a24070cf462024512cdda020aa852a4b610d73885249f5bf23f04.png


Grafana seems to be mainly for the "cool" factor, and in theory so you can identify problems at a glance. But Prometheus is really where it's at. You can use it on its own to identify issues. It has its own graphs. This is in fact why I'm asking the question. I'm not sure how to make Grafana truly useful. So far the main advantage is that I can tile the charts instead of being in rows like Prometheus does.


I don't know, what client are you using?


Here's mine:

https://image.nostr.build/f4e302588a16cac314dec4344f76a25351001f37f7b04737eb039a523fdbdc5b.png
https://image.nostr.build/679d4962c7098187e4967880834064f93624349c9bdabef4824b50fcf08e17d4.png


Send a pic


How do I make a GOOD Grafana dashboard? What is the art of organizing visualizations?


Check out gleasonator.dev


Christ, this woman can barely get out a complete sentence either. https://www.telegraph.co.uk/us/politics/2024/07/20/kamala-harris-only-choice-to-replace-biden-as-time-runs-out/


Do your notifications load at least? This is the main thing I'm trying to improve right now. Performance of tag queries is bad. Once I sort that out, it will be 👌


Japanese hashtags are entire sentences, because why not.

https://image.nostr.build/a4280dca402153c5f770e8c767e9e42742082e3027c0ef9ad529ba2249969e73.png


I can't even understand what she's saying or why.


Congratulations!!!! 🥳 🎉 Well deserved!


json accessors standardized as part of SQL 😃

they didn't use -> or ->> 🤨

they used dot syntax (which nobody implements) 🤦♂

https://image.nostr.build/d456f301e5c5bcf3a03a88966b036a0573d605b8eb57e81ec4cbfe1bb1fb0111.png


my posts are disappearing into the void


hello


There's no way to index it. There's no jsonb operator that deals with tuples.

I saw somebody once treated it as an FTS field, which is interesting, but seems insane and I doubt it would work better than just indexing all the columns.


I have come to the conclusion that the only way to do fast tag filters in an SQL database is to duplicate the id, kind, pubkey, and created_at column of the event on EVERY SINGLE tag row, with ALL THE INDEXES of events. Because you need to be able to filter down the tags with the exact same filter you filter events.

Joining the tables doesn't cut it. There is absolutely no way to make the query planner not pull out every single tag pair for a query even when you only need a couple events. Unless you filter it down yourself.


Still fighting with tag queries in Postgres


yolo


I fucked everything up, hang on


But it doesn't have free speech.


Europe is better than Texas.


>hello
>are you single?

Unhinged.


inner join nostr_tags existential dread


Even the liberal media is like: "We must protect Hitler Grandpa at all costs"


You have the power to change it. You could be the mentally ill people on Nostr.


They haven't found me yet, which is strange. I have a bad habit of rewarding these people  because I see their humanity, so they flock to me like prostitutes to Jesus Christ.


Who would see that little twerp and be like "yep, he seems like the ideal candidate for our operation"


Where are all the mentally ill people on Nostr? yall are lucky you don't have to deal with that yet. You've got like one guy.


I don't want to be taxed and I don't want to have a boss. There is no reason to defend either of these systems.

https://image.nostr.build/bf0b1803fb0059c9067440cfe8efb2115c5e7170ddaf5cfa70f9f5209dc2c841.jpg


This is both genius and extremely retarded. Way to make your game rely completely on a proprietary third-party service you don't control. But boy do I love storing data in the wrong places.

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


River Flows in You. This song is a meme


This horror beyond comprehension is a crustacean, related to lobsters and crabs.

https://image.nostr.build/205283fdeddb019f39ad3d3d071da25ab1e1937dd8983408e0e2bdc0a6cb0e92.gif


Apparently the price of Bitcoin is directly correlated to whether or not Trump will win.


We all love JK Rowling, especially the LGBT community.


Maybe Melania will take him back now.


This issue is fixed, please try again.


They should do this:

import { NSchema as n } from '@nostrify/nostrify';

const metadata = n.json().pipe(n.metadata()).parse(event.content);

https://nostrify.dev/schema/#kind-0-metadata


And you think, "well if things don't work out with hot idiot, I can always fall back to best friend instead"


It's like a friendzone. Like choosing to marry a hot idiot instead of your best friend for no good reason.


I saw that. Who is this guy?

Why would you recognize you're being cucked by big tech and then willingly keep doing it?


Nostr should not be the "back up" for when X is censored, wtf. It should be the main thing people use.

nostr:note17luu3jfqyucz2sjggkmdt3vhwxc0ngt0h8pem3tc98xa09jadf4qcjmvsk


Now he goes on and talks about it like it's basically activism, and he uses words that I said to him about the Fediverse and Nostr to describe Truth Social in ways that it isn't.


This website was so much better before Nunes joined. It was the worst mistake. He ruined everything. Because he is a retarded manchild.


The CEO of Truth Social, Devin Nunes, tried to sue Twitter because they wouldn't ban "Devin Nunes' Cow", a parody account making fun of him.

The real reason he wanted to run Truth Social is not because of free speech. It's because he wanted to ban Devin Nunes' Cow. And he did. He banned Devin Nunes' Cow.

https://www.businessinsider.com/donald-trump-truth-social-devin-nunes-cow-joke-censored-2022-2

https://image.nostr.build/be0732410b74551d8a40830b62954f885d4c84deb6ef6efb0e2946b7332aa563.jpg


nos2x issues on #Ditto fixed!


Actually, nothing is blue. Even everything that's blue isn't blue. Even bugs that are blue only trick your eyes into thinking they're blue, and you can't get any blue pigment from them.


The libtard version of QAnon now exists.


I think the fall of society doesn't happen over night. I think it's a slow burn.


I'm not sad the shooter is dead. But I would have liked to hear him explain himself.


I've been using Alby and it works. But multiple people have said nos2x is broken and I've forgotten to fix it.


Thanks, I will fix the problems with nos2x. I forgot.


What extension are you using?


try gleasonator.dev instead, they should be interchangeable but this one has new performance updates. I will also patch ditto.pub once I've confirmed the fix.


So is Trump still speaking at Bitcoin Nashville?


Seems like the shots came from behind


How much you want to bet Trump was shot at by a transgender woman?


Houston


Holy shit we're back boys. Power restored to Houson! 😱


Americans are so cucked by Biden. I think it's actually Russians submitting these posts on Reddit. https://www.reddit.com/r/WhitePeopleTwitter/comments/1e28tqd/trump_attacks_bidens_putin_loving_remarks/


Yes actually, that's an interesting idea. Although the tradeoff is that you further emphasize a few central relays, which is the very thing outbox model aims to fix. You will want rate liming either way on both relay and client.


I found this: https://wiki.debian.org/Teams/DebianGoTeam


I am still pushing at least one or two commits per day, but the thing really killing me is the internet connection. I cannot multitask at all, it's like dial-up. Otherwise I'm happy to be working out of my car. I have a decent system going.


Fantastic. I've been daydreaming about how to get it into Debian. Snap or flatpak would be easy, but sucks compared to an apt package.


Here is the problem with relays. You can DoS a basic relay implementation (if it has no rate-limiting) from a single laptop like this:

cat /dev/urandom | websocat wss://somerelay.xyz

Here is the problem with Outbox Model. A user can make another user's client connect to any relay, and that relay can do the exact same thing just in the other direction, because websockets are bidirectional. Therefore a single relay can DoS a client.

Therefore rate-limiting of websocket messages are needed on both the relay AND the client.

I'm not saying we shouldn't do it, or that outbox isn't the answer to all our problems. It is. But it creates a new set of fun problems that programmers will have to think about and mitigate.


Just experienced a flicker of electricity. For 1 second. Then it went off again.


GM! Still no power in Houston. Just getting used to the Amish New Normal.

https://image.nostr.build/ae7c45309aabcaf8a2c73eea6e3c3cc4d387e0c3304e11166c78ef7a5a9cc758.jpg
https://image.nostr.build/96d89a472b3649f3f07e190a12bf2cdecd8339de4b746477a705c2f65436f7db.jpg
https://image.nostr.build/6302ad11568168ee77f8db2aad40fa84a13b63c2cd00809a8ff2d9a8dec86c7e.jpg


Good news: CenterPoint sent repair trucks to my street.

Bad news: the workers are just sitting in the trucks vaping.


v1.1 coming soon


I think I finally fixed all the Ditto performance issues?


PeerTube uses this


I have downloaded things from torrents many times but still don't really understand how they work years later despite trying.

So I would say don't attribute to malice what can be explained by me being retarded.


Nope, but people are trying to give the CEO a public execution and he wrote a heartfelt letter to his shareholders.


How would that work, you would need to seed your avatar? I think that would be very slow and create even more instability.


It started sprinkling rain in Houston, which is a nice relief from the heat, but I'm sure the boys at CenterPoint packed up and called it a week.


Houston is so fucked rn

https://image.nostr.build/e097a4e2c91292b3bde6e3b4b4d9c85ca25fa91382cc3d1018a6c19fdcb6b383.jpg


GM, still no power in Houston.


Fellas the situation is not great, it's slow, but I would be bored as hell otherwise.

https://image.nostr.build/10b73fa4bd7d647ef7e1f96fd28936dfe4a90833ece70feaea8d3f119e5a1ffa.png


Have a pretty good thing in my car rn, trying to push some commits but the speed is like dial-up.


They are saying Houston won't have power until Monday, July 15. Meanwhile the work trucks are sitting in parking lots not doing anything. https://www.khou.com/article/news/investigations/power-repair-trucks-parking-lots/285-6a0f110f-3c74-416d-87f2-2f1fd75d2328


Blue is areas without power. Green is areas without power but they are praying for them. 🙏 Orange is areas without power but they're not praying for them. Dark green is areas without power but they're lying about it.

https://image.nostr.build/272feb4408a2b2cd2603d46045cf957ba9f0065eb4c5439410ecb54bdab4f3ed.jpg


You have no idea how hard I fought to try to convince them to federate Truth Social. They hated me. At one point I told my coworkers to drink every time I said "federation" at the bar with Devin. I asked him when we were going to decentralize and he said "we're already decentralized, we have people working for us all across the world"


The situation in Houston is quite dire. No power since Monday, it is now Thursday. They're saying it could be Sunday before we have power. I've depleted all my USB batteries and my phone is as 20%. I have half a tank of gas which I can use to recharge.


The Houston storm started brewing June 28 but didn't hit land until July 8. That's weird to think about. When a mommy storm and a daddy storm love each other very much...


Non fungible because different relays are used for different purposes, they're not purely interchangeable


I'm on day 2 and already want to KMS, most people are on day 4 of this shit already.


They told us today that they will tell us tomorrow when power will be restored in Houston. 🤡


The Mostr relay is in a Houston datacenter. I can't even check it due to not having electricity or WiFi right now, but maybe it's having power disruptions. Settler societies was a bad idea.


They were all in love with dyin', they were doin' it in Texas


nostr:npub180cvv07tjdrrgpa0j7j7tmnyl2yr6yr7l8j4s3evf6u64th6gkwsyjh6w6 new Nostr theory just dropped


Libraries like generic-pool only work for fungible connection pool. https://www.npmjs.com/package/generic-pool


In a Postgres connection pool, the connections are fungible. In a Nostr relay pool, the connections are non-fungible.


The Texas economy is in shambles.


Vacation over, I am eager to get back to work but I am now in a city with no power for 2 days and 90 degree weather with no end in sight. I should have stayed in London.


I am going to die of heat stroke.


He's a core developer of Deno, so I believe him.


No.

But actually, nak: https://github.com/fiatjaf/nak


1. Write a quick Deno script to scrape data from https://gisoutagetracker.azurewebsites.net

2. Expose the data in Prometheus exposition format

3. Crease a Prometheus graph of outages over time

4. It's a straight line

5. Watch the straight line for hours


My CI servers are down. But my production webservers are at a datacenter. They invest millions to stay online. They will burn gasoline to stay online if they have to.


50% of Houston has had electricity restored!!! 🙏 🙏 🙏 🙏 PRAISE THE LORD! GOD IS GOOD!!!!!


I have already given up


We'll see you soon! Flight UA3043 to Houston departs at 10:00am from Gate C18 in Terminal 1.

We're ready to board your flight to Houston at Gate C18. We look forward to seeing you soon!

Flight UA3043 from Chicago to Houston is delayed because we are troubleshooting a technical issue on your plane and will provide an update at the posted departure time. It now departs at 10:20am on July 9.

Flight UA3043 from Chicago to Houston is delayed further because we are troubleshooting a technical issue on your plane and will provide an update at the posted departure time. It now departs at 10:50am on July 9.

Flight UA3043 from Chicago to Houston is delayed further because we are addressing a technical issue on your plane. It now departs at 12:30pm on July 9.

Flight UA3043 from Chicago to Houston is delayed further because we are addressing a technical issue on your plane. It now departs at 1:00pm on July 9.

We’re ready to board your flight to Houston at Gate C11. When you get on the plane, be sure to store your bag on its side so everyone's can fit. We look forward to seeing you soon!

Flight UA3043 from Chicago to Houston is delayed further because we are addressing a technical issue on your plane. It now departs at 1:30pm on July 9.


Chinese man teaching his 10 year old son to pee in a pubuic urinal. Chicago O'Hare public bathroom number 4. July 9th, 2024, 12:12pm.


Thank you! I will let you know if I don't manage to get a flight 😂


Fly back from London. Flying into a hurricane. Oopsie whoopsie, emergency land in Chicago. Sleep in Chicago. Squeeze a thousand people onto a broken plane. Oopsie whoopsie x2. Evacuate the whole plane. Everybody fighting over planes home. Get Auntie Anne's pretzels. I live in Chicago now.


I'm at O'Hare too. Should we meet?


No, just no cell signal and a bunch of screens that say "this screen will flash white" and "this is a test".


When you leave the United States and then come back, they put you into a line called "US Citizens" and hold you like cattle for three hours.


Houston is fucked, bros. I'm at Chicago now which is even worse.


They played a sine wave to this chocolate bar, for... reasons

https://image.nostr.build/8a9c2674a19472a4d590816ff0d49e08f5dbcf92230ae5084049a756016336d1.jpg


This is everything that's wrong with society

https://image.nostr.build/b899d66b604546509208cb5b97fcc343fda1af7f9ce0241cbddb9098c7059ee7.jpg


Life Pro Tip: since doctors have a moral duty to help people, you can get free medical care by simply having your emergency on an airplane.


The Pride flag was already perfect as it was. It's a rainbow. It's every color in the spectrum, representing all possible people. To extend it actually makes it less inclusive, because it creates a situation where more people are being left out.


They say that good luck comes from being open minded with no expectations. For example, a person who goes to a party to meet his future wife may be so distracted by that goal that he misses out on meeting his future best friend.


There is a Banksy store in London where you can buy a print of Jesus Christ crucified on the cross holding handbags, and you can buy it and they give it to you in a handbag.


I approached for a pic and he swiveled around and said "donation please...!" in a snivelling voice, like some kind of anime.


Knockoff photo-op Pikachu beggar Chinatown London

https://image.nostr.build/1dc18a1a8e190d93de4351166dd322f15fba5fa0ed9bec6fbc834337bd965e05.jpg


Excited to see Harry Potter and the Cursed Child. Also, JK Rowling is 100% correct.


yolo


The most retarded man on Earth is going to sue me because his precious (shitty) cartoon character avatar is on the Fediverse.

https://image.nostr.build/81d1e4f6d4aa34a7332eab9fd5ea32e504ac509ade98b520ef77b4262c2a1051.jpg


Bigus Benus


I'm just glad I can post again.

Also, dinosaurs came before flowers. And mushrooms are the only reason mosquitoes aren't 6 feet long and we survived the carboniferous period.


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

https://image.nostr.build/ac6d97575d5ae6a9afaf8080a1a16e1a1da949d23e43971a0049a235a5ee77af.jpg


That's fucking awesome.


minds.com, OG open source social media site. They predate Mastodon and pretty much everything. Oh wait you're being sarcastic


Some dumbass on Minds is harassing me because he doesn't understand that minds is federated over ActivityPub and threatens to SUE ME FOR COPYRIGHT INFRINGEMENT. I think this is the end of me, lads.


You have selective compassion based on a bias of what other people on the internet have said is right. So walk a mile in J.K. Rowling's shoes and we'll see.


Colemak superiority. I went out of my way to type asdf to avoid normie confusion.


asdf


That's dumb. Why are people today so retarded on the internet? You do not need to be a black person to understand things.


Time to step into the future.


I am waiting for Deno to do a release before I do the next Ditto release. But I think they're secretly planning a 2.0 release right now.


The original idea of Ditto was Soapbox on Nostr. At one point I thought I might add Fediverse integration directly, but that would be very difficult and harm the experience on Nostr. I might still do it, but right now I don't see a need. And I've grown to hate ActivityPub as a protocol, so I really don't want to.


Some little twerp in England is wearing a shirt that says "Hoodrich" but I know he's middle class at best.


I didn't leave at all. I built a better software. Actually it still sucks, but it's getting there.


Searched up Neville Longbottom only to realize he was already in my search history. I've looked up Neville Longbottom more than once.


In London on the 4th of July, the Brits walk around with cowboy hats and cowboy boots. And I just have to say this is very offensive to me and my people.


The owner of this site is very awesome. We're friends. We're working on a version of this site for Nostr too. nostr:npub1vq7hd5tr7cxnaxurp90zlsg62s7udwllvfgesxlu0vhaqd0cy40qfpgx5j


Bassam.social


Mastodon stuff is pretty stable, but Nostr is a lot more radical and brave from a technology standpoint. Much of it goes against the whole infrastructure of everything that has been built in the past 20 years of computers and the internet.

I am hitting all kinds of walls. Programming languages, databases, even webservers like Nginx, go against the grain of Nostr.

The next generation of Nostr, if it succeeds, cannot be built on top of what we have today. The developers of today's apps need to mend Nostr into the fabric of infrastructure by creating libraries and tools that make it easier to build on solid foundation.

I am finding myself pushing forward basic infrastructure more than anything.


True


GM

https://image.nostr.build/7a3cdde12c0831d258b72d47816b710e001a93d1939ca427ea3ea66427e273c8.jpg
https://image.nostr.build/71bb3be4c89296ac6488e157a7c0cda35c6a70c57f1704e0fbfc50853522a570.jpg


Yer a wizard Harry


I think the Queen left this world because she knew she couldn't save it.


Can't believe how many relay implementations out there solve the tags problem by just searching in the tags field. Does this actually work? I have considered it, but I have my doubts.

https://image.nostr.build/3f1fe8894d3cf1f2bd41463144d6ba7f0b4ee9abdee9b6d705652a92853336eb.png
https://image.nostr.build/a16c7cbca2ca5f432ba7ff60d4d35f48262855355226b51e577b68f35a2c0a0c.png


British wagie talking loudly on the train, saying things such as "pure profit margin". This is serious business.


Someday someone will have their pacemaker hooked up to a Nostr relay. The Nostr relay will implement query timeouts, and that person will die.


Been wanting to try, no Linux support. nostr:npub1jlrs53pkdfjnts29kveljul2sm0actt6n8dxrrzqcersttvcuv3qdjynqn has used it.


It's the amount of data that's the problem. Because with ORDER BY, it has to go through everything to figure out which is the most recent before it can pull even 1 result.


This greatly improves performance but still a little unstable. Let it cook.

nostr:note1qqv5m07l593u2csnc7mwm5p09pe4aqc4mu29nka4j02834g9af8qm7ugha


Thank you nostr:npub1gujeqakgt7fyp6zjggxhyy7ft623qtcaay5lkc8n8gkry4cvnrzqd3f67z !

nostr:note1qqucha8jp5mwhxgm92n9ceyawadh0xscz7lczedfwgngm8k7qrkska0q4x


tags to events is a many-to-many relationship, so the joins are necessary. I've never heard of EXIST before 🤔


I increased the timeout a lot and it still gets cancelled, yikes. I can't get into postgres to "explain analyze" from this hotel wifi. Will try to see later. Thanks for your help.


I have a thorough benchmark too:

https://image.nostr.build/9d62cc358e9d862a3dd78e10ee3a221dc89a672a6ac33536efcf032bbd1e27b9.png


I do. I ran into the same thing. Here's my schema:

https://image.nostr.build/87e21d98e38cfc97f96f04fc0abb7688958fc273ab6d7c61f4bdd0655d7f6f40.png


Yep, this one. Thank you Mr. Patrick! 🍀


Putting a timeout seems to be helping a lot because it's a sweeping fix. That combined with rate-limiting ws messages covers the basics. But I think I need to also punish slow queries similar to rate-limiting, so that if you spend too much query time over a period you get blocked for a short period.


I think it would only work if each filter doesn't have a limit.


I will try that and benchmark it. Thank you for the suggestion!


I'm questioning if multiple filters in a REQ was ever a good idea. I treat a single REQ as one database query. I could break them up and treat them like separate requests (but so could you). I'm not sure whose responsibility that is. If I do, I will need to rate-limit the number per interval of filters instead of the number of websocket messages.


I do return EOSE. But now if the query times out, I just return CLOSE.


btw there's no limit on any of these, and they need to be returned in reverse-chronological order. It results in this monster query with 6 joins and 55 parameters. Christ.

select * from (select "nostr_events".* from "nostr_events" where "kind" in ($1, $2) and "pubkey" in ($3) limit $4) as "nostr_events" union all select * from (select "nostr_events".* from "nostr_events" where "kind" in ($5, $6, $7) and "pubkey" in ($8, $9)) as "nostr_events" union all select * from (select "nostr_events".* from "nostr_events" inner join "nostr_tags" as "tag0" on "tag0"."event_id" = "nostr_events"."id" where "kind" in ($10) and "tag0"."name" = $11 and "tag0"."value" in ($12, $13) order by "created_at" desc) as "nostr_events" union all select * from (select "nostr_events".* from "nostr_events" where "kind" in ($14, $15, $16) and "pubkey" in ($17)) as "nostr_events" union all select * from (select "nostr_events".* from "nostr_events" inner join "nostr_tags" as "tag0" on "tag0"."event_id" = "nostr_events"."id" where "kind" in ($18) and "tag0"."name" = $19 and "tag0"."value" in ($20) order by "created_at" desc) as "nostr_events" union all select * from (select "nostr_events".* from "nostr_events" where "kind" in ($21, $22, $23) and "pubkey" in ($24, $25, $26)) as "nostr_events" union all select * from (select "nostr_events".* from "nostr_events" inner join "nostr_tags" as "tag0" on "tag0"."event_id" = "nostr_events"."id" where "kind" in ($27) and "tag0"."name" = $28 and "tag0"."value" in ($29, $30, $31) order by "created_at" desc) as "nostr_events" union all select * from (select "nostr_events".* from "nostr_events" where "kind" in ($32, $33, $34) and "pubkey" in ($35)) as "nostr_events" union all select * from (select "nostr_events".* from "nostr_events" inner join "nostr_tags" as "tag0" on "tag0"."event_id" = "nostr_events"."id" where "kind" in ($36) and "tag0"."name" = $37 and "tag0"."value" in ($38) order by "created_at" desc) as "nostr_events" union all select * from (select "nostr_events".* from "nostr_events" where "kind" in ($39, $40, $41) and "pubkey" in ($42, $43)) as "nostr_events" union all select * from (select "nostr_events".* from "nostr_events" inner join "nostr_tags" as "tag0" on "tag0"."event_id" = "nostr_events"."id" where "kind" in ($44) and "tag0"."name" = $45 and "tag0"."value" in ($46, $47) order by "created_at" desc) as "nostr_events" union all select * from (select "nostr_events".* from "nostr_events" where "kind" in ($48, $49, $50) and "pubkey" in ($51)) as "nostr_events" union all select * from (select "nostr_events".* from "nostr_events" inner join "nostr_tags" as "tag0" on "tag0"."event_id" = "nostr_events"."id" where "kind" in ($52) and "tag0"."name" = $53 and "tag0"."value" in ($54) order by "created_at" desc) as "nostr_events" limit $55


When I first saw this it didn't properly register in my brain. I thought it was a dream. But it's real.


I am also getting a ton like this:

REQ [{"since":1718038930,"until":1718038990}]

fuck you scrapers. Give me your tired, your poor, Your huddled masses yearning to breathe free


Whoever made this goes straight to jail.


Fuck whatever client/script/etc is doing this, I limit ye


Did I fix everything? Waiting to find out.

Cant have any more of those Hyrule Castles. It needs to be a flat line on the ground.

https://image.nostr.build/5efd6ca01445f4f064590109b15c79d1949aaf3235cf5b13690ee06759c17136.png


Sums is up perfectly.


"It's just a thin abstraction layer" all the way down


It's honestly insane when I see it like this. Is this suffering?

https://image.nostr.build/e48e925ccf822596caf10e5e268d56ddd9ca24dc22995e567a0c0ebcca3de788.png


That's fantastic!


Scotch in Scotland. Laddie

https://image.nostr.build/d5174e7cab293fedbc45b55f9d7ae0a87cda28d262a49306e3d7bea7ec4d296c.jpg


🏴

https://image.nostr.build/89ef71c758300c0b731da8424c7f36f9e9f85beb8089a03a617e7fea2c86e06f.jpg


In the Edinburgh coffee shop where JK Rowling wrote Harry Potter, they play unlicensed Animal Crossing music.


In one case it's explicit, the user knows about it, and everyone has access to the same information. In the other case it's a secret and only some people can access it.


Exactly. I deleted mine in 2016. Where's my round of applause?


Lightning sucks. But if you do the math on block size, you find that no block size is adequate to handle the world's transactions. BCH is only cheap/fast because nobody uses it, so it's a temporary measure. A layer 2 is inherently needed.


The weaknesses of Bitcoin are actually a strength. People say Bitcoin is used by criminals. But it has a public ledger. So they are wrong. The tradeoff of privacy is transparency. I want so see Nancy Pelosi's Bitcoin wallet, and I do think criminals who use cryptocurrency should be caught.


Bitcoin


What client did you make this post in? It has a timestamp in the future.


So true. https://www.reddit.com/r/Scotland/comments/1drvp4b/first_time_in_scotland_and_are_the_seagulls_on/


Americans would just piss on the ground in front of it. And that's why I love America.


Pay toilets are a violation of human rights.


Good point.


When did Europe go from killing each other with swords and spears in hand to hand combat, to not being able to say certain words or get arrested by the police?


Fuck yes

https://image.nostr.build/ff5be9f761c1a279b523964e5e3a7694a073fad731ee14fba635822ab0471023.jpg


Edinburgh is the greatest nation of Europe.


Yep. Laddie


Just landed in UK.


Don't drink unknown liquids from mysterious ocean bottles. https://www.bbc.com/news/articles/crgej1z0rwwo


What the fuck, you can't just reply to a kind 6 event. Can you? Which client did that?


Taylor Swift football strike at airport.


A they/them person with the largest hair I've ever seen was standing against the glass front door, and then complained when the manager opened the door and smushed they/them's hair in.


It's a good thing the government took away their guns. Because as an American, I think Dublin would be a mass shooting city if it could be.


Nice!!!


Then explain why white people are screaming their heads off at 4:47am:

https://media.gleasonator.com/b3a4ca2e3d91f4727e306c0a50e62875f2adc5c8612d381f8b4269e2a549b905.aac


Bro.

https://media.gleasonator.com/b3a4ca2e3d91f4727e306c0a50e62875f2adc5c8612d381f8b4269e2a549b905.aac


It is 4:43am and grown adults are screaming their heads off outside my hotel in Dublin.


What in the fuck?

https://image.nostr.build/7a4233c839a31423b1eaa0e9755b25c110c9e0cf98188f765206cdbe12f88888.png


I am using a DigitalOcean managed database and I had to download the certificate and then do something similar to this:

```
deno run -A --cert /home/ditto/ca-certificate.crt scripts/admin-role.ts [other options]
```

If you followed the install guide and Postgres is installed like normal on the same machine as Ditto... I don't know. This sounds like something you should ask ChatGPT.


If bostr2 is so good why isn't there a bostr3?


You are over your Russian phase, comrade?


I prefer to spread my emotional damage and burn out every 3 days instead of every 2 weeks. It adds up to the same, I just prefer the pacing.


I think their authoritarian governments just managed to make their corporations not put 6 bags of sugar in every food product and drink.


GitLab nags me now in Europe to accept all cookies. This is why USA is the best country.


Europe has a smoking problem.


Howth, right about here: https://maps.app.goo.gl/TFSC7x6B9DeDM6BaA


I think I saw him on the streets of Dublin. He averted his eyes.


I believe you. But it was pita bread. 😂


Good dog

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


Dabbed on em

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


On the coast of Ireland

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


Fellas. Don't name your commit message "Fix"

nostr:note1qq88vtv7geff2fvqef3djn9zpngx0cv3tk3mfc9nvzavvqqsphvqtldfsu


Don't kill yerself smokin. Kill yerself vapin.


They prayed differently over the falafel.


Irish falafel place made it very clear they only serve Palestinian falafel, NOT Israeli falafel. But their falafel sandwich had the exact same ingredients and proportions with no discernible difference. Is this world peace?


Kids, y'all basically agree, so stop fighting


According to Irish boomers, literally everything is destroying Ireland. And they might be right. But they were never as good as Japan to begin with.


People today are retarded. They will say something untrue. Then they will prove it with evidence: a quote. The quote will say the opposite of what they said, and then they will say "see? This proves it!"


The old Irish lady in front of me at the Irish tap dancing concert is complaining about Taylor Swift in Ireland


I had to give up my sandwich


Just got attacked by a #seagull in Ireland


They charge for the toilets but nobody pays. Nice.


We tried hard to make LMDB work with Deno, both in typescript and Rust FFI implementations. Every path was blocked, so I used Postgres out of necessity. Then I realized I can host multiple Ditto servers with one shared Postgres database. To me that's the greatest benefit. Network support. I'm going to start a Ditto hosting service.

It has a very different set of challenges. But it absolutely can work (and scale) for Nostr. The problems I'm facing in Ditto are application-specific and not inherent to Nostr Postgres.

More: https://nostrify.dev/store/sql


I want to just add timeouts to every query. But the query builder library I'm very invested in, Kysely, does not support it directly. 🤦 So I'll have to work around. But I think that will fix all of my problems.


Here is my latest #Ditto performance discovery. When query time goes up, available connections goes down. This is what's causing downtime. This is basic cause and effect, but it's good for my sanity to confirm this. Now I just have to figure out what's causing the query time spike.

https://image.nostr.build/76ca8b5c5d3f545d202c8d92ea14f05dafb283fdbaa47b4f62225ebd2dfd52e6.png
https://image.nostr.build/9c0dd9057fe889dbbc7361616003c1b1e59e0792f230081eb41a5d136849f2f8.png


Yes, it sucks. But I am not actually sure if it's the relay or Mastodon API causing the problem. It keeps going down and I've been making Prometheus graphs to track the issue. Screenshots in my profile. Postgres itself is very good for the usual queries. Someone is doing something naughty that's choking up my connection pool. But I appreciate verita's enthusiasm for my project. I am determined to make it the best thing ever, and I think it can be.


I did not read this whole thread, just wanted to correct this blatant misinformation.


Not true. It's a custom relay. https://gitlab.com/soapbox-pub/ditto/-/blob/main/src/controllers/nostr/relay.ts


The rascals downstairs are singing Whiskey in the Jar outside me window.


My brother. I am so vegan that I have bought these shoes from a company called Vegetarian Shoes. https://www.vegetarian-shoes.co.uk/all_products/airseal_10_eye_boot_steel_toe_black/10533_p.html


I have an Irish accent permanently burned in my brain. I don't know if it's possible to be normal again.


I don't like Bun. I get the idea they don't actually want to fix anything, they just want to control the ecosystem.


The one I post from


Excited! 🤙


I'm vegan btw

https://image.nostr.build/c2a7c58b945c1a19c728afcdd1d26ae4ad427400f68952ff4f2e3edb525825a3.jpg


Leprechaun Museum

https://image.nostr.build/0d3f93afcd0d3336654e367c5472e38ed5f3def892e0d38ef071ceed49f9b499.jpg


The vegan food is good

https://image.nostr.build/20c745f36242ec0152465160e028c42d53e8c0ccb954bcab8bd13b57d5002498.jpg


What's up fellas

https://image.nostr.build/e9d8b5719394c23d97063b2d3f301aac7e645bf9bd63da15f22ffb2de5d5f8a8.jpg


I smoked a Cuban cigar in Ireland. One of the few things Americans can't normally do. Oh, and it was just like a normal cigar.


Sadness


Just got attacked by cleg flies in #Ireland


You just join pubkey_domains then query where domain = LOCAL_DOMAIN


The Irish people do a lot of crack, they tell me.


What even is this?

https://image.nostr.build/2f80ab2dddaefc57d6f89cc456aaac276e39dd944f63ac9170907e39320edbbd.jpg


This is some Elden Ring shit.

https://image.nostr.build/ba25649d43ea7b369f0d9857b1c5f1c6dcf2d2c07303d4f0baeb9a7e553fdb9c.jpg


Level 1

https://image.nostr.build/dcbf56bff4da0cb1390b1f8380f5515fe893609b99bb294e43d7da6e0655b584.jpg


Babe, wake up. New Earth DLC just dropped.


Found the Great Deku Tree

https://image.nostr.build/b0a162ba9df6354b0198cfb43299733a0d600785a01ebc99623898ae92c432a7.jpg


GM Ireland 🍀


Why spend your leisure bereft of pleasure? Amassing treasure, why scrape and save? Why look so canny at every penny? You'll take no money into the grave.

Landlords and gentry, with all their plenty, will still go empty where'er their bound. So lads and lasses, because life passes, let's raise our glasses to another round.


I love Prometheus now.


#Ditto available database connections. Major L, but weirdly also a W. Been trying to diagnose this problem for a week, now I can fix it.

https://image.nostr.build/18486bba50109a867ab31a360c4b6deff4ff0ec590188459928b974dfe935643.png


Yep. 👀 #Ditto #Grafana

https://image.nostr.build/9095797565923ff53337a84917d01f1126f139825fbc3688110c8b9be9dfa106.png


Graph of relay connections by verb. #Ditto #Prometheus

https://image.nostr.build/815f577221a3473e7f2a6c66a34b2d13468b91546e6c90a8ad5db5d6a601f06f.png


WHEN YOU WALK AWAY, YOU DON'T HEAR ME SAY, PLEAAAAAAAAAAAAAAAAAAAAAAAAAAA


Even though I can export my nsec from the Mostr bridge and keep using it, it feels wrong to. So I generated a new keypair for my Nostr native account.


Oh, thank you!


UAE is more progressive than Texas. Mashallah. https://www.khaleejtimes.com/uae/uae-abortion-now-allowed-in-rape-incest-cases-as-new-law-issued


Amethyst publishes a draft event on every keystroke.


Honey, wake up. Users of Amethyst are typing again and DDoSing my website.

https://image.nostr.build/a57863c69489dd9dea40383bebde096c3e884de8995a50e78a1dac731271e203.png
https://image.nostr.build/36a7188635ca97651e47c0c5cd8108f482d7710ec41e05a82efc8cb5f75bc194.png


Are people having problems with #Nos2x and #Ditto? https://gitlab.com/soapbox-pub/ditto/-/issues/165


I've only tested with Alby. Maybe I need to test with Nos2x. Others have also reported this problem.


I think maybe the world will never be fully utopian or dystopian. There will always be pockets of utopia and dystopia and it's just a matter of where you are.


Writes completely stop

https://image.nostr.build/aee42c41006eadbf50f51cc826d29321708db109aee872259869820ae2881557.png


I love seeing people's policies.


This is why follow lists should not be so big.


Eating fast food hamburgers is not the same as ripping an animal apart with your teeth naked in the woods. At least practice what you preach if you want to live by savagery.


Likes and emoji reactions to my relay is a sawtooth wave. #Ditto #Prometheus

https://image.nostr.build/b4ff68e617fd63b9468e1424fbc45005916eaab29a694c910bfa79021f522756.png


Dang bro. I wonder if it's submitting an event every time you type. 😂


Ahhhh, thank you!


People don't realize how bad things are in public schools today.


By the time I was leaving that school they built an annex for freshmen. It was a large circular hallways with classrooms on the perimeter. Kids were only allowed to walk CLOCKWISE around the hallway, and if you walked past your classroom, teachers would monitor the area and prevent you from turning around. They would force you to walk the entire loop back around.


What is kind 31234? #Nostr

https://image.nostr.build/e7b636c3204bb9dbfb1d6d4214a839eea806707ba46fda4dd64ae35dbeb51f9f.png


IT'S WORKING, IT'S WORKING!!! #Ditto #Prometheus

https://image.nostr.build/4ebe6ac2a8204f4495ab6545faf5b850cc25f22104b6436e56ae72c2eb9ec45e.png


At the age of 30 I still wake up from nightmares that I'm still imprisoned by the public school system... only to realize that I am free.


WHY CAN'T YOU JUST APT INSTALL PROMETHEUS

WHY DID SOUNDCLOUD CREATE A PROPRIETARY PLAINTEXT DATA FORMAT


I am building out #Ditto Prometheus integration for sanity reasons.

nostr:note1qq2khhnft2uja5c7ay34stqxylzmcm9cmwdypffvfkuj475jvy8qhh40lp


Based


GDPR empowers karens to complain to small network operators while big tech skirts around it.


Derek

https://image.nostr.build/24d85b1ae3e5aa6174bf782d2cc32f67f23129e3f5dac8b1ba3358511b9c7efe.jpg


Relays can attack you over WebSocket. I'm dealing with this problem now.


Oh! I recognize this. Very cool!


Aware of this one. We are in the process of rewriting the relay pool still. First I am putting out fires with the database and API.


Yeah, haven't implemented it yet. Still putting out fires.

https://image.nostr.build/29cd9a9bdf50ced178a3d5497e91175bb5fad3f934fed554226b2b338ce797bd.png


ChatGPT is telling me everything you're saying is wrong, but I'm not sure. I didn't grok your link beyond that it's a next.js site that generates a HAProxy template which is nuts 🤣 but I respect the bravery


Interesting! It's not what I thought... I realized it's physically impossible for the reverse proxy to actually rate-limit WebSocket messages unless it facilitates the upgrade, but then the application can't also do it. But rate-limiting bandwidth is a different way to solve the problem.


Does HAProxy actually have decent WebSocket support??? If so I will switch to it... 100%


*messages


There is a common misconception that Nginx has any control over WebSocket messages at all. So I just want to say this to the world: Nginx CAN NOT rate limit WebSocket messages. Nginx CAN NOT see WebSocket connections. WebSockets are treated like normal HTTP requests, and once a connection is opened Nginx cannot save you. Thank you for coming to my Ted Talk.


Вы не использовали Rust. Наш славный лидер разочарован.


TypeScript is a toy language for the backend, but at least it can parse JSON correctly, which is the main thing backend servers do.


The greatest nation on Earth. 🤣


Sent from my Android phone.

nostr:note1qqqse6tgwkl50lek9gzvn2vrn4sl6emwrhve3cee4jj6jyafy26s5djdkc


Imagine black pepper, but it's a fruit.


Black pepper, a cheap, abundant, highly available commodity found in every diner and gas station in the United States, is almost impossible to obtain fresh in its natural form. Most people will never experience eating a raw peppercorn fruit. It's mind blowing.

https://image.nostr.build/3a8718f15d5646e45d4cf8303672175bac5cff29089119185c0c3b0c9bf14a5e.jpg


Remember that the law is just made up words.


I thought programmers are an oversaturated job now and everybody is doing it. Then why is it so easy to find problems everywhere? Because project managers and their bosses don't actually care?

Anyway, it's still teeming with opportunity.


To make Ditto work correctly I feel I am having to push the entire TypeScript ecosystem forward. Not just for Nostr. For Postgres, Hono, WebSockets. It's crazy.


> If your referenced values have you act the way you are now, then I want nothing to do directly with them, or you, or what you are making. That’s all I wanted to be sure of.

This idea that _regular people_ need to be boycotted as a moral imperative because they said an opinion you disagree with, has got to stop.

Because you know what happens? You get so sub-divided that your enemy wins.

"Two leftists walk into a bar. Three splinter groups form."

You and staab probably share the majority of your values. Thou shalt not kill? Check. Treat people equally? Check.

How does it help marginalized people to boycott a developer of open source software? So people can continue being stuck in Facebook/Instagram/TikTok where they are treated like cattle?

I assure you if staab had the funds to be a CEO of a multinational corporation, which he doesn't, he would not discriminate in hiring.

I will never understand why leftists go after middle-class people on the internet instead of actual villains. Oh wait I know why, because it's an easy target. You can just pretend you did something good for the world instead of having to get a picket sign and stand at city hall.


Thank you nostr:npub1q469xmf77nt9ltu4ks3excgts36ayt6v99ryn4rv2r2axmm4ye7q3vnkqp


Finally some interesting discussion and not just Bitcoin 😂


Reminder that Soapbox has RTL support and full translations in Arabic and Hebrew.

https://image.nostr.build/ae15cfd47c9d16466a584219491a6dd89bb304dbaa147d9cd2c37d52b9e31e98.png


* 😂

I am filled with optimism and hope. I just want to say things I also think are true.


I want to use it for new types of lists. I have the same concerns about follows.

Although another part of me thinks: this community has a huge ego to believe the 1000 bitcoiners who use it today are the end-all, and that breaking everything now will really be so drastic, when in 10 years the opposite is actually true, and this protocol died because it refused to adapt, either crushed under its own weight or because someone co-opted it and made it actually good but broke all compatibility in the process anyway.


I still don't agree, but instead of going in circles I'll make a different point: with labels I need to gather lots of tiny events about a person to get the full data I've set about them. With event sets I can grab one event for each person which I can edit to update at any time. This has a drastically improved performance profile.


It's public data on the relay, so other people can copy it elsewhere. I'm concerned that labels could result in a privilege escalation attack the way I would need to use them. I did try, at first, and then I asked myself why I was jumping through so many hoops just to use a kind in the nips when the protocol supports at a basic level what I need it to do. I get improved security and performance at the cost of using a draft nip instead of a merged one.


*their

And also what if some are floating out there that I failed to query for my delete?


But to delete all existing labels, I have to query them first to get their IDs. I have to handle the case where I may have accidentally published multiple, and I have to maintain there state separately from the protocol.


Also, maybe just an implementation detail of my relay, but the "ORDER BY created_at DESC" clause of the query harms performance the most. Replaceable events by author (with a d-tag for parameterized events) can drop that clause for much better performance, since there will only be one matching event.