30 lines
3.3 KiB
Plaintext
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.
|
|
|