summaryrefslogtreecommitdiffstats
path: root/index.xml
diff options
context:
space:
mode:
Diffstat (limited to 'index.xml')
-rw-r--r--index.xml207
1 files changed, 67 insertions, 140 deletions
diff --git a/index.xml b/index.xml
index fd178205..08782178 100644
--- a/index.xml
+++ b/index.xml
@@ -6,10 +6,76 @@
<description>Recent content 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/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>
@@ -1295,144 +1361,5 @@ containing all the flags to pass to the Erlang VM, for example
</description>
</item>
- <item>
- <title>Xerl: intermediate module</title>
- <link>http://ninenines.eu/articles/xerl-0.5-intermediate-module/</link>
- <pubDate>Mon, 25 Mar 2013 00:00:00 +0100</pubDate>
-
- <guid>http://ninenines.eu/articles/xerl-0.5-intermediate-module/</guid>
- <description>&lt;div class=&#34;paragraph&#34;&gt;&lt;p&gt;Today we will start the work on the intermediate module
-that will be used to run the code for the expressions found
-in our file&amp;#8217;s body, replacing our interpreter.&lt;/p&gt;&lt;/div&gt;
-&lt;div class=&#34;paragraph&#34;&gt;&lt;p&gt;This is what we want to have when all the work is done:&lt;/p&gt;&lt;/div&gt;
-&lt;div class=&#34;listingblock&#34;&gt;
-&lt;div class=&#34;content&#34;&gt;
-&lt;pre&gt;&lt;code&gt;xerl -&amp;gt; tokens -&amp;gt; AST -&amp;gt; intermediate -&amp;gt; cerl&lt;/code&gt;&lt;/pre&gt;
-&lt;/div&gt;&lt;/div&gt;
-&lt;div class=&#34;paragraph&#34;&gt;&lt;p&gt;Today we will perform this work only on the atomic integer
-expression however, so we will not build any module at the end.
-We have a few more things to take care of before getting there.
-This does mean that we completely break compilation of modules
-though, so hopefully we can resolve that soon.&lt;/p&gt;&lt;/div&gt;
-&lt;div class=&#34;paragraph&#34;&gt;&lt;p&gt;This intermediate representation is in the form of a module
-which contains a single function: &lt;code&gt;run/0&lt;/code&gt;. This function
-contains all the expressions from our Xerl source file.&lt;/p&gt;&lt;/div&gt;
-&lt;div class=&#34;paragraph&#34;&gt;&lt;p&gt;In the case of a Xerl source file only containing the integer
-&lt;code&gt;42&lt;/code&gt;, we will obtain the following module ready to
-be executed:&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;font-weight: bold&#34;&gt;&lt;span style=&#34;color: #000080&#34;&gt;-module&lt;/span&gt;&lt;/span&gt;(&lt;span style=&#34;color: #FF6600&#34;&gt;&#39;$xerl_intermediate&#39;&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;-export&lt;/span&gt;&lt;/span&gt;([&lt;span style=&#34;font-weight: bold&#34;&gt;&lt;span style=&#34;color: #000000&#34;&gt;run&lt;/span&gt;&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: #000000&#34;&gt;run&lt;/span&gt;&lt;/span&gt;() &lt;span style=&#34;color: #990000&#34;&gt;-&amp;gt;&lt;/span&gt;
- &lt;span style=&#34;color: #993399&#34;&gt;42&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;Running it will of course give us a result of &lt;code&gt;42&lt;/code&gt;,
-the same we had when interpreting expressions.&lt;/p&gt;&lt;/div&gt;
-&lt;div class=&#34;paragraph&#34;&gt;&lt;p&gt;The resulting Core Erlang code looks like this:&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;$xerl_intermediate&#39;&lt;/span&gt; [&lt;span style=&#34;color: #FF6600&#34;&gt;&#39;run&#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;attributes&lt;/span&gt; []
-&lt;span style=&#34;color: #FF6600&#34;&gt;&#39;run&#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;color: #993399&#34;&gt;42&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;The nice thing about doing it like this is that other than the
-definition of the intermediate module and its &lt;code&gt;run/0&lt;/code&gt;
-function, we can use the same code we are using for generating
-the final Beam file. It may also be faster than interpreting
-if you have complex modules.&lt;/p&gt;&lt;/div&gt;
-&lt;div class=&#34;paragraph&#34;&gt;&lt;p&gt;Of course this here only works for the simplest cases, as you
-cannot declare a module or a function inside another Erlang function.
-We will need to wrap these into function calls to the Xerl compiler
-that will take care of compiling them, making them available for
-any subsequent expression. We will also need to pass the environment
-to the &lt;code&gt;run&lt;/code&gt; function to keep track of all this.&lt;/p&gt;&lt;/div&gt;
-&lt;div class=&#34;paragraph&#34;&gt;&lt;p&gt;This does mean that we will have different code for compiling
-&lt;code&gt;fun&lt;/code&gt; and &lt;code&gt;mod&lt;/code&gt; expressions when creating
-the intermediate module. But the many other expressions don&amp;#8217;t need
-any special care.&lt;/p&gt;&lt;/div&gt;
-&lt;div class=&#34;paragraph&#34;&gt;&lt;p&gt;Right now we&amp;#8217;ve used the &lt;code&gt;&#39;$xerl_intermediate&#39;&lt;/code&gt; atom
-for the intermediate module name because we only have one, but we
-will need to have a more random name later on when we&amp;#8217;ll implement
-modules this way.&lt;/p&gt;&lt;/div&gt;
-&lt;div class=&#34;paragraph&#34;&gt;&lt;p&gt;The attentive mind will know by now that when compiling a Xerl
-file containing one module, we will need to compile two intermediate
-modules: one for the file body, and one for the module&amp;#8217;s body. Worry
-not though, if we only detect &lt;code&gt;mod&lt;/code&gt; instructions in the file
-body, we can just skip this phase.&lt;/p&gt;&lt;/div&gt;
-&lt;div class=&#34;paragraph&#34;&gt;&lt;p&gt;While we&amp;#8217;re at it, we&amp;#8217;ll modify our code generator to handle lists
-of expressions, which didn&amp;#8217;t actually work with integer literals
-before.&lt;/p&gt;&lt;/div&gt;
-&lt;div class=&#34;paragraph&#34;&gt;&lt;p&gt;We&amp;#8217;re going to use Core Erlang sequences for running the many
-expressions. Sequences work like &lt;code&gt;let&lt;/code&gt;, except no value
-is actually bound. Perfect for our case, since we don&amp;#8217;t support
-binding values at this time anyway.&lt;/p&gt;&lt;/div&gt;
-&lt;div class=&#34;paragraph&#34;&gt;&lt;p&gt;Sequences have an argument and a body, both being Core Erlang
-expressions. The simplest way to have many expressions is to use
-a simple expression for the argument and a sequence for the rest
-of the expressions. When we encounter the last expression in the
-list, we do not create a sequence.&lt;/p&gt;&lt;/div&gt;
-&lt;div class=&#34;paragraph&#34;&gt;&lt;p&gt;The result is this very simple function:&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;font-weight: bold&#34;&gt;&lt;span style=&#34;color: #000000&#34;&gt;comp_body&lt;/span&gt;&lt;/span&gt;([&lt;span style=&#34;color: #009900&#34;&gt;Expr&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: #000000&#34;&gt;expr&lt;/span&gt;&lt;/span&gt;(&lt;span style=&#34;color: #009900&#34;&gt;Expr&lt;/span&gt;);
-&lt;span style=&#34;font-weight: bold&#34;&gt;&lt;span style=&#34;color: #000000&#34;&gt;comp_body&lt;/span&gt;&lt;/span&gt;([&lt;span style=&#34;color: #009900&#34;&gt;Expr&lt;/span&gt;|&lt;span style=&#34;color: #009900&#34;&gt;Exprs&lt;/span&gt;]) &lt;span style=&#34;color: #990000&#34;&gt;-&amp;gt;&lt;/span&gt;
- &lt;span style=&#34;color: #009900&#34;&gt;Arg&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: #000000&#34;&gt;expr&lt;/span&gt;&lt;/span&gt;(&lt;span style=&#34;color: #009900&#34;&gt;Expr&lt;/span&gt;),
- &lt;span style=&#34;color: #009900&#34;&gt;Body&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: #000000&#34;&gt;comp_body&lt;/span&gt;&lt;/span&gt;(&lt;span style=&#34;color: #009900&#34;&gt;Exprs&lt;/span&gt;),
- &lt;span style=&#34;font-weight: bold&#34;&gt;&lt;span style=&#34;color: #000000&#34;&gt;cerl:c_seq&lt;/span&gt;&lt;/span&gt;(&lt;span style=&#34;color: #009900&#34;&gt;Arg&lt;/span&gt;, &lt;span style=&#34;color: #009900&#34;&gt;Body&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;In the case of our example above, a sequence will not be created,
-we only have one expression. If we were to have &lt;code&gt;42, 43, 44&lt;/code&gt;
-in our Xerl source file, we would have a result equivalent to the
-following before optimization:&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;font-weight: bold&#34;&gt;&lt;span style=&#34;color: #000080&#34;&gt;-module&lt;/span&gt;&lt;/span&gt;(&lt;span style=&#34;color: #FF6600&#34;&gt;&#39;$xerl_intermediate&#39;&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;-export&lt;/span&gt;&lt;/span&gt;([&lt;span style=&#34;font-weight: bold&#34;&gt;&lt;span style=&#34;color: #000000&#34;&gt;run&lt;/span&gt;&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: #000000&#34;&gt;run&lt;/span&gt;&lt;/span&gt;() &lt;span style=&#34;color: #990000&#34;&gt;-&amp;gt;&lt;/span&gt;
- &lt;span style=&#34;color: #993399&#34;&gt;42&lt;/span&gt;,
- &lt;span style=&#34;color: #993399&#34;&gt;43&lt;/span&gt;,
- &lt;span style=&#34;color: #993399&#34;&gt;44&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;And the result is of course &lt;code&gt;44&lt;/code&gt;.&lt;/p&gt;&lt;/div&gt;
-&lt;div class=&#34;paragraph&#34;&gt;&lt;p&gt;The resulting Core Erlang code looks like this:&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;$xerl_intermediate&#39;&lt;/span&gt; [&lt;span style=&#34;color: #FF6600&#34;&gt;&#39;run&#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;attributes&lt;/span&gt; []
-&lt;span style=&#34;color: #FF6600&#34;&gt;&#39;run&#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;color: #FF6600&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color: #993399&#34;&gt;42&lt;/span&gt;
- &lt;span style=&#34;color: #FF6600&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color: #993399&#34;&gt;43&lt;/span&gt;
- &lt;span style=&#34;color: #993399&#34;&gt;44&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;Feels very lisp-y, right? Yep.&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.5/&#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