<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>wikimatze</title>
  <link href="http://wikimatze.de/atom.xml" rel="self" />
  <link href="http://wikimatze.de/"/>
  <updated>2012-05-14T18:37:44+02:00</updated>
  <id>http://wikimatze.de.html/</id>
  <author>
    <name>Matthias Günther</name>
    <email>matthias.guenther@wikimatze.de</email>
  </author>
  <rights> Copyright (c) 2011 Matthias Günther</rights>
  
    <entry>
      <title>Searching Haml files with ack</title>
      <link href="http://wikimatze.de/searching-haml-files-with-ack.html"/>
      <updated>2012-05-14T00:00:00+02:00</updated>
      <id>http://wikimatze.de/searching-haml-files-with-ack.html</id>
      <content type="html">&lt;p&gt;&lt;em&gt;This article describes how you can configure your ack settings to search for additionals files&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Recently I was working on a Rails project and was using Vim with the &lt;code&gt;:Ack &amp;lt;pattern&amp;gt;&lt;/code&gt; command to search
after a certain typed string “Übreschrift” and would like to replace it with the correct version
“Überschrift”. I typed into the console &lt;code&gt;:Ack Übreschrift&lt;/code&gt; and I couldn’t find a single match. What
went wrong?&lt;/p&gt;

&lt;h2 id=&quot;questions-to-answer&quot;&gt;Questions to answer&lt;/h2&gt;
&lt;p&gt;Why couldn’t I find the file with that content? Was I in the wrong directory? No:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$pwd
-&amp;gt; $HOME/git-repositories/brokenlifts
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Did I used the wrong pattern? No, I searched after the right word “Übreschrift”. Did I used the
wrong command?  No, I tried &lt;code&gt;ack-grep&lt;/code&gt; in the terminal to search for other common words like &lt;em&gt;test&lt;/em&gt;
or &lt;em&gt;string&lt;/em&gt; and could only find results in *.rb, *.js files but not in &lt;code&gt;*.html.haml&lt;/code&gt; files. Tada,
found the mistake, &lt;code&gt;ack&lt;/code&gt; is per default not configured to include these very special file types.&lt;/p&gt;

&lt;h2 id=&quot;solve-problems-ackrc&quot;&gt;Solve problems .ackrc&lt;/h2&gt;
&lt;p&gt;I created the &lt;code&gt;$HOME/.ackrc&lt;/code&gt; and added the entries to include these special filename:&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;sh&quot;&gt;--type-add
&lt;span class=&quot;nv&quot;&gt;html&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;.html.haml
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Now my search worked and I got hits in &lt;code&gt;*.html.haml&lt;/code&gt; files for searching after the term “Übreschrift”.&lt;/p&gt;

&lt;h2 id=&quot;further-refinements&quot;&gt;Further refinements&lt;/h2&gt;
&lt;p&gt;Since I’m working with Rails there are other file types like &lt;code&gt;sass, erb, less, scss, ..&lt;/code&gt; I would
like to include into the search:&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;sh&quot;&gt;--type-add
&lt;span class=&quot;nv&quot;&gt;html&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;.html.erb,.html.haml,.haml
--type-add
&lt;span class=&quot;nv&quot;&gt;css&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;.sass,.less,.scss
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;And there might be directories I don’t want to have in my search path. Let’s ignore them and speed up our
search:&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;sh&quot;&gt;--type-set
&lt;span class=&quot;nv&quot;&gt;ignorables&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;.log,.tmp,.pdf
--ignore-dir&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;vendor
--ignore-dir&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;log
--ignore-dir&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;tmp
--ignore-dir&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;doc
--ignore-dir&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;coverage
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;If you would like to see the specified files for your grep enviornment search, just use &lt;code&gt;ack --help
types&lt;/code&gt; - this will print all information you need. Here is an example:&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;sh&quot;&gt;&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;ack --help &lt;span class=&quot;nv&quot;&gt;types&lt;/span&gt;
&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&amp;gt;
  --&lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;no&lt;span class=&quot;o&quot;&gt;]&lt;/span&gt;actionscript .as .mxml
  --&lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;no&lt;span class=&quot;o&quot;&gt;]&lt;/span&gt;ada          .ada .adb .ads
  --&lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;no&lt;span class=&quot;o&quot;&gt;]&lt;/span&gt;asm          .asm .s
  --&lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;no&lt;span class=&quot;o&quot;&gt;]&lt;/span&gt;batch        .bat .cmd
  --&lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;no&lt;span class=&quot;o&quot;&gt;]&lt;/span&gt;binary       Binary files, as defined by Perl&lt;span class=&quot;s1&quot;&gt;&amp;#39;s -B op (default: off)&lt;/span&gt;
&lt;span class=&quot;s1&quot;&gt;  --[no]cc           .c .h .xs&lt;/span&gt;
&lt;span class=&quot;s1&quot;&gt;  --[no]cfmx         .cfc .cfm .cfml&lt;/span&gt;
&lt;span class=&quot;s1&quot;&gt;  --[no]cpp          .cpp .cc .cxx .m .hpp .hh .h .hxx&lt;/span&gt;
&lt;span class=&quot;s1&quot;&gt;  --[no]csharp       .cs&lt;/span&gt;
&lt;span class=&quot;s1&quot;&gt;  --[no]css          .css .sass .less .scss&lt;/span&gt;
&lt;span class=&quot;s1&quot;&gt;  --[no]elisp        .el&lt;/span&gt;
&lt;span class=&quot;s1&quot;&gt;  --[no]erlang       .erl .hrl&lt;/span&gt;
&lt;span class=&quot;s1&quot;&gt;  --[no]fortran      .f .f77 .f90 .f95 .f03 .for .ftn .fpp&lt;/span&gt;
&lt;span class=&quot;s1&quot;&gt;  --[no]haskell      .hs .lhs&lt;/span&gt;
&lt;span class=&quot;s1&quot;&gt;  --[no]hh           .h&lt;/span&gt;
&lt;span class=&quot;s1&quot;&gt;  --[no]html         .htm .html .shtml .xhtml .html.erb .html.haml .haml&lt;/span&gt;
&lt;span class=&quot;s1&quot;&gt;  --[no]ignorables   .log .tmp .pdf&lt;/span&gt;
&lt;span class=&quot;s1&quot;&gt;  --[no]java         .java .properties&lt;/span&gt;
&lt;span class=&quot;s1&quot;&gt;  --[no]js           .js&lt;/span&gt;
&lt;span class=&quot;s1&quot;&gt;  --[no]jsp          .jsp .jspx .jhtm .jhtml&lt;/span&gt;
&lt;span class=&quot;s1&quot;&gt;  --[no]lisp         .lisp .lsp&lt;/span&gt;
&lt;span class=&quot;s1&quot;&gt;  --[no]lua          .lua&lt;/span&gt;
&lt;span class=&quot;s1&quot;&gt;  --[no]make         Makefiles&lt;/span&gt;
&lt;span class=&quot;s1&quot;&gt;  --[no]mason        .mas .mhtml .mpl .mtxt&lt;/span&gt;
&lt;span class=&quot;s1&quot;&gt;  --[no]objc         .m .h&lt;/span&gt;
&lt;span class=&quot;s1&quot;&gt;  --[no]objcpp       .mm .h&lt;/span&gt;
&lt;span class=&quot;s1&quot;&gt;  --[no]ocaml        .ml .mli&lt;/span&gt;
&lt;span class=&quot;s1&quot;&gt;  --[no]parrot       .pir .pasm .pmc .ops .pod .pg .tg&lt;/span&gt;
&lt;span class=&quot;s1&quot;&gt;  --[no]perl         .pl .pm .pod .t&lt;/span&gt;
&lt;span class=&quot;s1&quot;&gt;  --[no]php          .php .phpt .php3 .php4 .php5 .phtml&lt;/span&gt;
&lt;span class=&quot;s1&quot;&gt;  --[no]plone        .pt .cpt .metadata .cpy .py&lt;/span&gt;
&lt;span class=&quot;s1&quot;&gt;  --[no]python       .py&lt;/span&gt;
&lt;span class=&quot;s1&quot;&gt;  --[no]rake         Rakefiles&lt;/span&gt;
&lt;span class=&quot;s1&quot;&gt;  --[no]ruby         .rb .rhtml .rjs .rxml .erb .rake&lt;/span&gt;
&lt;span class=&quot;s1&quot;&gt;  --[no]scala        .scala&lt;/span&gt;
&lt;span class=&quot;s1&quot;&gt;  --[no]scheme       .scm .ss&lt;/span&gt;
&lt;span class=&quot;s1&quot;&gt;  --[no]shell        .sh .bash .csh .tcsh .ksh .zsh&lt;/span&gt;
&lt;span class=&quot;s1&quot;&gt;  --[no]skipped      Files, but not directories, normally skipped by ack (default: off)&lt;/span&gt;
&lt;span class=&quot;s1&quot;&gt;  --[no]smalltalk    .st&lt;/span&gt;
&lt;span class=&quot;s1&quot;&gt;  --[no]sql          .sql .ctl&lt;/span&gt;
&lt;span class=&quot;s1&quot;&gt;  --[no]tcl          .tcl .itcl .itk&lt;/span&gt;
&lt;span class=&quot;s1&quot;&gt;  --[no]tex          .tex .cls .sty&lt;/span&gt;
&lt;span class=&quot;s1&quot;&gt;  --[no]text         Text files, as defined by Perl&amp;#39;&lt;/span&gt;s -T op &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;default: off&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
  --&lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;no&lt;span class=&quot;o&quot;&gt;]&lt;/span&gt;tt           .tt .tt2 .ttml
  --&lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;no&lt;span class=&quot;o&quot;&gt;]&lt;/span&gt;vb           .bas .cls .frm .ctl .vb .resx
  --&lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;no&lt;span class=&quot;o&quot;&gt;]&lt;/span&gt;vim          .vim
  --&lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;no&lt;span class=&quot;o&quot;&gt;]&lt;/span&gt;xml          .xml .dtd .xslt .ent
  --&lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;no&lt;span class=&quot;o&quot;&gt;]&lt;/span&gt;yaml         .yaml .yml
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h2 id=&quot;further-reading&quot;&gt;Further reading&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://betterthangrep.com/&quot; title=&quot;ack&quot;&gt;ack&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</content>
    </entry>
  
    <entry>
      <title>Installing PostgreSQL gem under Ubuntu and Mac</title>
      <link href="http://wikimatze.de/installing-postgresql-gem-under-ubuntu-and-mac.html"/>
      <updated>2012-02-26T00:00:00+01:00</updated>
      <id>http://wikimatze.de/installing-postgresql-gem-under-ubuntu-and-mac.html</id>
      <content type="html">&lt;p&gt;&lt;em&gt;This article describes how to install the postgresql gem (called ‘pg’) under your local machine.
The installation process is not trivial because you need to install the right packages: For
Ubuntu/Linux you only need to install the right packages and for Mac you need to specify the correct
path.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I checked out a new rails app called &lt;a href=&quot;http://www.rhok.org/node/20654&quot; title=&quot;Broken Lifts&quot;&gt;Broken lifts&lt;/a&gt;. Broken lifts in
public transportation are annoying and limit the mobility of people in wheelchairs. The app provides
status information from different operators on one page and shows how well they are performing.&lt;/p&gt;

&lt;p&gt;Ones I checked out the project I have detected that it uses &lt;a href=&quot;http://www.postgresql.org/&quot; title=&quot;PostgreSQl&quot;&gt;PostgreSQL&lt;/a&gt; as their database
driver. So far I have never worked with it and I run into a couple of problems to get it running.&lt;/p&gt;

&lt;h2 id=&quot;the-problem&quot;&gt;The problem&lt;/h2&gt;
&lt;p&gt;A small &lt;code&gt;$gem install pg&lt;/code&gt; brought me the following error message:&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;bash&quot;&gt;&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;gem install pg
Building native extensions.  This could take a &lt;span class=&quot;k&quot;&gt;while&lt;/span&gt;...
/Users/helex/.rbenv/versions/1.9.2-p290/lib/ruby/site_ruby/1.9.1/rubygems/ext/builder.rb:48: warning: Insecure world writable dir /Users/helex/bin in PATH, mode 040777
ERROR:  Error installing pg:
	ERROR: Failed to build gem native extension.

        /Users/helex/.rbenv/versions/1.9.2-p290/bin/ruby extconf.rb
checking &lt;span class=&quot;k&quot;&gt;for &lt;/span&gt;pg_config... no
No pg_config... trying anyway. If building fails, please try again with
 --with-pg-config&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;/path/to/pg_config
checking &lt;span class=&quot;k&quot;&gt;for &lt;/span&gt;libpq-fe.h... no
Can&lt;span class=&quot;s1&quot;&gt;&amp;#39;t find the &amp;#39;&lt;/span&gt;libpq-fe.h header
&lt;span class=&quot;se&quot;&gt;\*\*\*&lt;/span&gt; extconf.rb failed &lt;span class=&quot;se&quot;&gt;\*\*\*&lt;/span&gt;
Could not create Makefile due to some reason, probably lack of
necessary libraries and/or headers.  Check the mkmf.log file &lt;span class=&quot;k&quot;&gt;for &lt;/span&gt;more
details.  You may need configuration options.

Provided configuration options:
	--with-opt-dir
	--without-opt-dir
	--with-opt-include
	--without-opt-include&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;opt&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;-dir&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;}&lt;/span&gt;/include
	--with-opt-lib
	--without-opt-lib&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;opt&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;-dir&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;}&lt;/span&gt;/lib
	--with-make-prog
	--without-make-prog
	--srcdir&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;.
	--curdir
	--ruby&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;/Users/helex/.rbenv/versions/1.9.2-p290/bin/ruby
	--with-pg
	--without-pg
	--with-pg-dir
	--without-pg-dir
	--with-pg-include
	--without-pg-include&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;pg&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;-dir&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;}&lt;/span&gt;/include
	--with-pg-lib
	--without-pg-lib&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;pg&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;-dir&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;}&lt;/span&gt;/lib
	--with-pg-config
	--without-pg-config
	--with-pg_config
	--without-pg_config


Gem files will remain installed in /Users/helex/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/pg-0.13.2 &lt;span class=&quot;k&quot;&gt;for &lt;/span&gt;inspection.
Results logged to /Users/helex/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/pg-0.13.2/ext/gem_make.out
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;What relevant about the mess up there is the following part:&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;bash&quot;&gt;checking &lt;span class=&quot;k&quot;&gt;for &lt;/span&gt;pg_config... no
No pg_config... trying anyway. If building fails, please try again with
 --with-pg-config&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;/path/to/pg_config
checking &lt;span class=&quot;k&quot;&gt;for &lt;/span&gt;libpq-fe.h... no
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Ruby can’t find the relevant setting of the PostgreSQL installation. Let’s change this!&lt;/p&gt;

&lt;h2 id=&quot;solution-for-mac&quot;&gt;Solution for Mac&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;install PostresSQL library as described on the &lt;a href=&quot;http://www.postgresql.org/download/macosx/&quot; title=&quot;PostgreSQL installation&quot;&gt;PostgreSQL page&lt;/a&gt;
(opening the *.dmg file will install a bunch of stuff, so don’t be afraid of the amount of steps
you have to perform)&lt;/li&gt;
  &lt;li&gt;check if you can find the installation open it under &lt;code&gt;/Library/PostgreSQL/x.y&lt;/code&gt; - where x.y stands
for the version you installed&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Say you want to install the PostgreSQL manually with a &lt;code&gt;gem install&lt;/code&gt; - you have to perform the
following command&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;bash&quot;&gt;&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;sudo &lt;span class=&quot;nv&quot;&gt;PATH&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$PATH&lt;/span&gt;:/Library/PostgreSQL/9.1/bin gem install pg
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;If you want to install it with &lt;a href=&quot;http://gembundler.com/&quot; title=&quot;Bundler&quot;&gt;Bundler&lt;/a&gt;, run the following command&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;bash&quot;&gt;&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;sudo &lt;span class=&quot;nv&quot;&gt;PATH&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$PATH&lt;/span&gt;:/Library/PostgreSQL/9.1/bin bundle install
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Please change the &lt;strong&gt;9.1&lt;/strong&gt; with the version you have installed. Thats it!&lt;/p&gt;

&lt;h2 id=&quot;solution-for-ubuntulinux&quot;&gt;Solution for Ubuntu/Linux&lt;/h2&gt;
&lt;p&gt;It is easier because you only have to install the right packages:&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;bash&quot;&gt;sudo apt-get install postgresql
sudo apt-get install libpq-dev
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Now &lt;code&gt;gem install pg&lt;/code&gt; should work.&lt;/p&gt;

&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;It can be a really pain if you want to install gems and don’t have the right dependencies on your
machine but if you initially invest some time on the problem, you have your enlightenment.&lt;/p&gt;
</content>
    </entry>
  
    <entry>
      <title>Compiling Vim from source for Ubuntu and Mac with ruby and python support</title>
      <link href="http://wikimatze.de/compiling-vim-from-source-for-ubuntu-and-mac-with-rbenv.html"/>
      <updated>2012-02-19T00:00:00+01:00</updated>
      <id>http://wikimatze.de/compiling-vim-from-source-for-ubuntu-and-mac-with-rbenv.html</id>
      <content type="html">&lt;p&gt;&lt;em&gt;This article describes how to build &lt;a href=&quot;http://www.vim.org/&quot;&gt;Vim&lt;/a&gt; (vim and gvim) from the source and compile it
against a predefined version of &lt;a href=&quot;http://www.ruby-lang.org/en/&quot;&gt;ruby&lt;/a&gt; installed with &lt;a href=&quot;https://github.com/sstephenson/rbenv/&quot;&gt;rbenv&lt;/a&gt;. In the first chapter I
describe how to build it from source for Ubuntu. The second part describes how to build for
&lt;a href=&quot;https://github.com/b4winckler/macvim/&quot;&gt;MacVim&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;By installing Vim with ruby support from the sources, it is build against the system wide
installation of ruby.  If you already installed Vim and/or ruby with &lt;code&gt;sudo apt-get install vim&lt;/code&gt; (or
&lt;code&gt;sudo apt-get install ruby&lt;/code&gt;) or with &lt;code&gt;brew install vim&lt;/code&gt; (e.g. &lt;code&gt;brew install ruby&lt;/code&gt;) if you are using
OS X, remove it completely from your system to install the latest version of Vim.&lt;/p&gt;

&lt;h2 id=&quot;install-rbenv&quot;&gt;Install rbenv&lt;/h2&gt;
&lt;p&gt;I’m installing &lt;em&gt;rbenv&lt;/em&gt; on different machines so I created the following script (named
&lt;em&gt;rbenv_install.sh&lt;/em&gt;) to install &lt;strong&gt;ruby 1.9.2-p320&lt;/strong&gt;:&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;bash&quot;&gt;&lt;span class=&quot;nb&quot;&gt;cd&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$HOME&lt;/span&gt;
sudo rm -rf .rbenv
git clone git://github.com/sstephenson/rbenv.git .rbenv
&lt;span class=&quot;nb&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&amp;#39;export PATH=&amp;quot;$HOME/.rbenv/bin:$PATH&amp;quot;&amp;#39;&lt;/span&gt; &amp;gt;&amp;gt; ~/.bash_profile

&lt;span class=&quot;c&quot;&gt;# install steps for rbenv-install command&lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;cd&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$HOME&lt;/span&gt;/Downloads
sudo rm -rf ruby-build
git clone git://github.com/sstephenson/ruby-build.git
&lt;span class=&quot;nb&quot;&gt;cd &lt;/span&gt;ruby-build
sudo bash install.sh

&lt;span class=&quot;c&quot;&gt;# updating the current shell&lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;cd&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$HOME&lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;exec&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$SHELL&lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;source&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$HOME&lt;/span&gt;/.bash_profile

rbenv-install 1.9.2-p290
rbenv rehash
&lt;span class=&quot;nb&quot;&gt;exec&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$SHELL&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;After this try the following:&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;bash&quot;&gt;&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;rbenv global 1.9.2-p320
&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;rbenv &lt;span class=&quot;nb&quot;&gt;local &lt;/span&gt;1.9.2-p320
&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;ruby -v
&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&amp;gt; ruby 1.9.2p320 &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;2012-04-20 revision 35421&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;i686-linux&lt;span class=&quot;o&quot;&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;The crowd applauds.&lt;/p&gt;

&lt;h2 id=&quot;get-the-latest-version-of-python&quot;&gt;Get the latest version of Python&lt;/h2&gt;
&lt;p&gt;This will be put in the &lt;code&gt;$HOME/lib&lt;/code&gt; folder&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;bash&quot;&gt;&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;cd&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$HOME&lt;/span&gt;/Downloads
&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;wget http://www.python.org/ftp/python/2.7.2/Python-2.7.2.tar.bz2
&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;tar xjvf Python-2.7.2.tar.bz2
&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;cd &lt;/span&gt;Python-2.7.2
&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;./configure --prefix&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$HOME&lt;/span&gt;
&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;make &lt;span class=&quot;o&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; make install
&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;make inclinstall &lt;span class=&quot;c&quot;&gt;# install headers, otherwise Vim won&amp;#39;t have Python support&lt;/span&gt;
&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;hash&lt;/span&gt; -r
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h2 id=&quot;get-the-latest-version-of-vim&quot;&gt;Get the latest version of Vim&lt;/h2&gt;
&lt;p&gt;Visit &lt;a href=&quot;http://www.vim.org/download.php/&quot;&gt;vim.org&lt;/a&gt; and select the right download for your operation system (mainly Unix). If
you are using a Unix system yo can get the lates vim from &lt;a href=&quot;ftp://ftp.vim.org/pub/vim/unix/&quot;&gt;here&lt;/a&gt;, download and unzip it:&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;bash&quot;&gt;&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;cd&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$HOME&lt;/span&gt;/Downloads
&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;wget ftp://ftp.vim.org/pub/vim/unix/vim-7.3.tar.bz2
&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;tar -xjvf vim-7.3.tar.bz2
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;You can also get the lastest Vim version from the git repository with the following command:&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;bash&quot;&gt;&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;cd&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$HOME&lt;/span&gt;
&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;git clone https://github.com/b4winckler/vim
&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;cd &lt;/span&gt;vim.git
&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;git tag -l
&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;git co v7-3-515
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h2 id=&quot;compiling-vim-and-gvim&quot;&gt;Compiling Vim and gvim&lt;/h2&gt;
&lt;p&gt;To install gvim on Ubuntu we need to install additional packages on our machine. The followoing
snippets describe the packages for Ubuntu:&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;bash&quot;&gt;&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;sudo apt-get install libncurses-dev libgnome2-dev &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
 libgtk2.0-dev libatk1.0-dev libbonoboui2-dev libcairo2-dev &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
 libx11-dev libxpm-dev libxt-dev
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Since we are now having the vim sources under &lt;code&gt;$HOME/Downloads/vim73&lt;/code&gt; it’s time to start the
compilation. First we need to configure our compilation:&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;bash&quot;&gt;&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;cd&lt;/span&gt; ~/Downloads/vim73
&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;./configure --prefix&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;/usr/local &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
    --enable-gui&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;no &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
    --without-x &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
    --disable-nls &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
    --with-tlib&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;ncurses &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
    --enable-multibyte &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
    --enable-rubyinterp &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
    --enable-pythoninterp &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
    --with-python-config-dir&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$HOME&lt;/span&gt;/lib/python2.7/config/ &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
    --with-features&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;huge &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
    --enable-gui&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;gnome2
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Let’s get over the heavy stuff:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code&gt;--prefix=/usr/local&lt;/code&gt; - place of the binaries of the installed Vim installation (check the
&lt;code&gt;/usr/local/bin&lt;/code&gt;) - there will be the executable binaries&lt;/li&gt;
  &lt;li&gt;&lt;code&gt;--enable-rubyinterp&lt;/code&gt; - says you want to build Vim with the default ruby installation (in our case
&lt;code&gt;/home/mg/.rbenv/shims/ruby&lt;/code&gt;)&lt;/li&gt;
  &lt;li&gt;&lt;code&gt;--enable-gui=gnome2&lt;/code&gt; - building Vim with GVim support (if you don’t want GVim than you can leave
this line out)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;After configuring the compilation check if the console response contains the following terms:&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;bash&quot;&gt;checking --with-ruby-command argument... defaulting to ruby
checking &lt;span class=&quot;k&quot;&gt;for &lt;/span&gt;ruby... &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;cached&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; /home/mg/.rbenv/shims/ruby
checking Ruby version... OK
checking Ruby header files... /home/mg/.rbenv/versions/1.9.2-p320/include/ruby-1.9.1
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;If you can’t see the lovely &lt;strong&gt;Ok&lt;/strong&gt;, your vim compilation will probably not have ruby support. After that we
can build the configuration, install, and clean everything up:&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;bash&quot;&gt;&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;cd&lt;/span&gt; ~/Downloads/vim73
&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;make
&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;sudo make install
&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;sudo make clean
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h2 id=&quot;check-the-installation&quot;&gt;Check the installation&lt;/h2&gt;
&lt;p&gt;Open a new session or perform &lt;code&gt;exec $SHELL&lt;/code&gt; to reboot your Shell. You will see the fresh installed
version of Vim:&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;bash&quot;&gt;&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;which vim
/usr/local/bin/vim

&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;which gvim
/usr/local/bin/gvim
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Next check is to get the correct –version of &lt;code&gt;vim&lt;/code&gt; and &lt;code&gt;gvim&lt;/code&gt; with the following commands:&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;bash&quot;&gt;&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;vim --version | ack ruby
&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;vim --version | ack python
&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;gvim --version | ack ruby
&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;gvim --version | ack python
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;If both commands return &lt;strong&gt;+ruby&lt;/strong&gt; and &lt;strong&gt;+python&lt;/strong&gt;, you are fine, and got the achievement &lt;em&gt;“I installed vim form
source with ruby support on my own”&lt;/em&gt;. You should now be able to run the &lt;a href=&quot;https://github.com/robgleeson/hammer.vim&quot;&gt;Hammer.vim&lt;/a&gt;
plugin - install it, start it with &lt;code&gt;:Hammer&lt;/code&gt;, install the missing gems and if you are able to run
&lt;code&gt;:Hammer&lt;/code&gt; without any missing dependencies, you have setup everything correct.&lt;/p&gt;

&lt;h2 id=&quot;installing-macvim-from-source&quot;&gt;Installing MacVim from source&lt;/h2&gt;
&lt;p&gt;The ways are nearly the same as mentioned above: Install rbenv as mentioned in the steps before.&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;bash&quot;&gt;&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;cd&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$HOME&lt;/span&gt;/Download
&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;git clone git://github.com/b4winckler/macvim.git
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Next step is to &lt;strong&gt;configure&lt;/strong&gt; MacVim for OSX:&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;bash&quot;&gt;&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;cd &lt;/span&gt;macvim/src
&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;./configure --prefix&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;/usr/local &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
              --with-features&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;huge &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
              --enable-rubyinterp &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
              --enable-pythoninterp &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
              --enable-perlinterp &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
              --enable-cscope
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;After configuring the compilation check the console response after the following terms:&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;bash&quot;&gt;checking --with-ruby-command argument... defaulting to ruby
checking &lt;span class=&quot;k&quot;&gt;for &lt;/span&gt;ruby... /Users/helex/.rbenv/shims/ruby
checking Ruby version... OK
checking Ruby header files... /Users/helex/.rbenv/versions/1.9.2-p320/include/ruby-1.9.1
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;When this is finished, it is time &lt;code&gt;build&lt;/code&gt; MacVim with make:&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;bash&quot;&gt;&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;make
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Next step is to run the MacVim installation:&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;bash&quot;&gt;open MacVim/build/Release/MacVim.app
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;The window should open MacVim. Run the following command in the MacVim quickfix window:&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;bash&quot;&gt;:ruby puts &lt;span class=&quot;s2&quot;&gt;&amp;quot;MacVim&amp;quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;In the next step, you can drop the &lt;strong&gt;MacVim.app&lt;/strong&gt; icon in your Application folder and you are done.&lt;/p&gt;

&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;It was a pain to gather the information for building vim by source with rbenv. Duration of finding
that was: ~ &lt;strong&gt;6 h&lt;/strong&gt;. I’m not sure if all of this works on &lt;a href=&quot;https://rvm.beginrescueend.com/&quot;&gt;RVM&lt;/a&gt; - I just need additional
feedback from people using it. Happy &lt;em&gt;“Vim-ing”&lt;/em&gt;!&lt;/p&gt;

&lt;h2 id=&quot;further-reading&quot;&gt;Further reading&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://vim.wikia.com/wiki/Building_Vim&quot; title=&quot;Building Vim&quot;&gt;Building Vim&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://arjanvandergaag.nl/blog/compiling-vim-with-ruby-support.html&quot; title=&quot;Vim with ruby support (thanks to Arjan van der Gaag - you saved my day with the hint of the .configure option)&quot;&gt;Vim with ruby support&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/b4winckler/macvim/wiki/Building&quot; title=&quot;Building MacVim&quot;&gt;Building MacVim&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
    </entry>
  
    <entry>
      <title>SMART principle</title>
      <link href="http://wikimatze.de/smart-principle.html"/>
      <updated>2012-01-12T00:00:00+01:00</updated>
      <id>http://wikimatze.de/smart-principle.html</id>
      <content type="html">&lt;p&gt;&lt;em&gt;This post is about the SMART principle that helps you to start and keep rolling projects. I
outlined how I use SMART for my eBook project.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I recently read the book Pragmatic Programmer, in which Dave Thomas explained the &lt;em&gt;SMART&lt;/em&gt; principle.
SMART is an acronym and each character of the principle has the following meaning:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;S&lt;/strong&gt; (&lt;em&gt;specific goal&lt;/em&gt;) - what is the goal of the new project you want to start&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;M&lt;/strong&gt; (&lt;em&gt;measurable&lt;/em&gt;) - list all the features you need to accomplish to start the project&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;A&lt;/strong&gt; (&lt;em&gt;action&lt;/em&gt;) - when will you start&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;R&lt;/strong&gt; (&lt;em&gt;realistic&lt;/em&gt;) - is the project small enough to finish it in the specified time frame
demanded time frame&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;T&lt;/strong&gt; (&lt;em&gt;time&lt;/em&gt;) - in the beginning of July 2012 everything should be fine&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;putting-theory-into-practice&quot;&gt;Putting theory into practice&lt;/h2&gt;

&lt;p&gt;Late in 2011, I started a new and personally ambitious project: Writing an eBook about the great web framework
&lt;a href=&quot;http://www.padrinorb.com/&quot; title=&quot;Padrino&quot;&gt;Padrino&lt;/a&gt;. In a first step, I created a rough road map, about
what I wanted to write and which topics should be covered. After writing the intro section and
pushing the resources to &lt;a href=&quot;https://github.com/matthias-guenther/padrino-book&quot; title=&quot;github&quot;&gt;github&lt;/a&gt; I did
something very crazy and mentioned &lt;strong&gt;@padrinorb&lt;/strong&gt; in one of my tweets and this was it – the authors of
the framework motivated me with with writing the book. They retweeted every small progress I made
with the project and through that I got further pull requests and even a bunch of interested
followers who are watching the project.&lt;/p&gt;

&lt;p&gt;&lt;img class=&quot;center&quot; src=&quot;https://img.skitch.com/20111105-d9cjedpatps5wch3g5bbi6u1km.jpg&quot; title=&quot;Beginning of something great&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Let’s see how I can formulate the Book project with SMART:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;S&lt;/strong&gt; (&lt;em&gt;specific goal&lt;/em&gt;) - I want to learn how to write a eBook easily about Padrino web framework&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;M&lt;/strong&gt; (&lt;em&gt;measurable&lt;/em&gt;)
    &lt;ul&gt;
      &lt;li&gt;create roadmap about the topics of the book&lt;/li&gt;
      &lt;li&gt;find a method to write book in one format and export the as pdf, epub, mobi, and HTML format&lt;/li&gt;
      &lt;li&gt;get really involved in Open source community and communicate with them&lt;/li&gt;
      &lt;li&gt;find an audience and get help from other people&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;A&lt;/strong&gt; (&lt;em&gt;action&lt;/em&gt;)
    &lt;ul&gt;
      &lt;li&gt;start as soon as possible&lt;/li&gt;
      &lt;li&gt;try to write everyday one chapter of the book&lt;/li&gt;
      &lt;li&gt;tweet about the progress I made everyday&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;R&lt;/strong&gt; (&lt;em&gt;realistic&lt;/em&gt;)
    &lt;ul&gt;
      &lt;li&gt;it is a big project (never have written a book before) but continuously delivery will motivate
me during this long period&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;T&lt;/strong&gt; (&lt;em&gt;time&lt;/em&gt;)
    &lt;ul&gt;
      &lt;li&gt;till February 2012 everything should be finished&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I set up the frame of SMART goals and developed a rough plan - that’s all you need to let come
your dreams true.&lt;/p&gt;

&lt;h2 id=&quot;cost-for-smart&quot;&gt;Cost for SMART&lt;/h2&gt;

&lt;p&gt;To be honest, writing of my Padrino eBook project consumes a lot of my free time so I in the near future I will publish
only a few new entries on this blog. I have many ideas and topics I want to cover, but first I will
finish this book to deepen my writing experience. I’m glad to hear your opinion (or contribution) to
the &lt;a href=&quot;https://github.com/matthias-guenther/padrino-book&quot; title=&quot;book&quot;&gt;book&lt;/a&gt; - I will put every contributer on the
&lt;a href=&quot;https://github.com/matthias-guenther/padrino-book/blob/master/README.md&quot; title=&quot;special thanks list&quot;&gt;special thanks list&lt;/a&gt;
of the book.&lt;/p&gt;

&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;

&lt;p&gt;SMART is great if you want to start in small steps to begin with something completely new, learn
much about it, and report (for example, I’m using the twitter hashtag &lt;strong&gt;#dailywriting&lt;/strong&gt;) about the
progress you made.&lt;/p&gt;

&lt;p&gt;Thanks to &lt;a href=&quot;http://sebastianguenther.org/&quot; title=&quot;Sebastian Guenther&quot;&gt;&lt;strong&gt;Sebastian Guenther&lt;/strong&gt;&lt;/a&gt; for reading an earlier draft of this post.&lt;/p&gt;

</content>
    </entry>
  
    <entry>
      <title>Global Coderetreat 2011 in Berlin</title>
      <link href="http://wikimatze.de/global-code-retreat-2011.html"/>
      <updated>2011-12-04T00:00:00+01:00</updated>
      <id>http://wikimatze.de/global-code-retreat-2011.html</id>
      <content type="html">&lt;p&gt;I attended the &lt;strong&gt;Global Coderetreat&lt;/strong&gt;&lt;sup id=&quot;fnref:coderetreat&quot;&gt;&lt;a href=&quot;#fn:coderetreat&quot; rel=&quot;footnote&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; event initialized by Corey Haines&lt;sup id=&quot;fnref:haines&quot;&gt;&lt;a href=&quot;#fn:haines&quot; rel=&quot;footnote&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;. The
general purpose of this event was to get a bunch of hackers together to implement
&lt;a href=&quot;http://en.wikipedia.org/wiki/Conway's_Game_of_Life&quot; title=&quot;Conway's Game of Life&quot;&gt;Conway’s Game of Life&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img class=&quot;center&quot; src=&quot;http://farm8.staticflickr.com/7029/6452198253_ca6e01b7f4.jpg&quot; title=&quot;Coderetreat@Immobilienscout alt&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;setting-up-goals&quot;&gt;Setting up goals&lt;/h2&gt;

&lt;p&gt;As &lt;strong&gt;J. B. Rainsberger&lt;/strong&gt; mentioned in his article &lt;a href=&quot;http://www.jbrains.ca/permalink/the-four-elements-of-simple-design&quot; title=&quot;four elements of simple design&quot;&gt;article&lt;/a&gt; four elements of simple
design, it is best to setup goals for your retreat to get most out of it. Here is a list of what I
achieved in each session:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Being a mentor of TDD: I taught &lt;a href=&quot;https://github.com/dedan&quot; title=&quot;dedan&quot;&gt;dedan&lt;/a&gt; how to use TDD, why
TDD helps you to think about your design&lt;/li&gt;
  &lt;li&gt;Being a mentor of BDD: Showing a fellow Rubyist how to do BDD&lt;/li&gt;
  &lt;li&gt;Doing something completely stupid: I played &lt;em&gt;evil coder&lt;/em&gt; and &lt;em&gt;ping-pong pairing&lt;/em&gt; with
&lt;a href=&quot;http://twitter.com/#!/tilosoenke&quot; title=&quot;@tilosoenke&quot;&gt;@tilosoenke&lt;/a&gt; - we couldn’t communicate with
words, only with code, one writing tests and other the implementation of the tests.&lt;/li&gt;
  &lt;li&gt;Discuss about names: We said together and discussed about right names for methods, variables, and
classes. We concluded that good names saves you scary comments in your code&lt;/li&gt;
  &lt;li&gt;Explain Ruby to a Java-Programmer&lt;/li&gt;
  &lt;li&gt;Being mentored about Lisp: We solved the whole ‘Game of Live’ in common Lisp&lt;sup id=&quot;fnref:lisp&quot;&gt;&lt;a href=&quot;#fn:lisp&quot; rel=&quot;footnote&quot;&gt;3&lt;/a&gt;&lt;/sup&gt;, while
&lt;a href=&quot;http://twitter.com/#!/hanshuebner&quot; title=&quot;@HansHuebener&quot;&gt;@HansHuebener&lt;/a&gt; explained me the
strength and beauty Common Lisp.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;

&lt;p&gt;It was great to get so many people with so many different skills and mindsets together, exchange
experience and encouraging others to try something new. I will definitely have a closer look on
Lisp to enhance my Ruby programming style.&lt;/p&gt;

&lt;p&gt;Thanks to &lt;a href=&quot;http://sebastianguenther.org/&quot; title=&quot;Sebastian Guenther&quot;&gt;&lt;strong&gt;Sebastian Guenther&lt;/strong&gt;&lt;/a&gt; for reading an earlier draft of this post.&lt;/p&gt;

&lt;h2 id=&quot;further-reading&quot;&gt;Further reading&lt;/h2&gt;

&lt;div class=&quot;footnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:coderetreat&quot;&gt;
      &lt;p&gt;&lt;a href=&quot;http://coderetreat.org/&quot; title=&quot;coderetreat&quot;&gt;coderetreat&lt;/a&gt;&lt;a href=&quot;#fnref:coderetreat&quot; rel=&quot;reference&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:haines&quot;&gt;
      &lt;p&gt;&lt;a href=&quot;http://coreyhaines.com/&quot; title=&quot;Corey Haines&quot;&gt;Corey Haines&lt;/a&gt;&lt;a href=&quot;#fnref:haines&quot; rel=&quot;reference&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:lisp&quot;&gt;
      &lt;p&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Lisp_(programming_language)&quot; title=&quot;Lisp&quot;&gt;Lisp&lt;/a&gt;&lt;a href=&quot;#fnref:lisp&quot; rel=&quot;reference&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;
</content>
    </entry>
  
    <entry>
      <title>Benefits of Scala</title>
      <link href="http://wikimatze.de/benefits-of-scala.html"/>
      <updated>2011-10-29T00:00:00+02:00</updated>
      <id>http://wikimatze.de/benefits-of-scala.html</id>
      <content type="html">&lt;p&gt;&lt;img class=&quot;right&quot; src=&quot;http://farm4.static.flickr.com/3483/3744612697_0c734df4a6_m.jpg&quot; title=&quot;Photo taken from the url under source&quot; /&gt;
When a new programming language is created, it came from a desire of one person or a group of to do
it better than their forerunner. It’s an evolutionary process that humans are trying to improve
themselves if something doesn’t as they want it to. Sometimes it’s only a small piece of improvement
which creates an absolutely new feeling about something. By designing a new programming language you
have a great pool of existing languages: LISP (1958), Smalltalk (1970), C++ (1979), Python (1991)
and Ruby (1995). Today it is often told not to waste your time on building up an new language from
the scratch. It’s time-consuming and why should you invent the wheel a second time? I think this is
just normal. If you spend some time reading about the languages mentioned above, you will see that
older language have still a great influence on new ones. Today, it is common to use DSLs (they are
used extensively in Rails) to create new languages. Not everything happened in the past was bad and
sometimes if you stick your head into some old forgotten technology you may find some diamonds.&lt;/p&gt;

&lt;p&gt;This was the main idea of Odersky when he created Scala. It is the first language which is a real
hybrid language and combines the invigorations of OOP and FP.&lt;/p&gt;

&lt;h2 id=&quot;main-facts-about-scala&quot;&gt;Main facts about Scala&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Scala is ideal for today’s scalable, distributed, component-based applications that support
concurrency and distribution.&lt;/li&gt;
  &lt;li&gt;Scala is &lt;em&gt;statically typed&lt;/em&gt; that means that the type of some variable is immutable during the
whole execution of the program.&lt;/li&gt;
  &lt;li&gt;There is modular &lt;em&gt;mixin-composition for classes&lt;/em&gt; - some hack to enable multiple inheritance in
Scala, which solves the diamond problem through linearity of the inheritance hierarchy via
&lt;em&gt;traits&lt;/em&gt;.&lt;/li&gt;
  &lt;li&gt;Liquid error: undefined method `join’ for #&lt;string:0xb46cf48 /&gt;&lt;/li&gt;
  &lt;li&gt;Lower risk to use Scala in an existing Java Application because Scala works &lt;em&gt;seamless&lt;/em&gt; with
existing Java Code.&lt;/li&gt;
  &lt;li&gt;high level type system with &lt;em&gt;variance annotations&lt;/em&gt;, &lt;em&gt;compound types, lower and upper bounds for
types&lt;/em&gt;&lt;/li&gt;
  &lt;li&gt;usage of &lt;em&gt;inner and anonymous classes&lt;/em&gt;&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;implicit conversions&lt;/em&gt; - that means a function take one type as an argument and returns to another
type (like converting an Integer into String)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;

&lt;p&gt;Scala is a very rich language which combines many features of different languages. It’s great if you
have to make different sections of your code cleaner, faster and conciser.  See &lt;a href=&quot;http://www.scala-lang.org/node/6436&quot; title=&quot;Scala at Linkedin&quot;&gt;Scala at
Linkedin&lt;/a&gt; to know what I mean.&lt;/p&gt;

&lt;p&gt;Thanks to &lt;em&gt;Hanna Schuett&lt;/em&gt; and &lt;a href=&quot;http://sebastian-gerth.eu&quot; title=&quot;Sebastian Gerth&quot;&gt;Sebastian Gerth&lt;/a&gt; for reading an earlier draft of this post.&lt;/p&gt;

&lt;h2 id=&quot;further-reading&quot;&gt;Further reading&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Lisp_%28programming_language%29&quot; title=&quot;LISP&quot;&gt;LISP&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Smalltalk&quot; title=&quot;Smalltalk&quot;&gt;Smalltalk&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.cplusplus.com&quot; title=&quot;C++&quot;&gt;C++&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.python.org/&quot; title=&quot;Python&quot;&gt;Python&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.ruby-lang.org/en/&quot; title=&quot;Ruby&quot;&gt;Ruby&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Domain-specific_language&quot; title=&quot;DSLs&quot;&gt;DSLs&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Diamond_problem&quot; title=&quot;diamond problem&quot;&gt;diamond problem&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
    </entry>
  
    <entry>
      <title>Mail Client in Java</title>
      <link href="http://wikimatze.de/mail-client-in-java.html"/>
      <updated>2011-10-22T00:00:00+02:00</updated>
      <id>http://wikimatze.de/mail-client-in-java.html</id>
      <content type="html">&lt;!--Liquid error: undefined method `map' for #&lt;String:0xb2bb118&gt;
--&gt;
&lt;p&gt;During the summer term 2007 we had the task to create a Thunderbird&lt;sup id=&quot;fnref:mailclient&quot;&gt;&lt;a href=&quot;#fn:mailclient&quot; rel=&quot;footnote&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; like &lt;strong&gt;mail client&lt;/strong&gt;
in Java&lt;sup id=&quot;fnref:java&quot;&gt;&lt;a href=&quot;#fn:java&quot; rel=&quot;footnote&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img class=&quot;right&quot; src=&quot;http://farm4.static.flickr.com/3047/2550236041_8bf541147e_m.jpg&quot; title=&quot;Photo taken from the url under source&quot; /&gt;
The GUI should be created either with Swing&lt;sup id=&quot;fnref:swing&quot;&gt;&lt;a href=&quot;#fn:swing&quot; rel=&quot;footnote&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; or AWT&lt;sup id=&quot;fnref:awt&quot;&gt;&lt;a href=&quot;#fn:awt&quot; rel=&quot;footnote&quot;&gt;4&lt;/a&gt;&lt;/sup&gt;. Beside the graphical
implementation, we had to check and study the functionality of POP3&lt;sup id=&quot;fnref:pop3&quot;&gt;&lt;a href=&quot;#fn:pop3&quot; rel=&quot;footnote&quot;&gt;5&lt;/a&gt;&lt;/sup&gt; and SMTP&lt;sup id=&quot;fnref:smtp&quot;&gt;&lt;a href=&quot;#fn:smtp&quot; rel=&quot;footnote&quot;&gt;6&lt;/a&gt;&lt;/sup&gt;. Only the
correct numbers in this protocols are important because they stands for each transactions if it was a
success or a failure. A first attempt this functionality was done with plain old &lt;em&gt;sockets&lt;/em&gt; to get a
feeling how POP3 and SMTP works.&lt;/p&gt;

&lt;p&gt;After we a running function the basic functions of the mail client, we had to implement some
extra-functions like attachments (mime parts in an email) or the handling of emails with
drag-and-drop. I implemented this big project with the help of NetBeans&lt;sup id=&quot;fnref:netbeans&quot;&gt;&lt;a href=&quot;#fn:netbeans&quot; rel=&quot;footnote&quot;&gt;7&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;

&lt;h2 id=&quot;images&quot;&gt;Images&lt;/h2&gt;

&lt;p&gt;By means of the following images I will describe the basic layout of my mailclient.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/images/blog/mail_client_1.jpg&quot; title=&quot;The basic surface when the program starts.  If you press on the upper task bar a drag-and-drop menu will open.&quot; class=&quot;center&quot;&gt;&lt;img src=&quot;/images/blog/mail_client_1_thumbnail_normal.jpg&quot; alt=&quot;mail_client_1.jpg&quot; class=&quot;center&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class=&quot;caption&quot;&gt;The basic surface when the program starts. If you press on the upper task bar a drag-and-drop menu will open.&lt;/div&gt;

&lt;p&gt;&lt;a href=&quot;/images/blog/mail_client_2.jpg&quot; title=&quot;In this window you can add data of a new account.&quot; class=&quot;blog&quot;&gt;&lt;img src=&quot;/images/blog/mail_client_2_thumbnail_normal.jpg&quot; class=&quot;center&quot; alt=&quot;mail_client_2.jpg&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class=&quot;caption&quot;&gt;In this window you can add data of a new account.&lt;/div&gt;

&lt;p&gt;&lt;a href=&quot;/images/blog/mail_client_3.jpg&quot; title=&quot;Get the mail of an already existing account.&quot; class=&quot;blog&quot;&gt;&lt;img src=&quot;/images/blog/mail_client_3_thumbnail_normal.jpg&quot; class=&quot;center&quot; alt=&quot;mail_client_3.jpg&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class=&quot;caption&quot;&gt;Get the mail of an already existing account.&lt;/div&gt;

&lt;p&gt;&lt;a href=&quot;/images/blog/mail_client_4.jpg&quot; title=&quot;The window where to write a new email.&quot; class=&quot;blog&quot;&gt;&lt;img src=&quot;/images/blog/mail_client_4_thumbnail_normal.jpg&quot; class=&quot;center&quot; alt=&quot;mail_client_4.jpg&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class=&quot;caption&quot;&gt;The window where to write a new email.&lt;/div&gt;

&lt;p&gt;&lt;a href=&quot;/images/blog/mail_client_5.jpg&quot; title=&quot;Drag-and-Drop window to manage emails.&quot; class=&quot;blog&quot;&gt;&lt;img src=&quot;/images/blog/mail_client_5_thumbnail_normal.jpg&quot; class=&quot;center&quot; alt=&quot;mail_client_5.jpg&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class=&quot;caption&quot;&gt;Drag-and-Drop window to manage emails.&lt;/div&gt;

&lt;h2 id=&quot;installation-for-netbeans&quot;&gt;Installation for Netbeans&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;get the &lt;a href=&quot;https://github.com/matthias-guenther/mailclient&quot; title=&quot;zip from github&quot;&gt;sources from github&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;extract the &lt;em&gt;javamail-1.4.zip&lt;/em&gt; =&amp;gt; this package contains a Java library for handling emails&lt;/li&gt;
  &lt;li&gt;create a new project under NetBeans and copy all files of the &lt;em&gt;Mail Client&lt;/em&gt; directory in the &lt;em&gt;src&lt;/em&gt;
directory of you NetBeans project&lt;/li&gt;
  &lt;li&gt;then you have to insert the &lt;em&gt;mail.jar&lt;/em&gt; file in your project in the following way:
    &lt;ul&gt;
      &lt;li&gt;click right on Libraries in the near of the view of your NetBeans project and chose &lt;em&gt;Add JAR&lt;/em&gt;&lt;/li&gt;
      &lt;li&gt;navigate to &lt;em&gt;javamail-1.4&lt;/em&gt; folder and select the &lt;em&gt;mail.jar&lt;/em&gt;&lt;/li&gt;
      &lt;li&gt;when you now select the files &lt;em&gt;GUIMailsend.java&lt;/em&gt; and &lt;em&gt;GUIMailsget.java&lt;/em&gt; should not show any
errors&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;now you have to adopt the paths in the file &lt;em&gt;GUIMain.java&lt;/em&gt; &lt;code&gt;(static File f, String dir, FileReader
file)&lt;/code&gt; and &lt;em&gt;GUITree&lt;/em&gt; &lt;code&gt;(File driveC, File source, File ziel)&lt;/code&gt; to your NetBeans project folder
through absolute paths =&amp;gt; I know it’s cumbersome but due to this date I couldn’t do any other&lt;/li&gt;
  &lt;li&gt;set the &lt;em&gt;GuiMain.java&lt;/em&gt; as the main file in your project and start the program&lt;/li&gt;
  &lt;li&gt;the standard account is &lt;em&gt;MG kontoinfos.kondat&lt;/em&gt; which contains the necessary data to access my
spam account (you can guess how to change the data)&lt;/li&gt;
  &lt;li&gt;the directory &lt;em&gt;Inbox MG&lt;/em&gt; saves all read mails of the user MG, further accounts have to be created
each in an own directory&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;MailApi.java&lt;/em&gt; is not necessary for the mail client, this will just be used to check the
correctness of the POP3 settings via the terminal&lt;/li&gt;
  &lt;li&gt;main cause of error messages:
    &lt;ul&gt;
      &lt;li&gt;wrong paths to your project&lt;/li&gt;
      &lt;li&gt;POP3 and SMTP&lt;/li&gt;
      &lt;li&gt;&lt;em&gt;mail.jar&lt;/em&gt; is not included correct in the project, but this will be shown in NetBeans&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;

&lt;p&gt;This project was my first big piece of software and I used all my gathered knowledge about Java. The
classes are not bug-free, manually tested, has a size over 1000 locs, has absolute paths, and the
function are sometimes very big. In the end it was just hacking down the software without using
certain patterns or careful development with clean code. I tested my code with &lt;code&gt;System.out.println&lt;/code&gt;
and I lost so much time with this stupid testing. One good thing I did: I created comments and was
able to get the program running even after two year.&lt;/p&gt;

&lt;p&gt;Nowadays programming methodologies like Agile&lt;sup id=&quot;fnref:agile&quot;&gt;&lt;a href=&quot;#fn:agile&quot; rel=&quot;footnote&quot;&gt;8&lt;/a&gt;&lt;/sup&gt;, Rapid-Prototyping or Model-Driven development
together with the framework Rails let you develop my application with much more less effort and is
more maintainable by driving the Test-Driven way, so you can refactor your code and don’t need to
manual test part of your basis.&lt;/p&gt;

&lt;p&gt;This project shows that it is possible to develop modular software in Java but in even greater
projects it is easy to get lost in the lost in Java code if you don’t rely on a framework.  It is
even difficult to setup the project in different IDE - today you can use Vagrant&lt;sup id=&quot;fnref:vagrant&quot;&gt;&lt;a href=&quot;#fn:vagrant&quot; rel=&quot;footnote&quot;&gt;9&lt;/a&gt;&lt;/sup&gt; to create
an environment which can be deployed easily as Virtual images on different platforms.&lt;/p&gt;

&lt;h2 id=&quot;further-reading&quot;&gt;Further reading&lt;/h2&gt;

&lt;div class=&quot;footnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:mailclient&quot;&gt;
      &lt;p&gt;&lt;a href=&quot;http://www.mozilla-europe.org/de/products/thunderbird/&quot; title=&quot;mail client&quot;&gt;mail client&lt;/a&gt;&lt;a href=&quot;#fnref:mailclient&quot; rel=&quot;reference&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:java&quot;&gt;
      &lt;p&gt;&lt;a href=&quot;http://www.java.com/de/download/manual.jsp&quot; title=&quot;java&quot;&gt;java&lt;/a&gt;&lt;a href=&quot;#fnref:java&quot; rel=&quot;reference&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:swing&quot;&gt;
      &lt;p&gt;&lt;a href=&quot;http://java.sun.com/docs/books/tutorial/uiswing/&quot; title=&quot;Swing&quot;&gt;Swing&lt;/a&gt;&lt;a href=&quot;#fnref:swing&quot; rel=&quot;reference&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:awt&quot;&gt;
      &lt;p&gt;&lt;a href=&quot;http://java.sun.com/javase/6/docs/technotes/guides/awt/&quot; title=&quot;AWT&quot;&gt;AWT&lt;/a&gt;&lt;a href=&quot;#fnref:awt&quot; rel=&quot;reference&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:pop3&quot;&gt;
      &lt;p&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Post_Office_Protocol&quot; title=&quot;POP3&quot;&gt;POP3&lt;/a&gt;&lt;a href=&quot;#fnref:pop3&quot; rel=&quot;reference&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:smtp&quot;&gt;
      &lt;p&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Simple_Mail_Transfer_Protocol&quot; title=&quot;SMTP&quot;&gt;SMTP&lt;/a&gt;&lt;a href=&quot;#fnref:smtp&quot; rel=&quot;reference&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:netbeans&quot;&gt;
      &lt;p&gt;&lt;a href=&quot;http://netbeans.org/&quot; title=&quot;NetBeans&quot;&gt;NetBeans&lt;/a&gt;&lt;a href=&quot;#fnref:netbeans&quot; rel=&quot;reference&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:agile&quot;&gt;
      &lt;p&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Agile_software_development&quot; title=&quot;Agile&quot;&gt;Agile&lt;/a&gt;&lt;a href=&quot;#fnref:agile&quot; rel=&quot;reference&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:vagrant&quot;&gt;
      &lt;p&gt;&lt;a href=&quot;http://vagrantup.com/&quot; title=&quot;Vagrant&quot;&gt;Vagrant&lt;/a&gt;&lt;a href=&quot;#fnref:vagrant&quot; rel=&quot;reference&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;
</content>
    </entry>
  
    <entry>
      <title>Benefits of reading a book - and use it right after that</title>
      <link href="http://wikimatze.de/benefits-of-reading-a-book-and-use-it-right-after-that.html"/>
      <updated>2011-10-15T00:00:00+02:00</updated>
      <id>http://wikimatze.de/benefits-of-reading-a-book-and-use-it-right-after-that.html</id>
      <content type="html">&lt;!--Liquid error: undefined method `map' for #&lt;String:0xaed4ef0&gt;--&gt;

&lt;p&gt;It’s a typical situation which every person knows: You look on your workspace and have a bunch of
new books there. You ordered them because some great guys lay their hands in the fire that you need
this wisdom.  Of course you have to do a stressful job and don’t have time to read all the things
but you still must learn new things in order to develop new skills. What should you do? I just
started reading as much as I can.&lt;/p&gt;

&lt;h2 id=&quot;what-you-should-do-during-the-process-of-reading&quot;&gt;What you should do during the process of reading&lt;/h2&gt;

&lt;p&gt;Don’t just read the book and put it away, read trough the table of contents, mark the parts which
are interesting for you and draw a mind map. If you have questions which should be answered by the
book, it’s good because then you will read the book with much more focus on them.&lt;/p&gt;

&lt;p&gt;Don’t just think of reading the book like in school: Cram for a test about it, get a good grade and
then just forget everything. This isn’t good and a waste of time. Don’t say you don’t have time,
just think of allocating your time effective. For me it’s the best, just to use the new knowledge
out of the book.  This is the best way to get the most out of it. What you’re right using is just as
good as cooking a new meal right after reading the recipe of it. You just inherit the procedure you
recently learned with your own mind, own feelings, own observations and add your own style (think of
your own ingredients in your favorite meal).&lt;/p&gt;

&lt;h2 id=&quot;benefits-of-note-taking&quot;&gt;Benefits of note taking&lt;/h2&gt;

&lt;p&gt;Years after reading the book you will maybe come in the situation where you need some of the
knowledge you just have read of this certain book you read it a lot of years ago. You know the title
of the book but can’t remember anything.  Before I explain the advantage of taking notes during
reading a book, I suggest you my different methods for taking notes:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;a pencil and a sheet of paper (which I personal prefer)&lt;/li&gt;
  &lt;li&gt;netbook/iPad/handy (there you can directly take your notes)&lt;/li&gt;
  &lt;li&gt;you can use post-it or stick it to mark important passages&lt;/li&gt;
  &lt;li&gt;speaking notes of certain passages which you find very interesting&lt;/li&gt;
  &lt;li&gt;read an eBook with your kindle, iPhone or some other devices in
which you can take custom-notes about something&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The disadvantages of 1, 2 and 3 are carry the notes respectively the book with you (think you are on
your trip to America and don’t want to fill your hole luggage with tons of books or do you want to
travel without your favorite Simpsons trousers).&lt;/p&gt;

&lt;p&gt;Method 4 is just a reminder of important passages. If such a file is very long you have problems in
searching the needed sections - you have to play forward and back and this is boring. Don’t forget
the amount of space which you need to store it. The advantage is, that you can easily take notes and
train your language when your tongue is on air.&lt;/p&gt;

&lt;p&gt;The usage of a specialized device for eBook-reading is a great opportunity. You can have many books
on on your device, set bookmarks and can take notes. I think writing notes without a keyboard may
have a worse usability - maybe with the iPad 2 its more easier. Of course, if you are used to this
technology and you are are good then just use it.  You can make it public or lock it with a certain
password. But why hidden your knowledge so that no other one can see it? Let other benefit by your
conclusions and wisdom.&lt;/p&gt;

&lt;p&gt;Personally for me the best method is to write my impressions of a read book on a sheet of paper and
transform with my PC later. A further step may be publishing your notes to your website - so you
have the possibility to access your thoughts just via an Internet connection. I’m using a
desktop-wiki &lt;a href=&quot;http://zim-wiki.org/&quot; title=&quot;zim&quot;&gt;zim&lt;/a&gt; and wrote a bunch of handy scripts, which transform
the text directly in format of my web page.&lt;/p&gt;

&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;

&lt;p&gt;If I had known early I would have started with this methods during my education at school. But
better later then never. If I travel for a longer period and have a book with me, it has still some
sheets of papers in it, so that I have space to take notes. A pencil is for me standard equipment.
So I can put every place where I read a book my thought about it on paper. If the book is finished
and I have a little bit time left, I will transform it into my netbook and then have my thoughts
with me.&lt;/p&gt;

&lt;p&gt;So remember: In the beginning it’s just unusual to make several breaks during reading a book, which
breaks your normal flow of reading. But during these breaks you can reorder your thoughts about
certain things and get new insights.  I suggest to publish it online and then see what will happen
with it.&lt;/p&gt;

&lt;p&gt;Thanks to &lt;em&gt;Hanna Schuett&lt;/em&gt; and &lt;a href=&quot;http://sebastian-gerth.eu&quot; title=&quot;Sebastian Gerth&quot;&gt;Sebastian Gerth&lt;/a&gt; for reading an earlier draft of this post.&lt;/p&gt;

&lt;h2 id=&quot;further-reading&quot;&gt;Further reading&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Personal_wiki#Free_software&quot; title=&quot;desktop-wiki&quot;&gt;desktop-wiki&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/IPad&quot; title=&quot;IPad&quot;&gt;IPad&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.thesimpsons.com/&quot; title=&quot;Simpsons&quot;&gt;Simpsons&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.amazon.com/dp/B0015T963C/?tag=gocous-20&amp;amp;hvadid=5266389317&amp;amp;ref=pd_sl_7caym1p0x_e&quot; title=&quot;kindle&quot;&gt;kindle&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
    </entry>
  
    <entry>
      <title>Why learning a new programming language</title>
      <link href="http://wikimatze.de/why-learning-a-new-programming-language.html"/>
      <updated>2011-10-08T00:00:00+02:00</updated>
      <id>http://wikimatze.de/why-learning-a-new-programming-language.html</id>
      <content type="html">&lt;p&gt;“Why should you start learning a new programming language” was the questions I asked me in the 2011?
Nowadays we are all to busy to try new things, to expand our horizon. After reading the Pragmatic
solving problems In the following chapter I will explain you, how I learned programming languages.&lt;/p&gt;

&lt;h2 id=&quot;in-the-beginning-there-was-turbo-pascal&quot;&gt;In the beginning there was Turbo Pascal&lt;/h2&gt;

&lt;p&gt;The first language I learned was Turbo Pascal. Everything (not only the programs) looked like a
great “geek nerving god tool”. I quite don’t understand what I was doing with Turbo Pascal as my
computer science teacher told me to make some simple calculation the perimeter for triangular and
other geometric object. It was great to declare your variables and then put them into a function and
print line the outcome.  Here are some images:&lt;/p&gt;

&lt;div&gt;&lt;script src=&quot;https://gist.github.com/435584.js?file=Turbo_Pascale&quot;&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;pre&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html&amp;gt;
  &amp;lt;head prefix=&amp;quot;og: http://ogp.me/ns# fb: http://ogp.me/ns/fb# githubog: http://ogp.me/ns/fb/githubog#&amp;quot;&amp;gt;
    &amp;lt;meta charset='utf-8'&amp;gt;
    &amp;lt;meta http-equiv=&amp;quot;X-UA-Compatible&amp;quot; content=&amp;quot;IE=edge&amp;quot;&amp;gt;
        &amp;lt;title&amp;gt;404 - GitHub&amp;lt;/title&amp;gt;
    &amp;lt;link rel=&amp;quot;search&amp;quot; type=&amp;quot;application/opensearchdescription+xml&amp;quot; href=&amp;quot;/opensearch.xml&amp;quot; title=&amp;quot;GitHub&amp;quot; /&amp;gt;
    &amp;lt;link rel=&amp;quot;fluid-icon&amp;quot; href=&amp;quot;https://github.com/fluidicon.png&amp;quot; title=&amp;quot;GitHub&amp;quot; /&amp;gt;
    &amp;lt;link rel=&amp;quot;shortcut icon&amp;quot; href=&amp;quot;/favicon.ico&amp;quot; type=&amp;quot;image/x-icon&amp;quot; /&amp;gt;

    
    

    

    &amp;lt;link href=&amp;quot;https://a248.e.akamai.net/assets.github.com/stylesheets/bundles/github-b944b131b077c623d63c6d6ce280a626618f5d27.css&amp;quot; media=&amp;quot;screen&amp;quot; rel=&amp;quot;stylesheet&amp;quot; type=&amp;quot;text/css&amp;quot; /&amp;gt;
    &amp;lt;link href=&amp;quot;https://a248.e.akamai.net/assets.github.com/stylesheets/bundles/github2-3756a326f44418b9ef64402699766b9c03d96540.css&amp;quot; media=&amp;quot;screen&amp;quot; rel=&amp;quot;stylesheet&amp;quot; type=&amp;quot;text/css&amp;quot; /&amp;gt;
    

    &amp;lt;script src=&amp;quot;https://a248.e.akamai.net/assets.github.com/javascripts/bundles/jquery-1ff4761a0d9866a948321eac8d969db3dc12938e.js&amp;quot; type=&amp;quot;text/javascript&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;
    &amp;lt;script src=&amp;quot;https://a248.e.akamai.net/assets.github.com/javascripts/bundles/github-f18e47f6b8ff4e1edebdac2dc35b1ef0fb0eeae0.js&amp;quot; type=&amp;quot;text/javascript&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;
    

    
  &amp;lt;/head&amp;gt;


  &amp;lt;body class=&amp;quot;logged_out    env-production &amp;quot;&amp;gt;
    


    

      &amp;lt;div id=&amp;quot;header&amp;quot; class=&amp;quot;true clearfix&amp;quot;&amp;gt;
        &amp;lt;div class=&amp;quot;container clearfix&amp;quot;&amp;gt;
          &amp;lt;a class=&amp;quot;site-logo&amp;quot; href=&amp;quot;https://github.com&amp;quot;&amp;gt;
            &amp;lt;!--[if IE]&amp;gt;
            &amp;lt;img alt=&amp;quot;GitHub&amp;quot; class=&amp;quot;github-logo&amp;quot; src=&amp;quot;https://a248.e.akamai.net/assets.github.com/images/modules/header/logov7.png?1323882799&amp;quot; /&amp;gt;
            &amp;lt;img alt=&amp;quot;GitHub&amp;quot; class=&amp;quot;github-logo-hover&amp;quot; src=&amp;quot;https://a248.e.akamai.net/assets.github.com/images/modules/header/logov7-hover.png?1324325436&amp;quot; /&amp;gt;
            &amp;lt;![endif]--&amp;gt;
            &amp;lt;img alt=&amp;quot;GitHub&amp;quot; class=&amp;quot;github-logo-4x&amp;quot; height=&amp;quot;30&amp;quot; src=&amp;quot;https://a248.e.akamai.net/assets.github.com/images/modules/header/logov7@4x.png?1323882799&amp;quot; /&amp;gt;
            &amp;lt;img alt=&amp;quot;GitHub&amp;quot; class=&amp;quot;github-logo-4x-hover&amp;quot; height=&amp;quot;30&amp;quot; src=&amp;quot;https://a248.e.akamai.net/assets.github.com/images/modules/header/logov7@4x-hover.png?1324325436&amp;quot; /&amp;gt;
          &amp;lt;/a&amp;gt;

                  &amp;lt;!--
      make sure to use fully qualified URLs here since this nav
      is used on error pages on other domains
    --&amp;gt;
    &amp;lt;ul class=&amp;quot;top-nav logged_out&amp;quot;&amp;gt;
        &amp;lt;li class=&amp;quot;pricing&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;https://github.com/plans&amp;quot;&amp;gt;Signup and Pricing&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
        &amp;lt;li class=&amp;quot;explore&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;https://github.com/explore&amp;quot;&amp;gt;Explore GitHub&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
      &amp;lt;li class=&amp;quot;features&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;https://github.com/features&amp;quot;&amp;gt;Features&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
        &amp;lt;li class=&amp;quot;blog&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;https://github.com/blog&amp;quot;&amp;gt;Blog&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
      &amp;lt;li class=&amp;quot;login&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;https://github.com/login?return_to=%2Fgist%2F435584%2FTurbo_Pascale&amp;quot;&amp;gt;Login&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
    &amp;lt;/ul&amp;gt;



          
        &amp;lt;/div&amp;gt;
      &amp;lt;/div&amp;gt;

      

        &amp;lt;div class=&amp;quot;site clearfix&amp;quot;&amp;gt;
          &amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;
            

&amp;lt;style type=&amp;quot;text/css&amp;quot;&amp;gt;
    #header{
        border-bottom: 0;
    }
    .site{
        padding: 0;
        margin-top: -20px;
    }
    * {
        margin: 0px;
        padding: 0px;
    }
    #parallax_field{
        overflow: hidden;
        position: absolute;
        left: 0;
        top: 0;
        height: 370px;
        width: 100%;
    }
    #parallax_field #parallax_bg {
        position: absolute;
        top: -20px;
        left: -20px;
        width: 110%;
        height: 425px;
        z-index: 1;
    }
    #parallax_illustration {
        display:block;
        width: 940px;
        height: 370px;
        position: relative;
        overflow: hidden;
        clear: both;
    }
    #parallax_illustration #parallax_error_text {
        position: absolute;
        top: 72px;
        left: 72px;
        z-index: 10;
    }
    #parallax_illustration #parallax_octocat {
        position: absolute;
        top: 94px;
        left: 356px;
        z-index: 9;
    }
    #parallax_illustration #parallax_speeder {
        position: absolute;
        top: 150px;
        left: 432px;
        z-index: 8;
    }
    #parallax_illustration #parallax_octocatshadow {
        position: absolute;
        top: 297px;
        left: 371px;
        z-index: 7;
    }
    #parallax_illustration #parallax_speedershadow {
        position: absolute;
        top: 263px;
        left: 442px;
        z-index: 6;
    }
    #parallax_illustration #parallax_building_1 {
        position: absolute;
        top: 73px;
        left: 467px;
        z-index: 5;
    }
    #parallax_illustration #parallax_building_2 {
        position: absolute;
        top: 113px;
        left: 762px;
        z-index: 4;
    }
    #footer {
        margin-top: 0px;
        z-index: 12;
    }
&amp;lt;/style&amp;gt;


&amp;lt;div id=&amp;quot;parallax_field&amp;quot;&amp;gt;
    &amp;lt;img alt=&amp;quot;building&amp;quot; class=&amp;quot;js-plaxify&amp;quot; data-invert=&amp;quot;true&amp;quot; data-xrange=&amp;quot;0&amp;quot; data-yrange=&amp;quot;20&amp;quot; height=&amp;quot;415&amp;quot; id=&amp;quot;parallax_bg&amp;quot; src=&amp;quot;https://a248.e.akamai.net/assets.github.com/images/modules/404/parallax_bg.jpg?1293753716&amp;quot; width=&amp;quot;940&amp;quot; /&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div id=&amp;quot;parallax_illustration&amp;quot;&amp;gt;
  &amp;lt;img alt=&amp;quot;404 | &amp;amp;ldquo;This is not the web page you are looking for&amp;amp;rdquo;&amp;quot; class=&amp;quot;js-plaxify&amp;quot; data-xrange=&amp;quot;20&amp;quot; data-yrange=&amp;quot;10&amp;quot; height=&amp;quot;249&amp;quot; id=&amp;quot;parallax_error_text&amp;quot; src=&amp;quot;https://a248.e.akamai.net/assets.github.com/images/modules/404/parallax_errortext.png?1293753716&amp;quot; width=&amp;quot;271&amp;quot; /&amp;gt;
  &amp;lt;img alt=&amp;quot;Octobi Wan Catnobi&amp;quot; class=&amp;quot;js-plaxify&amp;quot; data-xrange=&amp;quot;10&amp;quot; data-yrange=&amp;quot;10&amp;quot; height=&amp;quot;230&amp;quot; id=&amp;quot;parallax_octocat&amp;quot; src=&amp;quot;https://a248.e.akamai.net/assets.github.com/images/modules/404/parallax_octocat.png?1293753716&amp;quot; width=&amp;quot;188&amp;quot; /&amp;gt;
  &amp;lt;img alt=&amp;quot;land speeder&amp;quot; class=&amp;quot;js-plaxify&amp;quot; data-xrange=&amp;quot;10&amp;quot; data-yrange=&amp;quot;10&amp;quot; height=&amp;quot;156&amp;quot; id=&amp;quot;parallax_speeder&amp;quot; src=&amp;quot;https://a248.e.akamai.net/assets.github.com/images/modules/404/parallax_speeder.png?1293753716&amp;quot; width=&amp;quot;440&amp;quot; /&amp;gt;
  &amp;lt;img alt=&amp;quot;Octobi Wan Catnobi's shadow&amp;quot; class=&amp;quot;js-plaxify&amp;quot; data-xrange=&amp;quot;10&amp;quot; data-yrange=&amp;quot;10&amp;quot; height=&amp;quot;49&amp;quot; id=&amp;quot;parallax_octocatshadow&amp;quot; src=&amp;quot;https://a248.e.akamai.net/assets.github.com/images/modules/404/parallax_octocatshadow.png?1293753716&amp;quot; width=&amp;quot;166&amp;quot; /&amp;gt;
  &amp;lt;img alt=&amp;quot;land speeder's shadow&amp;quot; class=&amp;quot;js-plaxify&amp;quot; data-xrange=&amp;quot;10&amp;quot; data-yrange=&amp;quot;10&amp;quot; height=&amp;quot;75&amp;quot; id=&amp;quot;parallax_speedershadow&amp;quot; src=&amp;quot;https://a248.e.akamai.net/assets.github.com/images/modules/404/parallax_speedershadow.png?1293753716&amp;quot; width=&amp;quot;430&amp;quot; /&amp;gt;
  &amp;lt;img alt=&amp;quot;building&amp;quot; class=&amp;quot;js-plaxify&amp;quot; data-invert=&amp;quot;true&amp;quot; data-xrange=&amp;quot;50&amp;quot; data-yrange=&amp;quot;20&amp;quot; height=&amp;quot;123&amp;quot; id=&amp;quot;parallax_building_1&amp;quot; src=&amp;quot;https://a248.e.akamai.net/assets.github.com/images/modules/404/parallax_building_1.png?1293753716&amp;quot; width=&amp;quot;304&amp;quot; /&amp;gt;
  &amp;lt;img alt=&amp;quot;building&amp;quot; class=&amp;quot;js-plaxify&amp;quot; data-invert=&amp;quot;true&amp;quot; data-xrange=&amp;quot;75&amp;quot; data-yrange=&amp;quot;30&amp;quot; height=&amp;quot;50&amp;quot; id=&amp;quot;parallax_building_2&amp;quot; src=&amp;quot;https://a248.e.akamai.net/assets.github.com/images/modules/404/parallax_building_2.png?1293753716&amp;quot; width=&amp;quot;116&amp;quot; /&amp;gt;
&amp;lt;/div&amp;gt;

          &amp;lt;/div&amp;gt;
          &amp;lt;div class=&amp;quot;context-overlay&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;
        &amp;lt;/div&amp;gt;

      &amp;lt;!-- footer --&amp;gt;
      &amp;lt;div id=&amp;quot;footer&amp;quot; &amp;gt;
        
  &amp;lt;div class=&amp;quot;upper_footer&amp;quot;&amp;gt;
     &amp;lt;div class=&amp;quot;container clearfix&amp;quot;&amp;gt;

       &amp;lt;!--[if IE]&amp;gt;&amp;lt;h4 id=&amp;quot;blacktocat_ie&amp;quot;&amp;gt;GitHub Links&amp;lt;/h4&amp;gt;&amp;lt;![endif]--&amp;gt;
       &amp;lt;![if !IE]&amp;gt;&amp;lt;h4 id=&amp;quot;blacktocat&amp;quot;&amp;gt;GitHub Links&amp;lt;/h4&amp;gt;&amp;lt;![endif]&amp;gt;

       &amp;lt;ul class=&amp;quot;footer_nav&amp;quot;&amp;gt;
         &amp;lt;h4&amp;gt;GitHub&amp;lt;/h4&amp;gt;
         &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;https://github.com/about&amp;quot;&amp;gt;About&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
         &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;https://github.com/blog&amp;quot;&amp;gt;Blog&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
         &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;https://github.com/features&amp;quot;&amp;gt;Features&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
         &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;https://github.com/contact&amp;quot;&amp;gt;Contact &amp;amp;amp; Support&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
         &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;https://github.com/training&amp;quot;&amp;gt;Training&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
         &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://enterprise.github.com/&amp;quot;&amp;gt;GitHub Enterprise&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
         &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://status.github.com/&amp;quot;&amp;gt;Site Status&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
       &amp;lt;/ul&amp;gt;

       &amp;lt;ul class=&amp;quot;footer_nav&amp;quot;&amp;gt;
         &amp;lt;h4&amp;gt;Tools&amp;lt;/h4&amp;gt;
         &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://get.gaug.es/&amp;quot;&amp;gt;Gauges: Analyze web traffic&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
         &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://speakerdeck.com&amp;quot;&amp;gt;Speaker Deck: Presentations&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
         &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;https://gist.github.com&amp;quot;&amp;gt;Gist: Code snippets&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
         &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://mac.github.com/&amp;quot;&amp;gt;GitHub for Mac&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
         &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://mobile.github.com/&amp;quot;&amp;gt;Issues for iPhone&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
         &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://jobs.github.com/&amp;quot;&amp;gt;Job Board&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
       &amp;lt;/ul&amp;gt;

       &amp;lt;ul class=&amp;quot;footer_nav&amp;quot;&amp;gt;
         &amp;lt;h4&amp;gt;Extras&amp;lt;/h4&amp;gt;
         &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://shop.github.com/&amp;quot;&amp;gt;GitHub Shop&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
         &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://octodex.github.com/&amp;quot;&amp;gt;The Octodex&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
       &amp;lt;/ul&amp;gt;

       &amp;lt;ul class=&amp;quot;footer_nav&amp;quot;&amp;gt;
         &amp;lt;h4&amp;gt;Documentation&amp;lt;/h4&amp;gt;
         &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://help.github.com/&amp;quot;&amp;gt;GitHub Help&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
         &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://developer.github.com/&amp;quot;&amp;gt;Developer API&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
         &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://github.github.com/github-flavored-markdown/&amp;quot;&amp;gt;GitHub Flavored Markdown&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
         &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://pages.github.com/&amp;quot;&amp;gt;GitHub Pages&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
       &amp;lt;/ul&amp;gt;

     &amp;lt;/div&amp;gt;&amp;lt;!-- /.site --&amp;gt;
  &amp;lt;/div&amp;gt;&amp;lt;!-- /.upper_footer --&amp;gt;

&amp;lt;div class=&amp;quot;lower_footer&amp;quot;&amp;gt;
  &amp;lt;div class=&amp;quot;container clearfix&amp;quot;&amp;gt;
    &amp;lt;!--[if IE]&amp;gt;&amp;lt;div id=&amp;quot;legal_ie&amp;quot;&amp;gt;&amp;lt;![endif]--&amp;gt;
    &amp;lt;![if !IE]&amp;gt;&amp;lt;div id=&amp;quot;legal&amp;quot;&amp;gt;&amp;lt;![endif]&amp;gt;
      &amp;lt;ul&amp;gt;
          &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;https://github.com/site/terms&amp;quot;&amp;gt;Terms of Service&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
          &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;https://github.com/site/privacy&amp;quot;&amp;gt;Privacy&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
          &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;https://github.com/security&amp;quot;&amp;gt;Security&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
      &amp;lt;/ul&amp;gt;

      &amp;lt;p&amp;gt;&amp;amp;copy; 2012 &amp;lt;span title=&amp;quot;0.04041s from fe3.rs.github.com&amp;quot;&amp;gt;GitHub&amp;lt;/span&amp;gt; Inc. All rights reserved.&amp;lt;/p&amp;gt;
    &amp;lt;/div&amp;gt;&amp;lt;!-- /#legal or /#legal_ie--&amp;gt;

      &amp;lt;div class=&amp;quot;sponsor&amp;quot;&amp;gt;
        &amp;lt;a href=&amp;quot;http://www.rackspace.com&amp;quot; class=&amp;quot;logo&amp;quot;&amp;gt;
          &amp;lt;img alt=&amp;quot;Dedicated Server&amp;quot; height=&amp;quot;36&amp;quot; src=&amp;quot;https://a248.e.akamai.net/assets.github.com/images/modules/footer/rackspaces_logo.png?1329521041&amp;quot; width=&amp;quot;38&amp;quot; /&amp;gt;
        &amp;lt;/a&amp;gt;
        Powered by the &amp;lt;a href=&amp;quot;http://www.rackspace.com &amp;quot;&amp;gt;Dedicated
        Servers&amp;lt;/a&amp;gt; and&amp;lt;br/&amp;gt; &amp;lt;a href=&amp;quot;http://www.rackspacecloud.com&amp;quot;&amp;gt;Cloud
        Computing&amp;lt;/a&amp;gt; of Rackspace Hosting&amp;lt;span&amp;gt;&amp;amp;reg;&amp;lt;/span&amp;gt;
      &amp;lt;/div&amp;gt;
  &amp;lt;/div&amp;gt;&amp;lt;!-- /.site --&amp;gt;
&amp;lt;/div&amp;gt;&amp;lt;!-- /.lower_footer --&amp;gt;

      &amp;lt;/div&amp;gt;&amp;lt;!-- /#footer --&amp;gt;

    

&amp;lt;div id=&amp;quot;keyboard_shortcuts_pane&amp;quot; class=&amp;quot;instapaper_ignore readability-extra&amp;quot; style=&amp;quot;display:none&amp;quot;&amp;gt;
  &amp;lt;h2&amp;gt;Keyboard Shortcuts &amp;lt;small&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot; class=&amp;quot;js-see-all-keyboard-shortcuts&amp;quot;&amp;gt;(see all)&amp;lt;/a&amp;gt;&amp;lt;/small&amp;gt;&amp;lt;/h2&amp;gt;

  &amp;lt;div class=&amp;quot;columns threecols&amp;quot;&amp;gt;
    &amp;lt;div class=&amp;quot;column first&amp;quot;&amp;gt;
      &amp;lt;h3&amp;gt;Site wide shortcuts&amp;lt;/h3&amp;gt;
      &amp;lt;dl class=&amp;quot;keyboard-mappings&amp;quot;&amp;gt;
        &amp;lt;dt&amp;gt;s&amp;lt;/dt&amp;gt;
        &amp;lt;dd&amp;gt;Focus site search&amp;lt;/dd&amp;gt;
      &amp;lt;/dl&amp;gt;
      &amp;lt;dl class=&amp;quot;keyboard-mappings&amp;quot;&amp;gt;
        &amp;lt;dt&amp;gt;?&amp;lt;/dt&amp;gt;
        &amp;lt;dd&amp;gt;Bring up this help dialog&amp;lt;/dd&amp;gt;
      &amp;lt;/dl&amp;gt;
    &amp;lt;/div&amp;gt;&amp;lt;!-- /.column.first --&amp;gt;

    &amp;lt;div class=&amp;quot;column middle&amp;quot; style='display:none'&amp;gt;
      &amp;lt;h3&amp;gt;Commit list&amp;lt;/h3&amp;gt;
      &amp;lt;dl class=&amp;quot;keyboard-mappings&amp;quot;&amp;gt;
        &amp;lt;dt&amp;gt;j&amp;lt;/dt&amp;gt;
        &amp;lt;dd&amp;gt;Move selection down&amp;lt;/dd&amp;gt;
      &amp;lt;/dl&amp;gt;
      &amp;lt;dl class=&amp;quot;keyboard-mappings&amp;quot;&amp;gt;
        &amp;lt;dt&amp;gt;k&amp;lt;/dt&amp;gt;
        &amp;lt;dd&amp;gt;Move selection up&amp;lt;/dd&amp;gt;
      &amp;lt;/dl&amp;gt;
      &amp;lt;dl class=&amp;quot;keyboard-mappings&amp;quot;&amp;gt;
        &amp;lt;dt&amp;gt;c &amp;lt;em&amp;gt;or&amp;lt;/em&amp;gt; o &amp;lt;em&amp;gt;or&amp;lt;/em&amp;gt; enter&amp;lt;/dt&amp;gt;
        &amp;lt;dd&amp;gt;Open commit&amp;lt;/dd&amp;gt;
      &amp;lt;/dl&amp;gt;
      &amp;lt;dl class=&amp;quot;keyboard-mappings&amp;quot;&amp;gt;
        &amp;lt;dt&amp;gt;y&amp;lt;/dt&amp;gt;
        &amp;lt;dd&amp;gt;Expand URL to its canonical form&amp;lt;/dd&amp;gt;
      &amp;lt;/dl&amp;gt;
    &amp;lt;/div&amp;gt;&amp;lt;!-- /.column.first --&amp;gt;

    &amp;lt;div class=&amp;quot;column last&amp;quot; style='display:none'&amp;gt;
      &amp;lt;h3&amp;gt;Pull request list&amp;lt;/h3&amp;gt;
      &amp;lt;dl class=&amp;quot;keyboard-mappings&amp;quot;&amp;gt;
        &amp;lt;dt&amp;gt;j&amp;lt;/dt&amp;gt;
        &amp;lt;dd&amp;gt;Move selection down&amp;lt;/dd&amp;gt;
      &amp;lt;/dl&amp;gt;
      &amp;lt;dl class=&amp;quot;keyboard-mappings&amp;quot;&amp;gt;
        &amp;lt;dt&amp;gt;k&amp;lt;/dt&amp;gt;
        &amp;lt;dd&amp;gt;Move selection up&amp;lt;/dd&amp;gt;
      &amp;lt;/dl&amp;gt;
      &amp;lt;dl class=&amp;quot;keyboard-mappings&amp;quot;&amp;gt;
        &amp;lt;dt&amp;gt;o &amp;lt;em&amp;gt;or&amp;lt;/em&amp;gt; enter&amp;lt;/dt&amp;gt;
        &amp;lt;dd&amp;gt;Open issue&amp;lt;/dd&amp;gt;
      &amp;lt;/dl&amp;gt;
    &amp;lt;/div&amp;gt;&amp;lt;!-- /.columns.last --&amp;gt;

  &amp;lt;/div&amp;gt;&amp;lt;!-- /.columns.equacols --&amp;gt;

  &amp;lt;div style='display:none'&amp;gt;
    &amp;lt;div class=&amp;quot;rule&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;

    &amp;lt;h3&amp;gt;Issues&amp;lt;/h3&amp;gt;

    &amp;lt;div class=&amp;quot;columns threecols&amp;quot;&amp;gt;
      &amp;lt;div class=&amp;quot;column first&amp;quot;&amp;gt;
        &amp;lt;dl class=&amp;quot;keyboard-mappings&amp;quot;&amp;gt;
          &amp;lt;dt&amp;gt;j&amp;lt;/dt&amp;gt;
          &amp;lt;dd&amp;gt;Move selection down&amp;lt;/dd&amp;gt;
        &amp;lt;/dl&amp;gt;
        &amp;lt;dl class=&amp;quot;keyboard-mappings&amp;quot;&amp;gt;
          &amp;lt;dt&amp;gt;k&amp;lt;/dt&amp;gt;
          &amp;lt;dd&amp;gt;Move selection up&amp;lt;/dd&amp;gt;
        &amp;lt;/dl&amp;gt;
        &amp;lt;dl class=&amp;quot;keyboard-mappings&amp;quot;&amp;gt;
          &amp;lt;dt&amp;gt;x&amp;lt;/dt&amp;gt;
          &amp;lt;dd&amp;gt;Toggle selection&amp;lt;/dd&amp;gt;
        &amp;lt;/dl&amp;gt;
        &amp;lt;dl class=&amp;quot;keyboard-mappings&amp;quot;&amp;gt;
          &amp;lt;dt&amp;gt;o &amp;lt;em&amp;gt;or&amp;lt;/em&amp;gt; enter&amp;lt;/dt&amp;gt;
          &amp;lt;dd&amp;gt;Open issue&amp;lt;/dd&amp;gt;
        &amp;lt;/dl&amp;gt;
      &amp;lt;/div&amp;gt;&amp;lt;!-- /.column.first --&amp;gt;
      &amp;lt;div class=&amp;quot;column middle&amp;quot;&amp;gt;
        &amp;lt;dl class=&amp;quot;keyboard-mappings&amp;quot;&amp;gt;
          &amp;lt;dt&amp;gt;I&amp;lt;/dt&amp;gt;
          &amp;lt;dd&amp;gt;Mark selection as read&amp;lt;/dd&amp;gt;
        &amp;lt;/dl&amp;gt;
        &amp;lt;dl class=&amp;quot;keyboard-mappings&amp;quot;&amp;gt;
          &amp;lt;dt&amp;gt;U&amp;lt;/dt&amp;gt;
          &amp;lt;dd&amp;gt;Mark selection as unread&amp;lt;/dd&amp;gt;
        &amp;lt;/dl&amp;gt;
        &amp;lt;dl class=&amp;quot;keyboard-mappings&amp;quot;&amp;gt;
          &amp;lt;dt&amp;gt;e&amp;lt;/dt&amp;gt;
          &amp;lt;dd&amp;gt;Close selection&amp;lt;/dd&amp;gt;
        &amp;lt;/dl&amp;gt;
        &amp;lt;dl class=&amp;quot;keyboard-mappings&amp;quot;&amp;gt;
          &amp;lt;dt&amp;gt;y&amp;lt;/dt&amp;gt;
          &amp;lt;dd&amp;gt;Remove selection from view&amp;lt;/dd&amp;gt;
        &amp;lt;/dl&amp;gt;
      &amp;lt;/div&amp;gt;&amp;lt;!-- /.column.middle --&amp;gt;
      &amp;lt;div class=&amp;quot;column last&amp;quot;&amp;gt;
        &amp;lt;dl class=&amp;quot;keyboard-mappings&amp;quot;&amp;gt;
          &amp;lt;dt&amp;gt;c&amp;lt;/dt&amp;gt;
          &amp;lt;dd&amp;gt;Create issue&amp;lt;/dd&amp;gt;
        &amp;lt;/dl&amp;gt;
        &amp;lt;dl class=&amp;quot;keyboard-mappings&amp;quot;&amp;gt;
          &amp;lt;dt&amp;gt;l&amp;lt;/dt&amp;gt;
          &amp;lt;dd&amp;gt;Create label&amp;lt;/dd&amp;gt;
        &amp;lt;/dl&amp;gt;
        &amp;lt;dl class=&amp;quot;keyboard-mappings&amp;quot;&amp;gt;
          &amp;lt;dt&amp;gt;i&amp;lt;/dt&amp;gt;
          &amp;lt;dd&amp;gt;Back to inbox&amp;lt;/dd&amp;gt;
        &amp;lt;/dl&amp;gt;
        &amp;lt;dl class=&amp;quot;keyboard-mappings&amp;quot;&amp;gt;
          &amp;lt;dt&amp;gt;u&amp;lt;/dt&amp;gt;
          &amp;lt;dd&amp;gt;Back to issues&amp;lt;/dd&amp;gt;
        &amp;lt;/dl&amp;gt;
        &amp;lt;dl class=&amp;quot;keyboard-mappings&amp;quot;&amp;gt;
          &amp;lt;dt&amp;gt;/&amp;lt;/dt&amp;gt;
          &amp;lt;dd&amp;gt;Focus issues search&amp;lt;/dd&amp;gt;
        &amp;lt;/dl&amp;gt;
      &amp;lt;/div&amp;gt;
    &amp;lt;/div&amp;gt;
  &amp;lt;/div&amp;gt;

  &amp;lt;div style='display:none'&amp;gt;
    &amp;lt;div class=&amp;quot;rule&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;

    &amp;lt;h3&amp;gt;Issues Dashboard&amp;lt;/h3&amp;gt;

    &amp;lt;div class=&amp;quot;columns threecols&amp;quot;&amp;gt;
      &amp;lt;div class=&amp;quot;column first&amp;quot;&amp;gt;
        &amp;lt;dl class=&amp;quot;keyboard-mappings&amp;quot;&amp;gt;
          &amp;lt;dt&amp;gt;j&amp;lt;/dt&amp;gt;
          &amp;lt;dd&amp;gt;Move selection down&amp;lt;/dd&amp;gt;
        &amp;lt;/dl&amp;gt;
        &amp;lt;dl class=&amp;quot;keyboard-mappings&amp;quot;&amp;gt;
          &amp;lt;dt&amp;gt;k&amp;lt;/dt&amp;gt;
          &amp;lt;dd&amp;gt;Move selection up&amp;lt;/dd&amp;gt;
        &amp;lt;/dl&amp;gt;
        &amp;lt;dl class=&amp;quot;keyboard-mappings&amp;quot;&amp;gt;
          &amp;lt;dt&amp;gt;o &amp;lt;em&amp;gt;or&amp;lt;/em&amp;gt; enter&amp;lt;/dt&amp;gt;
          &amp;lt;dd&amp;gt;Open issue&amp;lt;/dd&amp;gt;
        &amp;lt;/dl&amp;gt;
      &amp;lt;/div&amp;gt;&amp;lt;!-- /.column.first --&amp;gt;
    &amp;lt;/div&amp;gt;
  &amp;lt;/div&amp;gt;

  &amp;lt;div style='display:none'&amp;gt;
    &amp;lt;div class=&amp;quot;rule&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;

    &amp;lt;h3&amp;gt;Network Graph&amp;lt;/h3&amp;gt;
    &amp;lt;div class=&amp;quot;columns equacols&amp;quot;&amp;gt;
      &amp;lt;div class=&amp;quot;column first&amp;quot;&amp;gt;
        &amp;lt;dl class=&amp;quot;keyboard-mappings&amp;quot;&amp;gt;
          &amp;lt;dt&amp;gt;&amp;lt;span class=&amp;quot;badmono&amp;quot;&amp;gt;←&amp;lt;/span&amp;gt; &amp;lt;em&amp;gt;or&amp;lt;/em&amp;gt; h&amp;lt;/dt&amp;gt;
          &amp;lt;dd&amp;gt;Scroll left&amp;lt;/dd&amp;gt;
        &amp;lt;/dl&amp;gt;
        &amp;lt;dl class=&amp;quot;keyboard-mappings&amp;quot;&amp;gt;
          &amp;lt;dt&amp;gt;&amp;lt;span class=&amp;quot;badmono&amp;quot;&amp;gt;→&amp;lt;/span&amp;gt; &amp;lt;em&amp;gt;or&amp;lt;/em&amp;gt; l&amp;lt;/dt&amp;gt;
          &amp;lt;dd&amp;gt;Scroll right&amp;lt;/dd&amp;gt;
        &amp;lt;/dl&amp;gt;
        &amp;lt;dl class=&amp;quot;keyboard-mappings&amp;quot;&amp;gt;
          &amp;lt;dt&amp;gt;&amp;lt;span class=&amp;quot;badmono&amp;quot;&amp;gt;↑&amp;lt;/span&amp;gt; &amp;lt;em&amp;gt;or&amp;lt;/em&amp;gt; k&amp;lt;/dt&amp;gt;
          &amp;lt;dd&amp;gt;Scroll up&amp;lt;/dd&amp;gt;
        &amp;lt;/dl&amp;gt;
        &amp;lt;dl class=&amp;quot;keyboard-mappings&amp;quot;&amp;gt;
          &amp;lt;dt&amp;gt;&amp;lt;span class=&amp;quot;badmono&amp;quot;&amp;gt;↓&amp;lt;/span&amp;gt; &amp;lt;em&amp;gt;or&amp;lt;/em&amp;gt; j&amp;lt;/dt&amp;gt;
          &amp;lt;dd&amp;gt;Scroll down&amp;lt;/dd&amp;gt;
        &amp;lt;/dl&amp;gt;
        &amp;lt;dl class=&amp;quot;keyboard-mappings&amp;quot;&amp;gt;
          &amp;lt;dt&amp;gt;t&amp;lt;/dt&amp;gt;
          &amp;lt;dd&amp;gt;Toggle visibility of head labels&amp;lt;/dd&amp;gt;
        &amp;lt;/dl&amp;gt;
      &amp;lt;/div&amp;gt;&amp;lt;!-- /.column.first --&amp;gt;
      &amp;lt;div class=&amp;quot;column last&amp;quot;&amp;gt;
        &amp;lt;dl class=&amp;quot;keyboard-mappings&amp;quot;&amp;gt;
          &amp;lt;dt&amp;gt;shift &amp;lt;span class=&amp;quot;badmono&amp;quot;&amp;gt;←&amp;lt;/span&amp;gt; &amp;lt;em&amp;gt;or&amp;lt;/em&amp;gt; shift h&amp;lt;/dt&amp;gt;
          &amp;lt;dd&amp;gt;Scroll all the way left&amp;lt;/dd&amp;gt;
        &amp;lt;/dl&amp;gt;
        &amp;lt;dl class=&amp;quot;keyboard-mappings&amp;quot;&amp;gt;
          &amp;lt;dt&amp;gt;shift &amp;lt;span class=&amp;quot;badmono&amp;quot;&amp;gt;→&amp;lt;/span&amp;gt; &amp;lt;em&amp;gt;or&amp;lt;/em&amp;gt; shift l&amp;lt;/dt&amp;gt;
          &amp;lt;dd&amp;gt;Scroll all the way right&amp;lt;/dd&amp;gt;
        &amp;lt;/dl&amp;gt;
        &amp;lt;dl class=&amp;quot;keyboard-mappings&amp;quot;&amp;gt;
          &amp;lt;dt&amp;gt;shift &amp;lt;span class=&amp;quot;badmono&amp;quot;&amp;gt;↑&amp;lt;/span&amp;gt; &amp;lt;em&amp;gt;or&amp;lt;/em&amp;gt; shift k&amp;lt;/dt&amp;gt;
          &amp;lt;dd&amp;gt;Scroll all the way up&amp;lt;/dd&amp;gt;
        &amp;lt;/dl&amp;gt;
        &amp;lt;dl class=&amp;quot;keyboard-mappings&amp;quot;&amp;gt;
          &amp;lt;dt&amp;gt;shift &amp;lt;span class=&amp;quot;badmono&amp;quot;&amp;gt;↓&amp;lt;/span&amp;gt; &amp;lt;em&amp;gt;or&amp;lt;/em&amp;gt; shift j&amp;lt;/dt&amp;gt;
          &amp;lt;dd&amp;gt;Scroll all the way down&amp;lt;/dd&amp;gt;
        &amp;lt;/dl&amp;gt;
      &amp;lt;/div&amp;gt;&amp;lt;!-- /.column.last --&amp;gt;
    &amp;lt;/div&amp;gt;
  &amp;lt;/div&amp;gt;

  &amp;lt;div style='display:none'&amp;gt;
    &amp;lt;div class=&amp;quot;rule&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;
    &amp;lt;div class=&amp;quot;columns threecols&amp;quot;&amp;gt;
      &amp;lt;div class=&amp;quot;column first&amp;quot; style='display:none'&amp;gt;
        &amp;lt;h3&amp;gt;Source Code Browsing&amp;lt;/h3&amp;gt;
        &amp;lt;dl class=&amp;quot;keyboard-mappings&amp;quot;&amp;gt;
          &amp;lt;dt&amp;gt;t&amp;lt;/dt&amp;gt;
          &amp;lt;dd&amp;gt;Activates the file finder&amp;lt;/dd&amp;gt;
        &amp;lt;/dl&amp;gt;
        &amp;lt;dl class=&amp;quot;keyboard-mappings&amp;quot;&amp;gt;
          &amp;lt;dt&amp;gt;l&amp;lt;/dt&amp;gt;
          &amp;lt;dd&amp;gt;Jump to line&amp;lt;/dd&amp;gt;
        &amp;lt;/dl&amp;gt;
        &amp;lt;dl class=&amp;quot;keyboard-mappings&amp;quot;&amp;gt;
          &amp;lt;dt&amp;gt;w&amp;lt;/dt&amp;gt;
          &amp;lt;dd&amp;gt;Switch branch/tag&amp;lt;/dd&amp;gt;
        &amp;lt;/dl&amp;gt;
        &amp;lt;dl class=&amp;quot;keyboard-mappings&amp;quot;&amp;gt;
          &amp;lt;dt&amp;gt;y&amp;lt;/dt&amp;gt;
          &amp;lt;dd&amp;gt;Expand URL to its canonical form&amp;lt;/dd&amp;gt;
        &amp;lt;/dl&amp;gt;
      &amp;lt;/div&amp;gt;
    &amp;lt;/div&amp;gt;
  &amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;

    &amp;lt;div id=&amp;quot;markdown-help&amp;quot; class=&amp;quot;instapaper_ignore readability-extra&amp;quot;&amp;gt;
  &amp;lt;h2&amp;gt;Markdown Cheat Sheet&amp;lt;/h2&amp;gt;

  &amp;lt;div class=&amp;quot;cheatsheet-content&amp;quot;&amp;gt;

  &amp;lt;div class=&amp;quot;mod&amp;quot;&amp;gt;
    &amp;lt;div class=&amp;quot;col&amp;quot;&amp;gt;
      &amp;lt;h3&amp;gt;Format Text&amp;lt;/h3&amp;gt;
      &amp;lt;p&amp;gt;Headers&amp;lt;/p&amp;gt;
      &amp;lt;pre&amp;gt;
# This is an &amp;amp;lt;h1&amp;amp;gt; tag
## This is an &amp;amp;lt;h2&amp;amp;gt; tag
###### This is an &amp;amp;lt;h6&amp;amp;gt; tag&amp;lt;/pre&amp;gt;
     &amp;lt;p&amp;gt;Text styles&amp;lt;/p&amp;gt;
     &amp;lt;pre&amp;gt;
*This text will be italic*
_This will also be italic_
**This text will be bold**
__This will also be bold__

*You **can** combine them*
&amp;lt;/pre&amp;gt;
    &amp;lt;/div&amp;gt;
    &amp;lt;div class=&amp;quot;col&amp;quot;&amp;gt;
      &amp;lt;h3&amp;gt;Lists&amp;lt;/h3&amp;gt;
      &amp;lt;p&amp;gt;Unordered&amp;lt;/p&amp;gt;
      &amp;lt;pre&amp;gt;
* Item 1
* Item 2
  * Item 2a
  * Item 2b&amp;lt;/pre&amp;gt;
     &amp;lt;p&amp;gt;Ordered&amp;lt;/p&amp;gt;
     &amp;lt;pre&amp;gt;
1. Item 1
2. Item 2
3. Item 3
   * Item 3a
   * Item 3b&amp;lt;/pre&amp;gt;
    &amp;lt;/div&amp;gt;
    &amp;lt;div class=&amp;quot;col&amp;quot;&amp;gt;
      &amp;lt;h3&amp;gt;Miscellaneous&amp;lt;/h3&amp;gt;
      &amp;lt;p&amp;gt;Images&amp;lt;/p&amp;gt;
      &amp;lt;pre&amp;gt;
![GitHub Logo](/images/logo.png)
Format: ![Alt Text](url)
&amp;lt;/pre&amp;gt;
     &amp;lt;p&amp;gt;Links&amp;lt;/p&amp;gt;
     &amp;lt;pre&amp;gt;
http://github.com - automatic!
[GitHub](http://github.com)&amp;lt;/pre&amp;gt;
&amp;lt;p&amp;gt;Blockquotes&amp;lt;/p&amp;gt;
     &amp;lt;pre&amp;gt;
As Kanye West said:

&amp;gt; We're living the future so
&amp;gt; the present is our past.
&amp;lt;/pre&amp;gt;
    &amp;lt;/div&amp;gt;
  &amp;lt;/div&amp;gt;
  &amp;lt;div class=&amp;quot;rule&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;

  &amp;lt;h3&amp;gt;Code Examples in Markdown&amp;lt;/h3&amp;gt;
  &amp;lt;div class=&amp;quot;col&amp;quot;&amp;gt;
      &amp;lt;p&amp;gt;Syntax highlighting with &amp;lt;a href=&amp;quot;http://github.github.com/github-flavored-markdown/&amp;quot; title=&amp;quot;GitHub Flavored Markdown&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;GFM&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
      &amp;lt;pre&amp;gt;
```javascript
function fancyAlert(arg) {
  if(arg) {
    $.facebox({div:'#foo'})
  }
}
```&amp;lt;/pre&amp;gt;
    &amp;lt;/div&amp;gt;
    &amp;lt;div class=&amp;quot;col&amp;quot;&amp;gt;
      &amp;lt;p&amp;gt;Or, indent your code 4 spaces&amp;lt;/p&amp;gt;
      &amp;lt;pre&amp;gt;
Here is a Python code example
without syntax highlighting:

    def foo:
      if not bar:
        return true&amp;lt;/pre&amp;gt;
    &amp;lt;/div&amp;gt;
    &amp;lt;div class=&amp;quot;col&amp;quot;&amp;gt;
      &amp;lt;p&amp;gt;Inline code for comments&amp;lt;/p&amp;gt;
      &amp;lt;pre&amp;gt;
I think you should use an
`&amp;amp;lt;addr&amp;amp;gt;` element here instead.&amp;lt;/pre&amp;gt;
    &amp;lt;/div&amp;gt;
  &amp;lt;/div&amp;gt;

  &amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;


    &amp;lt;div class=&amp;quot;ajax-error-message&amp;quot;&amp;gt;
      &amp;lt;p&amp;gt;&amp;lt;span class=&amp;quot;icon&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; Something went wrong with that request. Please try again. &amp;lt;a href=&amp;quot;javascript:;&amp;quot; class=&amp;quot;ajax-error-dismiss&amp;quot;&amp;gt;Dismiss&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
    &amp;lt;/div&amp;gt;

    
    
    
    &amp;lt;span id='server_response_time' data-time='0.04536' data-host='fe3'&amp;gt;&amp;lt;/span&amp;gt;
  &amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/noscript&gt;&lt;/div&gt;

&lt;p&gt;Turbo Pascal was my first procedural language and later during my studies I learned in a lecture
about compiler construction that this language was developed 1970 by Niklaus Wirth (whom I admire
for building such easy and effective techniques like the recursive descendant, but thats another
tale). If you want to have this retro feeling just check out Ubuntu resources (or other things if
you want to stay up).&lt;/p&gt;

&lt;p&gt;The following images show the “IDE”. It has few options with fancy looking buttons and no
options-overload.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/images/blog/1_turbo_pascal.jpg&quot; title=&quot;Nice blue environment.&quot; class=&quot;blog-small&quot;&gt;&lt;img src=&quot;/images/blog/1_turbo_pascal_thumbnail_small.jpg&quot; alt=&quot;1_turbo_pascal.jpg&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/images/blog/2_turbo_pascal.jpg&quot; title=&quot;A successful compilation.&quot; class=&quot;blog-small&quot;&gt;&lt;img src=&quot;/images/blog/2_turbo_pascal_thumbnail_small.jpg&quot; alt=&quot;2_turbo_pascal.jpg&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/images/blog/3_turbo_pascal.jpg&quot; title=&quot;Syntax highlightning looks like in a old hacker movie.&quot; class=&quot;blog-small&quot;&gt;&lt;img src=&quot;/images/blog/3_turbo_pascal_thumbnail_small.jpg&quot; alt=&quot;3_turbo_pascal.jpg&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/images/blog/4_turbo_pascal.jpg&quot; title=&quot;Output in a console.&quot; class=&quot;blog-small&quot;&gt;&lt;img src=&quot;/images/blog/4_turbo_pascal_thumbnail_small.jpg&quot; alt=&quot;4_turbo_pascal.jpg&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class=&quot;clearer&quot;&gt;&lt;/div&gt;

&lt;p&gt;In secondary school we had written some programs in Delphi (original it had the name Object Pascal).
The new things was that even the girls had little fun in writing programs in it (&lt;em&gt;some&lt;/em&gt; nice “Hello
Kitty” in with pink color, but they actually love it). We learned how to write functions and to
create some appealing graphics. After that I lost my interests in programming because the age of
&lt;strong&gt;warhammer&lt;/strong&gt; or &lt;strong&gt;video games&lt;/strong&gt;.&lt;/p&gt;

&lt;h2 id=&quot;then-java-came-&quot;&gt;Then Java came …&lt;/h2&gt;

&lt;p&gt;When I started my studies of computer science I knew I had still no programming experience and
during my first year I had to learn Java. It was quite good and quite bad if you ask my. The good
things about it was that I had to learn an exhausting new methodologies: OOP, Interfaces, Recursion,
Inheritance, Encapsulation, Polymorphism and many other concept. I was lost, I just wanted to learn
how to write simple programs and no one could tell me, why I have to write this &lt;em&gt;public static void
main (String args[])&lt;/em&gt; to start my program. My fellow students told my that I was an absolute newbie
(they were actually right).&lt;/p&gt;

&lt;p&gt;Chad Fowler wrote in his book &lt;strong&gt;The Passionate Programmer&lt;/strong&gt;: “Always be the worst guy in every band
you’re in.” I actually was it and in now time I made great progresses. But some aspects of Java hit
my but: It was so long to express simple things, so much overhead with static, private and so on. To
what I mean have a look on the following code:&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;java&quot;&gt;&lt;span class=&quot;kd&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;Socke&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;

  &lt;span class=&quot;kd&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;farbe&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;kd&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;gewicht&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;kd&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;boolean&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;istTrocken&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;

  &lt;span class=&quot;kt&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;trockne&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;istTrocken&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;

  &lt;span class=&quot;kt&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;wasche&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;istTrocken&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;

  &lt;span class=&quot;kt&quot;&gt;boolean&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;istTrocken&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;istTrocken&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;kd&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;NewClass&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;

  &lt;span class=&quot;kd&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;args&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;[])&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;Socke&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;stinki&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Socke&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;();&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;stinki&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;farbe&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&amp;quot;schwarz&amp;quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;stinki&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;gewicht&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;565&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;stinki&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;trockne&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;();&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;System&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;out&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;println&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;stinki&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;istTrocken&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;());&lt;/span&gt;
  &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Ok, you may say: “It’s quite readably” but wait until you have written, about several kilo of locs
and want to maintain or refactor it. I thought that I could understand my “well” written mail client
but well afterwards you know it better.&lt;/p&gt;

&lt;p&gt;For another term I looked on C++. It was good to see how pointer (or &lt;em&gt;references&lt;/em&gt;) are working, how
you must allocate your memory (Java has it’s gc) and generics (or &lt;em&gt;templates&lt;/em&gt;) for your data
structures. I nearly learned something new, C++ is like Java, it’s OOP and you can program
procedural if you like to. Have a look on some code:&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;cpp&quot;&gt;&lt;span class=&quot;cm&quot;&gt;/*&lt;/span&gt;
&lt;span class=&quot;cm&quot;&gt;* 2.1&lt;/span&gt;
&lt;span class=&quot;cm&quot;&gt;* Author: Matthias Guenther&lt;/span&gt;
&lt;span class=&quot;cm&quot;&gt;* function: repeated shortening of breaches with a ggT&lt;/span&gt;
&lt;span class=&quot;cm&quot;&gt;* use the Euklid-Algo to compute the ggT&lt;/span&gt;
&lt;span class=&quot;cm&quot;&gt;*/&lt;/span&gt;

&lt;span class=&quot;cp&quot;&gt;#include &amp;lt;iostream&amp;gt;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;using&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;namespace&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;std&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;compute_ggT&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;){&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;b&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;){&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;compute_ggT&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;a&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;%&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;kt&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;shortening_breach&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(){&lt;/span&gt;
  &lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;shortening_factor&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;string&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;q&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;do&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;cout&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&amp;quot;Please input the parameters to solve the breach: a/b&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\n&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;cout&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&amp;quot;[Input] Parameter a: &amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;cin&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;cout&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&amp;quot;[Input] Parameter b: &amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;cin&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;c1&quot;&gt;// look at the ggT&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;b&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;){&lt;/span&gt;
      &lt;span class=&quot;n&quot;&gt;cout&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&amp;quot;This is not allowed&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;n&quot;&gt;shortening_factor&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;compute_ggT&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
      &lt;span class=&quot;n&quot;&gt;a&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;a&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;/&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;shortening_factor&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
      &lt;span class=&quot;n&quot;&gt;b&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;b&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;/&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;shortening_factor&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
      &lt;span class=&quot;n&quot;&gt;cout&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&amp;quot;The breach is:&amp;quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;a&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&amp;quot;/&amp;quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;b&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\n&lt;/span&gt;&lt;span class=&quot;s&quot;&gt; Continue?&amp;quot;&lt;/span&gt;
            &lt;span class=&quot;s&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\n&lt;/span&gt;&lt;span class=&quot;s&quot;&gt; [Input &lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\&amp;quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;q&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\&amp;quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt; to leave the programm or &lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\&amp;quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\&amp;quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt; to &amp;quot;&lt;/span&gt;
            &lt;span class=&quot;s&quot;&gt;&amp;quot;continue]&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
      &lt;span class=&quot;n&quot;&gt;cin&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;q&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
      &lt;span class=&quot;n&quot;&gt;cout&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\n&lt;/span&gt;&lt;span class=&quot;s&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
      &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;while&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;q&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;!=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&amp;quot;q&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(){&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;shortening_breach&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h2 id=&quot;enlightenment-with-ruby&quot;&gt;Enlightenment with Ruby&lt;/h2&gt;

&lt;p&gt;Normally I’m not the guy how runs after every hype but I haven’t found so far my beloved programming
language. Why not risk a look. And then there was this ‘Whosh’ (think DC Comics). You could program
in different styles, could design your own languages (called DSL) and this nifty framework Ruby on
Rails (RoR) with Test-Driven Development (TDD), Behavior Driven Development (BDD), Continuous
Integration (CI) and many more things. These things sound a like a mystery for me, but just get
started and see how “easy” you can use it with RoR. It hits my head.&lt;/p&gt;

&lt;p&gt;It was a very hard steady learning curve but it was more pleasantly then just go to the candy shop
and get what you want for nothing. You have to invest much time. But look for yourself on ruby - it
looks like a natural language. Just look at a script I wrote to tag MP3:&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;&lt;span class=&quot;nb&quot;&gt;require&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;mp3info&amp;quot;&lt;/span&gt;

&lt;span class=&quot;c1&quot;&gt;# setting the basedirectory&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;base_directory&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;check/&amp;quot;&lt;/span&gt;

&lt;span class=&quot;c1&quot;&gt;# run through all directories and get the mp3&lt;/span&gt;
&lt;span class=&quot;no&quot;&gt;Dir&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;#{&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;base_directory&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;**/*.mp3&amp;quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;].&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;each&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;do&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;mp3&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;|&lt;/span&gt;
  &lt;span class=&quot;c1&quot;&gt;# get the directory&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;arr_directory&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;mp3&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;split&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&amp;quot;/&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;.mp3&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;split&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&amp;quot;/&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;length&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;]&lt;/span&gt;

  &lt;span class=&quot;c1&quot;&gt;# empty string which will be merged to a string and which is needed for file renaming as a path&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;directory_of_album&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;&amp;quot;&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;arr_directory&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;each&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;do&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;part&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;|&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;directory_of_album&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;part&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;/&amp;quot;&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;

  &lt;span class=&quot;n&quot;&gt;directory_of_album&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;directory_of_album&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;gsub&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&amp;quot;//&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;/&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;mp3_track&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;&amp;quot;&lt;/span&gt;

  &lt;span class=&quot;c1&quot;&gt;# open the mp3 to read the id3 infos&lt;/span&gt;
  &lt;span class=&quot;no&quot;&gt;Mp3Info&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;open&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;mp3&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;do&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;track&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;|&lt;/span&gt;
    &lt;span class=&quot;c1&quot;&gt;# delete genre&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;track&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;tag2&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;TCON&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;Game&amp;quot;&lt;/span&gt;

    &lt;span class=&quot;c1&quot;&gt;# check, if the track title exists&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;track&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;tag&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;title&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;!=&lt;/span&gt; &lt;span class=&quot;kp&quot;&gt;nil&lt;/span&gt;
      &lt;span class=&quot;c1&quot;&gt;# mp3 with an underscore are translated in / so we must catch this&lt;/span&gt;
      &lt;span class=&quot;n&quot;&gt;track_string&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;track&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;tag&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;title&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;gsub&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&amp;quot;/&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
      &lt;span class=&quot;n&quot;&gt;track&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;tag&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;title&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;track_string&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;else&lt;/span&gt;
      &lt;span class=&quot;nb&quot;&gt;puts&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;Please set the track-tag for &lt;/span&gt;&lt;span class=&quot;si&quot;&gt;#{&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;mp3&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;split&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&amp;quot;/&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;last&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt; ... NOT converted&amp;quot;&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;
    &lt;span class=&quot;c1&quot;&gt;# save mp3 tag&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;mp3_track&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;track&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;

  &lt;span class=&quot;c1&quot;&gt;# rename files&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;mp3_track&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;tag&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;title&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;!=&lt;/span&gt; &lt;span class=&quot;kp&quot;&gt;nil&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;mp3_newname&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;#{&lt;/span&gt;&lt;span class=&quot;no&quot;&gt;Dir&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;pwd&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;#{&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;directory_of_album&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;}#{&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;mp3_track&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;tag&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;tracknum&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt; - &lt;/span&gt;&lt;span class=&quot;si&quot;&gt;#{&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;mp3_track&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;tag&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;title&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;.mp3&amp;quot;&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;output&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;mp3_newname&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;split&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&amp;quot;/&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;no&quot;&gt;File&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;rename&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;mp3&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;mp3_newname&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;nb&quot;&gt;puts&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;#{&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;output&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;[-&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt; ... converted [&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;#{&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;mp3_track&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;tag&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;album&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;]&amp;quot;&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h2 id=&quot;automating-tasks&quot;&gt;Automating tasks&lt;/h2&gt;

&lt;p&gt;I resisted very long to learn the bash, but there were so many tasks over the years which I didn’t
do because t gives me the heebie-jeebies to do the same thing over and over again. After one weekend
studying the open book “The Linux Command Line” by William E. Shotts I caught fire.  For a long time
I messed my desktop up with tons of images with ugly names, so I wrote a script to change this.&lt;/p&gt;

&lt;p&gt;I have a bunch of images with ugly name, so I wrote a script to change this.  Each command has it’s
purpose you have to learn its syntax. Here is some sample code (pretty neat):&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;sh&quot;&gt;&lt;span class=&quot;c&quot;&gt;#!/bin/bash&lt;/span&gt;
&lt;span class=&quot;nv&quot;&gt;z&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;sb&quot;&gt;`&lt;/span&gt;ls | wc -l&lt;span class=&quot;sb&quot;&gt;`&lt;/span&gt;
&lt;span class=&quot;nv&quot;&gt;z&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;0

&lt;span class=&quot;k&quot;&gt;for &lt;/span&gt;i in *.jpg; &lt;span class=&quot;k&quot;&gt;do &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;z&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$[$z&lt;/span&gt;+1&lt;span class=&quot;o&quot;&gt;]&lt;/span&gt;; mv &lt;span class=&quot;s2&quot;&gt;&amp;quot;$i&amp;quot;&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;##*.jpg&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$z&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\_&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$1&lt;/span&gt;.jpg; &lt;span class=&quot;nb&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$i&lt;/span&gt; ; &lt;span class=&quot;k&quot;&gt;done&lt;/span&gt; &lt;span class=&quot;c&quot;&gt;# replace watermark_ (prefix)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;It’s like Lego, you have these and that, plug it together to create something
new. For my diplom thesis I create a Rakefile (the modern version of make
written completely in ruby):&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;&lt;span class=&quot;n&quot;&gt;desc&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;Create a directory for the compiled classes&amp;quot;&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;task&lt;/span&gt; &lt;span class=&quot;ss&quot;&gt;:create_class_directory&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;do&lt;/span&gt;
  &lt;span class=&quot;nb&quot;&gt;system&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&amp;#39;mkdir -p classes&amp;#39;&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;# overwrite the directory if it exist&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;

&lt;span class=&quot;n&quot;&gt;desc&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;compile the plugin and put the files in the directory&amp;quot;&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;task&lt;/span&gt; &lt;span class=&quot;ss&quot;&gt;:compile_plugin&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;do&lt;/span&gt;
  &lt;span class=&quot;nb&quot;&gt;system&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&amp;#39;fsc -d classes Plugin.scala&amp;#39;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;

&lt;span class=&quot;n&quot;&gt;desc&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;copy the plugin descriptor&amp;quot;&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;task&lt;/span&gt; &lt;span class=&quot;ss&quot;&gt;:copy_plugin_descriptor&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;do&lt;/span&gt;
  &lt;span class=&quot;nb&quot;&gt;system&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&amp;#39;cp scalac-plugin.xml classes&amp;#39;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;

&lt;span class=&quot;n&quot;&gt;desc&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;create the jar file&amp;quot;&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;task&lt;/span&gt; &lt;span class=&quot;ss&quot;&gt;:create_jar_file&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;do&lt;/span&gt;
  &lt;span class=&quot;nb&quot;&gt;system&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&amp;#39;cd classes; jar cf ../divbyzero.jar .&amp;#39;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;

&lt;span class=&quot;n&quot;&gt;desc&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;create environment&amp;quot;&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;task&lt;/span&gt; &lt;span class=&quot;ss&quot;&gt;:create_environment&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;ss&quot;&gt;:create_class_directory&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;ss&quot;&gt;:compile_plugin&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;ss&quot;&gt;:copy_plugin_descriptor&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;ss&quot;&gt;:create_jar_file&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;do&lt;/span&gt;
  &lt;span class=&quot;nb&quot;&gt;puts&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&amp;#39;done with creating the jar file ...&amp;#39;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;

&lt;span class=&quot;n&quot;&gt;desc&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;compile the traits&amp;quot;&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;task&lt;/span&gt; &lt;span class=&quot;ss&quot;&gt;:compile_traits&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;do&lt;/span&gt;
  &lt;span class=&quot;nb&quot;&gt;system&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&amp;#39;fsc -d classes TraitProgrammingHelper.scala&amp;#39;&lt;/span&gt;
  &lt;span class=&quot;nb&quot;&gt;system&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&amp;#39;fsc -d classes TraitUpdaterHelper.scala&amp;#39;&lt;/span&gt;
  &lt;span class=&quot;nb&quot;&gt;system&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&amp;#39;fsc -d classes TraitArithmeticRulesHelper.scala&amp;#39;&lt;/span&gt;
  &lt;span class=&quot;nb&quot;&gt;system&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&amp;#39;fsc -d classes TraitBasicRulesHelper.scala&amp;#39;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;

&lt;span class=&quot;n&quot;&gt;desc&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;create environment with traits&amp;quot;&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;task&lt;/span&gt; &lt;span class=&quot;ss&quot;&gt;:create_environment_complete&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;ss&quot;&gt;:compile_traits&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;ss&quot;&gt;:create_environment&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;]&lt;/span&gt;

&lt;span class=&quot;n&quot;&gt;desc&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;run example file&amp;quot;&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;task&lt;/span&gt; &lt;span class=&quot;ss&quot;&gt;:test&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;ss&quot;&gt;:create_environment_complete&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;do&lt;/span&gt;
  &lt;span class=&quot;nb&quot;&gt;system&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&amp;#39;scalac -Xplugin:divbyzero.jar Example.scala&amp;#39;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;

&lt;span class=&quot;c1&quot;&gt;# ...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h2 id=&quot;head-scratching-with-scala&quot;&gt;Head scratching with Scala&lt;/h2&gt;

&lt;p&gt;I learned this language for my diploma-thesis, otherwise I still wouldn’t put a thumb on FP. So far
I must say that it was a good decision to learn an functional language. Scala showed me how to use
&lt;em&gt;chained function&lt;/em&gt;, &lt;em&gt;anonymous functions&lt;/em&gt;, &lt;em&gt;currying&lt;/em&gt;, type bounds and many more constructs. In the
beginning my head howls like a steam-tank, there was so much new terrain for me that I need several
breaks to get used to it. After many hours of happy cramming I got surprisingly insights in doing
OOP better. That was is, what the Pragmatic Programmers were preaching. To get new insight in a
technology you have to regard it’s counterpart. Don’t hesitate to do something you would never do,
you gain experience and more confidence in your profession.&lt;/p&gt;

&lt;p&gt;Here is some of Scala code:&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;scala&quot;&gt;&lt;span class=&quot;k&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;Reference&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;T&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;contents&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;T&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;_&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;set&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;T&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;contents&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;value&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;T&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;contents&lt;/span&gt;
&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;object&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;IntegerReference&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;args&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;Array&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;String&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;])&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;val&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;cell&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;Reference&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;Int&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;]&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;cell&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;set&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;13&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;println&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;Reference contains the half of &amp;quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;cell&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;get&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;))&lt;/span&gt;
  &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;

&lt;p&gt;This was my first essay. I tried to cover the things which whom I’m actually dealing. I presented my
wide route from my programming experience so that you can see, how the things evolved for me. I
always get my hands dirty and try to roll up my sleeves to get a touch about the newest technology.
I think through adventuring you become each day a little bit better then yesterday.&lt;/p&gt;

&lt;p&gt;Thanks to &lt;strong&gt;Hanna Schuett&lt;/strong&gt; for reading an earlier draft of this post.&lt;/p&gt;

&lt;h2 id=&quot;further-reading&quot;&gt;Further reading&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://andy.pragprog.com/&quot; title=&quot;Andy Hunt&quot;&gt;Andy Hunt&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Behavior_driven_development&quot; title=&quot;Behavior Driven Development&quot;&gt;Behavior Driven Development&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.capify.org&quot; title=&quot;Capistrano&quot;&gt;Capistrano&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://chadfowler.com/&quot; title=&quot;Chad Fowler&quot;&gt;Chad Fowler&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Continuous_integration&quot; title=&quot;Continuous Integration&quot;&gt;Continuous Integration&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.dccomics.com&quot; title=&quot;DC comics&quot;&gt;DC comics&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Domain-specific_language&quot; title=&quot;DSL&quot;&gt;DSL&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://pragdave.pragprog.com&quot; title=&quot;Dave Thomas&quot;&gt;Dave Thomas&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Encapsulation_%28object-oriented_programming%29&quot; title=&quot;Encapsulation&quot;&gt;Encapsulation&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/FP_%28programming_language%29&quot; title=&quot;FP&quot;&gt;FP&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.sanrioeurope.com/&quot; title=&quot;Hello Kitty&quot;&gt;Hello Kitty&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Integrated_development_environment&quot; title=&quot;IDE&quot;&gt;IDE&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Inheritance_%28object-oriented_programming%29&quot; title=&quot;Inheritance&quot;&gt;Inheritance&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Interface_%28computer_science%29&quot; title=&quot;Interfaces&quot;&gt;Interfaces&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.java.com/en/&quot; title=&quot;Java&quot;&gt;Java&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.lego.com&quot; title=&quot;Lego&quot;&gt;Lego&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.inf.ethz.ch/personal/wirth&quot; title=&quot;Niklaus Wirth&quot;&gt;Niklaus Wirth&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Object-oriented_programming&quot; title=&quot;OOP&quot;&gt;OOP&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Object_Pascal&quot; title=&quot;Object Pascak&quot;&gt;Object Pascak&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Subtype_polymorphism&quot; title=&quot;Polymorphism&quot;&gt;Polymorphism&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://pragprog.com/titles/tpp/the-pragmatic-programmer&quot; title=&quot;Pragmatic Programmer&quot;&gt;Pragmatic Programmer&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Recursion#Recursion_in_computer_science&quot; title=&quot;Recursion&quot;&gt;Recursion&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://rubyonrails.org/screencasts&quot; title=&quot;Ruby on Rails&quot;&gt;Ruby on Rails&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.scala-lang.org/&quot; title=&quot;Scala&quot;&gt;Scala&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Test-driven_development&quot; title=&quot;Text-Driven Development&quot;&gt;Text-Driven Development&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://gd.tuwien.ac.at/linuxcommand.org/tlcl.php&quot; title=&quot;The Linux commandline&quot;&gt;The Linux commandline&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.pragprog.com/titles/cfcar2/the-passionate-programmer&quot; title=&quot;The Passionate Programmer&quot;&gt;The Passionate Programmer&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Generic_programming#Templates_in_C.2B.2B&quot; title=&quot;generic&quot;&gt;generic&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Pointer_%28computing%29&quot; title=&quot;pointer&quot;&gt;pointer&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://rake.rubyforge.org/&quot; title=&quot;rake&quot;&gt;rake&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Recursive_descent_parser&quot; title=&quot;recursive descendant&quot;&gt;recursive descendant&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.ubuntu.com&quot; title=&quot;ubuntu&quot;&gt;ubuntu&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Video_game&quot; title=&quot;video games&quot;&gt;video games&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.games-workshop.com&quot; title=&quot;warhammer&quot;&gt;warhammer&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
    </entry>
  
    <entry>
      <title>Method alias in ruby</title>
      <link href="http://wikimatze.de/method-alias-in-ruby.html"/>
      <updated>2011-10-01T00:00:00+02:00</updated>
      <id>http://wikimatze.de/method-alias-in-ruby.html</id>
      <content type="html">&lt;p&gt;In ruby you can create aliases for a method and variable name. This can be helpful if you want to
override the behavior of some method without changing the origin implementation of it.
&lt;em&gt;alias_method&lt;/em&gt; take a &lt;em&gt;new_name&lt;/em&gt; as a copy name of the &lt;em&gt;old_name&lt;/em&gt; and it has the following syntax.&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;&lt;span class=&quot;n&quot;&gt;alias_attribute&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;new_name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;old_name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Here is a small example:&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;&lt;span class=&quot;k&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;Davi&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;capital&lt;/span&gt;
    &lt;span class=&quot;nb&quot;&gt;puts&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;Karaz-a-Karak&amp;quot;&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;

  &lt;span class=&quot;n&quot;&gt;alias_method&lt;/span&gt; &lt;span class=&quot;ss&quot;&gt;:orig_capital&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;ss&quot;&gt;:capital&lt;/span&gt;

  &lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;capital&lt;/span&gt;
    &lt;span class=&quot;nb&quot;&gt;puts&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;Karaz-a-Karak rebuild&amp;quot;&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;orig_capital&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;

&lt;span class=&quot;n&quot;&gt;davi&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;Davi&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;new&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;davi&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;capital&lt;/span&gt;

&lt;span class=&quot;c1&quot;&gt;# output&lt;/span&gt;
&lt;span class=&quot;s2&quot;&gt;&amp;quot;Karaz-a-Karak rebuild&amp;quot;&lt;/span&gt;
&lt;span class=&quot;s2&quot;&gt;&amp;quot;Karaz-a-Karak&amp;quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h2 id=&quot;what-is-the-difference-between-alias-and-aliasmethod&quot;&gt;What is the difference between alias and alias_method&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;alias&lt;/em&gt; is more general than &lt;em&gt;alias_method&lt;/em&gt; and can be used to create an alias for global variable,
regular expression backreference (like $&amp;amp;) or an existing method. Class variables, local variables,
instance variables and constants may not be aliased.&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;&lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;khemri_city&lt;/span&gt;
 &lt;span class=&quot;nb&quot;&gt;puts&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;Nehekhara&amp;quot;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;alias&lt;/span&gt; &lt;span class=&quot;ss&quot;&gt;:orig_khemri_city&lt;/span&gt; &lt;span class=&quot;ss&quot;&gt;:khemri_city&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;khemri_city&lt;/span&gt;
 &lt;span class=&quot;nb&quot;&gt;puts&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;Nehekhara new&amp;quot;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;

&lt;span class=&quot;n&quot;&gt;khemri_city&lt;/span&gt;

&lt;span class=&quot;c1&quot;&gt;# output&lt;/span&gt;
&lt;span class=&quot;s2&quot;&gt;&amp;quot;Nehekhara&amp;quot;&lt;/span&gt;
&lt;span class=&quot;s2&quot;&gt;&amp;quot;Nehekhara new&amp;quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;&lt;em&gt;alias_method&lt;/em&gt; must return must be called on a method. So &lt;em&gt;alias&lt;/em&gt; is
more general than &lt;em&gt;alias_method&lt;/em&gt;.&lt;/p&gt;

&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;

&lt;p&gt;It is possible with &lt;em&gt;alias_method&lt;/em&gt; to reopen a class, override a method call and you can still use
the original call. In order to maintain backward compatibility &lt;em&gt;alias_method&lt;/em&gt; are used in plugins,
extensions, deprecating variables. &lt;em&gt;Alias_method&lt;/em&gt; can be used in Rails to define action with
duplicated content and remove dublicated code.&lt;/p&gt;

&lt;p&gt;Here the duplicated variant:&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;&lt;span class=&quot;k&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;UsersController&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;ApplicationController&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;home&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;list&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;

  &lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;find&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;list&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;

  &lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;search&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;list&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;The DRY variant:&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;&lt;span class=&quot;k&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;UsersController&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;ApplicationController&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;home&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;list&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;

  &lt;span class=&quot;n&quot;&gt;alias_method&lt;/span&gt; &lt;span class=&quot;ss&quot;&gt;:find&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;ss&quot;&gt;:home&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;alias_method&lt;/span&gt; &lt;span class=&quot;ss&quot;&gt;:search&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;ss&quot;&gt;:home&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h2 id=&quot;further-reading&quot;&gt;Further reading&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.ruby-doc.org/core/classes/Module.html#M000447&quot; title=&quot;alias_method&quot;&gt;alias_method&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://ruby.about.com/od/rubyfeatures/a/aliasing.html&quot; title=&quot;alias&quot;&gt;alias&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
    </entry>
  
    <entry>
      <title>Why I use Jekyll for blogging</title>
      <link href="http://wikimatze.de/why-i-use-jekyll-for-blogging.html"/>
      <updated>2011-07-03T00:00:00+02:00</updated>
      <id>http://wikimatze.de/why-i-use-jekyll-for-blogging.html</id>
      <content type="html">&lt;p&gt;For several years I wanted to write and tried many different plattforms like &lt;a href=&quot;:upload_url_public&quot; title=&quot;wordpress link&quot;&gt;wordpress&lt;/a&gt;, &lt;a href=&quot;http://www.blogger.com&quot; title=&quot;blogger link&quot;&gt;blogger&lt;/a&gt;, or &lt;a href=&quot;http://www.tumblr.com/&quot; title=&quot;tumblr link&quot;&gt;tumblr&lt;/a&gt;. The main problem which kept me away from writing was just the fact, that every time I want to write I just had to do it in a new environment and not in my favorite editor &lt;a href=&quot;http://www.vim.org/&quot; title=&quot;vim link&quot;&gt;vim&lt;/a&gt;. Every system gives me the freedom to extend it in several ways but in the end it didn&amp;#8217;t provide me the freedom to change every tiny piece I want. With &lt;a href=&quot;http://jekyllrb.com&quot; title=&quot;jekyll&quot;&gt;jekyll&lt;/a&gt; I can use my favorite text editor and it really &amp;#8220;&lt;strong&gt;turned me into a text monster&lt;/strong&gt;&amp;#8221;. This description sounds like a holy grail, but let me explain its abilities in the following sections.&lt;/p&gt;
&lt;h2&gt;What jekyll is&lt;/h2&gt;
&lt;p&gt;Jekyll is a static site generator written in &lt;a href=&quot;http://www.ruby-lang.org/en/&quot; title=&quot;ruby gem&quot;&gt;ruby&lt;/a&gt;. It generates static html pages. The page is presented through several templates and then fires the whole site, were articles are written in a text markup language like &lt;a href=&quot;http://redcloth.org/textile&quot; title=&quot;Textile&quot;&gt;Textile&lt;/a&gt; or &lt;a href=&quot;http://daringfireball.net/projects/markdown/&quot; title=&quot;Markdown link&quot;&gt;Markdown&lt;/a&gt;, through the &lt;a href=&quot;http://www.liquidmarkup.org/&quot; title=&quot;liquid converters&quot;&gt;liquid converters&lt;/a&gt; to generate fully generated compiled website. Don&amp;#8217;t think that it will be so easy for you to do it. First of all you have to learn either Textile or Markdown. I chose textile for writing my posts because I use Markdown to create the &lt;span class=&quot;caps&quot;&gt;README&lt;/span&gt; files for my github account.&lt;/p&gt;
&lt;h2&gt;Setting up the environment&lt;/h2&gt;
&lt;p&gt;You need to have a valid ruby and &lt;a href=&quot;http://rubygems.org/&quot; title=&quot;ruby gems&quot;&gt;ruby gems&lt;/a&gt; installation on your machine. A simple &lt;code&gt;gem install jekyll&lt;/code&gt; will install the following gems:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;a href=&quot;https://github.com/TwP/directory_watcher&quot; title=&quot;directory_watcher gem&quot;&gt;directory_watcher&lt;/a&gt; (gives a list of files which change in some intervals)&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;https://github.com/tobi/liquid&quot; title=&quot;liquid gem&quot;&gt;liquid&lt;/a&gt; (rendering templates in a safe manner)&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;https://github.com/ahoward/open4&quot; title=&quot;open4 gem&quot;&gt;open4&lt;/a&gt; (creates a child process to handle &lt;em&gt;pid&lt;/em&gt;, &lt;em&gt;stdout&lt;/em&gt;, etc.)&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://maruku.rubyforge.org/&quot; title=&quot;maruku gem&quot;&gt;maruku&lt;/a&gt; (Markdown interpreter)&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://rubygems.org/gems/classifier&quot; title=&quot;classifier gem&quot;&gt;classifier&lt;/a&gt; (is a Bayes implementation and can be used semantic indexing like to display related post &amp;#8211; this mechanism is used in machine learning)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To get nice syntax highlighting for your code you have to install &lt;a href=&quot;http://pygments.org/&quot; title=&quot;pygments&quot;&gt;pygments&lt;/a&gt; via &lt;code&gt;sudo apt-get install python-pygments&lt;/code&gt; on Ubuntu/Debian. On the &lt;a href=&quot;https://github.com/mojombo/jekyll/wiki/install&quot; title=&quot;install link for jekyll&quot;&gt;install page&lt;/a&gt; you can get more information about how to setup jekyll.&lt;/p&gt;
&lt;h2&gt;The directories and styles&lt;/h2&gt;
&lt;p&gt;Here is the basic layout of a typical jekyll project:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;strong&gt;_includes&lt;/strong&gt;: Small snippets which can be used in every place of the page.&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;_layouts&lt;/strong&gt;: You can define layouts for post entries and the general default layout. Posts can have the special &lt;strong&gt;Yaml Front Matter&lt;/strong&gt;.&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;_posts&lt;/strong&gt;: Contains all posts in your specified markup language&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;_config.yml&lt;/strong&gt;: Is a file to store configuration data like the styling of the urls, or some global variables. It is also possible to define own variables which can be used as global things on other pages.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Other files can just put on the root directory like an &lt;em&gt;atom.xml&lt;/em&gt; file (for &lt;span class=&quot;caps&quot;&gt;RSS&lt;/span&gt; feed) or &lt;em&gt;404.html&lt;/em&gt; page. For example my &lt;code&gt;post.html&lt;/code&gt; has the following layout:&lt;/p&gt;
&lt;div&gt;&lt;script src='https://gist.github.com/1000906.js?file='&gt;&lt;/script&gt;&lt;br /&gt;
&lt;noscript&gt;&lt;pre&gt;&lt;code&gt;---
layout: default
---

&amp;amp;lt;div id=&amp;amp;quot;post&amp;amp;quot;&amp;amp;gt;
  {{ content }}
  {% include tweet.html %}
  &amp;amp;lt;div class=&amp;amp;quot;clearer&amp;amp;quot;&amp;amp;gt;&amp;amp;lt;/div&amp;amp;gt;
  {% include comments.html %}
&amp;amp;lt;/div&amp;amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/noscript&gt;&lt;/div&gt;
&lt;p&gt;The lines between &lt;code&gt;---&lt;/code&gt; mark a special &lt;a href=&quot;https://github.com/mojombo/jekyll/wiki/YAML-Front-Matter&quot; title=&quot;Yaml&quot;&gt;Yaml Front Matter&lt;/a&gt; file. This block is treated as a special block in jekyll and can contain different components. The &lt;code&gt;{ {content} }&lt;/code&gt; stands for the content of a post entry.&lt;/p&gt;
&lt;h2&gt;Creating a layout&lt;/h2&gt;
&lt;p&gt;Here is the main template for my blog.&lt;/p&gt;
&lt;div&gt;&lt;script src='https://gist.github.com/1001155.js?file='&gt;&lt;/script&gt;&lt;br /&gt;
&lt;noscript&gt;&lt;pre&gt;&lt;code&gt;&amp;amp;lt;!DOCTYPE html&amp;amp;gt;
&amp;amp;lt;html xmlns=&amp;amp;quot;http://www.w3.org/1999/xhtml&amp;amp;quot; xml:lang=&amp;amp;quot;en&amp;amp;quot; lang=&amp;amp;quot;en-us&amp;amp;quot;&amp;amp;gt;

&amp;amp;lt;head&amp;amp;gt;
  &amp;amp;lt;meta http-equiv=&amp;amp;quot;content-type&amp;amp;quot; content=&amp;amp;quot;text/html; charset=utf-8&amp;amp;quot; /&amp;amp;gt;
  &amp;amp;lt;title&amp;amp;gt;{{ page.title }}&amp;amp;lt;/title&amp;amp;gt;
  &amp;amp;lt;meta name=&amp;amp;quot;author&amp;amp;quot; content=&amp;amp;quot;Matthias Guenther&amp;amp;quot; /&amp;amp;gt;
  &amp;amp;lt;meta name=&amp;amp;quot;description&amp;amp;quot; content=&amp;amp;quot;Homepage of Matthias Guenther - software developer, writer, hiker, jogger and mobile apps lover&amp;amp;quot; /&amp;amp;gt;
  &amp;amp;lt;meta name=&amp;amp;quot;keywords&amp;amp;quot; content=&amp;amp;quot;software developer, writer, hiker, jogger and mobile apps lover&amp;amp;quot; /&amp;amp;gt;
  &amp;amp;lt;meta name=&amp;amp;quot;generator&amp;amp;quot; content=&amp;amp;quot;jekyll&amp;amp;quot; /&amp;amp;gt;

  &amp;amp;lt;link href=&amp;amp;quot;/atom.xml&amp;amp;quot; rel=&amp;amp;quot;alternate&amp;amp;quot; title=&amp;amp;quot;Matthias Guenther&amp;amp;quot; type=&amp;amp;quot;application/atom+xml&amp;amp;quot; /&amp;amp;gt;

  &amp;amp;lt;!-- syntax highlighting pygments --&amp;amp;gt;
  &amp;amp;lt;link rel=&amp;amp;quot;stylesheet&amp;amp;quot; href=&amp;amp;quot;/css/stylesheets/syntax.css&amp;amp;quot; type=&amp;amp;quot;text/css&amp;amp;quot; /&amp;amp;gt;

  &amp;amp;lt;!-- my own css --&amp;amp;gt;
  &amp;amp;lt;link rel=&amp;amp;quot;stylesheet&amp;amp;quot; href=&amp;amp;quot;/css/stylesheets/site.css&amp;amp;quot; type=&amp;amp;quot;text/css&amp;amp;quot; media=&amp;amp;quot;screen, projection&amp;amp;quot; /&amp;amp;gt;

  &amp;amp;lt;link rel=&amp;amp;quot;shortcut icon&amp;amp;quot; href=&amp;amp;quot;/images/favicon.png&amp;amp;quot; type=&amp;amp;quot;image/x-icon&amp;amp;quot; /&amp;amp;gt;
  &amp;amp;lt;script src=&amp;amp;quot;/js/FancyZoom.js&amp;amp;quot; type=&amp;amp;quot;text/javascript&amp;amp;quot;&amp;amp;gt;&amp;amp;lt;/script&amp;amp;gt;
  &amp;amp;lt;script src=&amp;amp;quot;/js/FancyZoomHTML.js&amp;amp;quot; type=&amp;amp;quot;text/javascript&amp;amp;quot;&amp;amp;gt;&amp;amp;lt;/script&amp;amp;gt;

  &amp;amp;lt;!-- iphone settings and css --&amp;amp;gt;
  &amp;amp;lt;meta name=&amp;amp;quot;viewport&amp;amp;quot; content=&amp;amp;quot;user-scalable=no, width=device-width&amp;amp;quot; /&amp;amp;gt;
  &amp;amp;lt;link rel=&amp;amp;quot;stylesheet&amp;amp;quot; type=&amp;amp;quot;text/css&amp;amp;quot; href=&amp;amp;quot;/css/iphone.css&amp;amp;quot; media=&amp;amp;quot;only screen and (max-width: 470px)&amp;amp;quot; /&amp;amp;gt;
&amp;amp;lt;/head&amp;amp;gt;

&amp;amp;lt;body onLoad=&amp;amp;quot;setupZoom();&amp;amp;quot;&amp;amp;gt;
  &amp;amp;lt;div class=&amp;amp;quot;site&amp;amp;quot;&amp;amp;gt;
    &amp;amp;lt;a name=&amp;amp;quot;top&amp;amp;quot;&amp;amp;gt;&amp;amp;lt;/a&amp;amp;gt;
    &amp;amp;lt;div class=&amp;amp;quot;title&amp;amp;quot;&amp;amp;gt;
      &amp;amp;lt;a id=&amp;amp;quot;homelink&amp;amp;quot; href=&amp;amp;quot;/archiv.html&amp;amp;quot;&amp;amp;gt;&amp;amp;amp;raquo; archive&amp;amp;lt;/a&amp;amp;gt;
      &amp;amp;lt;a id=&amp;amp;quot;homelink&amp;amp;quot; href=&amp;amp;quot;/about.html&amp;amp;quot;&amp;amp;gt;&amp;amp;amp;raquo; about&amp;amp;lt;/a&amp;amp;gt;
      &amp;amp;lt;a id=&amp;amp;quot;homelink&amp;amp;quot; href=&amp;amp;quot;/index.html&amp;amp;quot;&amp;amp;gt;&amp;amp;amp;raquo; home&amp;amp;lt;/a&amp;amp;gt;
      &amp;amp;lt;h1 id=&amp;amp;quot;sitetitle&amp;amp;quot;&amp;amp;gt;wikimatze&amp;amp;lt;/h1&amp;amp;gt;
    &amp;amp;lt;/div&amp;amp;gt;
    {{ content }}
    &amp;amp;lt;div class=&amp;amp;quot;clearer&amp;amp;quot;&amp;amp;gt;&amp;amp;lt;/div&amp;amp;gt;
    &amp;amp;lt;div class=&amp;amp;quot;footer&amp;amp;quot;&amp;amp;gt;
      © Matthias Günther | &amp;amp;lt;a rel=&amp;amp;quot;nofollow&amp;amp;quot; href=&amp;amp;quot;{{ site.ineturl }}{{ page.url }}#top&amp;amp;quot;&amp;amp;gt;&amp;amp;amp;raquo;top&amp;amp;lt;/a&amp;amp;gt;
    &amp;amp;lt;/div&amp;amp;gt;
  &amp;amp;lt;/div&amp;amp;gt;
&amp;amp;lt;/body&amp;amp;gt;

&amp;amp;lt;/html&amp;amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/noscript&gt;&lt;/div&gt;
&lt;p&gt;I used the meta-language &lt;a href=&quot;http://sass-lang.com/&quot; title=&quot;sass link&quot;&gt;Sass&lt;/a&gt; to create my &lt;span class=&quot;caps&quot;&gt;CSS&lt;/span&gt;. There is one problem with Sass: You have to compile it every time you made a change. Fortunately, there is the &lt;a href=&quot;http://compass-style.org/&quot; title=&quot;compass gem&quot;&gt;compass gem&lt;/a&gt; which always compiles my sass file when I change it. When I build my page I started with &lt;code&gt;compass watch css/ &amp;amp;&lt;/code&gt; a command to automate Sass building. This is very handy when changing the layout.&lt;/p&gt;
&lt;h2&gt;Static webpages &amp;#8211; how to include dynamic content&lt;/h2&gt;
&lt;p&gt;Jekyll only creates static webpages but with the help of Javascript it is possible to add a &lt;a href=&quot;http://disqus.com/&quot; title=&quot;disqus link&quot;&gt;Disqus&lt;/a&gt; comment platform. You just have to create an account and then use the following snippet:&lt;/p&gt;
&lt;div&gt;&lt;script src='https://gist.github.com/1001268.js?file='&gt;&lt;/script&gt;&lt;br /&gt;
&lt;noscript&gt;&lt;pre&gt;&lt;code&gt;&amp;amp;lt;div id=&amp;amp;quot;disqus_thread&amp;amp;quot;&amp;amp;gt;&amp;amp;lt;/div&amp;amp;gt;
  &amp;amp;lt;script type=&amp;amp;quot;text/javascript&amp;amp;quot;&amp;amp;gt;
  /* * * CONFIGURATION VARIABLES: EDIT BEFORE PASTING INTO YOUR WEBPAGE * * */
  var disqus_shortname = 'wikimatze'; // required: replace example with your forum shortname

  // The following are highly recommended additional parameters. Remove the slashes in front to use.
  // var disqus_identifier = 'unique_dynamic_id_1234';
  // var disqus_url = 'http://example.com/permalink-to-page.html';

  /* * * DON'T EDIT BELOW THIS LINE * * */
  (function() {
    var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
    dsq.src = 'http://' + disqus_shortname + '.disqus.com/embed.js';
    (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
  })();
  &amp;amp;lt;/script&amp;amp;gt;
&amp;amp;lt;noscript&amp;amp;gt;Please enable JavaScript to view the &amp;amp;lt;a href=&amp;amp;quot;http://disqus.com/?ref_noscript&amp;amp;quot;&amp;amp;gt;comments powered by Disqus.&amp;amp;lt;/a&amp;amp;gt;&amp;amp;lt;/noscript&amp;amp;gt;
&amp;amp;lt;a href=&amp;amp;quot;http://disqus.com&amp;amp;quot; class=&amp;amp;quot;dsq-brlink&amp;amp;quot;&amp;amp;gt;blog comments powered by &amp;amp;lt;span class=&amp;amp;quot;logo-disqus&amp;amp;quot;&amp;amp;gt;Disqus&amp;amp;lt;/span&amp;amp;gt;&amp;amp;lt;/a&amp;amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/noscript&gt;&lt;/div&gt;
&lt;p&gt;It is best to put this piece of code in an extra file under your _includes directory and then add it in your template for posts. Now the comment function is available in all your posts.&lt;/p&gt;
&lt;h2&gt;Deployment&lt;/h2&gt;
&lt;p&gt;There is a &lt;a href=&quot;https://github.com/mojombo/jekyll/wiki/Deployment&quot; title=&quot;a&quot;&gt;bunch&lt;/a&gt; of deployment strategies: rsync, ftp, Rack-Jekyll (deploy on Heroku, EC2, etc.). I prefer ftp (with the &lt;a href=&quot;https://github.com/dmathieu/glynn&quot; title=&quot;glynn gem&quot;&gt;glynn&lt;/a&gt;) because it was easy to install and worked great with my server configuration in my &lt;strong&gt;_config.yml&lt;/strong&gt;.&lt;/p&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Just look on &lt;a href=&quot;https://github.com/mojombo/jekyll/wiki/Sites&quot; title=&quot;link to other pages&quot;&gt;other pages&lt;/a&gt; what is possible with Jekyll. You can learn many new things by looking at other jekyll blogs and copy what you need. I love to write a little bit and after I finished an article just perform &lt;code&gt;rake deploy&lt;/code&gt; to upload my blog.&lt;/p&gt;</content>
    </entry>
  
</feed>

