This blog is now (also) a gemlogAndrew Fontaine <firstname.lastname@example.org>
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.
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.
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.
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
spaceboy rely on the same dependencies for TLS and TCP (the
backbones of sending things on a network), but different versions.
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
After a little digging, however, I found an issue that stated that the
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.
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
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 ~email@example.com, and be sure to follow the mailing list etiquette.Other posts