diff options
author | Loïc Hoguin <[email protected]> | 2016-04-01 00:14:56 +0200 |
---|---|---|
committer | Loïc Hoguin <[email protected]> | 2016-04-01 00:14:56 +0200 |
commit | ba9013eaeb8369d800dcac1cf5e59b846ac6c1c5 (patch) | |
tree | 53e07053856667d66fb406475c024c8d31b19dfc /articles/index.xml | |
parent | fe3492a98de29942477b061cd02c92246f4bf85a (diff) | |
download | ninenines.eu-ba9013eaeb8369d800dcac1cf5e59b846ac6c1c5.tar.gz ninenines.eu-ba9013eaeb8369d800dcac1cf5e59b846ac6c1c5.tar.bz2 ninenines.eu-ba9013eaeb8369d800dcac1cf5e59b846ac6c1c5.zip |
Add post about website update
Diffstat (limited to 'articles/index.xml')
-rw-r--r-- | articles/index.xml | 215 |
1 files changed, 67 insertions, 148 deletions
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><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> @@ -1768,152 +1834,5 @@ though, so let&#8217;s get back to it after we add more.</p></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><div class="paragraph"><p>Let&#8217;s build a programming language. I call it Xerl: eXtended ERLang.
-It&#8217;ll be an occasion for us to learn a few things, especially me.</p></div>
-<div class="paragraph"><p>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.</p></div>
-<div class="paragraph"><p>We are just starting, so let&#8217;s no go ahead of ourselves here. We&#8217;ll
-begin with writing the code allowing us to compile an empty module.</p></div>
-<div class="paragraph"><p>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.</p></div>
-<div class="paragraph"><p>Today we will only focus on compiling the following code:</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">mod</span> <span style="color: #FF6600">my_module</span>
-<span style="font-weight: bold"><span style="color: #0000FF">begin</span></span>
-<span style="font-weight: bold"><span style="color: #0000FF">end</span></span></tt></pre></div></div>
-<div class="paragraph"><p>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.</p></div>
-<div class="paragraph"><p>We will use <em>leex</em> 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.</p></div>
-<div class="paragraph"><p>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.</p></div>
-<div class="paragraph"><p>Rules consist of a regular expression followed by Erlang code. The
-latter must return a token representation or the atom <code>skip_token</code>.</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: #009900">L</span>}{<span style="color: #009900">A</span>}<span style="color: #990000">*</span> <span style="color: #990000">:</span>
- <span style="color: #009900">Atom</span> <span style="color: #990000">=</span> <span style="font-weight: bold"><span style="color: #000080">list_to_atom</span></span>(<span style="color: #009900">TokenChars</span>),
- {<span style="color: #FF6600">token</span>, <span style="font-weight: bold"><span style="color: #0000FF">case</span></span> <span style="font-weight: bold"><span style="color: #000000">reserved_word</span></span>(<span style="color: #009900">Atom</span>) <span style="font-weight: bold"><span style="color: #0000FF">of</span></span>
- <span style="color: #000080">true</span> <span style="color: #990000">-&gt;</span> {<span style="color: #009900">Atom</span>, <span style="color: #009900">TokenLine</span>};
- <span style="color: #000080">false</span> <span style="color: #990000">-&gt;</span> {<span style="font-weight: bold"><span style="color: #000080">atom</span></span>, <span style="color: #009900">TokenLine</span>, <span style="color: #009900">Atom</span>}
- <span style="font-weight: bold"><span style="color: #0000FF">end</span></span>}<span style="color: #990000">.</span>
-
-{<span style="color: #009900">WS</span>}<span style="color: #990000">+</span> <span style="color: #990000">:</span> <span style="color: #FF6600">skip_token</span><span style="color: #990000">.</span></tt></pre></div></div>
-<div class="paragraph"><p>The first rule matches an atom, which is converted to either a special
-representation for reserved words, or an atom tuple. The
-<code>TokenChars</code> variable represents the match as a string, and
-the <code>TokenLine</code> variable contains the line number.
-<a href="https://github.com/extend/xerl/blob/0.1/src/xerl_lexer.xrl">View the complete file</a>.</p></div>
-<div class="paragraph"><p>We obtain the following result from the lexer:</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">mod</span>,<span style="color: #993399">1</span>},{<span style="font-weight: bold"><span style="color: #000080">atom</span></span>,<span style="color: #993399">1</span>,<span style="color: #FF6600">my_module</span>},{<span style="color: #FF6600">'begin'</span>,<span style="color: #993399">2</span>},{<span style="color: #FF6600">'end'</span>,<span style="color: #993399">3</span>}]</tt></pre></div></div>
-<div class="paragraph"><p>The second step is to parse this list of tokens to add semantic meaning
-and generate what is called an <em>abstract syntax tree</em>. We will be
-using the <em>yecc</em> 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.</p></div>
-<div class="paragraph"><p>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 <code>mod</code>
-expression which defines a module. And that&#8217;s it! We end up with the
-following grammar:</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">exprs</span> <span style="color: #990000">-&gt;</span> <span style="color: #FF6600">expr</span> <span style="color: #990000">:</span> [<span style="color: #FF6600">'$1'</span>]<span style="color: #990000">.</span>
-<span style="color: #FF6600">exprs</span> <span style="color: #990000">-&gt;</span> <span style="color: #FF6600">expr</span> <span style="color: #FF6600">exprs</span> <span style="color: #990000">:</span> [<span style="color: #FF6600">'$1'</span> | <span style="color: #FF6600">'$2'</span>]<span style="color: #990000">.</span>
-
-<span style="color: #FF6600">expr</span> <span style="color: #990000">-&gt;</span> <span style="color: #FF6600">module</span> <span style="color: #990000">:</span> <span style="color: #FF6600">'$1'</span><span style="color: #990000">.</span>
-
-<span style="color: #FF6600">module</span> <span style="color: #990000">-&gt;</span> <span style="color: #FF6600">'mod'</span> <span style="font-weight: bold"><span style="color: #000080">atom</span></span> <span style="color: #FF6600">'begin'</span> <span style="color: #FF6600">'end'</span> <span style="color: #990000">:</span>
- {<span style="color: #FF6600">'mod'</span>, <span style="font-weight: bold"><span style="color: #000080">?line</span></span>(<span style="color: #FF6600">'$1'</span>), <span style="color: #FF6600">'$2'</span>, []}<span style="color: #990000">.</span></tt></pre></div></div>
-<div class="paragraph"><p><a href="https://github.com/extend/xerl/blob/0.1/src/xerl_parser.yrl">View the complete file</a>.</p></div>
-<div class="paragraph"><p>We obtain the following result from the parser:</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">mod</span>,<span style="color: #993399">1</span>,{<span style="font-weight: bold"><span style="color: #000080">atom</span></span>,<span style="color: #993399">1</span>,<span style="color: #FF6600">my_module</span>},[]}]</tt></pre></div></div>
-<div class="paragraph"><p>We obtain a list of a single <code>mod</code> expression. Just like
-we wanted. Last step is generating the Core Erlang code from it.</p></div>
-<div class="paragraph"><p>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.</p></div>
-<div class="paragraph"><p>We can use the <code>cerl</code> 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.</p></div>
-<div class="paragraph"><p>There&#8217;s one important thing to do when generating Core Erlang AST
-for a module: create the <code>module_info/{0,1}</code> 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.</p></div>
-<div class="paragraph"><p>As you can see by
-<a href="https://github.com/extend/xerl/blob/0.1/src/xerl_codegen.erl">looking at the complete file</a>,
-the code generator echoes the grammar we defined in the parser, and
-simply applies the appropriate Core Erlang functions for each expressions.</p></div>
-<div class="paragraph"><p>We obtain the following pretty-printed Core Erlang generated code:</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">'my_module'</span> [<span style="color: #FF6600">'module_info'</span><span style="color: #990000">/</span><span style="color: #993399">0</span>,
- <span style="color: #FF6600">'module_info'</span><span style="color: #990000">/</span><span style="color: #993399">1</span>]
- <span style="color: #FF6600">attributes</span> []
-<span style="color: #FF6600">'module_info'</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="font-weight: bold"><span style="color: #000080">call</span></span> <span style="color: #FF6600">'erlang'</span><span style="color: #990000">:</span><span style="color: #FF6600">'get_module_info'</span>
- (<span style="color: #FF6600">'empty_module'</span>)
-<span style="color: #FF6600">'module_info'</span><span style="color: #990000">/</span><span style="color: #993399">1</span> <span style="color: #990000">=</span>
- <span style="font-weight: bold"><span style="color: #0000FF">fun</span></span> (<span style="color: #009900">Key</span>) <span style="color: #990000">-&gt;</span>
- <span style="font-weight: bold"><span style="color: #000080">call</span></span> <span style="color: #FF6600">'erlang'</span><span style="color: #990000">:</span><span style="color: #FF6600">'get_module_info'</span>
- (<span style="color: #FF6600">'empty_module'</span>, <span style="color: #009900">Key</span>)
-<span style="font-weight: bold"><span style="color: #0000FF">end</span></span></tt></pre></div></div>
-<div class="paragraph"><p>For convenience I added all the steps in a <code>xerl:compile/1</code>
-function that you can use against your own .xerl files.</p></div>
-<div class="paragraph"><p>That&#8217;s it for today! We will go into more details over each steps in
-the next few articles.</p></div>
-<div class="ulist"><ul>
-<li>
-<p>
-<a href="https://github.com/extend/xerl/blob/0.1/">View the source</a>
-</p>
-</li>
-</ul></div>
-</description> - </item> - </channel> </rss>
\ No newline at end of file |