From Newsgroup: comp.infosystems.gemini
To clarify, is this a correct interpretation
of your idea? What you claim is:
1. Not having support for a POST/PUT feature
is a problem. 2. as a simple problem, it should
be solved simply. 3. IRC is some simple protocol,
it allows sending data. 4. Let's make all Gemini
servers and clients implement IRC, thus allowing
users to send messages to a server.
Is this outline correct? If so, then:
Almost, the 4th point is incorrect in a certain grade than can be caused by a misunderstanding, i though my last messages were implicit
enough in the fact than the IRC implementation was partial, minimal and
not complete, although it opens the door to other very interesting interactions i though that in the descriptions of the idea i send before
were clear enough, but being the case that it seems than that wasn't the
case let me clarify point by point everything in order to solve any misunderstanding than can come from this.
1. Most Gemini users don't think not having
POST/PUT is a problem, in my experience.
2. POST/PUT are not really easy problems, there
are many things to consider and agree upon
between clients and servers. Encoding
things, and compression things, formatting
things, do you allow files to be uploaded,
split into chunks? Is there some protocol
for negotiating the request properties? The
POST/PUT features in HTTP are massively
complex, once you account for all edge cases
needed by all kinds of users and use-cases.
Indeed POST/PUT and the like are not really easy problems to solve and for that type of communication yes, you absolutely need to do A LOT of
work, i completely agree with that, that is why my approach plan is not
to implement POST/PUT as such but instead something than is far simpler
and cheaper in code lines, some limited TLS/SSL in the shape of the
already mentioned FCR, let me describe it properly and give some
examples in order to show how and why i think this can be a good
substitute for POST/PUT in the GEMINI protocol case:
first thing first, you put in your .gmi something like this, this
doesn't need to be rendered by the gemini browser at all visually:
|-#signal-#|-#server-#|-##channel-#|-#subsignal-#|
or this (bear in mind than the subsignals are optional)
|-#signal-#|-#<locationurl.something>-#|-#subsignal-#|
and somewhere else you put this, this doesn't need to be rendered
inmediatly by the gemeni browser either, more on that later:
dataid<
This examples will be called for easy reference, marks.
Observation: I'll be using the marks i just propose next as placeholders
to represent the data they content to ease up the understanding of how
would this work.
Now to the explanation:
The first mark work as a location at some server in IRC, the second mark
work as a location to send a TLS/SSL package as an FCR (Fake
Communication Request), i will continue to call them like and use FCR to
refer to them that but i'm open to other names.
In the first case it will said that the bot/server standing there will
be doing some intermediary job, delivering the gem to whomever wants to
see it there (in IRC) and interacting with the specific commands
designed for this in IRC to allow "bot browsing" or IRC browsing, i
would not go deep explaining this because its not the point in this
specific email, however, i would mention than the bot/server would also
be receiving wherever specific data is sended to it using the |-#signal-#|
in the gem from IRC, and it will be showing that data in that specific
.gmi, in the place that it should, in this case that place would be the
one marked with third mark, in other words >dataid<, the reason of this
would be clearer when i explain how the |-#signal-#| works later.
In the second case, you will be sending something to the specific url
and port specified in the |-#<locationurl.something>-#| and through that
the bot/server will be receiving a TLS/SSL call message which will
interact as if it were a post/put or other type of similar call to it,
but far simpler, that should probably look something like this:
|-#signal-#|-#messageItself-#|-#subsignal-#|
which should look in real life like (again, subsignals are optional):
|-#signalOfTheGem-#|-#Hello there from Client!-#|-#ASubSignalOftheGem-#|
And the answer for that signal shall be something like (dataids are
optional)
|-#signal-#|-#dataid-#|-#success/failure-#|
If for some reason it requires more than one answer and/or more than one point, then:
|-#signal-#||-#dataid-#|-#success/failure-#||-#dataid-#|-#success/failure-#|
So it counts any item to the right like linked to the closest |-#dataid-#|
to the left of them. The use of single "|" and double "||" is there to facilitate cut all of that to a string array or similar easier, looking
with that to make easier the extraction of the data to facilitate the communication.
If there was other data than must be received by the client in the
answer other than success/failure, then it shall be send like this in
the relevant cases (in this cases dataid is obligatory, because is the
way to know where the messageItself from the answer shall be showd):
|-#signal-#||-#dataid-#|-#messageItself-#|-#success/failure-#||-#dataid-#|-#success/failure-#|
And then the communication can be closed, its good to mention than the
idea of the signal is to indicate the client to send such signal through
a QUERY as would normally send data in order to the server to recognize
whom is asking without really deanonymize the client user, this allow to
load the answer marks, as for instance >dataid<, with the corresponding
answer data without really forcing the deanonymization of the client. Of course after loading the new call a new signal shall be given through
the gem.
If it is required another new interaction from that point (being the
point than an FCR interaction has already been solved) the new signal
will be added with the last one, only two signals can be added this way
at any given time, this will look like this (again subsignals are optional):
|-#OldSignal_NewSignal-#|-#messageItself-#|-#subsignal-#|
This will allow the repetition of the data present in the old answer to
be repeated in his newest version with the answer data obtained from the
new answer, provided the OldSignal is added together with the new one,
this will indeed make the new answer to become bigger but that is the
cost required to keep anonymity through the call, of course the client
could just ignore this last part and just send the NewSignal as an
original call and just keep the data from the OldSignal in the client
too, the idea is for clients to have both this routes available for any
client to choose between them as they prefer and with wherever criteria
they would prefer.
The idea of sending both signals separated by a "_" is than if any
change pass to the data linked with the OldSignal the client can update
that data as such too if sended this way (|-#OldSignal_NewSignal-#|), but still the choice is given to keep Gemini clients flexible, being the
case those clients, wherever they are browsers, bots or something else
will allow them to work with it in different context as it could be IOT,
IRC, etc.
To activate the sending of such data the client just send a new TLS/SSL
comm to the address referred in this mark which its better if its not
visible in the gem itself:
|-#signal-#|-#<locationurl.something>-#|-#subsignal-#|
As was stated before at the beginning of this explanation.
It should be noted than maybe some text area input windows can be
necessary from the client so to being able to send data without the need
to necessarily mount that text area inputs in some location in the
capsule as HTTP does, as such i'll recommend that the second mark, being
this one:
|-#signal-#|-#<locationurl.something>-#|-#subsignal-#|
Is implemented as a button to press than open a window where you can put content of some nature to send through FCR, being the case than each
subsignal represent a different context of use inside that determined
gem, which to be recognized as such because it have his own proper
signal, therefore allowing several different input windows in different contexts inside the same capsule. If its not obvious, this will allow to
even old forums being able to be worked on in GEMINI.
This way we can have some sort of minimal API/REST behavior without
inputs or forms of anything like that than they have in HTTP(S), this
with minimal intervention and making the GEMINI protocol also far more flexible and interesting to be used in IOT applications, forums and a
lot of other things which were present in the good old web without
deviating from the objectives and boundarys than the GEMINI protocol has intended for itself.
And that is it really, that is the entire size if not almost the entire
size of the proposal, except for bot browsing, which i mentioned very
briefly here but i think that opens his own world and is more command oriented.
Go without saying tho than, as you clearly said:
Also, the idea you're presenting is not very
outlandish or new. Many communities use IRC bots,
or bots on other chat services, like Telegram, to
allow the submission of things by users, providing
various services. Nothing even prevents you from
pointing your users to connect to some IRC server
to submit things, right now. Just add connection
information to your own published texts, and other
users can connect using existing clients and send
you whatever they want. Most IRC clients/servers
even support sending binary files.
Personally, I would think a more interesting
experience is to use such a setup for /chat/, and
not for file uploads. In other words, turning the
gem site into a "place", visiting it would prompt
you to join its IRC channel, and perhaps meet the
author or other visitors. This would be a client
only feature, no need for anything special on the
server. Just some kind of agreed upon string that
you put on your site, and the client would prompt
the user to join a channel when it sees the string
and gathers the connection details from the string
itself. Anyone can create an IRC channel on any
server, and include that string on their page, and
users can join it when they visit the page.
Yes, indeed, a bot will facilitate and make far simpler a lot the
related connection and coding related to implement a chat in the gem,
given the case somebody wants to do that, reducing severely the need for
a true full fledge IRC client in the gem browsers and will allow for
people to meet between each other "in the gem/capsule" far different to
the lonely experience provided from HTTP(S), but although it do
facilitate that by a lot, i also want to notice than that will
facilitate the communication with the gem from a normal IRC client
interacting with the gem through an IRC server without the GEM being an
IRC server on his own at all.
It is also true than the idea is not new because a lot of people use
bridge bots to connect different services every day but i still think
there is a mayor benefit for the GEMINI community to implement this
instead of only placing your channel credentials, because implement this
will:
A) Give access to it to another, new audience, through "bot browsing", a
thing than today is not even possible to do with web 2
B) Give a solution to send/receive data and files which doesn't add up
too much of a hassle.
C) Both the Gemini Protocol and IRC use TLS/SSL so is the very same technology, very coherent in the code style perspective.
D) Give a solution than add a lot of flexibility and a lot of new uses
(bot browsing/data receiving/gem meetings/etc.) keeping thing really simple.
But most importantly, as you notice, if you go now and put some IRC credentials in your gem the only thing you are gonna do is tell everyone
you have an IRC, you can do that with a Discord, a Mastodon or a webpage
even, but so far the Gemini protocol is the only one capable of exploit
the advantage of his simplicity allowing other sources of Gemini
explorers from other sources different than browsers.
Besides right now the only use somebody can assign to the Gemini
protocol is for having something similar to a blog, or an old HTML page
but without anything than requires true interaction, its like forcing by protocol to have a really limited CMS but without the flexibility of
actually using one, and from that perspective all I'm saying is than
with very little additions we can add several other new uses taking
advantage of its simplicity without damaging or forcing changing the old
uses at all and without changing that simplicity or breaking the
approach the Gemini protocol takes for things.
I have done some advances in my IRC/GEMINI bot, its showing promise,
will add the capability to receive all this things i mentioned here and
will released it as a MIT. I agree than i need to put something out
there and its coming together, will let you guys know when that happened
in this thread too.
May you both have a nice day
--- Synchronet 3.22a-Linux NewsLink 1.2