=> Re: "What would you want to see in a desktop GUI Gemini client?..." | In: s/Geminispace
One thing I've failed to accomplish in my own client is proper streaming support. If a server is sending one character at a time, I want to see those displayed in real time. Not because it is particularly helpful though, it just looks cool and could be useful in some capsules with real time capabilities like chat.mozz.us. Parsing becomes way harder when you're dealing with chunks of arbitrary length instead of full documents.
@ps I'm using Iced myself! Feel free to ask me anything about it.
=> 🛰️ lufte
Jan 13 · 6 days ago
@lufte never heard about chat.mozz.us - thanks for new toy!
about Iced, yet not learned documentation a lot, but it looks like pretty small toolkit, comparing to glib monster where over these years, implemented maybe everything - from streams to high-level widgets. But some bugs there also living as long as maybe gnome project exists :)
About Iced, there is lot of questions, maybe later will make some list.
Some features that I would be interested in would include:
See also:
=> — (My ideas about making up a multi-protocol browser called Dschubba)
=> 🚀 clseibold · Jan 13 at 04:29:
First: NOT GTK or Qt!!! :D
Audio streaming (mp3 and ogg) is a must for me. But I would also like someone to try to experiment with video streaming, looking into streamable video formats like fMP4, MPEG-TS, and others that can be linearly streamed.
Titan is a must, imo. Being able to view images is also a must.
Support for CSV/TSV files would be great. RTL text support is important. Lastly, nice quick and smooth animations for the GUI.
If you might go with Rust, then I highly recommend Zed's GUI library (I forget what it's called).
Also: SOCKS support (with SOCKS domain resolution).
I think that using a separate program (e.g. SoX, VLC) for playing audio/video is probably more helpful, than trying to make the browser to be a video player too. At least for audio, I had used curl with sox for streaming, and using astroget (or a similar program) with sox (or other programs) might also be able to stream audio/video.
Animations are also something that I don't want (and would at least want to be able to disable them).
Displaying CSV/TSV looks a reasonable feature to me, though.
P.S. I also dislike GTK and Qt (and they would conflict with some of the other stuff that I mentioned anyways, I think)
@zzo38 and here we go about our multi-protocol thought ;)
=> 🚀 clseibold · Jan 13 at 04:41:
@zzo38 A browser can easily pipe audio/video into another process, since VLC and MPV don't support Gemini. But it'll also be cool if someone experimented with a more direct approach to streaming too. I'm not saying video streaming is a must, but I want someone more knowledgeable in GUI programming to experiment with it, lol. I believe you can integrate VLC into applications directly.
Also, I'm not using curl or gurl or other terminal crap to stream audio/video from Gemini. That's ridiculous. Pipes were created for a reason! Browsers should use them!
I agree that browsers should be able to use pipes, including to pipe audio/video to other processes. (The ability to tell the other process (e.g. by a command-line switch) to use the browser's document area to display it, might also be helpful as an option, if you aren't using the full UI of the other program, I suppose.)
=> 🚀 clseibold · Jan 13 at 04:51:
Right! Actually, let me modify my browser wish-list: ALL browsers should be able to pipe streams into other processes! And this piping should be configurable within the GUI, and maybe it could like auto-detect that VLC or MPV are installed and auto-use those for audio/video :D
I'm literally begging that all browser writers do this, lmao. Piping, at the very least, is so easy to do, and it works on the three major OSs (Linux, Windows, and macOS).
anyway, is any rational reason to use Gemini for media streams? at least it requires TLS encryption, when I'm trying to use plain connection to improve power safe values by skipping extra layers. Not sure I understand why people trying to wrap everything into some favorite delivery method (lol, sometimes me including)
=> 🚀 clseibold · Jan 13 at 05:05:
@ps I'm not sure I'm understanding the questions completely, but pipes is just inter-process communication. The browsers whole specialized purpose is to connect to internet protocols to download files - this includes media. The logical thing to do is to take what the browser has downloaded and pipe it into the software that can then display/read it. For Audio/Video, this would be VLC and MPV.
So, a Gopher browser can start the download process of a video file and pipe it directly into VLC to play. Each software is working for its purpose - Gopher as a document-sharing internet protocol, and VLC as a video player. This is the exact purpose that pipes were created for.
About using Gemini for media streams...
Setting up an RTMP server, or HLS, or whatever else is actually more complicated than it really should be. Not everybody wants to have to set those things up, and some people might just want to throw a few mp4s into a folder and host them on their gemini site. People should be able to stream those files and pipe them directly into VLC. There is no seeking, but seeking isn't always necessary.
The benefit of using Gemini for livestreaming is Gemini is a very simple protocol to develop for and setup. I created my own radio livestream over Gemini much quicker than I could have over HTTP(S) or rtmp or whatever other protocol. The reason is because Gemini is just sending the bytes as they are. RTMP and other protocols have a bunch of other complicated details to support other features that livestreams don't actually need - like RTMP can do Video-On-Demand stuff, HLS can do seeking and playlists and dynamic resolution switching, etc. Gemini livestreaming is just a simple byte stream with no extra features.
The last thing is it's easier to develop a livestream capsule alongside the livestream itself all over Gemini without having to deal with switching applications based on the protocol, and having to interoperate between an RTMP server and a Gemini server. I can quickly get the current-playing song of my radio livestream on Gemini to display it because the radio livestream is implemented in my Gemini server; My Gemini server doesn't need to contact the RTMP server so it can display the current-playing song. The Gemini server just already has the currently-playing song stored right there in memory.
The last reason: it's just fun to experiment with media streams over Gemini :D
Hm, lightweight - yes, comparing to ugly websockets. but not lightweight enough because contain few header extra bytes haha, but if seriously I don't see any profit to make myself addicted in media context.. at least because of TLS.
=> 🚀 clseibold · Jan 13 at 05:17:
@ps To expand on the penultimate point: not having to do inter-server communication is a BIG bonus. I can not only get the current-playing song of the livestream to display on the Gemini capsule, I can create a Gemini interface where usres can pick and choose what gets put on the livestream. If everything is all in the same server, then I don't have to try to communicate between the Gemini and RTMP server to build this playlist.
While one could just build their own RTMP server right in the same server application as the Gemini server, that's way more complicated than just building the livestream to use Gemini in the first place.
RTMP does use UDP so it's technically better for latency, but meh, it also has other complications.
The addition of TLS lets you do livestreaming in a user-based environment. My AuraGem Music thing basically does this for music streaming - you upload a private library of music that only you can stream. This is done using client certificates.
(p.s. AuraGem Music will be shutdown in the future, but I will release a SCGI server so people can host their own Gemini music streaming servers)
@clseibold the main issue for me - I'm using another TLS layer over existing connection. Gemini protocol just require from device extra computing, when it does not really wanted. I want encryption as the option, but nobody will change that, so by selecting communication protocol, I would prefer NEX or even plain connection with own packets model implementation.
About authorization, not sure certificate handshake is really wanted everywhere. If we are talking about security - most of clients/servers cache the session using tokens, imho that's not much better than some abcd password.
But I understand you!
I agree that TLS is not always desirable (myself and other people have had this criticism of Gemini protocol), but should be an option (which is why I made it optional with Scorpion protocol; this is also technically true of HTTP although many servers require it anyways even if they shouldn't).
Certificates won't work without TLS, so some things might require TLS due to this, such as the private library that @clseibold mentioned being one example of this. Other kind of authentication (e.g. passwords) are usable if you do not want to use TLS, although if you are worried about someone spying on it then it might not do, anyways.
@zzo38 looks interesting, could you please share the link to read about Scorpion protocol?
@ps
=> — Protocol specification on GitHub | — Specification link (using Scorpion protocol)
=> 🧇 Acidus [OP] · Jan 13 at 14:19:
Interesting feedback. Some follow up questions:
@zzo38:
handle other charsets
What do you have in mind here? Charset's in Geminispace at least are overhwleming Unicode, or ASCII
gemini://gemini.bortzmeyer.org/software/lupa/stats.gmi
jar: URI scheme (for displaying Gempub)
Gempubs are ZIP files, not JARs. Do you just mean support gempub?
Other image formats: QOI, Farbeld
This seems at odds with your comment about not too many dependencies. What image formats would you want to support
print out
I don't understand. Being about to print to paper what is shown? What if inline images are used?
user defined alternative service redirect
Does this mean defining what programs to run for certain URL schemes? Doesn't the system handle this? like if I click a mailto:
URL, open the default mail client
Relative URL entry (if "entered")
This is confusing. The browser will need to handle link lines that are relative URLs. You seem to be saying a user should be able to just type a relative URL into the address bar (e.g. "../foo.gmi" and that should be resolved against the current URL and go there. What is the purpose/need here?
=> 🧇 Acidus [OP] · Jan 13 at 14:26:
@lufte Thanks for the suggestion on streaming for text. I I can see displaying characters one at a time as they come in. I suspect I'll need to buffer a few characters on each new line to what line type it is
=> 🚀 clseibold · Jan 13 at 14:31:
@Acidus I think streaming by line would be just as fine, honestly. Also, yeah, that's a very useful feature to have, not just because you can do infinite text streams, but because text displays as the document is downloading (streaming in), so it shows up quicker, which is great for people who have slow internet speeds.
@Acidus
What do you have in mind here? Charset's in Geminispace at least are overhwleming Unicode, or ASCII
This is true (and ASCII is a subset of UTF-8, although that report does not necessarily include all files; it only includes all known files), although sometimes (regardless of the protocol) you may have reasons to use other character sets. Many users might not find it useful, although I would, which is why I mentioned it.
Gempubs are ZIP files, not JARs.
JAR files are actually ZIP archives. The jar: scheme can be used with any ZIP file, not only JAR (I think it is called that because this scheme was originally used for Java, but it is not only for use with Java).
[QOI, Farbfeld] seems at odds with your comment about not too many dependencies.
QOI and farbfeld are both simple formats. If you use external programs to convert files, then there will need to be something to convert it to, and farbfeld would be a reasonable choice, I think. However, in my opinion farbfeld is not very good for disk storage or for transfer by internet, so QOI would be a simple enough format that would be more suitable for such uses. Farbfeld is good as an intermediate format for conversion and for manipulation of pictures.
=> — Link to C program for converting QOI to farbfeld
Being about to print to paper what is shown?
Yes, like many other programs do, too.
Does this mean defining what programs to run for certain URL schemes?
This is not what I mean, although it would presumably be able to do that too. (I hoped I explained above what I did mean; e.g. if you link to Mastodon or GitHub or whatever then it can use a user-specified implementation of their APIs (using an external program or an extension) instead of trying to use their non-working HTML and JavaScripts.)
You seem to be saying a user should be able to just type a relative URL into the address bar (e.g. "../foo.gmi" and that should be resolved against the current URL and go there. What is the purpose/need here?
Yes, it is what I am saying. I had managed to modify Firefox to do this and I find it very useful, much more useful than having the browser try to guess (wrongly) what I meant.
(P.S. The relative URL entry is also useful in combination with the ALT+ENTER feature of Firefox to open an entered URL in a new tab. That way, you can e.g. type CTRL+L / ALT+ENTER and then you can open the root file of the current domain in the new tab.)
@lufte
@ps I'm using Iced myself! Feel free to ask me anything about it.
I've tried vimini, but found that text selection is not implemented yet, interesting why: it's because of keyboard-oriented client or some Iced restrictions?
If you know this framework well, let's maybe create new Subspace to talk about?
=> 👤 jdcard · Jan 14 at 00:01:
The item at the top of my wishlist is printing. Deedum is the only client I know that allows me to send rendered content to my printer.
=> 🧇 Acidus [OP] · Jan 14 at 02:28:
@jdcard awesome. seems like a great feature. A few questions:
I would print this as rendered content (as in, Headerings are larger than body text, preformatted uses fixed width etc). I'm considering displayomg images inline with the gemtext if you click on them. Would you want inline images (if any are present and opened) to be included?
=> 👤 jdcard · Jan 14 at 03:37:
Yes, that's exactly what I had in mind.
Two years ago I wrote a blog post about printing Gemtext documents:
=> — jdcard.com/blog/2023-12-06T19-40.gmi
The solution I came up with is a bit clunky. I have a PHP script that converts the Gemtext to HTML (including inline images, and even tables if the source includes a link to a .csv file) and displays it in a web browser, from which a quick CTRL+p sends it off to my printer.
=> 🛰️ lufte · Jan 14 at 13:59:
@ps I think we're in need of a rust subspace, as the current one (/s/rust_software) is not meant to discuss the language and also sits unmoderated since a while ago.
My browser is notoriously lacking text selection and full page search. Iced didn't provide, at the time I started using it, a way to render multi-line text that could also be selected. Now there is a proper text editor that could be used for such purpose if it supported a read-only mode, which I haven't tried. Search is not implemented because it didn't (and still doesn't) provide a way to scroll to the position of a certain element without knowing its precise offset.
@lufte
just installed some examples from their repository, and same there.
in gtk, text containers support this feature, but everyone using TextEntry widget there as it's faster. In fact, in 99% of cases, every large text container in gtk is editor, switched to the read-only mode (in other words based on TextBuffer)
about Iced, that's sad, because I was ready to start work on the new branch (and gemini driver crate), to rewrite own browser that codebase looks like a huge draft and I want to cleanup it before continue with new features.
Anyway, just created new subspace to not overload this thread, also gave you mod permissions
=> — bbs.geminispace.org/s/Iced
see you there!
=> 🚀 peteyboy · Jan 15 at 02:07:
page search, and really, a sane way to handle client side certs. I need a way to port them between machines that is not completely 'in the weeds', please. Let me make a digest file or something and send it to/from my phone or something with import/export feature?
For me, text rendering with complex scripts support and integration with the OS mechanisms are the most important features a GUI browser must have.
By OS mechanisms, I mean passing the whole or a selection of content to other programs for things like dictionary lookup, text to speech, note taking etc. That is, at least on macOS, the ability to use the system services or shortcuts.app and other platform facilities.
Also accessibility might be a necessity for some. I use TTS as a convenience, but folks may depend on it. This is also kind of a litmus test for OS integration. For example, Lagrange (the gold standard of smolweb browsers) can only speak the first paragraph (customarily the header) and the site name, and I have to use manual copy-paste for things.
These days terminal emulators display images and can replace most GUI apps by basic scripting. But although mainly text based, they still cannot accurately render text as good as GUIs. When I checked last year, iced (using cosmic) was rendering text better than other light alternatives. But integrating that text content with the OS was a hassle.
In the rust ecosystem, using tauri may be a viable alternative. It uses the system webview, and solves those hard problems by default. A major drawback of it, is that its target community seems to be JS and web developers. And trying to use pure rust may be adding bloat to the final executable. For size comparison, a tauri app (without JS) I put together in a couple of hours:
37M target/debug/laika 13M target/release/laika
That includes basic HTTP/HTML support using fivefilters configs (embedding around 7M of site configs) with readability algorithm fallback (but fails for sites that are behind cloudflare). But lacks all browser features other than getting the content and rendering.
If by "page search", you mean to search within a single document, then I agree and I forgot to mention that.
About porting certificates between computers with a digest file and import/export, I wrote a document with my ideas about a file format which could be used for such a thing (you can write comments/complaints about it):
=> — https://github.com/zzo38/scorpion/blob/trunk/misc/certconfig.doc
=> 🚀 peteyboy · Jan 15 at 05:44:
zz038 yes, I meant 'in-page search' or page search
=> 🚀 peteyboy · Jan 15 at 05:46:
for* page search, sigh I'm glad you agree! :)
What would you want to see in a desktop GUI Gemini client? What do you wish your favorite client did, that it doesn't do, and why? All idea's welcome!
=> 💬 Acidus · 33 comments · 1 like · Jan 13 · 6 days ago This content has been proxied by September (ba2dc).Proxy Information
text/gemini; charset=utf-8