This blog is now (also) a gemlog
Andrew Fontaine <andrew@afontaine.ca>
That’s right! This blog is now live on the gemini
protocol. Using your
favourite gemini browser, you can now see all this text in lo-fi glory.
What is gemini
?
gemini
is a new protocol, first introduced in a 2019, as a stripped down
protocol for the transferring of data, similar to that of HTTP, but with a
purposely smaller scope. It was inspired by a protocol called Gopher, an older
protocol that was competing against HTTP when the web was new.
Gemini also comes with a new markup format, gemtext
. Gemtext is similar
to markdown, but is also stripped down. There are no bold, italics, or
other in-line formatting. Links live on their own line, and there’s no way to
embed images. This is by design, leaving any formatting (with a few exceptions)
to the client. There are still headers, blockquotes, and a way to display
preformatted text, but that’s it.
Why gemini
?
Well this blog (or gemlog, in gemini) is entirely text, so it seemed like a good enough reason to be available on a text-first platform. It was also an interesting addition to the elixir application that runs this site. It is still one monolith, there is no separate gemini microservice. It has interesting design constraints as well. As the document is just text, the layout of that text is important, and creating and displaying sections in a coherent manner is a fun challenge that I’m not sure I’ve worked out.
How gemini
?
Well phoenix
, the web side of this application, doesn’t know how to speak
gemini, but after a little digging, I found spaceboy
, a “[h]eavily
simplified” take on the phoenix framework for gemini.
First I added a new application to my umbrella, with mix new
. Trying to
install the dependency was met with several dependency conflicts. It turns out
phoenix
and spaceboy
rely on the same dependencies for TLS and TCP (the
backbones of sending things on a network), but different versions. cowboy
, the
HTTP server that phoenix
relies on, was set to depend on ranch
, the TCP
library, version 1.something, whereas spaceboy
relied on ranch
version 2.0.
This looked like a pretty major conflict that I could override, but didn’t
look promising.
After a little digging, however, I found an issue that stated that the
version of cowboy
that I was using actually supports both ranch
v1 and v2,
so overriding the dependencies was correct here.
The next struggle was with spaceboy
‘s (minimal) templating system. phoenix
very fancily handles things like layouts and actually compiles the templates
into elixir code. spaceboy
does not, so when I went to deploy it for the first
time, none of my pages worked as the templates were left behind. I reached
out for any ideas, but ultimately came up with a solution before the author
could respond. It has given me some ideas on how to contribute back to
spaceboy
though.
Where gemini?
So that’s pretty much the whole story! If you’re interested in seeing this site on gemini, you can grab a gemini client, and start exploring the space. I checked out Lagrange and found it quite lovely for desktop computers, and deedum works great on android. I have some things to touch up on here and there, but for now it is live. Please check it out, and let me know what you think!
Want to discuss this post?
Reach out via email to ~afontaine/blog-discuss@lists.sr.ht, and be sure to follow the mailing list etiquette.
Other posts