summaryrefslogtreecommitdiffstats
path: root/articles
diff options
context:
space:
mode:
authorLoïc Hoguin <[email protected]>2016-04-01 00:14:56 +0200
committerLoïc Hoguin <[email protected]>2016-04-01 00:14:56 +0200
commitba9013eaeb8369d800dcac1cf5e59b846ac6c1c5 (patch)
tree53e07053856667d66fb406475c024c8d31b19dfc /articles
parentfe3492a98de29942477b061cd02c92246f4bf85a (diff)
downloadninenines.eu-ba9013eaeb8369d800dcac1cf5e59b846ac6c1c5.tar.gz
ninenines.eu-ba9013eaeb8369d800dcac1cf5e59b846ac6c1c5.tar.bz2
ninenines.eu-ba9013eaeb8369d800dcac1cf5e59b846ac6c1c5.zip
Add post about website update
Diffstat (limited to 'articles')
-rw-r--r--articles/cowboy2-qs/index.html2
-rw-r--r--articles/erlang-scalability/index.html2
-rw-r--r--articles/erlang-validate-utf8/index.html2
-rw-r--r--articles/erlang.mk-and-relx/index.html2
-rw-r--r--articles/erlanger-playbook-september-2015-update/index.html2
-rw-r--r--articles/erlanger-playbook/index.html2
-rw-r--r--articles/farwest-funded/index.html2
-rw-r--r--articles/index.html16
-rw-r--r--articles/index.xml215
-rw-r--r--articles/january-2014-status/index.html2
-rw-r--r--articles/on-open-source/index.html2
-rw-r--r--articles/ranch-ftp/index.html2
-rw-r--r--articles/the-story-so-far/index.html2
-rw-r--r--articles/tictactoe/index.html2
-rw-r--r--articles/website-update/index.html218
-rw-r--r--articles/xerl-0.1-empty-modules/index.html2
-rw-r--r--articles/xerl-0.2-two-modules/index.html2
-rw-r--r--articles/xerl-0.3-atomic-expressions/index.html2
-rw-r--r--articles/xerl-0.4-expression-separator/index.html2
-rw-r--r--articles/xerl-0.5-intermediate-module/index.html2
20 files changed, 335 insertions, 148 deletions
diff --git a/articles/cowboy2-qs/index.html b/articles/cowboy2-qs/index.html
index 576bb4d7..fb131b5b 100644
--- a/articles/cowboy2-qs/index.html
+++ b/articles/cowboy2-qs/index.html
@@ -233,6 +233,8 @@ thoughts that went into this rather than just the conclusion.</p></div>
<h3>More articles</h3>
<ul id="articles-nav" class="extra_margin">
+ <li><a href="http://ninenines.eu/articles/website-update/">Website update</a></li>
+
<li><a href="http://ninenines.eu/articles/erlanger-playbook-september-2015-update/">The Erlanger Playbook September 2015 Update</a></li>
<li><a href="http://ninenines.eu/articles/erlanger-playbook/">The Erlanger Playbook</a></li>
diff --git a/articles/erlang-scalability/index.html b/articles/erlang-scalability/index.html
index 6acc3e87..6d651373 100644
--- a/articles/erlang-scalability/index.html
+++ b/articles/erlang-scalability/index.html
@@ -218,6 +218,8 @@ concurrently.</p></div>
<h3>More articles</h3>
<ul id="articles-nav" class="extra_margin">
+ <li><a href="http://ninenines.eu/articles/website-update/">Website update</a></li>
+
<li><a href="http://ninenines.eu/articles/erlanger-playbook-september-2015-update/">The Erlanger Playbook September 2015 Update</a></li>
<li><a href="http://ninenines.eu/articles/erlanger-playbook/">The Erlanger Playbook</a></li>
diff --git a/articles/erlang-validate-utf8/index.html b/articles/erlang-validate-utf8/index.html
index 3e616c01..4761add5 100644
--- a/articles/erlang-validate-utf8/index.html
+++ b/articles/erlang-validate-utf8/index.html
@@ -269,6 +269,8 @@ http://www.gnu.org/software/src-highlite -->
<h3>More articles</h3>
<ul id="articles-nav" class="extra_margin">
+ <li><a href="http://ninenines.eu/articles/website-update/">Website update</a></li>
+
<li><a href="http://ninenines.eu/articles/erlanger-playbook-september-2015-update/">The Erlanger Playbook September 2015 Update</a></li>
<li><a href="http://ninenines.eu/articles/erlanger-playbook/">The Erlanger Playbook</a></li>
diff --git a/articles/erlang.mk-and-relx/index.html b/articles/erlang.mk-and-relx/index.html
index bbaff768..69022b82 100644
--- a/articles/erlang.mk-and-relx/index.html
+++ b/articles/erlang.mk-and-relx/index.html
@@ -196,6 +196,8 @@ containing all the flags to pass to the Erlang VM, for example
<h3>More articles</h3>
<ul id="articles-nav" class="extra_margin">
+ <li><a href="http://ninenines.eu/articles/website-update/">Website update</a></li>
+
<li><a href="http://ninenines.eu/articles/erlanger-playbook-september-2015-update/">The Erlanger Playbook September 2015 Update</a></li>
<li><a href="http://ninenines.eu/articles/erlanger-playbook/">The Erlanger Playbook</a></li>
diff --git a/articles/erlanger-playbook-september-2015-update/index.html b/articles/erlanger-playbook-september-2015-update/index.html
index 66dcd309..a4e45f84 100644
--- a/articles/erlanger-playbook-september-2015-update/index.html
+++ b/articles/erlanger-playbook-september-2015-update/index.html
@@ -97,6 +97,8 @@ will be used to allow me to work on open source full time.</p></div>
<h3>More articles</h3>
<ul id="articles-nav" class="extra_margin">
+ <li><a href="http://ninenines.eu/articles/website-update/">Website update</a></li>
+
<li><a href="http://ninenines.eu/articles/erlanger-playbook-september-2015-update/">The Erlanger Playbook September 2015 Update</a></li>
<li><a href="http://ninenines.eu/articles/erlanger-playbook/">The Erlanger Playbook</a></li>
diff --git a/articles/erlanger-playbook/index.html b/articles/erlanger-playbook/index.html
index bf67e77e..69522122 100644
--- a/articles/erlanger-playbook/index.html
+++ b/articles/erlanger-playbook/index.html
@@ -150,6 +150,8 @@ You will receive updates to the book for free as soon as they are available.</p>
<h3>More articles</h3>
<ul id="articles-nav" class="extra_margin">
+ <li><a href="http://ninenines.eu/articles/website-update/">Website update</a></li>
+
<li><a href="http://ninenines.eu/articles/erlanger-playbook-september-2015-update/">The Erlanger Playbook September 2015 Update</a></li>
<li><a href="http://ninenines.eu/articles/erlanger-playbook/">The Erlanger Playbook</a></li>
diff --git a/articles/farwest-funded/index.html b/articles/farwest-funded/index.html
index 1e0460d1..c1c2da16 100644
--- a/articles/farwest-funded/index.html
+++ b/articles/farwest-funded/index.html
@@ -105,6 +105,8 @@ can help!</p></div>
<h3>More articles</h3>
<ul id="articles-nav" class="extra_margin">
+ <li><a href="http://ninenines.eu/articles/website-update/">Website update</a></li>
+
<li><a href="http://ninenines.eu/articles/erlanger-playbook-september-2015-update/">The Erlanger Playbook September 2015 Update</a></li>
<li><a href="http://ninenines.eu/articles/erlanger-playbook/">The Erlanger Playbook</a></li>
diff --git a/articles/index.html b/articles/index.html
index 34af7442..1833218f 100644
--- a/articles/index.html
+++ b/articles/index.html
@@ -74,6 +74,22 @@
<article class="blog_item">
<header>
+ <h2><a href="http://ninenines.eu/articles/website-update/">Website update</a></h2>
+ <p class="date">
+ <span class="day">02</span>
+ <span class="month">Apr</span>
+ </p>
+ </header>
+
+ <p>Last week-end I updated the Nine Nines website. I switched to Hugo. The site is now built from Asciidoc documents. You probably saw me switch to Asciidoc for documentation this past year. This is the natural conclusion to that story. The great thing is that with a little bit of Makefile magic I can just copy the documentation files into Hugo and poof, they appear on the website. I am very happy with that new setup.</p>
+
+ <p style="text-align:right">
+ <a class="read_more" href="http://ninenines.eu/articles/website-update/">Read More</a>
+ </p>
+ </article>
+
+ <article class="blog_item">
+ <header>
<h2><a href="http://ninenines.eu/articles/erlanger-playbook-september-2015-update/">The Erlanger Playbook September 2015 Update</a></h2>
<p class="date">
<span class="day">02</span>
diff --git a/articles/index.xml b/articles/index.xml
index 81663a56..975e34cc 100644
--- a/articles/index.xml
+++ b/articles/index.xml
@@ -6,10 +6,76 @@
<description>Recent content in Articles on Nine Nines</description>
<generator>Hugo -- gohugo.io</generator>
<language>en-us</language>
- <lastBuildDate>Wed, 02 Sep 2015 00:00:00 +0100</lastBuildDate>
+ <lastBuildDate>Sat, 02 Apr 2016 00:00:00 +0100</lastBuildDate>
<atom:link href="http://ninenines.eu/articles/index.xml" rel="self" type="application/rss+xml" />
<item>
+ <title>Website update</title>
+ <link>http://ninenines.eu/articles/website-update/</link>
+ <pubDate>Sat, 02 Apr 2016 00:00:00 +0100</pubDate>
+
+ <guid>http://ninenines.eu/articles/website-update/</guid>
+ <description>&lt;div class=&#34;paragraph&#34;&gt;&lt;p&gt;Last week-end I updated the Nine Nines website.&lt;/p&gt;&lt;/div&gt;
+&lt;div class=&#34;paragraph&#34;&gt;&lt;p&gt;I switched to &lt;a href=&#34;http://gohugo.io/&#34;&gt;Hugo&lt;/a&gt;. The site is
+now built from &lt;a href=&#34;http://asciidoc.org/&#34;&gt;Asciidoc&lt;/a&gt;
+documents. You probably saw me switch to Asciidoc
+for documentation this past year. This is the
+natural conclusion to that story. The great thing
+is that with a little bit of Makefile magic I can
+just copy the documentation files into Hugo and
+poof, they appear on the website.&lt;/p&gt;&lt;/div&gt;
+&lt;div class=&#34;paragraph&#34;&gt;&lt;p&gt;I am very happy with that new setup. I can now
+post my thoughts again. Woo! Expect regular posts
+from now on. I will try to replace my long series
+of tweets with posts.&lt;/p&gt;&lt;/div&gt;
+&lt;div class=&#34;paragraph&#34;&gt;&lt;p&gt;The sections have been rearranged. There used to
+be a separate training section; now
+&lt;a href=&#34;http://ninenines.eu/services&#34;&gt;all my services&lt;/a&gt; are described in
+one page. I have also clarified my areas of
+expertise. There used to be confusion in the past,
+so now it should be clearer that I am not a
+distributed systems expert.&lt;/p&gt;&lt;/div&gt;
+&lt;div class=&#34;paragraph&#34;&gt;&lt;p&gt;On that note, if you are looking for my
+services right now, I&amp;#8217;m not available. I&amp;#8217;ll have
+to work 7 days a week for a while. Try again in a
+couple months. More on that in a future post.&lt;/p&gt;&lt;/div&gt;
+&lt;div class=&#34;paragraph&#34;&gt;&lt;p&gt;The &lt;a href=&#34;http://ninenines.eu/docs&#34;&gt;documentation&lt;/a&gt; becomes a first class
+citizen. Bullet and Cowlib don&amp;#8217;t have proper
+documentation&amp;#8230; yet. I have started working on the
+Cowlib documentation, and Bullet shouldn&amp;#8217;t take too
+long. All these projects will be documented when
+Cowboy gets to 2.0, and will all be supported
+equally. Note that the Cowboy 1.0 documentation
+still has the old website templates and links.
+Don&amp;#8217;t worry about it.&lt;/p&gt;&lt;/div&gt;
+&lt;div class=&#34;paragraph&#34;&gt;&lt;p&gt;The mailing lists link has been removed. I did
+announce a few months back that mailing lists were
+going to go. They&amp;#8217;re still up right now, but not
+for long. I am planning to put the archives
+read-only, link to them from a future post and
+be done with it. If you have a question, open a
+ticket on Github. Then I can just decide to leave
+the ticket open if I want to do improvements based
+on your feedback.&lt;/p&gt;&lt;/div&gt;
+&lt;div class=&#34;paragraph&#34;&gt;&lt;p&gt;I have replaced most of the &#34;we&#34; by &#34;I&#34;. I am
+a one-man company right now. Have been for a while.
+Doesn&amp;#8217;t make sense to keep a facade. I want to be
+close to users, not put a barrier between us.&lt;/p&gt;&lt;/div&gt;
+&lt;div class=&#34;paragraph&#34;&gt;&lt;p&gt;The RSS changed. The old link doesn&amp;#8217;t work anymore.
+The new link is at &lt;a href=&#34;http://ninenines.eu/index.xml&#34;&gt;/index.xml&lt;/a&gt;,
+or &lt;a href=&#34;http://ninenines.eu/articles/index.xml&#34;&gt;/articles/index.xml&lt;/a&gt;
+if you only care about my posts. I guess that&amp;#8217;s the
+one most people want.&lt;/p&gt;&lt;/div&gt;
+&lt;div class=&#34;paragraph&#34;&gt;&lt;p&gt;I still have some tweaks to do, but it will take a
+while. My long term plan is to remove Bootstrap, use
+vanilla CSS and as little JS as possible. The reason
+for that is that it&amp;#8217;s cheaper than upgrading libraries
+every few years. Life is too short to spend it
+upgrading JS libraries.&lt;/p&gt;&lt;/div&gt;
+</description>
+ </item>
+
+ <item>
<title>The Erlanger Playbook September 2015 Update</title>
<link>http://ninenines.eu/articles/erlanger-playbook-september-2015-update/</link>
<pubDate>Wed, 02 Sep 2015 00:00:00 +0100</pubDate>
@@ -1768,152 +1834,5 @@ though, so let&amp;#8217;s get back to it after we add more.&lt;/p&gt;&lt;/div&g
</description>
</item>
- <item>
- <title>Xerl: empty modules</title>
- <link>http://ninenines.eu/articles/xerl-0.1-empty-modules/</link>
- <pubDate>Wed, 30 Jan 2013 00:00:00 +0100</pubDate>
-
- <guid>http://ninenines.eu/articles/xerl-0.1-empty-modules/</guid>
- <description>&lt;div class=&#34;paragraph&#34;&gt;&lt;p&gt;Let&amp;#8217;s build a programming language. I call it Xerl: eXtended ERLang.
-It&amp;#8217;ll be an occasion for us to learn a few things, especially me.&lt;/p&gt;&lt;/div&gt;
-&lt;div class=&#34;paragraph&#34;&gt;&lt;p&gt;Unlike in Erlang, in this language, everything is an expression.
-This means that modules and functions are expression, and indeed that
-you can have more than one module per file.&lt;/p&gt;&lt;/div&gt;
-&lt;div class=&#34;paragraph&#34;&gt;&lt;p&gt;We are just starting, so let&amp;#8217;s no go ahead of ourselves here. We&amp;#8217;ll
-begin with writing the code allowing us to compile an empty module.&lt;/p&gt;&lt;/div&gt;
-&lt;div class=&#34;paragraph&#34;&gt;&lt;p&gt;We will compile to Core Erlang: this is one of the many intermediate
-step your Erlang code compiles to before it becomes BEAM machine code.
-Core Erlang is a very neat language for machine generated code, and we
-will learn many things about it.&lt;/p&gt;&lt;/div&gt;
-&lt;div class=&#34;paragraph&#34;&gt;&lt;p&gt;Today we will only focus on compiling the following code:&lt;/p&gt;&lt;/div&gt;
-&lt;div class=&#34;listingblock&#34;&gt;
-&lt;div class=&#34;content&#34;&gt;&lt;!-- Generator: GNU source-highlight 3.1.8
-by Lorenzo Bettini
-http://www.lorenzobettini.it
-http://www.gnu.org/software/src-highlite --&gt;
-&lt;pre&gt;&lt;tt&gt;&lt;span style=&#34;color: #FF6600&#34;&gt;mod&lt;/span&gt; &lt;span style=&#34;color: #FF6600&#34;&gt;my_module&lt;/span&gt;
-&lt;span style=&#34;font-weight: bold&#34;&gt;&lt;span style=&#34;color: #0000FF&#34;&gt;begin&lt;/span&gt;&lt;/span&gt;
-&lt;span style=&#34;font-weight: bold&#34;&gt;&lt;span style=&#34;color: #0000FF&#34;&gt;end&lt;/span&gt;&lt;/span&gt;&lt;/tt&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
-&lt;div class=&#34;paragraph&#34;&gt;&lt;p&gt;Compilation will be done in a few steps. First, the source file will
-be transformed in a tree of tokens by the lexer. Then, the parser will
-use that tree of tokens and convert it to the AST, bringing semantical
-meaning to our representation. Finally, the code generator will transform
-this AST to Core Erlang AST, which will then be compiled.&lt;/p&gt;&lt;/div&gt;
-&lt;div class=&#34;paragraph&#34;&gt;&lt;p&gt;We will use &lt;em&gt;leex&lt;/em&gt; for the lexer. This lexer uses .xrl files
-which are then compiled to .erl files that you can then compile to BEAM.
-The file is divided in three parts: definitions, rules and Erlang code.
-Definitions and Erlang code are obvious; rules are what concerns us.&lt;/p&gt;&lt;/div&gt;
-&lt;div class=&#34;paragraph&#34;&gt;&lt;p&gt;We only need two things: atoms and whitespaces. Atoms are a lowercase
-letter followed by any letter, number, _ or @. Whitespace is either a
-space, an horizontal tab, \r or \n. There exists other kinds of whitespaces
-but we simply do not allow them in the Xerl language.&lt;/p&gt;&lt;/div&gt;
-&lt;div class=&#34;paragraph&#34;&gt;&lt;p&gt;Rules consist of a regular expression followed by Erlang code. The
-latter must return a token representation or the atom &lt;code&gt;skip_token&lt;/code&gt;.&lt;/p&gt;&lt;/div&gt;
-&lt;div class=&#34;listingblock&#34;&gt;
-&lt;div class=&#34;content&#34;&gt;&lt;!-- Generator: GNU source-highlight 3.1.8
-by Lorenzo Bettini
-http://www.lorenzobettini.it
-http://www.gnu.org/software/src-highlite --&gt;
-&lt;pre&gt;&lt;tt&gt;{&lt;span style=&#34;color: #009900&#34;&gt;L&lt;/span&gt;}{&lt;span style=&#34;color: #009900&#34;&gt;A&lt;/span&gt;}&lt;span style=&#34;color: #990000&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color: #990000&#34;&gt;:&lt;/span&gt;
- &lt;span style=&#34;color: #009900&#34;&gt;Atom&lt;/span&gt; &lt;span style=&#34;color: #990000&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;font-weight: bold&#34;&gt;&lt;span style=&#34;color: #000080&#34;&gt;list_to_atom&lt;/span&gt;&lt;/span&gt;(&lt;span style=&#34;color: #009900&#34;&gt;TokenChars&lt;/span&gt;),
- {&lt;span style=&#34;color: #FF6600&#34;&gt;token&lt;/span&gt;, &lt;span style=&#34;font-weight: bold&#34;&gt;&lt;span style=&#34;color: #0000FF&#34;&gt;case&lt;/span&gt;&lt;/span&gt; &lt;span style=&#34;font-weight: bold&#34;&gt;&lt;span style=&#34;color: #000000&#34;&gt;reserved_word&lt;/span&gt;&lt;/span&gt;(&lt;span style=&#34;color: #009900&#34;&gt;Atom&lt;/span&gt;) &lt;span style=&#34;font-weight: bold&#34;&gt;&lt;span style=&#34;color: #0000FF&#34;&gt;of&lt;/span&gt;&lt;/span&gt;
- &lt;span style=&#34;color: #000080&#34;&gt;true&lt;/span&gt; &lt;span style=&#34;color: #990000&#34;&gt;-&amp;gt;&lt;/span&gt; {&lt;span style=&#34;color: #009900&#34;&gt;Atom&lt;/span&gt;, &lt;span style=&#34;color: #009900&#34;&gt;TokenLine&lt;/span&gt;};
- &lt;span style=&#34;color: #000080&#34;&gt;false&lt;/span&gt; &lt;span style=&#34;color: #990000&#34;&gt;-&amp;gt;&lt;/span&gt; {&lt;span style=&#34;font-weight: bold&#34;&gt;&lt;span style=&#34;color: #000080&#34;&gt;atom&lt;/span&gt;&lt;/span&gt;, &lt;span style=&#34;color: #009900&#34;&gt;TokenLine&lt;/span&gt;, &lt;span style=&#34;color: #009900&#34;&gt;Atom&lt;/span&gt;}
- &lt;span style=&#34;font-weight: bold&#34;&gt;&lt;span style=&#34;color: #0000FF&#34;&gt;end&lt;/span&gt;&lt;/span&gt;}&lt;span style=&#34;color: #990000&#34;&gt;.&lt;/span&gt;
-
-{&lt;span style=&#34;color: #009900&#34;&gt;WS&lt;/span&gt;}&lt;span style=&#34;color: #990000&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color: #990000&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color: #FF6600&#34;&gt;skip_token&lt;/span&gt;&lt;span style=&#34;color: #990000&#34;&gt;.&lt;/span&gt;&lt;/tt&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
-&lt;div class=&#34;paragraph&#34;&gt;&lt;p&gt;The first rule matches an atom, which is converted to either a special
-representation for reserved words, or an atom tuple. The
-&lt;code&gt;TokenChars&lt;/code&gt; variable represents the match as a string, and
-the &lt;code&gt;TokenLine&lt;/code&gt; variable contains the line number.
-&lt;a href=&#34;https://github.com/extend/xerl/blob/0.1/src/xerl_lexer.xrl&#34;&gt;View the complete file&lt;/a&gt;.&lt;/p&gt;&lt;/div&gt;
-&lt;div class=&#34;paragraph&#34;&gt;&lt;p&gt;We obtain the following result from the lexer:&lt;/p&gt;&lt;/div&gt;
-&lt;div class=&#34;listingblock&#34;&gt;
-&lt;div class=&#34;content&#34;&gt;&lt;!-- Generator: GNU source-highlight 3.1.8
-by Lorenzo Bettini
-http://www.lorenzobettini.it
-http://www.gnu.org/software/src-highlite --&gt;
-&lt;pre&gt;&lt;tt&gt;[{&lt;span style=&#34;color: #FF6600&#34;&gt;mod&lt;/span&gt;,&lt;span style=&#34;color: #993399&#34;&gt;1&lt;/span&gt;},{&lt;span style=&#34;font-weight: bold&#34;&gt;&lt;span style=&#34;color: #000080&#34;&gt;atom&lt;/span&gt;&lt;/span&gt;,&lt;span style=&#34;color: #993399&#34;&gt;1&lt;/span&gt;,&lt;span style=&#34;color: #FF6600&#34;&gt;my_module&lt;/span&gt;},{&lt;span style=&#34;color: #FF6600&#34;&gt;&#39;begin&#39;&lt;/span&gt;,&lt;span style=&#34;color: #993399&#34;&gt;2&lt;/span&gt;},{&lt;span style=&#34;color: #FF6600&#34;&gt;&#39;end&#39;&lt;/span&gt;,&lt;span style=&#34;color: #993399&#34;&gt;3&lt;/span&gt;}]&lt;/tt&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
-&lt;div class=&#34;paragraph&#34;&gt;&lt;p&gt;The second step is to parse this list of tokens to add semantic meaning
-and generate what is called an &lt;em&gt;abstract syntax tree&lt;/em&gt;. We will be
-using the &lt;em&gt;yecc&lt;/em&gt; parser generator for this. This time it will take
-.yrl files but the process is the same as before. The file is a little
-more complex than for the lexer, we need to define at the very least
-terminals, nonterminals and root symbols, the grammar itself, and
-optionally some Erlang code.&lt;/p&gt;&lt;/div&gt;
-&lt;div class=&#34;paragraph&#34;&gt;&lt;p&gt;To compile our module, we need a few things. First, everything is an
-expression. We thus need list of expressions and individual expressions.
-We will support a single expression for now, the &lt;code&gt;mod&lt;/code&gt;
-expression which defines a module. And that&amp;#8217;s it! We end up with the
-following grammar:&lt;/p&gt;&lt;/div&gt;
-&lt;div class=&#34;listingblock&#34;&gt;
-&lt;div class=&#34;content&#34;&gt;&lt;!-- Generator: GNU source-highlight 3.1.8
-by Lorenzo Bettini
-http://www.lorenzobettini.it
-http://www.gnu.org/software/src-highlite --&gt;
-&lt;pre&gt;&lt;tt&gt;&lt;span style=&#34;color: #FF6600&#34;&gt;exprs&lt;/span&gt; &lt;span style=&#34;color: #990000&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span style=&#34;color: #FF6600&#34;&gt;expr&lt;/span&gt; &lt;span style=&#34;color: #990000&#34;&gt;:&lt;/span&gt; [&lt;span style=&#34;color: #FF6600&#34;&gt;&#39;$1&#39;&lt;/span&gt;]&lt;span style=&#34;color: #990000&#34;&gt;.&lt;/span&gt;
-&lt;span style=&#34;color: #FF6600&#34;&gt;exprs&lt;/span&gt; &lt;span style=&#34;color: #990000&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span style=&#34;color: #FF6600&#34;&gt;expr&lt;/span&gt; &lt;span style=&#34;color: #FF6600&#34;&gt;exprs&lt;/span&gt; &lt;span style=&#34;color: #990000&#34;&gt;:&lt;/span&gt; [&lt;span style=&#34;color: #FF6600&#34;&gt;&#39;$1&#39;&lt;/span&gt; | &lt;span style=&#34;color: #FF6600&#34;&gt;&#39;$2&#39;&lt;/span&gt;]&lt;span style=&#34;color: #990000&#34;&gt;.&lt;/span&gt;
-
-&lt;span style=&#34;color: #FF6600&#34;&gt;expr&lt;/span&gt; &lt;span style=&#34;color: #990000&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span style=&#34;color: #FF6600&#34;&gt;module&lt;/span&gt; &lt;span style=&#34;color: #990000&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color: #FF6600&#34;&gt;&#39;$1&#39;&lt;/span&gt;&lt;span style=&#34;color: #990000&#34;&gt;.&lt;/span&gt;
-
-&lt;span style=&#34;color: #FF6600&#34;&gt;module&lt;/span&gt; &lt;span style=&#34;color: #990000&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span style=&#34;color: #FF6600&#34;&gt;&#39;mod&#39;&lt;/span&gt; &lt;span style=&#34;font-weight: bold&#34;&gt;&lt;span style=&#34;color: #000080&#34;&gt;atom&lt;/span&gt;&lt;/span&gt; &lt;span style=&#34;color: #FF6600&#34;&gt;&#39;begin&#39;&lt;/span&gt; &lt;span style=&#34;color: #FF6600&#34;&gt;&#39;end&#39;&lt;/span&gt; &lt;span style=&#34;color: #990000&#34;&gt;:&lt;/span&gt;
- {&lt;span style=&#34;color: #FF6600&#34;&gt;&#39;mod&#39;&lt;/span&gt;, &lt;span style=&#34;font-weight: bold&#34;&gt;&lt;span style=&#34;color: #000080&#34;&gt;?line&lt;/span&gt;&lt;/span&gt;(&lt;span style=&#34;color: #FF6600&#34;&gt;&#39;$1&#39;&lt;/span&gt;), &lt;span style=&#34;color: #FF6600&#34;&gt;&#39;$2&#39;&lt;/span&gt;, []}&lt;span style=&#34;color: #990000&#34;&gt;.&lt;/span&gt;&lt;/tt&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
-&lt;div class=&#34;paragraph&#34;&gt;&lt;p&gt;&lt;a href=&#34;https://github.com/extend/xerl/blob/0.1/src/xerl_parser.yrl&#34;&gt;View the complete file&lt;/a&gt;.&lt;/p&gt;&lt;/div&gt;
-&lt;div class=&#34;paragraph&#34;&gt;&lt;p&gt;We obtain the following result from the parser:&lt;/p&gt;&lt;/div&gt;
-&lt;div class=&#34;listingblock&#34;&gt;
-&lt;div class=&#34;content&#34;&gt;&lt;!-- Generator: GNU source-highlight 3.1.8
-by Lorenzo Bettini
-http://www.lorenzobettini.it
-http://www.gnu.org/software/src-highlite --&gt;
-&lt;pre&gt;&lt;tt&gt;[{&lt;span style=&#34;color: #FF6600&#34;&gt;mod&lt;/span&gt;,&lt;span style=&#34;color: #993399&#34;&gt;1&lt;/span&gt;,{&lt;span style=&#34;font-weight: bold&#34;&gt;&lt;span style=&#34;color: #000080&#34;&gt;atom&lt;/span&gt;&lt;/span&gt;,&lt;span style=&#34;color: #993399&#34;&gt;1&lt;/span&gt;,&lt;span style=&#34;color: #FF6600&#34;&gt;my_module&lt;/span&gt;},[]}]&lt;/tt&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
-&lt;div class=&#34;paragraph&#34;&gt;&lt;p&gt;We obtain a list of a single &lt;code&gt;mod&lt;/code&gt; expression. Just like
-we wanted. Last step is generating the Core Erlang code from it.&lt;/p&gt;&lt;/div&gt;
-&lt;div class=&#34;paragraph&#34;&gt;&lt;p&gt;Code generation generally is comprised of several steps. We will
-discuss these in more details later on. For now, we will focus on the
-minimal needed for successful compilation.&lt;/p&gt;&lt;/div&gt;
-&lt;div class=&#34;paragraph&#34;&gt;&lt;p&gt;We can use the &lt;code&gt;cerl&lt;/code&gt; module to generate Core Erlang AST.
-We will simply be using functions, which allows us to avoid learning
-and keeping up to date with the internal representation.&lt;/p&gt;&lt;/div&gt;
-&lt;div class=&#34;paragraph&#34;&gt;&lt;p&gt;There&amp;#8217;s one important thing to do when generating Core Erlang AST
-for a module: create the &lt;code&gt;module_info/{0,1}&lt;/code&gt; functions.
-Indeed, these are added to Erlang before it becomes Core Erlang, and
-so we need to replicate this ourselves. Do not be concerned however,
-as this only takes a few lines of extra code.&lt;/p&gt;&lt;/div&gt;
-&lt;div class=&#34;paragraph&#34;&gt;&lt;p&gt;As you can see by
-&lt;a href=&#34;https://github.com/extend/xerl/blob/0.1/src/xerl_codegen.erl&#34;&gt;looking at the complete file&lt;/a&gt;,
-the code generator echoes the grammar we defined in the parser, and
-simply applies the appropriate Core Erlang functions for each expressions.&lt;/p&gt;&lt;/div&gt;
-&lt;div class=&#34;paragraph&#34;&gt;&lt;p&gt;We obtain the following pretty-printed Core Erlang generated code:&lt;/p&gt;&lt;/div&gt;
-&lt;div class=&#34;listingblock&#34;&gt;
-&lt;div class=&#34;content&#34;&gt;&lt;!-- Generator: GNU source-highlight 3.1.8
-by Lorenzo Bettini
-http://www.lorenzobettini.it
-http://www.gnu.org/software/src-highlite --&gt;
-&lt;pre&gt;&lt;tt&gt;&lt;span style=&#34;color: #FF6600&#34;&gt;module&lt;/span&gt; &lt;span style=&#34;color: #FF6600&#34;&gt;&#39;my_module&#39;&lt;/span&gt; [&lt;span style=&#34;color: #FF6600&#34;&gt;&#39;module_info&#39;&lt;/span&gt;&lt;span style=&#34;color: #990000&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color: #993399&#34;&gt;0&lt;/span&gt;,
- &lt;span style=&#34;color: #FF6600&#34;&gt;&#39;module_info&#39;&lt;/span&gt;&lt;span style=&#34;color: #990000&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color: #993399&#34;&gt;1&lt;/span&gt;]
- &lt;span style=&#34;color: #FF6600&#34;&gt;attributes&lt;/span&gt; []
-&lt;span style=&#34;color: #FF6600&#34;&gt;&#39;module_info&#39;&lt;/span&gt;&lt;span style=&#34;color: #990000&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color: #993399&#34;&gt;0&lt;/span&gt; &lt;span style=&#34;color: #990000&#34;&gt;=&lt;/span&gt;
- &lt;span style=&#34;font-weight: bold&#34;&gt;&lt;span style=&#34;color: #0000FF&#34;&gt;fun&lt;/span&gt;&lt;/span&gt; () &lt;span style=&#34;color: #990000&#34;&gt;-&amp;gt;&lt;/span&gt;
- &lt;span style=&#34;font-weight: bold&#34;&gt;&lt;span style=&#34;color: #000080&#34;&gt;call&lt;/span&gt;&lt;/span&gt; &lt;span style=&#34;color: #FF6600&#34;&gt;&#39;erlang&#39;&lt;/span&gt;&lt;span style=&#34;color: #990000&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color: #FF6600&#34;&gt;&#39;get_module_info&#39;&lt;/span&gt;
- (&lt;span style=&#34;color: #FF6600&#34;&gt;&#39;empty_module&#39;&lt;/span&gt;)
-&lt;span style=&#34;color: #FF6600&#34;&gt;&#39;module_info&#39;&lt;/span&gt;&lt;span style=&#34;color: #990000&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color: #993399&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color: #990000&#34;&gt;=&lt;/span&gt;
- &lt;span style=&#34;font-weight: bold&#34;&gt;&lt;span style=&#34;color: #0000FF&#34;&gt;fun&lt;/span&gt;&lt;/span&gt; (&lt;span style=&#34;color: #009900&#34;&gt;Key&lt;/span&gt;) &lt;span style=&#34;color: #990000&#34;&gt;-&amp;gt;&lt;/span&gt;
- &lt;span style=&#34;font-weight: bold&#34;&gt;&lt;span style=&#34;color: #000080&#34;&gt;call&lt;/span&gt;&lt;/span&gt; &lt;span style=&#34;color: #FF6600&#34;&gt;&#39;erlang&#39;&lt;/span&gt;&lt;span style=&#34;color: #990000&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color: #FF6600&#34;&gt;&#39;get_module_info&#39;&lt;/span&gt;
- (&lt;span style=&#34;color: #FF6600&#34;&gt;&#39;empty_module&#39;&lt;/span&gt;, &lt;span style=&#34;color: #009900&#34;&gt;Key&lt;/span&gt;)
-&lt;span style=&#34;font-weight: bold&#34;&gt;&lt;span style=&#34;color: #0000FF&#34;&gt;end&lt;/span&gt;&lt;/span&gt;&lt;/tt&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
-&lt;div class=&#34;paragraph&#34;&gt;&lt;p&gt;For convenience I added all the steps in a &lt;code&gt;xerl:compile/1&lt;/code&gt;
-function that you can use against your own .xerl files.&lt;/p&gt;&lt;/div&gt;
-&lt;div class=&#34;paragraph&#34;&gt;&lt;p&gt;That&amp;#8217;s it for today! We will go into more details over each steps in
-the next few articles.&lt;/p&gt;&lt;/div&gt;
-&lt;div class=&#34;ulist&#34;&gt;&lt;ul&gt;
-&lt;li&gt;
-&lt;p&gt;
-&lt;a href=&#34;https://github.com/extend/xerl/blob/0.1/&#34;&gt;View the source&lt;/a&gt;
-&lt;/p&gt;
-&lt;/li&gt;
-&lt;/ul&gt;&lt;/div&gt;
-</description>
- </item>
-
</channel>
</rss> \ No newline at end of file
diff --git a/articles/january-2014-status/index.html b/articles/january-2014-status/index.html
index 8c10f522..888d77f0 100644
--- a/articles/january-2014-status/index.html
+++ b/articles/january-2014-status/index.html
@@ -224,6 +224,8 @@ the sponsoring idea, anything really! Thanks.</p></div>
<h3>More articles</h3>
<ul id="articles-nav" class="extra_margin">
+ <li><a href="http://ninenines.eu/articles/website-update/">Website update</a></li>
+
<li><a href="http://ninenines.eu/articles/erlanger-playbook-september-2015-update/">The Erlanger Playbook September 2015 Update</a></li>
<li><a href="http://ninenines.eu/articles/erlanger-playbook/">The Erlanger Playbook</a></li>
diff --git a/articles/on-open-source/index.html b/articles/on-open-source/index.html
index 55519160..dd02dfe1 100644
--- a/articles/on-open-source/index.html
+++ b/articles/on-open-source/index.html
@@ -201,6 +201,8 @@ of your company&#8217;s money.</p></div>
<h3>More articles</h3>
<ul id="articles-nav" class="extra_margin">
+ <li><a href="http://ninenines.eu/articles/website-update/">Website update</a></li>
+
<li><a href="http://ninenines.eu/articles/erlanger-playbook-september-2015-update/">The Erlanger Playbook September 2015 Update</a></li>
<li><a href="http://ninenines.eu/articles/erlanger-playbook/">The Erlanger Playbook</a></li>
diff --git a/articles/ranch-ftp/index.html b/articles/ranch-ftp/index.html
index cd22ee72..e6d67728 100644
--- a/articles/ranch-ftp/index.html
+++ b/articles/ranch-ftp/index.html
@@ -294,6 +294,8 @@ binary protocol implementations in just a few lines of code.</p></div>
<h3>More articles</h3>
<ul id="articles-nav" class="extra_margin">
+ <li><a href="http://ninenines.eu/articles/website-update/">Website update</a></li>
+
<li><a href="http://ninenines.eu/articles/erlanger-playbook-september-2015-update/">The Erlanger Playbook September 2015 Update</a></li>
<li><a href="http://ninenines.eu/articles/erlanger-playbook/">The Erlanger Playbook</a></li>
diff --git a/articles/the-story-so-far/index.html b/articles/the-story-so-far/index.html
index 33e7756a..6334fdf1 100644
--- a/articles/the-story-so-far/index.html
+++ b/articles/the-story-so-far/index.html
@@ -308,6 +308,8 @@ project and make sure it doesn&#8217;t happen again.</p></div>
<h3>More articles</h3>
<ul id="articles-nav" class="extra_margin">
+ <li><a href="http://ninenines.eu/articles/website-update/">Website update</a></li>
+
<li><a href="http://ninenines.eu/articles/erlanger-playbook-september-2015-update/">The Erlanger Playbook September 2015 Update</a></li>
<li><a href="http://ninenines.eu/articles/erlanger-playbook/">The Erlanger Playbook</a></li>
diff --git a/articles/tictactoe/index.html b/articles/tictactoe/index.html
index 9eab4520..171b68cf 100644
--- a/articles/tictactoe/index.html
+++ b/articles/tictactoe/index.html
@@ -167,6 +167,8 @@ of writing algorithms to do things.</p></div>
<h3>More articles</h3>
<ul id="articles-nav" class="extra_margin">
+ <li><a href="http://ninenines.eu/articles/website-update/">Website update</a></li>
+
<li><a href="http://ninenines.eu/articles/erlanger-playbook-september-2015-update/">The Erlanger Playbook September 2015 Update</a></li>
<li><a href="http://ninenines.eu/articles/erlanger-playbook/">The Erlanger Playbook</a></li>
diff --git a/articles/website-update/index.html b/articles/website-update/index.html
new file mode 100644
index 00000000..5ad981f2
--- /dev/null
+++ b/articles/website-update/index.html
@@ -0,0 +1,218 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <meta name="description" content="">
+ <meta name="author" content="Loïc Hoguin based on a design from (Soft10) Pol Cámara">
+
+ <meta name="generator" content="Hugo 0.15" />
+
+ <title>Nine Nines: Website update</title>
+
+ <link href='http://fonts.googleapis.com/css?family=Open+Sans:400,700,400italic' rel='stylesheet' type='text/css'>
+
+ <link href="/css/bootstrap.min.css" rel="stylesheet">
+ <link href="/css/99s.css" rel="stylesheet">
+
+ <link rel="shortcut icon" href="/img/ico/favicon.ico">
+ <link rel="apple-touch-icon-precomposed" sizes="114x114" href="/img/ico/apple-touch-icon-114.png">
+ <link rel="apple-touch-icon-precomposed" sizes="72x72" href="/img/ico/apple-touch-icon-72.png">
+ <link rel="apple-touch-icon-precomposed" href="/img/ico/apple-touch-icon-57.png">
+
+
+</head>
+
+
+<body class="">
+ <header id="page-head">
+ <div id="topbar" class="container">
+ <div class="row">
+ <div class="span2">
+ <h1 id="logo"><a href="/" title="99s">99s</a></h1>
+ </div>
+ <div class="span10">
+
+ <div id="side-header">
+ <nav>
+ <ul>
+ <li class="active"><a title="Hear my thoughts" href="/articles">Articles</a></li>
+ <li><a title="Watch my talks" href="/talks">Talks</a></li>
+ <li><a title="Read the docs" href="/docs">Documentation</a></li>
+ <li><a title="Request my services" href="/services">Consulting & Training</a></li>
+ </ul>
+ </nav>
+ <ul id="social">
+ <li>
+ <a href="https://github.com/ninenines" title="Check my Github repositories"><img src="/img/ico_github.png" data-hover="/img/ico_github_alt.png" alt="Github"></a>
+ </li>
+ <li>
+ <a title="Keep in touch!" href="http://twitter.com/lhoguin"><img src="/img/ico_microblog.png" data-hover="/img/ico_microblog_alt.png"></a>
+ </li>
+ <li>
+ <a title="Contact me" href="mailto:[email protected]"><img src="/img/ico_mail.png" data-hover="/img/ico_mail_alt.png"></a>
+ </li>
+ </ul>
+ </div>
+ </div>
+ </div>
+ </div>
+
+
+</header>
+
+<div id="contents">
+<div class="container">
+<div class="row">
+<div class="span9 maincol">
+
+<article class="blog_item">
+<header>
+ <h1 class="lined-header"><span>Website update</span></h1>
+ <p class="date">
+ <span class="day">02</span>
+ <span class="month">Apr</span>
+ </p>
+</header>
+
+<div class="paragraph"><p>Last week-end I updated the Nine Nines website.</p></div>
+<div class="paragraph"><p>I switched to <a href="http://gohugo.io/">Hugo</a>. The site is
+now built from <a href="http://asciidoc.org/">Asciidoc</a>
+documents. You probably saw me switch to Asciidoc
+for documentation this past year. This is the
+natural conclusion to that story. The great thing
+is that with a little bit of Makefile magic I can
+just copy the documentation files into Hugo and
+poof, they appear on the website.</p></div>
+<div class="paragraph"><p>I am very happy with that new setup. I can now
+post my thoughts again. Woo! Expect regular posts
+from now on. I will try to replace my long series
+of tweets with posts.</p></div>
+<div class="paragraph"><p>The sections have been rearranged. There used to
+be a separate training section; now
+<a href="/services">all my services</a> are described in
+one page. I have also clarified my areas of
+expertise. There used to be confusion in the past,
+so now it should be clearer that I am not a
+distributed systems expert.</p></div>
+<div class="paragraph"><p>On that note, if you are looking for my
+services right now, I&#8217;m not available. I&#8217;ll have
+to work 7 days a week for a while. Try again in a
+couple months. More on that in a future post.</p></div>
+<div class="paragraph"><p>The <a href="/docs">documentation</a> becomes a first class
+citizen. Bullet and Cowlib don&#8217;t have proper
+documentation&#8230; yet. I have started working on the
+Cowlib documentation, and Bullet shouldn&#8217;t take too
+long. All these projects will be documented when
+Cowboy gets to 2.0, and will all be supported
+equally. Note that the Cowboy 1.0 documentation
+still has the old website templates and links.
+Don&#8217;t worry about it.</p></div>
+<div class="paragraph"><p>The mailing lists link has been removed. I did
+announce a few months back that mailing lists were
+going to go. They&#8217;re still up right now, but not
+for long. I am planning to put the archives
+read-only, link to them from a future post and
+be done with it. If you have a question, open a
+ticket on Github. Then I can just decide to leave
+the ticket open if I want to do improvements based
+on your feedback.</p></div>
+<div class="paragraph"><p>I have replaced most of the "we" by "I". I am
+a one-man company right now. Have been for a while.
+Doesn&#8217;t make sense to keep a facade. I want to be
+close to users, not put a barrier between us.</p></div>
+<div class="paragraph"><p>The RSS changed. The old link doesn&#8217;t work anymore.
+The new link is at <a href="/index.xml">/index.xml</a>,
+or <a href="/articles/index.xml">/articles/index.xml</a>
+if you only care about my posts. I guess that&#8217;s the
+one most people want.</p></div>
+<div class="paragraph"><p>I still have some tweaks to do, but it will take a
+while. My long term plan is to remove Bootstrap, use
+vanilla CSS and as little JS as possible. The reason
+for that is that it&#8217;s cheaper than upgrading libraries
+every few years. Life is too short to spend it
+upgrading JS libraries.</p></div>
+
+</article>
+</div>
+
+<div class="span3 sidecol">
+<h3>More articles</h3>
+<ul id="articles-nav" class="extra_margin">
+
+ <li><a href="http://ninenines.eu/articles/website-update/">Website update</a></li>
+
+ <li><a href="http://ninenines.eu/articles/erlanger-playbook-september-2015-update/">The Erlanger Playbook September 2015 Update</a></li>
+
+ <li><a href="http://ninenines.eu/articles/erlanger-playbook/">The Erlanger Playbook</a></li>
+
+ <li><a href="http://ninenines.eu/articles/erlang-validate-utf8/">Validating UTF-8 binaries with Erlang</a></li>
+
+ <li><a href="http://ninenines.eu/articles/on-open-source/">On open source</a></li>
+
+ <li><a href="http://ninenines.eu/articles/the-story-so-far/">The story so far</a></li>
+
+ <li><a href="http://ninenines.eu/articles/cowboy2-qs/">Cowboy 2.0 and query strings</a></li>
+
+ <li><a href="http://ninenines.eu/articles/january-2014-status/">January 2014 status</a></li>
+
+ <li><a href="http://ninenines.eu/articles/farwest-funded/">Farwest got funded!</a></li>
+
+ <li><a href="http://ninenines.eu/articles/erlang.mk-and-relx/">Build Erlang releases with Erlang.mk and Relx</a></li>
+
+ <li><a href="http://ninenines.eu/articles/xerl-0.5-intermediate-module/">Xerl: intermediate module</a></li>
+
+ <li><a href="http://ninenines.eu/articles/xerl-0.4-expression-separator/">Xerl: expression separator</a></li>
+
+ <li><a href="http://ninenines.eu/articles/erlang-scalability/">Erlang Scalability</a></li>
+
+ <li><a href="http://ninenines.eu/articles/xerl-0.3-atomic-expressions/">Xerl: atomic expressions</a></li>
+
+ <li><a href="http://ninenines.eu/articles/xerl-0.2-two-modules/">Xerl: two modules</a></li>
+
+ <li><a href="http://ninenines.eu/articles/xerl-0.1-empty-modules/">Xerl: empty modules</a></li>
+
+ <li><a href="http://ninenines.eu/articles/ranch-ftp/">Build an FTP Server with Ranch in 30 Minutes</a></li>
+
+ <li><a href="http://ninenines.eu/articles/tictactoe/">Erlang Tic Tac Toe</a></li>
+
+</ul>
+
+<h3>Feedback</h3>
+<p>Feel free to <a href="mailto:[email protected]">email us</a>
+if you found any mistake or need clarification on any of the
+articles.</p>
+
+</div>
+</div>
+</div>
+</div>
+
+ <footer>
+ <div class="container">
+ <div class="row">
+ <div class="span6">
+ <p id="scroll-top"><a href="#">↑ Scroll to top</a></p>
+ <nav>
+ <ul>
+ <li><a href="mailto:[email protected]" title="Contact us">Contact us</a></li><li><a href="https://github.com/ninenines/ninenines.github.io" title="Github repository">Contribute to this site</a></li>
+ </ul>
+ </nav>
+ </div>
+ <div class="span6 credits">
+ <p><img src="/img/footer_logo.png"></p>
+ <p>Copyright &copy; Loïc Hoguin 2012-2016</p>
+ </div>
+ </div>
+ </div>
+ </footer>
+
+
+ <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
+ <script src="/js/bootstrap-carousel.js"></script>
+ <script src="/js/bootstrap-dropdown.js"></script>
+ <script src="/js/custom.js"></script>
+ </body>
+</html>
+
diff --git a/articles/xerl-0.1-empty-modules/index.html b/articles/xerl-0.1-empty-modules/index.html
index bbda8b40..4c419b54 100644
--- a/articles/xerl-0.1-empty-modules/index.html
+++ b/articles/xerl-0.1-empty-modules/index.html
@@ -222,6 +222,8 @@ the next few articles.</p></div>
<h3>More articles</h3>
<ul id="articles-nav" class="extra_margin">
+ <li><a href="http://ninenines.eu/articles/website-update/">Website update</a></li>
+
<li><a href="http://ninenines.eu/articles/erlanger-playbook-september-2015-update/">The Erlanger Playbook September 2015 Update</a></li>
<li><a href="http://ninenines.eu/articles/erlanger-playbook/">The Erlanger Playbook</a></li>
diff --git a/articles/xerl-0.2-two-modules/index.html b/articles/xerl-0.2-two-modules/index.html
index 49ed4702..c0bab979 100644
--- a/articles/xerl-0.2-two-modules/index.html
+++ b/articles/xerl-0.2-two-modules/index.html
@@ -227,6 +227,8 @@ though, so let&#8217;s get back to it after we add more.</p></div>
<h3>More articles</h3>
<ul id="articles-nav" class="extra_margin">
+ <li><a href="http://ninenines.eu/articles/website-update/">Website update</a></li>
+
<li><a href="http://ninenines.eu/articles/erlanger-playbook-september-2015-update/">The Erlanger Playbook September 2015 Update</a></li>
<li><a href="http://ninenines.eu/articles/erlanger-playbook/">The Erlanger Playbook</a></li>
diff --git a/articles/xerl-0.3-atomic-expressions/index.html b/articles/xerl-0.3-atomic-expressions/index.html
index eca9f70f..30522232 100644
--- a/articles/xerl-0.3-atomic-expressions/index.html
+++ b/articles/xerl-0.3-atomic-expressions/index.html
@@ -231,6 +231,8 @@ do that.</p></div>
<h3>More articles</h3>
<ul id="articles-nav" class="extra_margin">
+ <li><a href="http://ninenines.eu/articles/website-update/">Website update</a></li>
+
<li><a href="http://ninenines.eu/articles/erlanger-playbook-september-2015-update/">The Erlanger Playbook September 2015 Update</a></li>
<li><a href="http://ninenines.eu/articles/erlanger-playbook/">The Erlanger Playbook</a></li>
diff --git a/articles/xerl-0.4-expression-separator/index.html b/articles/xerl-0.4-expression-separator/index.html
index a5be223f..605b55bf 100644
--- a/articles/xerl-0.4-expression-separator/index.html
+++ b/articles/xerl-0.4-expression-separator/index.html
@@ -136,6 +136,8 @@ expressions so I thought it was a good idea to anticipate.</p></div>
<h3>More articles</h3>
<ul id="articles-nav" class="extra_margin">
+ <li><a href="http://ninenines.eu/articles/website-update/">Website update</a></li>
+
<li><a href="http://ninenines.eu/articles/erlanger-playbook-september-2015-update/">The Erlanger Playbook September 2015 Update</a></li>
<li><a href="http://ninenines.eu/articles/erlanger-playbook/">The Erlanger Playbook</a></li>
diff --git a/articles/xerl-0.5-intermediate-module/index.html b/articles/xerl-0.5-intermediate-module/index.html
index 96e86e4f..ffd7673d 100644
--- a/articles/xerl-0.5-intermediate-module/index.html
+++ b/articles/xerl-0.5-intermediate-module/index.html
@@ -214,6 +214,8 @@ http://www.gnu.org/software/src-highlite -->
<h3>More articles</h3>
<ul id="articles-nav" class="extra_margin">
+ <li><a href="http://ninenines.eu/articles/website-update/">Website update</a></li>
+
<li><a href="http://ninenines.eu/articles/erlanger-playbook-september-2015-update/">The Erlanger Playbook September 2015 Update</a></li>
<li><a href="http://ninenines.eu/articles/erlanger-playbook/">The Erlanger Playbook</a></li>