<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <id>http://el-tramo.be/</id>
  <title>El Tramo</title>
  <updated>2013-05-17T22:00:00Z</updated>
  <link rel="alternate" href="http://el-tramo.be/"/>
  <link rel="self" href="http://el-tramo.be/feed.xml"/>
  <author>
    <name>Remko Tronçon</name>
    <uri>http://el-tramo.be/about</uri>
  </author>
  <entry>
    <id>tag:el-tramo.be,2013-05-18:/blog/my-favorite-vim-plugins/</id>
    <title type="html">My Favorite Vim Plugins</title>
    <published>2013-05-17T22:00:00Z</published>
    <updated>2013-05-17T22:00:00Z</updated>
    <link rel="alternate" href="http://el-tramo.be/blog/my-favorite-vim-plugins/"/>
    <content type="html">&lt;p&gt;After &lt;a href="/blog/sublime-text-experiment/"&gt;a brief affair with another editor&lt;/a&gt;, I’m now back
to using
my beloved &lt;a href="http://www.vim.org"&gt;Vim&lt;/a&gt; again. What’s more, I decided to invest the time I should have put in years ago when I started using
it, and learned to do things more efficiently. Besides reading
&lt;a href="http://pragprog.com/book/dnvim/practical-vim"&gt;Practical Vim&lt;/a&gt; and watching some
&lt;a href="http://vimcasts.org"&gt;VimCasts&lt;/a&gt;, I went through my list of plugins I collected over the years, removed the
ones I wasn’t using, learned about a couple of new ones I didn’t know, and re-learned some of the ones
I forgot about. Here’s the list of my favorite plugins I ended up with.&lt;/p&gt;

&lt;!-- more --&gt;


&lt;ul&gt;
&lt;li&gt;
&lt;a href="http://www.vim.org/scripts/script.php?script_id=2332"&gt;&lt;code&gt;pathogen&lt;/code&gt;&lt;/a&gt;:
  Easy management of Vim plugins. I put all my Vim settings in a Git
  repository, and this plugin allows me to add plugins as a Git submodule
  somewhere in my settings tree. For an extensive tutorial, have a look at the
  &lt;a href="http://vimcasts.org/episodes/synchronizing-plugins-with-git-submodules-and-pathogen/"&gt;&lt;code&gt;pathogen&lt;/code&gt;
  VimCast&lt;/a&gt;.
  Several other plugin managers (such as
  &lt;a href="https://github.com/MarcWeber/vim-addon-manager"&gt;&lt;code&gt;VAM&lt;/code&gt;&lt;/a&gt; and
  &lt;a href="https://github.com/gmarik/vundle"&gt;&lt;code&gt;Vundle&lt;/code&gt;&lt;/a&gt;) have emerged since I started
  using &lt;code&gt;pathogen&lt;/code&gt;, but I haven’t tried them since this one does the trick for
  me.&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.vim.org/scripts/script.php?script_id=4391"&gt;&lt;code&gt;sensible&lt;/code&gt;&lt;/a&gt;:
  Have sensible, safe defaults for a modern day Vim setup. Allows me
  to trim down my vimrc a bit.&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.vim.org/scripts/script.php?script_id=3736"&gt;&lt;code&gt;ctrlp&lt;/code&gt;&lt;/a&gt;: Open files anywhere below your
  current directory very quickly, using
  fuzzy search. This is similar to Sublime’s “Go to anything” (which even uses the same
  shortcut). I almost exclusively open files using &lt;code&gt;ctrlp&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.vim.org/scripts/script.php?script_id=1590"&gt;&lt;code&gt;unimpaired&lt;/code&gt;&lt;/a&gt;: Easy to remember extra
  &lt;code&gt;]&lt;/code&gt; and &lt;code&gt;[&lt;/code&gt; shortcuts for a handful of useful tasks:
  cycling through files, buffers, arguments, SCM conflict markers, spelling errors; exchange
  lines, switch options, insert empty lines, … Also comes with shortcuts to
  toggle options, such as &lt;code&gt;col&lt;/code&gt; (toggle invisible characters), &lt;code&gt;con&lt;/code&gt;
  (toggle number column), &lt;code&gt;cos&lt;/code&gt; (toggle spell correction), …&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.vim.org/scripts/script.php?script_id=1171"&gt;&lt;code&gt;detectindent&lt;/code&gt;&lt;/a&gt;: Automatically detects whether tabs are expanded or not. Handy
  for working on multiple codebases with different tab preferences.&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.vim.org/scripts/script.php?script_id=31"&gt;&lt;code&gt;a&lt;/code&gt;&lt;/a&gt;: Switch between corresponding &lt;code&gt;.h&lt;/code&gt; and &lt;code&gt;.(c|cpp|mm)&lt;/code&gt; headers easily&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.vim.org/scripts/script.php?script_id=2572"&gt;&lt;code&gt;ack&lt;/code&gt;&lt;/a&gt;: Lightning fast greps across a project. I actually use &lt;code&gt;ag&lt;/code&gt; as backend.&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.vim.org/scripts/script.php?script_id=3302"&gt;&lt;code&gt;clang_complete&lt;/code&gt;&lt;/a&gt;: C/C++ code completion that works. Requires &lt;code&gt;clang&lt;/code&gt; to be on your system (which it is by default on MacOS X)&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.vim.org/scripts/script.php?script_id=2386"&gt;&lt;code&gt;endwise&lt;/code&gt;&lt;/a&gt;: Automatically adds &lt;code&gt;end&lt;/code&gt; when
  you write a &lt;code&gt;begin&lt;/code&gt;, but does it conservatively so it never inserts anything unwanted.&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.vim.org/scripts/script.php?script_id=2975"&gt;&lt;code&gt;fugitive&lt;/code&gt;&lt;/a&gt;. An extremely powerful Git integration for
  Vim. Apart from providing an interface for doing all kinds of (interactive) Git tasks from within Vim, also
  provides a status line entry for showing your current branch etc.
  There are
  &lt;a href="http://vimcasts.org/episodes/fugitive-vim---a-complement-to-command-line-git/"&gt;a&lt;/a&gt;
  &lt;a href="http://vimcasts.org/episodes/fugitive-vim-working-with-the-git-index/"&gt;couple&lt;/a&gt;
  &lt;a href="http://vimcasts.org/episodes/fugitive-vim-resolving-merge-conflicts-with-vimdiff/"&gt;of&lt;/a&gt;
  &lt;a href="http://vimcasts.org/episodes/fugitive-vim-browsing-the-git-object-database/"&gt;VimCast&lt;/a&gt;
  &lt;a href="http://vimcasts.org/episodes/fugitive-vim-exploring-the-history-of-a-git-repository/"&gt;episodes&lt;/a&gt;
  about how to use this plugin.&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.vim.org/scripts/script.php?script_id=1545"&gt;&lt;code&gt;abolish&lt;/code&gt;&lt;/a&gt;: A set of search/replace/conversion commands
  that support plurals, case (MixedCase, camelCase, snake_case, …), … Can be used to rename variables
  easily, change case of avariable, … There are also
  &lt;a href="http://vimcasts.org/episodes/smart-search-with-subvert/"&gt;some&lt;/a&gt;
  &lt;a href="http://vimcasts.org/episodes/supercharged-substitution-with-subvert/"&gt;VimCasts&lt;/a&gt;
  &lt;a href="http://vimcasts.org/episodes/enhanced-abbreviations-with-abolish/"&gt;about&lt;/a&gt; this plugin.&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.vim.org/scripts/script.php?script_id=3304"&gt;&lt;code&gt;gundo&lt;/code&gt;&lt;/a&gt;: Graphical overview of Vim’s undo tree.
  If you undid a couple of changes,
  did some other stuff, and decided that your initial version was actually better,
  you can easily revert back. This has saved me and my undecisive mind a couple
  of times already. Also has a &lt;a href="http://vimcasts.org/episodes/undo-branching-and-gundo-vim/"&gt;VimCast&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.vim.org/scripts/script.php?script_id=39"&gt;&lt;code&gt;matchit&lt;/code&gt;&lt;/a&gt;: Match more than just braces with &lt;code&gt;%&lt;/code&gt;. Cycles through if/else, matches
  HTML/XML tags, …&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.vim.org/scripts/script.php?script_id=1697"&gt;&lt;code&gt;surround&lt;/code&gt;&lt;/a&gt;: change/delete/add surrounding quotes, parentheses, tags, …&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.vim.org/scripts/script.php?script_id=2736"&gt;&lt;code&gt;syntastic&lt;/code&gt;&lt;/a&gt;: Checks the syntax of your current file on save, and displays
  errors using markers in the sidebar. Saves you a round trip to your terminal
  when trying to compile/run the file.&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.vim.org/scripts/script.php?script_id=273"&gt;&lt;code&gt;taglist&lt;/code&gt;&lt;/a&gt;: A navigation window with an overview of all functions/variables in
  your current file. Uses &lt;code&gt;ctags&lt;/code&gt; behind the screens, but doesn’t require you
  to run &lt;code&gt;ctags&lt;/code&gt; yourself on the codebase. It can also put an entry with the
  current function in your status bar (which is useful when editing files
  with large functions).&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.vim.org/scripts/script.php?script_id=1173"&gt;&lt;code&gt;tcomment&lt;/code&gt;&lt;/a&gt;: Quickly comment out lines and code blocks. I used &lt;a href="http://www.vim.org/scripts/script.php?script_id=1218"&gt;&lt;code&gt;NERDCommenter&lt;/code&gt;&lt;/a&gt; for a
  while, but &lt;code&gt;tcomment&lt;/code&gt; came with more natural Vim shortcuts (and is also supported
  by &lt;a href="http://vrapper.sourceforge.net"&gt;Vrapper&lt;/a&gt;). I also tried
  &lt;a href="http://www.vim.org/scripts/script.php?script_id=3695"&gt;&lt;code&gt;commentary&lt;/code&gt;&lt;/a&gt; (mostly because it’s by Tim Pope, and
  because it supports &lt;code&gt;repeat&lt;/code&gt;), which uses the same shortcuts, but this one doesn’t
  comment indented code blocks the way I want it to (i.e. put the indentation after
  the comment string instead of in front).&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.vim.org/scripts/script.php?script_id=3526"&gt;&lt;code&gt;easymotion&lt;/code&gt;&lt;/a&gt;:
  Makes it easy to jump to any word in your buffer, by assigning
  a single letter to each word, highlighting it, and drilling down with each keystroke.
  Although this plugin is probably
  as fast and intuitive as it gets, in a GUI mode, it may be a tad faster to
  simply reach for the mouse and click in the document. However, when editing
  remote files without mouse support, this plugin is great!&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.vim.org/scripts/script.php?script_id=2540"&gt;&lt;code&gt;snipmate&lt;/code&gt;&lt;/a&gt;: An engine for
  inserting snippets of code. There’s also a
  &lt;a href="https://github.com/honza/vim-snippets"&gt;standard repository of standard snippets&lt;/a&gt;, but I
  mostly only use my own snippets for larger snippets
  (e.g. create a new class, insert copyright headers, …).
  Downsides: it no longer works with &lt;code&gt;clang_complete&lt;/code&gt; (although it used to), and
  it seems hard to override already existing snippets (which is why I don’t
  use the default repository).&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.vim.org/scripts/script.php?script_id=521"&gt;&lt;code&gt;mru&lt;/code&gt;&lt;/a&gt;: Easily access recently opened
  files through the MRU list.&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.vim.org/scripts/script.php?script_id=4504"&gt;&lt;code&gt;dispatch&lt;/code&gt;&lt;/a&gt;:
  Asynchronous version of &lt;code&gt;:make&lt;/code&gt;, so you can still edit your code while your project is
  building. The downside is that it requires &lt;em&gt;iTerm&lt;/em&gt; on MacOS X or fires off a separate command
  shell on Linux and Windows, so it’s still not as nice as a native window running a build in
  its own thread, but it gets the job done.&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.vim.org/scripts/script.php?script_id=1658"&gt;&lt;code&gt;NERDtree&lt;/code&gt;&lt;/a&gt;: A better file system explorer than the default one. I don’t really use it
  that often (since I use &lt;code&gt;ctrlp&lt;/code&gt; to open files), but it’s handy for when you need
  to look around your project tree.&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.vim.org/scripts/script.php?script_id=2136"&gt;&lt;code&gt;repeat&lt;/code&gt;&lt;/a&gt;: ‘&lt;code&gt;.&lt;/code&gt;’ support for some of the plugins I use.&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.vim.org/scripts/script.php?script_id=2120"&gt;&lt;code&gt;speeddating&lt;/code&gt;&lt;/a&gt;: Increment dates using
  &lt;code&gt;Ctrl-A&lt;/code&gt;/&lt;code&gt;Ctrl-X&lt;/code&gt;. Not that I often do this,
  but since it just adds extra support to &lt;code&gt;Ctrl-A&lt;/code&gt;/&lt;code&gt;Ctrl-X&lt;/code&gt;, I just load it.&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.vim.org/scripts/script.php?script_id=2340"&gt;&lt;code&gt;molokai&lt;/code&gt;&lt;/a&gt;: A beautiful dark gray
  color scheme,
  based on the Monokai scheme from TextMate, and popular in other modern editors as well.&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://vrapper.sourceforge.net/"&gt;Vrapper&lt;/a&gt;: Not really a Vim plugin, but worth the mention: this Eclipse plugin
  provides a wide variety of Vim bindings to use inside Eclipse, so you can stay efficient when working on
  Java/Eclipse projects.&lt;/li&gt;
&lt;/ul&gt;

</content>
  </entry>
  <entry>
    <id>tag:el-tramo.be,2013-04-30:/blog/sublime-text-experiment/</id>
    <title type="html">The Sublime Text Experiment</title>
    <published>2013-04-29T22:00:00Z</published>
    <updated>2013-04-29T22:00:00Z</updated>
    <link rel="alternate" href="http://el-tramo.be/blog/sublime-text-experiment/"/>
    <content type="html">&lt;p&gt;I’m not easily persuaded to try out a new editor, but since I heard so many
great things about &lt;a href="http://www.sublimetext.com"&gt;Sublime Text&lt;/a&gt;, I decided to
give it a try. After all, it looked a lot better and smoother than my old and
rusty &lt;a href="http://www.vim.org"&gt;Vim&lt;/a&gt;, and I’m a sucker for look &amp;amp; feel. So, I took &lt;a href="https://tutsplus.com/course/improve-workflow-in-sublime-text-2/"&gt;the free courses on tuts+&lt;/a&gt;, and tried it out for a while
on my daily tasks. Here are my findings.&lt;/p&gt;

&lt;!-- more --&gt;


&lt;p&gt;Let’s start with the pros:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sublime is &lt;strong&gt;cross-platform&lt;/strong&gt;. I wouldn’t even consider using any editor that
  only works on one platform, so this one was a must.&lt;/li&gt;
&lt;li&gt;Not only does Sublime work on each platform, it &lt;strong&gt;looks and feels&lt;/strong&gt; &lt;em&gt;awesome&lt;/em&gt;
  on all of them. Very smooth, responsive, and appealing to the eye.&lt;/li&gt;
&lt;li&gt;One of the distinctive features is support for &lt;strong&gt;multiple cursors&lt;/strong&gt;: You can make the
  same change to different parts of the
text by simply selecting different parts, and starting to type, and you see the
  changes happening live. This is very
  handy for refactoring, such as renaming a variable.&lt;/li&gt;
&lt;li&gt;The &lt;strong&gt;command palette&lt;/strong&gt; makes it very easy to do any operation you can’t be bothered
to remember the shortcut for. Simply open the command palette, type a few letters,
  and Sublime will use fuzzy searching to suggest the command/option. Almost as good
  as remembering a shortuct.&lt;/li&gt;
&lt;li&gt;Every operation and option is available from the intuitively laid out &lt;strong&gt;menu&lt;/strong&gt;.
Not that you use the menu a lot (or even at all, thanks to the command palette), but
  it’s great for looking around and learning all the things you can do with the editor.&lt;/li&gt;
&lt;li&gt;You can quickly open files and jump to specific symbols using the &lt;strong&gt;Go to anything&lt;/strong&gt;
  popup. I was already using this exclusively to open files on Vim through
  &lt;a href="http://www.vim.org/scripts/script.php?script_id=3736"&gt;ctrlp&lt;/a&gt;, but Sublime
  adds support for symbols and lines to this interface as well, which can come in
  handy.&lt;/li&gt;
&lt;li&gt;You can trigger &lt;strong&gt;builds&lt;/strong&gt; of your project while editing files, see the results, and
  quickly cycle through build errors. This integration is very well done, much smoother
  than in Vim for example.&lt;/li&gt;
&lt;li&gt;You can use &lt;strong&gt;Vim commands&lt;/strong&gt; to move around and edit text, which is obviously
  nice if you’re used to those already, and means you can do lightning fast edits.&lt;/li&gt;
&lt;li&gt;Of course, there are lots of &lt;strong&gt;useful operations&lt;/strong&gt; on text, with &lt;strong&gt;sensible keybindings&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Sublime is &lt;strong&gt;extensible&lt;/strong&gt;, using a Python-based &lt;strong&gt;plugin system&lt;/strong&gt;. There seems to be
  a very large and dedicated community, writing plugins for it, which means you’ll
  most certainly find all the integrations and features you want on the web.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Unfortunately, there are also some cons:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Although Sublime is cross-platform, it seems to not have been designed for the
user who actually &lt;em&gt;uses&lt;/em&gt; it on different platforms. For example, the key-bindings
  differ from platform to platform, more than merely &lt;em&gt;Cmd&lt;/em&gt; becoming &lt;em&gt;Ctrl&lt;/em&gt;.
  This is probably rooted in Sublime’s decision to use
  shortcuts that are native to the platform. Remembering different shortcuts for
  different platforms is a nuisance, and causes regular incorrectly typed
  shortcuts when switching a lot.&lt;/li&gt;
&lt;li&gt;Settings are stored in fixed, platform-specific locations. Again, this is because
  Sublime chose to integrate with the OS as much as possible. However, this makes
  it hard to store your settings in a central Git repository, and share it across
  different machines and OSes.&lt;/li&gt;
&lt;li&gt;Sublime uses JSON as settings format. Although that sounds sensible, it actually
  has a big disadvantage: each line of your settings needs to end with a comma, &lt;em&gt;except&lt;/em&gt;
  for the last line. This hit me almost every time I wanted to customize something.
  Another consequence of using JSON is that the settings file isn’t very powerful:
  since it’s basically just key/value pairs, you can’t do anything conditional
  (e.g. depending on which machine you are on), or source other files.&lt;/li&gt;
&lt;li&gt;There is no console version available. I regularly need to edit files on remote
  systems where I only have a terminal available. In that case, I need to switch back to
  another editor.&lt;/li&gt;
&lt;li&gt;And then the obvious one: Sublime is closed source, and not cheap. I don’t
  have anything against closed software per se, and I’d gladly pay the
  (relatively steep) price of the editor if I’m going to use it all day, every day.
  However, I have some practical problems: the systems I work on every day can’t run
  Sublime, since it is linked against older libraries than the ones I have available.
  Since I can’t recompile Sublime myself to link against the older libraries, it ends
  there. And then there’s the fact
  that I don’t like the idea of my editor’s life depending on one person’s focus and
  ability to avoid being hit by a bus. If the project dies, maybe someone will create
  a clone to support the current userbase, but I still consider it a risk.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;I only tried Sublime Text 2, but since these issues are pretty fundamental, I
don’t think they will have been addressed in the upcoming version. Since I had
an uneasy feeling about these things, and was regularly hitting the issues over and
over again, I finally decided to go back to Vim.  However, I think Sublime Text
is a great editor, and is probably the closest an editor will ever get to being
a Vim alternative I find worth considering.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <id>tag:el-tramo.be,2013-02-28:/blog/wonderful-life-with-the-elements/</id>
    <title type="html">Book Review: Wonderful Life with the Elements (Bunpei Yorifuji)</title>
    <published>2013-02-27T23:00:00Z</published>
    <updated>2013-02-27T23:00:00Z</updated>
    <link rel="alternate" href="http://el-tramo.be/blog/wonderful-life-with-the-elements/"/>
    <content type="html">&lt;p&gt;&lt;img class="alignright" src="/blog/wonderful-life-with-the-elements/wle.png" alt="" width="173"&gt;&lt;/p&gt;

&lt;p&gt;In &lt;em&gt;&lt;a href="http://nostarch.com/wle"&gt;Wonderful Life with the Elements&lt;/a&gt;&lt;/em&gt;, the Japanese author (and artist) Bunpei Yorifuji takes
you through all the chemical elements in a playful, entertaining, and very graphical way.&lt;/p&gt;

&lt;!-- more --&gt;


&lt;p&gt;By representing each element as a cartoon character, mapping chemical features (such as
atomic weight, state, special properties, …) onto human properties (body weight, hairstyle,
clothes, …), and drawing the resulting characters in different (often humorous) situations, he
illustrates the properties of each element, their history, and their use in every day life. Besides
a detailed graphical description of each of the elements, the author also describes properties about
the elements in general, discusses classifications, gives background on the periodic table, and puts
everything into context.&lt;/p&gt;

&lt;p&gt;The drawings (which make up most of this book) are original, funny,
and very nicely done. Small things like the Japanese name and Chinese character for each element
give it a nice aesthetic touch, but are of course completely useless for an ignorant westerner like me.
I learned quite a few interesting facts about
chemical elements, things I either forgot, or never knew at all. It feels like the cartoons and the element
“personifications” should make these things stick, but I can’t say whether they will after just one
read. Then again, if not, at least it will have been a very entertaining read, and I’ll be happy
to read it again as a refresher.&lt;/p&gt;

&lt;p&gt;My only (very minor) remarks are about the format. The PDF in which the eBook comes seems to be too
tough to handle for some viewers: Preview.app choked on it and was missing graphics, but Acrobat
Reader (and some built-in browser PDF viewers) seemed to display all graphics fine. Although the
overall detail of the graphics throughout the book is good enough, the centerfold page (containing all
the elements in the book in on one big poster, at least in the dead-tree version) is lacking in detail,
and becomes ugly when you start zooming into the separate elements to the level you need to.
This isn’t really a blocker though, since all elements are displayed on a full page illustration later, but it
would have been nice to have more detail there (or have vector-based graphics throughout the whole book).
And finally, the book isn’t hyperlinked at all, so you can’t navigate easily from e.g. the index or the
table of contents to the corresponding pages in the book.&lt;/p&gt;

&lt;p&gt;In summary, I really liked this book, and would recommend it to anyone wanting to learn (or
refresh their knowledge) about the elements in a light and entertaining way.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <id>tag:el-tramo.be,2013-02-23:/blog/wordpress-to-nanoc/</id>
    <title type="html">From WordPress to Nanoc</title>
    <published>2013-02-22T23:00:00Z</published>
    <updated>2013-02-22T23:00:00Z</updated>
    <link rel="alternate" href="http://el-tramo.be/blog/wordpress-to-nanoc/"/>
    <content type="html">&lt;p&gt;After 7 years of serving my blog/website with WordPress, I thought it was time to try
something else.  One of my biggest gripes about WordPress (apart from having to
hold my breath on each version update) is that writing posts through a web UI
isn’t very handy: it’s slow, inconvenient for complicated posts (especially if
you’re used to your favorite editor), you can’t write while offline, and the
versioning is limited (compared to real versioning systems). So, I decided to
give static blog generators a try, and ended up converting my blog to &lt;a href="http://nanoc.ws"&gt;Nanoc&lt;/a&gt;
(after a brief stopover at &lt;a href="https://github.com/mojombo/jekyll"&gt;Jekyll&lt;/a&gt;). Result: I can now write my posts
in VIM, use &lt;a href="http://daringfireball.net/projects/markdown/"&gt;Markdown&lt;/a&gt; syntax for writing, preview my posts live using tools
such as &lt;a href="http://markedapp.com"&gt;Marked&lt;/a&gt; and &lt;a href="http://markdownpad.com"&gt;MarkdownPad&lt;/a&gt;, preview the site using Nanoc’s built-in
HTTP server, easily customize my site with some Ruby code, and keep everything
versioned with &lt;a href="http://git-scm.com"&gt;Git&lt;/a&gt;. And of course move it on &lt;a href="http://aws.amazon.com/s3/"&gt;Amazon S3&lt;/a&gt; in case my
blog really hits off and starts getting million hits a minute (which should be any
day now).&lt;/p&gt;

&lt;p&gt;In case you’re interested in the details of how I converted from WordPress to Nanoc
(including code), read on.&lt;/p&gt;

&lt;!-- more --&gt;


&lt;p&gt;Before settling on Nanoc, I first gave Jekyll a try. However, Jekyll always had a very
ad-hoc feel to it, with filled with decisions that didn’t always work for me, and lots of
untransparent magic going on behind the screen, which also didn’t always work for me. Nanoc
is a lot cleaner, powerful, more extensible, and easier to understand what’s going on.
Luckily, the post format of Jekyll is compatible with Nanoc,
so the steps for migrating directly from WordPress to Nanoc should be the same.&lt;/p&gt;

&lt;p&gt;Here’s roughly what I did:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;First of all, I got the posts out of the WordPress database using
&lt;a href="http://vitobotta.com/how-to-migrate-from-wordpress-to-jekyll/"&gt;Vito Botta’s WordPress-to-Jekyll&lt;/a&gt; script (with some minor changes). This script pulls out
the posts as HTML, with metadata prepended as YAML front matter (which is what both Jekyll and Nanoc
use). (See an &lt;a href="https://github.com/remko/blog-skeleton/blob/master/content/blog/2013-01-21-example-wordpress-post.markdown"&gt;Example Post&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Although WordPress posts use HTML for markup, the markup omits &lt;code&gt;&amp;lt;p&amp;gt;&lt;/code&gt; paragraph tags (as they are added
automatically for empty lines), which means rendering them as HTML doesn’t look as it’s supposed to.
Fortunately, if you treat the HTML files as Markdown (and use &lt;a href="https://github.com/rtomayko/rdiscount"&gt;RDiscount&lt;/a&gt; as your posts filter), the
result ends up as expected: the HTML markup is preserved, but paragraphs have been added in the right places.&lt;/li&gt;
&lt;li&gt;For the layout, I just reused the &lt;a href="http://wordpress.org/extend/themes/twentyten"&gt;Twenty Ten&lt;/a&gt; theme I was using before. WordPress does
a good job at separating presentation and structure, so I just mimicked the &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt; structure in my
layout files, copied the CSS files unaltered.&lt;/li&gt;
&lt;li&gt;One thing you can’t do with a static blog is serve comments, so I moved the comments to
&lt;a href="http://disqus.com/"&gt;Disqus&lt;/a&gt;. Before getting rid of WordPress, I installed the &lt;a href="http://wordpress.org/extend/plugins/disqus-comment-system/"&gt;Disqus Plugin&lt;/a&gt; to
do a one-time import of all comments. Using the WordPress ID and URL (pulled by the script mentioned
earlier, and put in the YAML front matter of the converted posts), you can reconstruct the right ID for
keeping your comments intact on the new site. (See the &lt;a href="https://github.com/remko/blog-skeleton/blob/master/layouts/include/disqus.html"&gt;Disqus Template&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;In order for the front page to show excerpts instead of full posts, I use a &lt;a href="https://github.com/remko/blog-skeleton/blob/master/lib/more_filter.rb"&gt;filter&lt;/a&gt;
(and a &lt;a href="https://github.com/remko/blog-skeleton/blob/master/lib/helpers/more_helper.rb"&gt;helper&lt;/a&gt;) to strip everything
up to the &lt;code&gt;&amp;lt;!-- more --&amp;gt;&lt;/code&gt; tag, put this into a separate nanoc representation, which in turn is
used when populating the &lt;a href="http://nanoc.ws/docs/guides/paginating-articles/"&gt;paginated&lt;/a&gt; blog pages.&lt;/li&gt;
&lt;li&gt;For the tags and categories, I use another &lt;a href="https://github.com/remko/blog-skeleton/blob/master/lib/helpers/tags_categories_helper.rb"&gt;helper&lt;/a&gt; to generate the list of categories
and tags for each post, and to generate a page for each category/tag containing all the posts
for that tag (and their RSS feeds)&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;That’s it for the basic functionality. Then, there’s some sugar coating and extra stuff, such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A tag cloud in the sidebar, using a &lt;a href="https://github.com/remko/blog-skeleton/blob/master/lib/helpers/tag_cloud_helper.rb"&gt;helper&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Support for &lt;a href="https://dev.twitter.com/docs/cards"&gt;Twitter cards&lt;/a&gt;. I added a rule to make a ‘filtered_contents’ snapshot after applying the
Markdown filter, and use this snapshot in the ‘head’ section of the layout, as you can see in
&lt;a href="https://github.com/remko/blog-skeleton/blob/master/layouts/include/twitter_card.html"&gt;this template&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Embedded &lt;a href="https://github.com/remko/"&gt;my Git repositories&lt;/a&gt; using &lt;a href="http://hjemli.net/git/cgit/"&gt;CGit&lt;/a&gt;, by splitting up a rendered dummy page (again using a
&lt;a href="https://github.com/remko/blog-skeleton/blob/master/lib/split_filter.rb"&gt;simple filter&lt;/a&gt;), and using these resulting pages as header/footer for CGit. It doesn’t look
perfect yet though (diffs are too wide for the layout for example).&lt;/li&gt;
&lt;li&gt;Since the CGit integration isn’t perfect yet, I added a &lt;a href="https://github.com/remko/blog-skeleton/blob/master/lib/git_link_filter.rb"&gt;filter&lt;/a&gt; to rewrite all internal
Git urls to point to my &lt;a href="https://github.com/remko"&gt;GitHub&lt;/a&gt; repositories. If I decide to switch back to my own (or another) public
Git interface, I won’t need to touch my posts.&lt;/li&gt;
&lt;li&gt;Embedding image galleries using &lt;a href="http://www.twospy.com/galleriffic/"&gt;Galleriffic&lt;/a&gt; (although I dropped my galleries recently)&lt;/li&gt;
&lt;li&gt;An &lt;a href="https://github.com/remko/blog-skeleton/blob/master/tasks/update_software.rake"&gt;update_software&lt;/a&gt; task for auto-generating all
my &lt;a href="/software"&gt;Software&lt;/a&gt; project pages from the &lt;code&gt;README&lt;/code&gt; files in the
project Git repositories.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;For the nitty gritty details, you can have a look at the code (and some example content)
in &lt;a href="https://github.com/remko/blog-skeleton/"&gt;my Git repository&lt;/a&gt;.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <id>tag:el-tramo.be,2012-12-31:/blog/swift-2.0/</id>
    <title type="html">Swift 2.0 Released</title>
    <published>2012-12-30T23:00:00Z</published>
    <updated>2012-12-30T23:00:00Z</updated>
    <link rel="alternate" href="http://el-tramo.be/blog/swift-2.0/"/>
    <content type="html">&lt;p&gt;Just in time for a 2012 release: &lt;a href="http://swift.im/releases/swift-2.0/"&gt;Swift 2.0&lt;/a&gt; is out! This new stable release has many enhancements and
bugfixes, so head over to the &lt;a href="http://swift.im/releases/swift-2.0/"&gt;Release Notes&lt;/a&gt; page to find out what’s new.&lt;/p&gt;

&lt;p&gt;Happy New Year!&lt;/p&gt;
</content>
  </entry>
  <entry>
    <id>tag:el-tramo.be,2012-11-16:/blog/swift-2-0rc1/</id>
    <title type="html">Swift 2.0 Release Candidate Released</title>
    <published>2012-11-15T23:00:00Z</published>
    <updated>2012-11-15T23:00:00Z</updated>
    <link rel="alternate" href="http://el-tramo.be/blog/swift-2-0rc1/"/>
    <content type="html">&lt;p&gt;That’s right, we’re almost there: we just put up the &lt;a href="http://swift.im/releases/swift-2.0rc1/"&gt;release candidate of Swift 2.0&lt;/a&gt;.
If no critical bugs are reported, this will become the final release. As always,
we encourage everyone to get the new build and try it out, and &lt;a href="http://swift.im/discussion/"&gt;tell us about&lt;/a&gt;
any bugs they should come across.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <id>tag:el-tramo.be,2012-10-08:/blog/swift-2-0beta2/</id>
    <title type="html">Swift 2.0-beta2 Released</title>
    <published>2012-10-07T22:00:00Z</published>
    <updated>2012-10-07T22:00:00Z</updated>
    <link rel="alternate" href="http://el-tramo.be/blog/swift-2-0beta2/"/>
    <content type="html">&lt;p&gt;We have just released the &lt;a href="http://swift.im/releases/swift-2.0beta2"&gt;second (and final) Swift 2.0 beta&lt;/a&gt;. Apart from several
bugfixes, highlights include the possibility to set custom connection options, getting
detailed information about certificates upon connection errors, and improved room invitations.
We encourage everyone to get the new build and try it out, and &lt;a href="http://swift.im/discussion/"&gt;tell us about&lt;/a&gt;
any bugs they should come across.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <id>tag:el-tramo.be,2012-05-06:/blog/swift-hackathon-roundup/</id>
    <title type="html">Swift Hackathon Roundup</title>
    <published>2012-05-05T22:00:00Z</published>
    <updated>2012-05-05T22:00:00Z</updated>
    <link rel="alternate" href="http://el-tramo.be/blog/swift-hackathon-roundup/"/>
    <content type="html">&lt;p&gt;Last sunday, we finished our week-long &lt;a href="http://swift.im/hackathon"&gt;Swift Hackathon&lt;/a&gt;, and it was
a great success, leading to &lt;a href="http://swift.im/releases/swift-2.0beta1/"&gt;Swift 2.0-beta1&lt;/a&gt;! Here’s a list of the
things we achieved during that week.&lt;/p&gt;

&lt;!-- more --&gt;


&lt;p&gt;First of all, the goal of the week was to find and fix as many bugs as possible. This
is what our ‘hackathon bug count dials’ were displaying at the end of the week:&lt;/p&gt;

&lt;p&gt;&lt;img src="/blog/swift-hackathon-roundup/hackathon-bug-counter.png" alt="Hackathon Week Bug Counter"&gt;&lt;/p&gt;

&lt;p&gt;In only one week, we found 19 bugs, and fixed 64! Not a bad result for our first
hackathon, don’t you think? As you can see from the trend, we put a big dent in the
list of open bugs:&lt;/p&gt;

&lt;p&gt;&lt;img src="/blog/swift-hackathon-roundup/hackathon-bug-trend.png" alt="Hackathon Week Bug Trend"&gt;&lt;/p&gt;

&lt;p&gt;And if fixing all these bugs wasn’t enough, we found the time to do some other things
on the side as well during the week:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Together with &lt;a href="http://qa.debian.org/developer.php?login=olly@survex.com"&gt;Olly Betts&lt;/a&gt;, we finished our Debian packages, and submitted
  them to Debian. So, expect both Swift and Swiften to be available from the
  official Debian repositories soon!&lt;/li&gt;
&lt;li&gt;We set up a build for the brand new Ubuntu 12.04 (Precise Pangolin)&lt;/li&gt;
&lt;li&gt;We started fixing and cleaning up translation strings&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Thanks again to all the people who have helped us during this excellent week!&lt;/p&gt;
</content>
  </entry>
  <entry>
    <id>tag:el-tramo.be,2012-05-04:/blog/swift-2-0beta1/</id>
    <title type="html">Swift 2.0-beta1 Released</title>
    <published>2012-05-03T22:00:00Z</published>
    <updated>2012-05-03T22:00:00Z</updated>
    <link rel="alternate" href="http://el-tramo.be/blog/swift-2-0beta1/"/>
    <content type="html">&lt;p&gt;After another year of development, we’re happy to announce that we released
our &lt;a href="http://swift.im/releases/swift-2.0beta1"&gt;first Swift 2.0 beta&lt;/a&gt;! We encourage everyone who is interested
in helping us with testing to try out this new release, as it has many bugfixes and
enhancements (see the &lt;a href="http://swift.im/releases/swift-2.0beta1"&gt;release notes&lt;/a&gt; for more details).&lt;/p&gt;

&lt;p&gt;Thanks to the
&lt;a href="http://swift.im/hackathon"&gt;hackathon&lt;/a&gt; week (of which details will be posted shortly), we believe this first
beta to be pretty stable. Nevertheless, should you find some bugs, please come and
&lt;a href="http://swift.im/discussion/"&gt;tell us about it&lt;/a&gt;!&lt;/p&gt;
</content>
  </entry>
  <entry>
    <id>tag:el-tramo.be,2012-05-01:/blog/ios-keming/</id>
    <title type="html">Steve Jobs would not appr o ve</title>
    <published>2012-04-30T22:00:00Z</published>
    <updated>2012-04-30T22:00:00Z</updated>
    <link rel="alternate" href="http://el-tramo.be/blog/ios-keming/"/>
    <content type="html">&lt;p&gt;In his famous &lt;a href="http://www.youtube.com/watch?v=D1R-jKKp3NA"&gt;2005 Stanford Commencement Speech&lt;/a&gt;, Steve Jobs
explained how his interest in typography &lt;a href="http://www.planet-typography.com/news/typo/steve-jobs.html"&gt;played a fundamental role in creating
the first Macintosh computer&lt;/a&gt;, and how the beautiful typography set
the Mac apart from other personal computers out there. He was obviously passionate
about these things, going as far as pixel-perfectionism about fonts and icons.
That’s why I was a bit shocked when I started noticing bad kerning
(aka &lt;a href="http://www.ironicsans.com/2008/02/idea_a_new_typography_term.html"&gt;keming&lt;/a&gt;) in the iOS 5 status bar. Could it be that these are the first
artifacts of the post-Steve Jobs World? (&lt;em&gt;Update:
&lt;a href="https://twitter.com/#!/cheungpat/status/197328235581800448/photo/1/large"&gt;No&lt;/a&gt;&lt;/em&gt;)&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Spoiler alert&lt;/em&gt;: As &lt;a href="http://xkcd.com/1015/"&gt;XKCD points out&lt;/a&gt;, recognizing bad kerning is
something you may not want to learn about. If you like your iOS status bar, consider
not reading on.&lt;/p&gt;

&lt;!-- more --&gt;


&lt;p&gt;Have a look at the battery level indicator of the iOS screenshot below:&lt;/p&gt;

&lt;p&gt;&lt;img src="/blog/ios-keming/44.png" alt="Battery Indicator: 44%"&gt;&lt;/p&gt;

&lt;p&gt;Now compare that 44 with the one from the clock. Doesn’t look right, does it?
How about something a bit more obvious: charge your iDevice to 100%, and you
see the following:&lt;/p&gt;

&lt;p&gt;&lt;img src="/blog/ios-keming/100.jpg" alt="Battery Indicator: 100%"&gt;&lt;/p&gt;

&lt;p&gt;That 1 in the battery level almost looks like it’s coming from a different font?!
Still not convinced? How about anything in the 10-19% range?&lt;/p&gt;

&lt;p&gt;&lt;img src="/blog/ios-keming/18.png" alt="Battery Indicator: 18%"&gt;
&lt;img src="/blog/ios-keming/15.jpg" alt="Battery Indicator: 15%"&gt;&lt;/p&gt;

&lt;p&gt;You have to admit that this is much worse than pixel-imperfectionisms. Even if this was
post-Steve, or Steve always had his battery level indicator turned off, you would
have come to expect &lt;em&gt;someone&lt;/em&gt; at Apple must be annoyed by this, surely?&lt;/p&gt;

&lt;p&gt;I know I’m nitpicking, but the problem is that, if you noticed it once, you will
notice it every time you look at your status bar. The only solution: disable
the battery level indicator.&lt;/p&gt;
</content>
  </entry>
</feed>

