diff options
Diffstat (limited to 'index.xml')
-rw-r--r-- | index.xml | 207 |
1 files changed, 67 insertions, 140 deletions
@@ -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><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="http://ninenines.eu/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="http://ninenines.eu/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="http://ninenines.eu/index.xml">/index.xml</a>,
+or <a href="http://ninenines.eu/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>
+</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><div class="paragraph"><p>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&#8217;s body, replacing our interpreter.</p></div>
-<div class="paragraph"><p>This is what we want to have when all the work is done:</p></div>
-<div class="listingblock">
-<div class="content">
-<pre><code>xerl -&gt; tokens -&gt; AST -&gt; intermediate -&gt; cerl</code></pre>
-</div></div>
-<div class="paragraph"><p>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.</p></div>
-<div class="paragraph"><p>This intermediate representation is in the form of a module
-which contains a single function: <code>run/0</code>. This function
-contains all the expressions from our Xerl source file.</p></div>
-<div class="paragraph"><p>In the case of a Xerl source file only containing the integer
-<code>42</code>, we will obtain the following module ready to
-be executed:</p></div>
-<div class="listingblock">
-<div class="content"><!-- Generator: GNU source-highlight 3.1.8
-by Lorenzo Bettini
-http://www.lorenzobettini.it
-http://www.gnu.org/software/src-highlite -->
-<pre><tt><span style="font-weight: bold"><span style="color: #000080">-module</span></span>(<span style="color: #FF6600">'$xerl_intermediate'</span>)<span style="color: #990000">.</span>
-<span style="font-weight: bold"><span style="color: #000080">-export</span></span>([<span style="font-weight: bold"><span style="color: #000000">run</span></span><span style="color: #990000">/</span><span style="color: #993399">0</span>])<span style="color: #990000">.</span>
-
-<span style="font-weight: bold"><span style="color: #000000">run</span></span>() <span style="color: #990000">-&gt;</span>
- <span style="color: #993399">42</span><span style="color: #990000">.</span></tt></pre></div></div>
-<div class="paragraph"><p>Running it will of course give us a result of <code>42</code>,
-the same we had when interpreting expressions.</p></div>
-<div class="paragraph"><p>The resulting Core Erlang code looks like this:</p></div>
-<div class="listingblock">
-<div class="content"><!-- Generator: GNU source-highlight 3.1.8
-by Lorenzo Bettini
-http://www.lorenzobettini.it
-http://www.gnu.org/software/src-highlite -->
-<pre><tt><span style="color: #FF6600">module</span> <span style="color: #FF6600">'$xerl_intermediate'</span> [<span style="color: #FF6600">'run'</span><span style="color: #990000">/</span><span style="color: #993399">0</span>]
- <span style="color: #FF6600">attributes</span> []
-<span style="color: #FF6600">'run'</span><span style="color: #990000">/</span><span style="color: #993399">0</span> <span style="color: #990000">=</span>
- <span style="font-weight: bold"><span style="color: #0000FF">fun</span></span> () <span style="color: #990000">-&gt;</span>
- <span style="color: #993399">42</span>
-<span style="font-weight: bold"><span style="color: #0000FF">end</span></span></tt></pre></div></div>
-<div class="paragraph"><p>The nice thing about doing it like this is that other than the
-definition of the intermediate module and its <code>run/0</code>
-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.</p></div>
-<div class="paragraph"><p>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 <code>run</code> function to keep track of all this.</p></div>
-<div class="paragraph"><p>This does mean that we will have different code for compiling
-<code>fun</code> and <code>mod</code> expressions when creating
-the intermediate module. But the many other expressions don&#8217;t need
-any special care.</p></div>
-<div class="paragraph"><p>Right now we&#8217;ve used the <code>'$xerl_intermediate'</code> 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&#8217;ll implement
-modules this way.</p></div>
-<div class="paragraph"><p>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&#8217;s body. Worry
-not though, if we only detect <code>mod</code> instructions in the file
-body, we can just skip this phase.</p></div>
-<div class="paragraph"><p>While we&#8217;re at it, we&#8217;ll modify our code generator to handle lists
-of expressions, which didn&#8217;t actually work with integer literals
-before.</p></div>
-<div class="paragraph"><p>We&#8217;re going to use Core Erlang sequences for running the many
-expressions. Sequences work like <code>let</code>, except no value
-is actually bound. Perfect for our case, since we don&#8217;t support
-binding values at this time anyway.</p></div>
-<div class="paragraph"><p>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.</p></div>
-<div class="paragraph"><p>The result is this very simple function:</p></div>
-<div class="listingblock">
-<div class="content"><!-- Generator: GNU source-highlight 3.1.8
-by Lorenzo Bettini
-http://www.lorenzobettini.it
-http://www.gnu.org/software/src-highlite -->
-<pre><tt><span style="font-weight: bold"><span style="color: #000000">comp_body</span></span>([<span style="color: #009900">Expr</span>]) <span style="color: #990000">-&gt;</span>
- <span style="font-weight: bold"><span style="color: #000000">expr</span></span>(<span style="color: #009900">Expr</span>);
-<span style="font-weight: bold"><span style="color: #000000">comp_body</span></span>([<span style="color: #009900">Expr</span>|<span style="color: #009900">Exprs</span>]) <span style="color: #990000">-&gt;</span>
- <span style="color: #009900">Arg</span> <span style="color: #990000">=</span> <span style="font-weight: bold"><span style="color: #000000">expr</span></span>(<span style="color: #009900">Expr</span>),
- <span style="color: #009900">Body</span> <span style="color: #990000">=</span> <span style="font-weight: bold"><span style="color: #000000">comp_body</span></span>(<span style="color: #009900">Exprs</span>),
- <span style="font-weight: bold"><span style="color: #000000">cerl:c_seq</span></span>(<span style="color: #009900">Arg</span>, <span style="color: #009900">Body</span>)<span style="color: #990000">.</span></tt></pre></div></div>
-<div class="paragraph"><p>In the case of our example above, a sequence will not be created,
-we only have one expression. If we were to have <code>42, 43, 44</code>
-in our Xerl source file, we would have a result equivalent to the
-following before optimization:</p></div>
-<div class="listingblock">
-<div class="content"><!-- Generator: GNU source-highlight 3.1.8
-by Lorenzo Bettini
-http://www.lorenzobettini.it
-http://www.gnu.org/software/src-highlite -->
-<pre><tt><span style="font-weight: bold"><span style="color: #000080">-module</span></span>(<span style="color: #FF6600">'$xerl_intermediate'</span>)<span style="color: #990000">.</span>
-<span style="font-weight: bold"><span style="color: #000080">-export</span></span>([<span style="font-weight: bold"><span style="color: #000000">run</span></span><span style="color: #990000">/</span><span style="color: #993399">0</span>])<span style="color: #990000">.</span>
-
-<span style="font-weight: bold"><span style="color: #000000">run</span></span>() <span style="color: #990000">-&gt;</span>
- <span style="color: #993399">42</span>,
- <span style="color: #993399">43</span>,
- <span style="color: #993399">44</span><span style="color: #990000">.</span></tt></pre></div></div>
-<div class="paragraph"><p>And the result is of course <code>44</code>.</p></div>
-<div class="paragraph"><p>The resulting Core Erlang code looks like this:</p></div>
-<div class="listingblock">
-<div class="content"><!-- Generator: GNU source-highlight 3.1.8
-by Lorenzo Bettini
-http://www.lorenzobettini.it
-http://www.gnu.org/software/src-highlite -->
-<pre><tt><span style="color: #FF6600">module</span> <span style="color: #FF6600">'$xerl_intermediate'</span> [<span style="color: #FF6600">'run'</span><span style="color: #990000">/</span><span style="color: #993399">0</span>]
- <span style="color: #FF6600">attributes</span> []
-<span style="color: #FF6600">'run'</span><span style="color: #990000">/</span><span style="color: #993399">0</span> <span style="color: #990000">=</span>
- <span style="font-weight: bold"><span style="color: #0000FF">fun</span></span> () <span style="color: #990000">-&gt;</span>
- <span style="color: #FF6600">do</span> <span style="color: #993399">42</span>
- <span style="color: #FF6600">do</span> <span style="color: #993399">43</span>
- <span style="color: #993399">44</span>
-<span style="font-weight: bold"><span style="color: #0000FF">end</span></span></tt></pre></div></div>
-<div class="paragraph"><p>Feels very lisp-y, right? Yep.</p></div>
-<div class="ulist"><ul>
-<li>
-<p>
-<a href="https://github.com/extend/xerl/blob/0.5/">View the source</a>
-</p>
-</li>
-</ul></div>
-</description> - </item> - </channel> </rss>
\ No newline at end of file |