Matjaz Mesnjak 97fc149f49 Initial commit.
2022-01-07 15:32:19 +01:00

30 lines
3.3 KiB
Plaintext

# Uplink Gopher Server
A story of an old gopher server
A long time ago I wrote a little gopher client in C#. It was a fun excersize as I was learning to program. To test it I also wrote a little server to go along with it. Years passed and my gopher client can't handle a big part of the net that switched to IPv6. Oh well. The server works as intended, but the old 3.5 .net framework is outdated. I would need to recompile it but I cannot make the new mono compilers work on Solaris (the old one works fine). So I fel t a little stuck with the old server and old framework. And a half working client.
Then one day I found gemini protocol and several projects around it that also support gopher protocol. I especially liked Lagrange client that can handle gemini and gopher. I began research and experimentation. I like how it renders menues, how it displays text. It makes this old prtocol shine with the beautiful typografy. It really is my new favourite way to look at gopher.
=> gemini://gemini.circumlunar.space/docs/ Gemini protocol
=> gemini://skyjake.fi/lagrange/ Lagrange
Gemini (and Lagrange in particular) took several ideas from gopher and some from the www and created gemini. Even better - these new paradigms were then applied to gopher aswell.
Let me elaborate a little on this paradigm shift.
Gopher is a protocol that serves two kinds of content - menus and files (ok, there are also several others like images, links to telnet servers, search items and so on). Menus are - as far as gopher is concerned - just that - menus. Items can be seen as files, just like in ftp. There is even gopher file system driver - you can mount gopher server as filesystem under linux. Lagrange displays menus as a form of websites.
When I was creating my gopher client and server, now about ten years ago, I never tought about that. My client takes the menu content and renders it in a full window listbox element. I tought about this listbox as being a "page" ... but man, Lagrange really took it to the next level.
And this kind of thinking opens up new ideas - that got implemented into gemini servers. Gemtext files - gemini markup language. Markup for menus that are really pages. This could be applied to gopher aswell. Others probably already did it ... I had to try.
So I created a small gopher server in NodeJS. 99 lines of code at the moment. It takes gemtext file and transorms it - line by line - into gopher menu and then sends it over to the client. Works nicely.
99 lines of code is not a lot. I did not bother implementing folder browsing. Folder browsing is so ... 80's when it comes to gopher. Or maybe 2010. Gemini influence is ... at least for me - a new boost in interest for gopher.
But my previous server was capable of properly handling Gopher+ requests. The chalange is to do the same in NodeJS. That might prove to be a chalange indeed as the paradigm shift never took Gopher+ into account. Will try it, lets see hot it works.
And that is not all, by any mean. As gemtext supports some formating, similar to what is supported in markdown, you can mark titles, lists and so on. Markup is a really small subset of markdown, but nevertheless usefull. And that very same markup can be used also in gopher. And Lagrange will happily format the text accordingly. Wow.