Avatar
Mike Dilger ☑️
ee11a5dff40c19a555f41fe42b48f00e618c91225622ae37b6c2bb67b76c4e49
Author of Gossip client: https://github.com/mikedilger/gossip Dual National (USA / New Zealand) My principles are Individualism, Equality, Liberty, Justice and Life

You could use NIP-65 as your client's settings if you wanted them to match what you advertise. Or you might have a reason to use additional relays that you don't advertise to others, and store that information elsewhere, perhaps in a NIP-51.

Let's call this model the NIP-65 read-write relay model. Because the term "gossip relay model" has been used to mean dynamically fetching stuff from where it is likely to be. This particular redefinition of the meanings/purposes of 'read' and 'write' relays arose during the drafting of NIP-65 and is a refinement to what gossip was doing previously.

There are hundreds of relays. Which one are you going to ask? How is it going to know about your followers over there on the Timbuktu relay?

People have run it on MacOS. I can't package it for Mac because I have no such box.

gossip and morespeech are the graphical desktop clients I'm aware of.

As for follower count, it is expensive and unreliable to compute. You need to ask for every ContactList that includes you, from as many relays as you can, and then unique the authors returned. If you have 1000 followers, that's up to 1000 ContactLists returned PER-RELAY, and ContactLists can be very large events.

Gossip does not count this. Narcissists can use a command line tool from time to time to do this count. I have one that is unpublished, maybe I will publish it.

I don't know, all I can tell you is what I have tried and how that went. #[0] is working out design ideas but I don't think he's interested in the coding part. Are you?

I tried Tauri and found the undebuggable magic that hooks Rust and JavaScript together to be a massive minus. I have performance problems and I could not figure out why. Using javascript rendering with VueJS or similar was nice (it is what I do for my day job), but it just didn't work. I hear "good things" from other places about Tauri, but it didn't work for me.

I tried gtk4 (since it's newer than gtk3 and new projects maybe should use the newer one), but the rust bindings are not documented and are not quite like the C++ bindings, so it was very painful trying to figure out how to do in rust what is well documented in C++. The people who wrote the rust bindings were no help at all. I found that slowed me down so much that I abandoned gtk4.

I did not try QT.

I did not try other rust-native UIs such as druid, iced, slint, or azul.

egui has two problems, but they aren't as bad as originally imagined.

First, it is not easy to do beautiful interfaces. You don't get beautiful fonts with color emojis or subpixel anti-aliasing or even hinting for that matter. The default widgets are ugly 1990s looking things, so you may have to build many of your own widgets. BUT given that it is OpenGL you can draw anything that OpenGL draws so strictly speaking there are no limits to what you can do. It's just that some things are very complicated and most people don't want to build the top-end of a GUI from scratch.

Second, it is immediate mode, which means it re-renders every frame. This turns out to be no big deal at all. I run it at 10 FPS and it looks fine. Many frames don't require a redraw as nothing has happened, so it might only draw 1 frame per second. And the rust code that specifies what to draw is much faster and simpler than the pixel shaders (for example) that determine what color each pixel needs to be, and we aren't doing anything like that in rust per frame. So I find my CPU appears pretty much idle, even though it is respecifying what to draw for up to 10 times per second. I find it "fun" to make sure the UI code doesn't block and doesn't do anything compute intensive, and optimizing it really is my cup of tea.

So in summary I'm not against sticking with egui, but to make it look beautiful and to fix the UX, it will probably require some uphill UI development which might have been easier in a different GUI.

/wall-of-text

I have extracted https://github.com/mikedilger/gossip-relay-picker from gossip, and got gossip running using this library instead of an internal copy of it. So now other rust clients who want to use this can. Or any dev can look it over and go "aha, how stupid, I can do better in scheme/javascript/haskell/etc". That's great too. Options, my friends, options.

Hah! I can do "select all" then [done] on my list of github notifications! What a relief! I am free to develop again, no longer overwhelmed and dragged down and demotivated and distracted and ...

GOSSIP USERS: there was a possible infinite loop of trying to fetch the same metadata over and over. I just pushed a fix. (I actually had code to avoid this, but I forgot one critical line!)

Um... you can mute yourself. 🤣 Seriously though, nothing comes to mind. And you shoudn't have to follow yourself to get this functionality.

GOSSIP USERS: Gossip automatically fetches metadata now (on master branch) You can turn it off in settings. It triggers these fetches whenever the UI wants to render a person's details but notices the data isn't there, and a background task starts the fetch operation at most one every short period of time so we don't slam the relays all at once (if you go into a thread you might suddenly need several dozen and we ask on multiple relays per person so it could be 50 or 60 relay connections suddenly popping up if I wasn't spacing them out). It seems fast enough for me but I'll probably make the delay adjustable. #[0]

Lists of your posts are available, but the UX is pretty terrible now. You have to (1) follow yourself, then under People > Followed, you find yourself, click your name, and click "View Their Posts". Sorry for that horrible user experience. But I hope this helps for the time being.

Followers is coming one day. It's expensive to count, so it will require a user interaction (button press) to start the counting... which might take several minutes (I have a command line tool that does it, and it takes several minutes, hence the estimate).

You can just click the person's name for a menu. Yeah I know, the UX is not obvious right now.

I put in code to show your DMs in your inbox. You can't create them yet. And they just show like regular feed events. It is not a brilliant UX and it will change, but I wanted to see my DMs.

I would like to. But when I try to focus an element I get panics in accesskit-consumer. We both have to wait until upstream stabilizes some flaky code.

BTW: don't squirt iodine up your nose without first researching it and understanding the consequences and side effects, such as thyroid dysfunction.

I heard they were shot down only after they did all their spying.

yeah I think that's the answer. i actually just prefer serialized json still. easier than going back and forth through the conversion dance.

People are adding fields to NIP-11 and I want to see them. For example Cameri's nostream has 'fees' and 'limitation' and 'payments_url' fields that are very relevant to deciding if I should use that relay.

#[0], mistagged you initially.

Gossip doesn't support chat yet, and if we need to talk about a bug that stops us from using gossip, we can't do that over gossip.

Maybe another chat-supporting client could be used.