This article is also available in French.
Cet article est également disponible en français.

TL;DR My blog is now hosted at ejpcmac.net/blog.

Introduction

I have started this blog a bit less than two years ago on Medium. It was a great platform to start with: there is no setup, nothing to configure, so you can start to blog in minutes.

I just wanted to share some tips about programming in Elixir. I had seen other people doing that, and the point I wanted to talk about had not been addressed by anyone else. Since then, I have published a few articles about open source libraries I’ve written and tips for tools I am using. Now, it is time to switch to a self-hosted statically-generated blog.

Statically-generated websites need a bit more setup: you have to choose a generator, learn how to use it, choose a theme, and have some hosting provider. Yet, once the choices are made, it is fairly easy to use: you just write your articles as Markdown files, and compile them to a static site in one command.

Why I am migrating

For the workflow

I wrote the first article of this blog in Markdown, while offline in a train. When I wanted to finally publish it on Medium, I needed to go through the whole article to fix the formatting.

While the Medium online editor can be practical when you are online, as you can switch from a machine to another quite flawlessly, it has some drawbacks: you cannot edit your articles while offline and you don’t get a local copy of your article for archiving purpose.

With a static site generator, I can write my articles in my text-editor of choice: Emacs—with Evil mode to get all the Vim modal editing capabilities, of course. The experience is far better than writing in a web interface when you know well your editor—for the same reason, I also use Emacs to write my emails. I can also view the final rendering while offline by serving a local version of my blog in just one command. Switching between machines during the writing process is still easy to achieve: Markdown files are text, so I can use Git to follow the modifications an synchronise them between hosts. I will also eventually configure some continuous delivery process for my blog, so I can publish changes simply by pushing to the master branch.

Publishing via Git is pretty efficient in term of bandwidth, as it transfers only the compressed difference between two states. Low-bandwitch networking has become an interest of mine lately, as I will be the System Administrator of the scientific base in Kerguelen Islands, starting November for a full year. There, internet access is provided by a VSAT link: it is pretty low, thus limited to professional activities. Editing a blog in a web interface sending data to the server nearly in real time—like the one of Medium does—is not possible.

For flexibility

Medium is minimalist. While it can be viewed as an advantage, it also lacks some refinements. One of them is the lack of syntax highlighting for code examples. Compare the readability of this:

defmodule Example do
  @moduledoc """
  Just an example.
  """

  @doc """
  Says hello.
  """
  @spec hello(String.t()) :: :ok
  def hello(name) do
    IO.puts("Hello, #{name}!")
  end
end

with this:

defmodule Example do
  @moduledoc """
  Just an example.
  """

  @doc """
  Says hello.
  """
  @spec hello(String.t()) :: :ok
  def hello(name) do
    IO.puts("Hello, #{name}!")
  end
end

I can also organise articles in categories, in addition to tag them. While this blog is currently a purely technical one, it will change: I will talk here about my wintering in Kerguelen, using a category for it. Other categories could come at any moment, if I find interesting subjects to tell.

Zola—the static site generator I am using—also lets me to publish in multiple languages. This will be useful: my technical articles are written in English, but I will write Kerguelen-related articles in French and translate them eventually.

To own my data / for decentralisation

The last reason for my move—which is in fact maybe the first one—is a philosophical one: the World Wide Web was built to be decentralised.

Platforms like Medium are great to provide discoverability and easy social interactions. However, this centralises the place where articles are written and stored. I own the intellectual property on my content, but not its URL since it is hosted on Medium. Also, by writing the articles directly in the web editor, I don’t get a local copy for archival purpose, and it is not easy to get one in a clean markup format.

With a self-hosted solution, I can fully own my content: in addition to know where it is stored, I also own the links to my articles since they are under my domain. I am responsible of it, like I am responsible of what I am writing.

There is a move lately towards a re-decentralisation of the Web. While social media like Diaspora* or Mastodon struggle from the lack of network effect because Facebook and Twitter where the first successful implementations of these concepts, the blog space existed way before Medium came. It is decentralised by design.

You can follow blogs without the need of any third party by using Atom. All you need is a news aggregator, where you can add your favorite sources of information. The aggregator then connects directly to the different sources to check if there are new articles available.

Conclusion

After publishing on Medium for two years, I’m migrating to a self-hosted blog, generated with Zola. It fits better my workflow and philosophy, while adding flexibility for future evolutions.

If you don’t want to miss any article, you can follow my Atom feed in your aggregator of choice. Don’t hesitate to send me your own feed so I can follow your publications too. Let’s decentralise the blogging again together :) To get in touch, comment or make a suggestion, you can reach me via email or Twitter.