+++
date = "2019-12-23T07:00:00+01:00"
title = "Merry Christmas 2019: New Beginnings"

+++

Hope everyone had a great year. Let's take a look at
what happened and what's coming.

2019 has been the year of pre-releases with Ranch 2.0
and Gun 2.0 getting close to completion. I hope both
of them will be out in the first half of 2020. They
were supposed to be released in 2019, but I guess
that was a bit optimistic. Ranch 2.0 is a big
performance improvement if you need to quickly open
a large amount of connections (but you probably don't),
while Gun 2.0 is a few small breaking changes in
the lower level interface to make things clearer,
plus a ton of new features.

Cowboy 2.7 has been released and 2.8 is just around
the corner. 2.8 will improve the performance and
include a section in the guide to get the most
performance for HTTP/1.1 applications, since it
is currently not obvious. There might be further
experiments around asynchronous interfaces in order
to squeeze the most performance out of Cowboy 2.

At the start of 2019 I submitted a patch to
Erlang/OTP that added support for `active,N` to
the ssl application. This is available since OTP 21.3
and is the basis behind the biggest performance
improvement in upcoming Cowboy 2.8.

Last year I was hoping to keep the number of tickets
open across all my projects to below 100. I did not
quite accomplish this but have managed to keep them
at around 120. Not too bad considering many of those
are just ideas or personal reminders.

I've recently resumed work on my Farwest project.
This is a complete reboot following the initial
experiments and a few years of research. The goal
is to provide a framework for building fully
RESTful applications, including both server and
client components. An https://github.com/ninenines/farwest_demo[early demo]
is already available. The https://github.com/ninenines/farwest[project itself]
is not available, but that will change as soon as
I complete the first test suite in a few days. I
will be giving a demo of the project at
https://fosdem.org/2020/[FOSDEM 2020]
in the https://beam-fosdem.org/[BEAM Fosdem Devroom]
in just about one month. It's free, you should come!

The demo will take around 20 minutes and I will do
some live coding, creating an API for manipulating
(d)ets tables. 20 minutes is a short time so we'll
see how far I'll manage to get. I can promise that
discovery will be working, at the very least.

Related to Farwest, I've recently submitted a patch
to Erlang/OTP adding the functions `uri_string:resolve/2,3`
to perform https://tools.ietf.org/html/rfc3986#section-5[reference resolution].
This was necessary in order to implement
https://tools.ietf.org/html/rfc8288[the Link header]
in Cowlib. I have also implemented
https://tools.ietf.org/html/draft-ietf-httpbis-header-structure-14[Structured Headers],
https://tools.ietf.org/html/draft-ietf-httpbis-variants-06[Variants]
and https://tools.ietf.org/html/rfc6570[URI Templates].
The combination of these enable efficient resource discovery
in Farwest.

In the context of my work with the team at RabbitMQ
I have submitted patches to Erlang/OTP to add the
functions `crypto:cipher_info/1` and `crypto:hash_info/1`.
We have also submitted smaller patches to expose more
metrics related to the Erlang distribution, helped
fix a few issues around the interface for custom
distribution drivers, and submitted a number of
improvements to https://github.com/deadtrickster/prometheus.erl[prometheus.erl]
including some new collectors and dashboards.

You can forward Santa Claus to
https://github.com/sponsors/essen[GitHub Sponsors]
for sending presents. I use these funds mainly for
improving the testing environments for my projects.

Have great holidays, Merry Christmas, Happy New Year,
and see you next year!
