Re: Solderpunk and a new protocol[0] 2019-06-19 Having been less engaged in pubnix and gopher for around two weeks following the birth of my daughter, I checked in today with the intention of reading solderpunk's 3 phlog series on a protocol between gopher and the web. I have talked with sodlerpunk and others about this in the past and was then and remain excited about the possibility. I am excited for a few reasong: 1. It is always exciting to be around for the birth of something and not know what will become of it, but have high hopes 2. I LOVE the gopher community, but gopher is not without its shortcomings 3. It fits in with my view that the internet on the whole can still be anything we want it to be, but we must steer it there and not just be fed things from large companies. Change CAN come from users, and I do not believe you have to be a programer to take part. As such, I highly recommend reading solderpunk's posts and writing your own response! Now to the response in general: I. Headers - Request Headers - I cannot think of many use cases for request headers and generally agree with solderpunk's sentiments on the issue. I can see cases where making a language request could be useful. For example, I know that slugmax phlogs in english AND french. Since I do not speak French I have not viewed their French phlogs and do not know if it is duplicate content in another language or not. If it is duplicate content then a request header from a client could be useful and make it so slugmax did not need to keep separate phlogs in their feeds. Alternatively, servers could implement server-side translation of text/map documents (if this were to happen I think the server should also isnert a line at the top stating that translation has occured and give the source language so that a user may request it if need be). I think that kind of use case would really be neat. Of course, it would require those running servers to buy in to such an idea and is really not a protocol level question for the most part. - Response Headers - I very very much agree with the notion that adding open ended headers is a broken idea that just sets up abuse. I think that the proposal to have headers set up as: <status code> <MIME type> <optional encoding, default utf-8><cr><lf> Is a worthy setup. The status codes will make proper issue handling actually possible... something I have struggled to be able to communicate and figure out in Bombadillo over gopher. The MIMEtype approach makes perfect sense to me for the most part. There is some consideration given in regard to having a text/map type or just having everything be one type that serves both text and links. I think I fall into the separation of interests camp. The idea to have one text format and just scan for links sounds appealing at first. With a lot of content on gopher, where things are relatively short, it makes a good amount of sense. However, what happens when a very large text document is served? I found on gopher at one point a copy of "The Fellowship of the Ring" as a plain text file. Under a system in which this could contain links or could not a client would have to parse the whole document before serving it to the user. While it should not take a crazy long time to do, it is extra processing that is needless. Having a text/plain and a text/map differentiates the files sufficiently and would let a client know not to try parsing the text/plain file. I do not know a lot about how a server/client determines MIME types. Is it infered by file types (ie. *.html)? If so, then it could make sense to, by convention, user *.map or some such for files that we would want parsed as maps. But again, this is not an area of expertise for me and I will need to do some research into how a server would know the mimetype of a file. Either way, my concern with the separation of plain text from map files (that may contain links) is whether or not to bother parsing the file or just serving it up. Encodings. This is making me flash back to working with Python 2.x. Dealing with encodings can be a pain. Sure enough, I checked the russian gopherhole[1] that solderpunk linked... bombadillo does not display most of the characters. As such, thank you for pointing that out to me! I think an encoding declaration defaulting to utf-8 is a great great solution. II. Links, links, links I absolutely agree that the itemtype i business is a dirty workaround that has served its purpose but should be improved upon. I generally like the idea of a file that has plain text (no need for item i) and has links on their own lines. Solderpunk suggests links go on their own lines and are set up as: <item type><TAB><item name><TAB><url> I think, for me, we could likely lose the itemtype. The client will get a mimetype from the server (if the above header conversation plays out as suggested), and clients will be able to use that to prompt a download or the display text content or the like. The itemtype always weirded me out anyway. A user can put whatever they want... so it is an on your honor kind of thing. This trust has generally played out fine on gopher, but why bother? I like the idea of something like: ~! My Link@someurl.co.uk/main.map Which is the equivalent of: <link indicator><space><title><@><url> My thought on the above is that using something at the beginning of the line to indicate a link simplifies searching for links (you dont need to read the whole line to know that you are at a link line) when parsing a document. I am not tied to the ~! combination. It is just a suggestion. The @ symbol could be any other indicator ( == comes to mind), and was used in place of tab for the specific reason that lots of people set their editors to replace tabs with spaces. It is annoying to toggle that on and off so using a standard textual character (or series of them) makes more sense to me. III. Misc - Directory default file - It occurs to me that if all files, in solderpunk's description, are both maps (can contain links) and content... what does a request to a directory get you (ie. a request that ends in a '/')? For gopher, it usually (though not always, it depends on the server) will grab a file called 'gophermap' within that directory, if one is present. Some servers, absent a gophermap, will provide a gophermap of the files in the directory. So what is the proposed behavior with this new protocol? Is it to be a part of the protocol at all or something left to servers to figure out and implement? The web has largely standardized on index.[htm|html|php|etc]. Would a base level file name be beneficial, such as index or gophermap? Or would some other behavior make more sense? I'm not sure the answers to these questions. - Media Types - After the above confusion over how MIME/media types work, I did a little research before finishing this. The wiki article[2] on the subject was quite helpful. It seems like the media type structures already in place would be very useful and provide great flexibility for clients. For example 'image/png'. A client can easily be set for anything in the image tree being a download item rather than display. This is particularly useful for terminal based clients. However, a graphical client could decide to display the image to the user (as its own document, not inline with text). I think this flexibility will prove to be quite nice. As a result, I definitely have come round to gneral support of the suggested response header from solderpunk. The one remaining question I have then is would a new media type be created for the text format under discussion (plain text plus links)? - Search/Interaction - The subject of search is an interesting one. Gopher's type 7 is an odd but solid enough way of handling things. I feel like there could be a solution via a new mediatype. Have the server send back a mime that lets the client know that an information/query request is being made. I would think that the server response could include any arbitrary text, to be used as a prompt, and the client would know to let the user enter text after displaying the response body. The prompt input would then be sent back to the same server address (possibly by the same method gopher uses... <url><TAB><user query>) and get a response back with the mediatype appropriate to that reponse (rather than the search mediatype). This would enable things like weather reports[3] or wikipedia[4] to still function well. IV. Closing thoughts I am pretty excited about this collective project that has been under discussion for some time. I think it would find users well and I think that its simplicity overall would allow it to get worked into existing gopher clients. Wouldn't it be wonderful to just not have to worry what protocol you were using? Produce your content on the one that makes sense to you and let the world view it as they see fit. :) It was not thoroughly discussed in sodlerpunk's writeup, but I do know that they are big supporters of adding tls as a core part of the protocol. I think that is a good call. [0] gopher://zaibatsu.circumlunar.space:70/0/~solderpunk/phlog/protocol-pondering-intensifies.txt [1] gopher://gopher.pclovers.ru:70/1/rus.koi8 [2] gopher://gopherpedia.com:70/0/Media type [3] gopher://gopher.floodgap.com:70/7/groundhog/us/zipcode [4] gopher://gopherpedia.com:70/7/lookup * I was having trouble using gopherpedia's search while getting the above media type link. Upon looking into it further, it seems someone has donked up their root gophermap the link points to 0.0.0.0:70. Hopefully someone over there realizes it and gets it fixed up. You can still use the link I provide, it just cannot be accessed from their main page.