<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">

  <title><![CDATA[Above, Below, and Beyond Tech Talk]]></title>
  <link href="http://netzwerg.ch/atom.xml" rel="self"/>
  <link href="http://netzwerg.ch/"/>
  <updated>2015-03-22T08:38:52+01:00</updated>
  <id>http://netzwerg.ch/</id>
  <author>
    <name><![CDATA[Rahel Lüthy]]></name>
    
  </author>
  <generator uri="http://octopress.org/">Octopress</generator>

  
  <entry>
    <title type="html"><![CDATA[JavaFX 3D Line]]></title>
    <link href="http://netzwerg.ch/blog/2015/03/22/javafx-3d-line/"/>
    <updated>2015-03-22T08:26:59+01:00</updated>
    <id>http://netzwerg.ch/blog/2015/03/22/javafx-3d-line</id>
    <content type="html"><![CDATA[<p>I have no experience in 3D programming whatsoever. Last week, I took my first steps in JavaFX 3D, but hit a wall
when I wanted to draw a line between two points: There is no <code>Line</code> shape! The only out-of-the-box <code>Shape3D</code> classes
are <code>Box</code>, <code>Cylinder</code>, <code>Sphere</code>, and <code>MeshView</code> &ndash; wow&hellip;</p>

<p>Well, it shouldn&rsquo;t be too difficult to connect the points with a slender cylinder, right?</p>

<p>I was wrong, it took me an <em>embarrassingly</em> long time to get the trigonometry right :-)</p>

<p>Here&rsquo;s my magic crutch:</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
<span class='line-number'>18</span>
</pre></td><td class='code'><pre><code class='java'><span class='line'><span class="kd">public</span> <span class="n">Cylinder</span> <span class="nf">createConnection</span><span class="o">(</span><span class="n">Point3D</span> <span class="n">origin</span><span class="o">,</span> <span class="n">Point3D</span> <span class="n">target</span><span class="o">)</span> <span class="o">{</span>
</span><span class='line'>    <span class="n">Point3D</span> <span class="n">yAxis</span> <span class="o">=</span> <span class="k">new</span> <span class="nf">Point3D</span><span class="o">(</span><span class="mi">0</span><span class="o">,</span> <span class="mi">1</span><span class="o">,</span> <span class="mi">0</span><span class="o">);</span>
</span><span class='line'>    <span class="n">Point3D</span> <span class="n">diff</span> <span class="o">=</span> <span class="n">target</span><span class="o">.</span><span class="na">subtract</span><span class="o">(</span><span class="n">origin</span><span class="o">);</span>
</span><span class='line'>    <span class="kt">double</span> <span class="n">height</span> <span class="o">=</span> <span class="n">diff</span><span class="o">.</span><span class="na">magnitude</span><span class="o">();</span>
</span><span class='line'>
</span><span class='line'>    <span class="n">Point3D</span> <span class="n">mid</span> <span class="o">=</span> <span class="n">target</span><span class="o">.</span><span class="na">midpoint</span><span class="o">(</span><span class="n">origin</span><span class="o">);</span>
</span><span class='line'>    <span class="n">Translate</span> <span class="n">moveToMidpoint</span> <span class="o">=</span> <span class="k">new</span> <span class="nf">Translate</span><span class="o">(</span><span class="n">mid</span><span class="o">.</span><span class="na">getX</span><span class="o">(),</span> <span class="n">mid</span><span class="o">.</span><span class="na">getY</span><span class="o">(),</span> <span class="n">mid</span><span class="o">.</span><span class="na">getZ</span><span class="o">());</span>
</span><span class='line'>
</span><span class='line'>    <span class="n">Point3D</span> <span class="n">axisOfRotation</span> <span class="o">=</span> <span class="n">diff</span><span class="o">.</span><span class="na">crossProduct</span><span class="o">(</span><span class="n">yAxis</span><span class="o">);</span>
</span><span class='line'>    <span class="kt">double</span> <span class="n">angle</span> <span class="o">=</span> <span class="n">Math</span><span class="o">.</span><span class="na">acos</span><span class="o">(</span><span class="n">diff</span><span class="o">.</span><span class="na">normalize</span><span class="o">().</span><span class="na">dotProduct</span><span class="o">(</span><span class="n">yAxis</span><span class="o">));</span>
</span><span class='line'>    <span class="n">Rotate</span> <span class="n">rotateAroundCenter</span> <span class="o">=</span> <span class="k">new</span> <span class="nf">Rotate</span><span class="o">(-</span><span class="n">Math</span><span class="o">.</span><span class="na">toDegrees</span><span class="o">(</span><span class="n">angle</span><span class="o">),</span> <span class="n">axisOfRotation</span><span class="o">);</span>
</span><span class='line'>
</span><span class='line'>    <span class="n">Cylinder</span> <span class="n">line</span> <span class="o">=</span> <span class="k">new</span> <span class="nf">Cylinder</span><span class="o">(</span><span class="mi">1</span><span class="o">,</span> <span class="n">height</span><span class="o">);</span>
</span><span class='line'>
</span><span class='line'>    <span class="n">line</span><span class="o">.</span><span class="na">getTransforms</span><span class="o">().</span><span class="na">addAll</span><span class="o">(</span><span class="n">moveToMidpoint</span><span class="o">,</span> <span class="n">rotateAroundCenter</span><span class="o">);</span>
</span><span class='line'>
</span><span class='line'>    <span class="k">return</span> <span class="n">line</span><span class="o">;</span>
</span><span class='line'><span class="o">}</span>
</span></code></pre></td></tr></table></div></figure>


<p>To illustrate what&rsquo;s going on, I created a 2D representation of all individual steps, starting off with the creation
of the cylinder. By default, its center is placed at the origin:</p>

<p><img src="http://netzwerg.ch/images/cylinder-1.png" width="150"></p>

<p>The <code>moveToMidpoint</code> transformation moves its center to the final location (the yellow midpoint in the above image):</p>

<p><img src="http://netzwerg.ch/images/cylinder-2.png" width="150"></p>

<p>And finally, the <code>rotateAroundCenter</code> transformation corrects the cylinder&rsquo;s direction:</p>

<p><img src="http://netzwerg.ch/images/cylinder-3.png" width="150"></p>

<p>Obviously, the tricky part is finding the proper axis and angle of rotation. Both are calculated relative
to the <code>yAxis</code> because of the cylinder&rsquo;s initial direction. The <code>axisOfRotation</code> must be perpendicular to the plane
defined by the <code>yAxis</code> and the <code>diff</code> vector. To find such a perpendicular vector, we can (by definition) calculate the
<a href="http://en.wikipedia.org/wiki/Cross_product">cross product</a> of the two vectors. In the 2D case, the result is
equivalent to the z-axis, but in 3D it may be tilted.</p>

<p>The angle is calculated based on the <a href="http://en.wikipedia.org/wiki/Dot_product">dot product</a> (aka scalar product) of
the two vectors, which is defined by</p>

<p><code>A • B = |A| |B| cos(alpha)</code></p>

<p>If <code>A</code> and <code>B</code> are both unit vectors, this becomes</p>

<p><code>A • B = cos(alpha)</code></p>

<p>which we can resolve to</p>

<p><code>alpha = acos(A • B)</code></p>

<p>That&rsquo;s it!</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Scala Gems #9: Regex Extractors]]></title>
    <link href="http://netzwerg.ch/blog/2015/02/27/scala-gems-number-9-regex-extractors/"/>
    <updated>2015-02-27T16:33:55+01:00</updated>
    <id>http://netzwerg.ch/blog/2015/02/27/scala-gems-number-9-regex-extractors</id>
    <content type="html"><![CDATA[<p>Suppose you have a simple date string: <code>"2015-02-27"</code></p>

<p>Regular expressions allow to parse the date and extract parts thereof<sup id="fnref:1"><a href="#fn:1" rel="footnote">1</a></sup>: <code>(\d\d\d\d)-(\d\d)-(\d\d)</code> defines a pattern
which matches the digits and defines capturing groups for the year, month, and day parts.</p>

<p>In Java, a simple example usage would look like this:</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
</pre></td><td class='code'><pre><code class='java'><span class='line'><span class="n">Pattern</span> <span class="n">pattern</span> <span class="o">=</span> <span class="n">Pattern</span><span class="o">.</span><span class="na">compile</span><span class="o">(</span><span class="s">&quot;(\\d\\d\\d\\d)-(\\d\\d)-(\\d\\d)&quot;</span><span class="o">);</span>
</span><span class='line'><span class="n">Matcher</span> <span class="n">matcher</span> <span class="o">=</span> <span class="n">pattern</span><span class="o">.</span><span class="na">matcher</span><span class="o">(</span><span class="s">&quot;2015-02-27&quot;</span><span class="o">);</span>
</span><span class='line'><span class="k">while</span> <span class="o">(</span><span class="n">matcher</span><span class="o">.</span><span class="na">find</span><span class="o">())</span> <span class="o">{</span>
</span><span class='line'>    <span class="n">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="s">&quot;Year: &quot;</span> <span class="o">+</span> <span class="n">matcher</span><span class="o">.</span><span class="na">group</span><span class="o">(</span><span class="mi">1</span><span class="o">));</span>
</span><span class='line'>    <span class="n">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="s">&quot;Month: &quot;</span> <span class="o">+</span> <span class="n">matcher</span><span class="o">.</span><span class="na">group</span><span class="o">(</span><span class="mi">2</span><span class="o">));</span>
</span><span class='line'>    <span class="n">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="s">&quot;Day: &quot;</span> <span class="o">+</span> <span class="n">matcher</span><span class="o">.</span><span class="na">group</span><span class="o">(</span><span class="mi">3</span><span class="o">));</span>
</span><span class='line'><span class="o">}</span>
</span></code></pre></td></tr></table></div></figure>


<p>Accessing the groups by index is rather awkward and error prone. Luckily, Java 7 introduced support for named groups:</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
</pre></td><td class='code'><pre><code class='java'><span class='line'><span class="n">Pattern</span> <span class="n">pattern</span> <span class="o">=</span> <span class="n">Pattern</span><span class="o">.</span><span class="na">compile</span><span class="o">(</span><span class="s">&quot;(?&lt;year&gt;\\d\\d\\d\\d)-(?&lt;month&gt;\\d\\d)-(?&lt;day&gt;\\d\\d)&quot;</span><span class="o">);</span>
</span><span class='line'><span class="n">Matcher</span> <span class="n">matcher</span> <span class="o">=</span> <span class="n">pattern</span><span class="o">.</span><span class="na">matcher</span><span class="o">(</span><span class="s">&quot;2015-02-27&quot;</span><span class="o">);</span>
</span><span class='line'><span class="k">while</span> <span class="o">(</span><span class="n">matcher</span><span class="o">.</span><span class="na">find</span><span class="o">())</span> <span class="o">{</span>
</span><span class='line'>    <span class="n">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="s">&quot;Year: &quot;</span> <span class="o">+</span> <span class="n">matcher</span><span class="o">.</span><span class="na">group</span><span class="o">(</span><span class="s">&quot;year&quot;</span><span class="o">));</span>
</span><span class='line'>    <span class="n">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="s">&quot;Month: &quot;</span> <span class="o">+</span> <span class="n">matcher</span><span class="o">.</span><span class="na">group</span><span class="o">(</span><span class="s">&quot;month&quot;</span><span class="o">));</span>
</span><span class='line'>    <span class="n">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="s">&quot;Day: &quot;</span> <span class="o">+</span> <span class="n">matcher</span><span class="o">.</span><span class="na">group</span><span class="o">(</span><span class="s">&quot;day&quot;</span><span class="o">));</span>
</span><span class='line'><span class="o">}</span>
</span></code></pre></td></tr></table></div></figure>


<p>That&rsquo;s better, but I personally don&rsquo;t like how the group names pollute the pattern. Regular expressions are hard
to read already, the Java escape characters add yet more clutter, and the additional <code>?&lt;group&gt;</code> constructs are a
kiss of death.</p>

<p>Let&rsquo;s look at how the same problem can be tackled in Scala:</p>

<p><a href="http://www.scala-lang.org/api/current/index.html#scala.util.matching.Regex">According to the docs</a>, the canonical way
to create a <code>Regex</code> is by using the method <code>r</code>, which is provided implicitly for strings:</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='scala'><span class='line'><span class="k">val</span> <span class="nc">Date</span> <span class="k">=</span> <span class="s">&quot;&quot;&quot;(\d\d\d\d)-(\d\d)-(\d\d)&quot;&quot;&quot;</span><span class="o">.</span><span class="n">r</span>
</span></code></pre></td></tr></table></div></figure>


<p>Note the triple quotes, which allow to use the backslashes without further escaping. While this is nice, the true
advantage of Scala is that regular expressions can be used as extractors in a pattern match. The pattern stays plain
and simple, and yet we have all the freedom to name groups as we please:</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
</pre></td><td class='code'><pre><code class='scala'><span class='line'><span class="s">&quot;2015-02-27&quot;</span> <span class="k">match</span> <span class="o">{</span>
</span><span class='line'>  <span class="k">case</span> <span class="nc">Date</span><span class="o">(</span><span class="n">year</span><span class="o">,</span> <span class="n">month</span><span class="o">,</span> <span class="n">day</span><span class="o">)</span> <span class="k">=&gt;</span>
</span><span class='line'>    <span class="n">println</span><span class="o">(</span><span class="n">s</span><span class="s">&quot;Year: $year&quot;</span><span class="o">)</span>
</span><span class='line'>    <span class="n">println</span><span class="o">(</span><span class="n">s</span><span class="s">&quot;Month: $month&quot;</span><span class="o">)</span>
</span><span class='line'>    <span class="n">println</span><span class="o">(</span><span class="n">s</span><span class="s">&quot;Day: $day&quot;</span><span class="o">)</span>
</span><span class='line'><span class="o">}</span>
</span></code></pre></td></tr></table></div></figure>


<p>Look ma, no clutter!</p>
<div class="footnotes">
<hr/>
<ol>
<li id="fn:1">
<p>Yes, using <a href="https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html">java.time.format.DateTimeFormatter</a> would be easier in this simple case.<a href="#fnref:1" rev="footnote">&#8617;</a></p></li>
</ol>
</div>

]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Java 8 Optional]]></title>
    <link href="http://netzwerg.ch/blog/2015/02/11/java-8-optional/"/>
    <updated>2015-02-11T06:30:00+01:00</updated>
    <id>http://netzwerg.ch/blog/2015/02/11/java-8-optional</id>
    <content type="html"><![CDATA[<p><a href="http://en.wikipedia.org/wiki/Tony_Hoare">Tony Hoare</a>, inventor of the <code>null</code> reference, apologetically called it &ldquo;the billion dollar mistake&rdquo;.</p>

<p>The problem with <code>null</code> is not that it was invented back in 1965, but that we are still struggling with it 50 years later. Any Java developer has probably seen and written code like this:</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
</pre></td><td class='code'><pre><code class='java'><span class='line'><span class="n">String</span> <span class="n">result</span> <span class="o">=</span> <span class="n">service</span><span class="o">.</span><span class="na">find</span><span class="o">(</span><span class="s">&quot;id&quot;</span><span class="o">);</span>
</span><span class='line'><span class="n">String</span> <span class="n">value</span><span class="o">;</span>
</span><span class='line'><span class="k">if</span> <span class="o">(</span><span class="n">result</span> <span class="o">!=</span> <span class="kc">null</span><span class="o">)</span> <span class="o">{</span>
</span><span class='line'>    <span class="n">value</span> <span class="o">=</span> <span class="n">result</span><span class="o">.</span><span class="na">trim</span><span class="o">();</span>
</span><span class='line'><span class="o">}</span> <span class="k">else</span> <span class="o">{</span>
</span><span class='line'>    <span class="n">value</span> <span class="o">=</span> <span class="s">&quot;&lt;absent&gt;&quot;</span><span class="o">;</span>
</span><span class='line'><span class="o">}</span>
</span><span class='line'><span class="n">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="s">&quot;Value: &quot;</span> <span class="o">+</span> <span class="n">value</span><span class="o">);</span>
</span></code></pre></td></tr></table></div></figure>


<p>In fact, most Java monoglots have probably seen and written code like this so many times, that they don&rsquo;t
even see the problem anymore. And yet, with Java 8, they have to deal with a solution: the <code>Optional</code> type.</p>

<p>I recently came across this popular article:
<a href="https://www.voxxed.com/blog/2015/01/embracing-void-6-refined-tricks-dealing-nulls-java/">Embracing the Void: 6 Refined Tricks for Dealing with Nulls in Java</a>.
It gives a nice rundown of strategies around the <code>null</code> reference. Sadly, it discourages the use of Java 8&rsquo;s
<code>Optional</code>. In this post I will explain why the argumentation is flawed.</p>

<h1>Types to the rescue</h1>

<p>One way to re-write the above snippet using <code>Optional</code> could look like this:</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
</pre></td><td class='code'><pre><code class='java'><span class='line'><span class="n">Optional</span><span class="o">&lt;</span><span class="n">String</span><span class="o">&gt;</span> <span class="n">result</span> <span class="o">=</span> <span class="n">service</span><span class="o">.</span><span class="na">find</span><span class="o">(</span><span class="s">&quot;id&quot;</span><span class="o">);</span>
</span><span class='line'><span class="n">String</span> <span class="n">value</span><span class="o">;</span>
</span><span class='line'><span class="k">if</span> <span class="o">(</span><span class="n">result</span><span class="o">.</span><span class="na">isPresent</span><span class="o">())</span> <span class="o">{</span>
</span><span class='line'>    <span class="n">value</span> <span class="o">=</span> <span class="n">result</span><span class="o">.</span><span class="na">get</span><span class="o">().</span><span class="na">trim</span><span class="o">();</span>
</span><span class='line'><span class="o">}</span> <span class="k">else</span> <span class="o">{</span>
</span><span class='line'>    <span class="n">value</span> <span class="o">=</span> <span class="s">&quot;&lt;absent&gt;&quot;</span><span class="o">;</span>
</span><span class='line'><span class="o">}</span>
</span><span class='line'><span class="n">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="s">&quot;Value: &quot;</span> <span class="o">+</span> <span class="n">value</span><span class="o">);</span>
</span></code></pre></td></tr></table></div></figure>


<p>The service returns an <code>Optional&lt;String&gt;</code> and the caller is working her way around it. From a complexity point of
view, the change is argueably not much of an improvement: We still need a mutable <code>value</code> variable, and the overall
logic is roughly the same. And yet, the expressiveness has improved. The signature of the service has clearer
semantics now. Originally, the caller of the service could not distinguish between <em>&ldquo;the implementor of the service
made a programming error&rdquo;</em> and <em>&ldquo;the value has not been found&rdquo;</em> &ndash; both were resulting in <code>null</code>. This is possible now
and &ndash; even better &ndash; the type system <strong>forces</strong> the caller to deal with absents values.</p>

<h1>But wait, there&rsquo;s more</h1>

<p>Now that the semantics are straight, let&rsquo;s make the <code>value</code> variable immutable and eliminate the <code>if .. else</code>
construct:</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
</pre></td><td class='code'><pre><code class='java'><span class='line'><span class="n">Optional</span><span class="o">&lt;</span><span class="n">String</span><span class="o">&gt;</span> <span class="n">result</span> <span class="o">=</span> <span class="n">service</span><span class="o">.</span><span class="na">find</span><span class="o">(</span><span class="s">&quot;id&quot;</span><span class="o">);</span>
</span><span class='line'><span class="kd">final</span> <span class="n">String</span> <span class="n">value</span> <span class="o">=</span> <span class="n">result</span><span class="o">.</span><span class="na">orElseGet</span><span class="o">(()</span> <span class="o">-&gt;</span> <span class="s">&quot;&lt;absent&gt;&quot;</span><span class="o">).</span><span class="na">trim</span><span class="o">();</span>
</span></code></pre></td></tr></table></div></figure>


<p>This code is safer, more expressive, and more concise than the original version, but the <code>() -&gt; "..."</code> clutter makes my Scala heart cringe, so I&rsquo;m offering yet another variant:</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
</pre></td><td class='code'><pre><code class='java'><span class='line'><span class="n">Optional</span><span class="o">&lt;</span><span class="n">String</span><span class="o">&gt;</span> <span class="n">result</span> <span class="o">=</span> <span class="n">service</span><span class="o">.</span><span class="na">find</span><span class="o">(</span><span class="s">&quot;id&quot;</span><span class="o">);</span>
</span><span class='line'><span class="n">String</span> <span class="n">value</span> <span class="o">=</span> <span class="n">result</span><span class="o">.</span><span class="na">map</span><span class="o">(</span><span class="nl">String:</span><span class="o">:</span><span class="n">trim</span><span class="o">).</span><span class="na">orElse</span><span class="o">(</span><span class="s">&quot;&lt;absent&gt;&quot;</span><span class="o">);</span>
</span></code></pre></td></tr></table></div></figure>


<p>We are taking advantage of the fact that <code>Optional</code> behaves like a collection: If it is absent, it behaves like an empty list, the call to <code>map</code> is never executed, and the result is an empty <code>Optional</code> (which we handle via <code>orElse</code>). If the result is present, it behaves like a list with one element, which we trim and return.</p>

<h1>Wrapping legacy code</h1>

<p>Imagine that our original <code>service</code> interface is actually coming from a 3rd party library. You can&rsquo;t simply change
all the signatures to properly return <code>Option&lt;T&gt;</code>. But you can wrap the service calls and create yourself a
<code>null</code>-safe world:</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='java'><span class='line'><span class="n">Optional</span><span class="o">&lt;</span><span class="n">String</span><span class="o">&gt;</span> <span class="n">result</span> <span class="o">=</span> <span class="n">Optional</span><span class="o">.</span><span class="na">ofNullable</span><span class="o">(</span><span class="n">legacyService</span><span class="o">.</span><span class="na">find</span><span class="o">(</span><span class="s">&quot;id&quot;</span><span class="o">));</span>
</span></code></pre></td></tr></table></div></figure>


<h1>Unboxing a cat in a box in a box</h1>

<p>And finally: The holy grail of functional programming, <code>flatMap</code>.</p>

<p>Let&rsquo;s start with a simple <code>User</code> which has an optional middle name:</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
</pre></td><td class='code'><pre><code class='java'><span class='line'><span class="kd">interface</span> <span class="nc">User</span> <span class="o">{</span>
</span><span class='line'>    <span class="n">String</span> <span class="nf">getName</span><span class="o">();</span>
</span><span class='line'>    <span class="n">Option</span><span class="o">&lt;</span><span class="n">String</span><span class="o">&gt;</span> <span class="nf">getMiddleName</span><span class="o">();</span>
</span><span class='line'><span class="o">}</span>
</span></code></pre></td></tr></table></div></figure>


<p>Looking up the user via service is straightforward, but look at all those types:</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
</pre></td><td class='code'><pre><code class='java'><span class='line'><span class="n">Optional</span><span class="o">&lt;</span><span class="n">User</span><span class="o">&gt;</span> <span class="n">result</span> <span class="o">=</span> <span class="n">service</span><span class="o">.</span><span class="na">find</span><span class="o">(</span><span class="s">&quot;id&quot;</span><span class="o">);</span>
</span><span class='line'><span class="n">Optional</span><span class="o">&lt;</span><span class="n">Optional</span><span class="o">&lt;</span><span class="n">String</span><span class="o">&gt;&gt;</span> <span class="n">middleName</span> <span class="o">=</span> <span class="n">result</span><span class="o">.</span><span class="na">map</span><span class="o">(</span><span class="nl">User:</span><span class="o">:</span><span class="n">getMiddleName</span><span class="o">);</span>
</span></code></pre></td></tr></table></div></figure>


<p>The outer <code>Optional</code> is the result of the <code>map</code> call (presence/absence of <code>User</code>), while the inner <code>Optional</code> is
wrapping the middle name value.</p>

<p><code>flatMap</code> is our power tool to unwrap the value from nested <code>Optional</code>s:</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='java'><span class='line'><span class="n">String</span> <span class="n">middleName</span> <span class="o">=</span> <span class="n">result</span><span class="o">.</span><span class="na">flatMap</span><span class="o">(</span><span class="nl">User:</span><span class="o">:</span><span class="n">getMiddleName</span><span class="o">).</span><span class="na">orElse</span><span class="o">(</span><span class="s">&quot;Ada&quot;</span><span class="o">);</span>
</span></code></pre></td></tr></table></div></figure>


<p>So next time you can&rsquo;t remember the semantics of <code>flatMap</code>, just think of all those cats stuck in their nested boxes:</p>

<p><img src="http://netzwerg.ch/images/cat.png"></p>

<p><em>(via <a href="https://twitter.com/channingwalton/status/447778554114502657">@channingwalton</a>)</em></p>

<p>I highly recommend <a href="http://danielwestheide.com/blog/2012/12/19/the-neophytes-guide-to-scala-part-5-the-option-type.html">The Neophyte&rsquo;s Guide to Scala - Part 5: The Option Type</a> for anyone interested in further details.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Guava Lazy Init]]></title>
    <link href="http://netzwerg.ch/blog/2013/11/30/guava-lazy-init/"/>
    <updated>2013-11-30T07:17:00+01:00</updated>
    <id>http://netzwerg.ch/blog/2013/11/30/guava-lazy-init</id>
    <content type="html"><![CDATA[<p>Note to self: How to lazily initialize a value with Java/Guava</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
</pre></td><td class='code'><pre><code class='java'><span class='line'><span class="kd">private</span> <span class="kd">final</span> <span class="n">Supplier</span><span class="o">&lt;</span><span class="n">Integer</span><span class="o">&gt;</span> <span class="n">lazyValue</span> <span class="o">=</span> <span class="n">Suppliers</span><span class="o">.</span><span class="na">memoize</span><span class="o">(</span><span class="k">new</span> <span class="n">Supplier</span><span class="o">&lt;</span><span class="n">Integer</span><span class="o">&gt;()</span> <span class="o">{</span>
</span><span class='line'>  <span class="kd">public</span> <span class="n">Integer</span> <span class="nf">get</span><span class="o">()</span> <span class="o">{</span>
</span><span class='line'>    <span class="k">return</span> <span class="mi">42</span><span class="o">;</span>
</span><span class='line'>  <span class="o">};</span>
</span><span class='line'><span class="o">});</span>
</span></code></pre></td></tr></table></div></figure>



]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Scala Gems #8: Breeze]]></title>
    <link href="http://netzwerg.ch/blog/2012/12/11/scala-gems-number-8-breeze/"/>
    <updated>2012-12-11T14:11:00+01:00</updated>
    <id>http://netzwerg.ch/blog/2012/12/11/scala-gems-number-8-breeze</id>
    <content type="html"><![CDATA[<p>I have recently bought Hilary Mason&rsquo;s <a href="http://shop.oreilly.com/product/0636920017493.do">An Introduction to Machine Learning with Web
Data</a> to refresh my rusty ML
memory. The video class offers a very solid, yet entertaining mix of
coding and theory, and is definitely worth watching.</p>

<p>Hilary is coding in Python, but I took her excellent examples as an inspiration to
further practice my Scala. Based on <a href="http://www.scalanlp.org">Breeze</a>, a set
of libraries for machine learning and numerical computing, I wrote my first little
classifier.</p>

<p>My classifier uses a
<a href="http://en.wikipediaorg/wiki/Support_vector_machine">support vector machine (SVM)</a>
to distinguish images of two distinct categories &mdash; one containing circles,
the other containing crosses. I used 10 different fonts to create the two sets of
test images:</p>

<p><img src="http://raw.github.com/netzwerg/ml-scala/master/src/main/resources/o/0.png">
<img src="http://raw.github.com/netzwerg/ml-scala/master/src/main/resources/o/1.png">
<img src="http://raw.github.com/netzwerg/ml-scala/master/src/main/resources/o/2.png">
<img src="http://raw.github.com/netzwerg/ml-scala/master/src/main/resources/o/3.png">
<img src="http://raw.github.com/netzwerg/ml-scala/master/src/main/resources/o/4.png">
<img src="http://raw.github.com/netzwerg/ml-scala/master/src/main/resources/o/5.png">
<img src="http://raw.github.com/netzwerg/ml-scala/master/src/main/resources/o/6.png">
<img src="http://raw.github.com/netzwerg/ml-scala/master/src/main/resources/o/7.png">
<img src="http://raw.github.com/netzwerg/ml-scala/master/src/main/resources/o/8.png">
<img src="http://raw.github.com/netzwerg/ml-scala/master/src/main/resources/o/9.png"></p>

<p><img src="http://raw.github.com/netzwerg/ml-scala/master/src/main/resources/x/0.png">
<img src="http://raw.github.com/netzwerg/ml-scala/master/src/main/resources/x/1.png">
<img src="http://raw.github.com/netzwerg/ml-scala/master/src/main/resources/x/2.png">
<img src="http://raw.github.com/netzwerg/ml-scala/master/src/main/resources/x/3.png">
<img src="http://raw.github.com/netzwerg/ml-scala/master/src/main/resources/x/4.png">
<img src="http://raw.github.com/netzwerg/ml-scala/master/src/main/resources/x/5.png">
<img src="http://raw.github.com/netzwerg/ml-scala/master/src/main/resources/x/6.png">
<img src="http://raw.github.com/netzwerg/ml-scala/master/src/main/resources/x/7.png">
<img src="http://raw.github.com/netzwerg/ml-scala/master/src/main/resources/x/8.png">
<img src="http://raw.github.com/netzwerg/ml-scala/master/src/main/resources/x/9.png"></p>

<p>I used the red component of each pixel&rsquo;s RGB value as a feature vector. Given that
all images are in grey scale, this seemed like a good first choice. And indeed,
after training the SVM with 9 images of each category, the 10th image can be
classified with a probability of roughly 0.75.</p>

<p>All code can be found on <a href="http://github.com/netzwerg/ml-scala">GitHub</a>.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Octopress]]></title>
    <link href="http://netzwerg.ch/blog/2012/12/10/octopress/"/>
    <updated>2012-12-10T15:58:00+01:00</updated>
    <id>http://netzwerg.ch/blog/2012/12/10/octopress</id>
    <content type="html"><![CDATA[<p>I have just completed the migration of the old &amp; slooow WordPress thingie to a blazingly fast
<a href="http://octopress.org/">Octopress</a> setup. The static files are now hosted via
<a href="http://pages.github.com/">GitHub Pages</a>, and the new feed can be reached at <a href="http://netzwerg.ch/atom.xml">netzwerg.ch/atom.xml</a>.
Stay tuned!</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Scala Gems #7: this.type]]></title>
    <link href="http://netzwerg.ch/blog/2012/11/15/scala-gems-7-this-type/"/>
    <updated>2012-11-15T11:07:02+01:00</updated>
    <id>http://netzwerg.ch/blog/2012/11/15/scala-gems-7-this-type</id>
    <content type="html"><![CDATA[<p>Suppose you have a simple class hierarchy with an API optimized for method chaining:</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
</pre></td><td class='code'><pre><code class='scala'><span class='line'><span class="k">abstract</span> <span class="k">class</span> <span class="nc">Carnivore</span> <span class="o">{</span>
</span><span class='line'>
</span><span class='line'>  <span class="k">def</span> <span class="n">eat</span><span class="k">:</span> <span class="kt">Carnivore</span> <span class="o">=</span> <span class="o">{</span>
</span><span class='line'>    <span class="n">println</span><span class="o">(</span><span class="s">&quot;eating meat, yummy!&quot;</span><span class="o">)</span>
</span><span class='line'>    <span class="k">this</span>
</span><span class='line'>  <span class="o">}</span>
</span><span class='line'>
</span><span class='line'><span class="o">}</span>
</span><span class='line'>
</span><span class='line'><span class="k">class</span> <span class="nc">Dog</span> <span class="k">extends</span> <span class="nc">Carnivore</span> <span class="o">{</span>
</span><span class='line'>
</span><span class='line'>  <span class="k">def</span> <span class="n">bark</span><span class="k">:</span> <span class="kt">Dog</span> <span class="o">=</span> <span class="o">{</span>
</span><span class='line'>    <span class="n">println</span><span class="o">(</span><span class="s">&quot;wuff!&quot;</span><span class="o">)</span>
</span><span class='line'>    <span class="k">this</span>
</span><span class='line'>  <span class="o">}</span>
</span><span class='line'>
</span><span class='line'><span class="o">}</span>
</span></code></pre></td></tr></table></div></figure>


<p>For obvious reasons, the compiler will only allow to chain methods in a certain order:</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
</pre></td><td class='code'><pre><code class='scala'><span class='line'><span class="k">val</span> <span class="n">dog</span> <span class="k">=</span> <span class="k">new</span> <span class="nc">Dog</span><span class="o">()</span>
</span><span class='line'><span class="c1">// compiles ok</span>
</span><span class='line'><span class="n">dog</span><span class="o">.</span><span class="n">bark</span><span class="o">.</span><span class="n">eat</span>
</span><span class='line'><span class="c1">// does not compile (&#39;eat&#39; returns a Carnivore, which cannot bark)</span>
</span><span class='line'><span class="n">dog</span><span class="o">.</span><span class="n">eat</span><span class="o">.</span><span class="n">bark</span>
</span></code></pre></td></tr></table></div></figure>


<p>In the Java world, possible work-arounds involve generics. Either via overriding, or with a self-reference trick. Here&rsquo;s how it would look in Scala:</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
<span class='line-number'>18</span>
<span class='line-number'>19</span>
<span class='line-number'>20</span>
<span class='line-number'>21</span>
</pre></td><td class='code'><pre><code class='scala'><span class='line'><span class="k">abstract</span> <span class="k">class</span> <span class="nc">Carnivore</span><span class="o">[</span><span class="kt">T</span><span class="o">]</span> <span class="o">{</span>
</span><span class='line'>
</span><span class='line'>  <span class="k">def</span> <span class="n">eat</span><span class="k">:</span> <span class="kt">T</span> <span class="o">=</span> <span class="o">{</span>
</span><span class='line'>    <span class="n">println</span><span class="o">(</span><span class="s">&quot;eating meat, yummy!&quot;</span><span class="o">)</span>
</span><span class='line'>    <span class="n">self</span>
</span><span class='line'>  <span class="o">}</span>
</span><span class='line'>
</span><span class='line'>  <span class="k">abstract</span> <span class="k">def</span> <span class="n">self</span><span class="k">:</span> <span class="kt">T</span>
</span><span class='line'>
</span><span class='line'><span class="o">}</span>
</span><span class='line'>
</span><span class='line'><span class="k">class</span> <span class="nc">Dog</span> <span class="k">extends</span> <span class="nc">Carnivore</span><span class="o">[</span><span class="kt">Dog</span><span class="o">]</span> <span class="o">{</span>
</span><span class='line'>
</span><span class='line'>  <span class="k">def</span> <span class="n">bark</span><span class="k">:</span> <span class="kt">Dog</span> <span class="o">=</span> <span class="o">{</span>
</span><span class='line'>    <span class="n">println</span><span class="o">(</span><span class="s">&quot;wuff!&quot;</span><span class="o">)</span>
</span><span class='line'>    <span class="k">this</span>
</span><span class='line'>  <span class="o">}</span>
</span><span class='line'>
</span><span class='line'>  <span class="k">def</span> <span class="n">self</span> <span class="k">=</span> <span class="k">this</span>
</span><span class='line'>
</span><span class='line'><span class="o">}</span>
</span></code></pre></td></tr></table></div></figure>


<p>While this works just fine, it involves quite some clutter. And Scala can actually do better! A powerful (but yet not very well-known) construct can solve the problem: <strong><code>this.type</code></strong></p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
</pre></td><td class='code'><pre><code class='scala'><span class='line'><span class="k">abstract</span> <span class="k">class</span> <span class="nc">Carnivore</span> <span class="o">{</span>
</span><span class='line'>
</span><span class='line'>  <span class="k">def</span> <span class="n">eat</span><span class="k">:</span> <span class="kt">this.</span><span class="k">type</span> <span class="o">=</span> <span class="o">{</span>
</span><span class='line'>    <span class="n">println</span><span class="o">(</span><span class="s">&quot;eating meat, yummy!&quot;</span><span class="o">)</span>
</span><span class='line'>    <span class="k">this</span>
</span><span class='line'>  <span class="o">}</span>
</span><span class='line'>
</span><span class='line'><span class="o">}</span>
</span><span class='line'>
</span><span class='line'><span class="k">class</span> <span class="nc">Dog</span> <span class="k">extends</span> <span class="nc">Carnivore</span> <span class="o">{</span>
</span><span class='line'>
</span><span class='line'>  <span class="k">def</span> <span class="n">bark</span><span class="k">:</span> <span class="kt">Dog</span> <span class="o">=</span> <span class="o">{</span>
</span><span class='line'>    <span class="n">println</span><span class="o">(</span><span class="s">&quot;wuff!&quot;</span><span class="o">)</span>
</span><span class='line'>    <span class="k">this</span>
</span><span class='line'>  <span class="o">}</span>
</span><span class='line'>
</span><span class='line'><span class="o">}</span>
</span></code></pre></td></tr></table></div></figure>


<p>And now go spread the word!</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Bloxorz]]></title>
    <link href="http://netzwerg.ch/blog/2012/11/13/bloxorz/"/>
    <updated>2012-11-13T13:24:51+01:00</updated>
    <id>http://netzwerg.ch/blog/2012/11/13/bloxorz</id>
    <content type="html"><![CDATA[<p>Unfortunately, the <a href="http://class.coursera.org/progfun-2012-001">Scala course at Coursera</a> is over. It was really an
excellent experience and I am desperately waiting for part two. The lectures were a bit on the slow side (luckily the player
featured nice high-speed playback), but the assignments were rather challenging. As far as I know, the course material will
stay available indefinitely, so if you missed the course, you can still sign up and watch the videos or download the
exercises just for fun.</p>

<p>Due to the official code of honour, I am not allowed to discuss any actual code here, but the last assignment is still worth
mentioning: Based on the concept of lazy data structures, we were asked to find a generic solution to the <a href="http://www.coolmath-games.com/0-bloxorz/index.html">Bloxorz game</a>. When I initially read the assignment, I doubted that this would be
possible within a reasonable amount of time. But the exercises were so well crafted, that they guided us in a step-by-step
fashion &ndash; in the end, I managed to get the maximal score within less than two hours.</p>

<p>Inspired by the addictive block-rolling, I was recently playing around with CSS3. I really have no 3D experience whatsoever,
but here&rsquo;s my quick shot at some basic transformations (webkit only; put focus on cube and press left/right arrows):</p>

<iframe style="width: 100%; height: 300px" src="http://jsfiddle.net/netzwerg/Rrreu/embedded/result,js,html,css/"
allowfullscreen="allowfullscreen" frameborder="0"></iframe>

]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Scala Gems #6: Giter8]]></title>
    <link href="http://netzwerg.ch/blog/2012/11/05/scala-gems-6-giter8/"/>
    <updated>2012-11-05T10:41:55+01:00</updated>
    <id>http://netzwerg.ch/blog/2012/11/05/scala-gems-6-giter8</id>
    <content type="html"><![CDATA[<p>When building Scala projects, your best bets are to either use the official <a href="http://www.scala-sbt.org/">sbt</a>, the
<em>simple build tool</em> which is actually not so simple, or <a href="http://gradle.org/">Gradle</a>, my personal preference.</p>

<p>Both of them are very much based on conventions, i.e. they require only minimal configuration if you stick to the rules of a
default project structure. But what is the default project structure? And how can you set one up with minimal effort?</p>

<p>Enter <a href="https://github.com/n8han/giter8">giter8</a>: A command line tool to generate files and directories from templates
published on github.</p>

<p><strong>For sbt:</strong></p>

<p>The official sbt templates maintained by Typesafe can be found <a href="http://typesafe.com/stack/download#template">here</a> (note
that they publish g8 templates for their complete stack, even for examples &amp; tutorials).</p>

<p><strong>For Gradle:</strong></p>

<p>There&rsquo;s no official Gradle counterpart, but <a href="https://github.com/coacoas/scala-%0Agradle.g8">https://github.com/coacoas/scala-gradle.g8</a> works like a charm.</p>

<p>As usual, just fork &amp; improve if you need the templates to behave differently.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Scala Gems #5: FP @ Coursera]]></title>
    <link href="http://netzwerg.ch/blog/2012/09/28/scala-gems-5-fp-principles-coursera/"/>
    <updated>2012-09-28T13:29:10+02:00</updated>
    <id>http://netzwerg.ch/blog/2012/09/28/scala-gems-5-fp-principles-coursera</id>
    <content type="html"><![CDATA[<p>Along with more than 40k others, I am in the second week of Odersky&rsquo;s free online course titled <em>&ldquo;Functional Programming
Principles in Scala&rdquo;</em>. The video lectures are really well structured and very entertaining &ndash; it&rsquo;s great to learn from
the master himself. Given that the course only requires 1 year of programming background, the assignments are not too
complex yet, but I have no doubt that things will get trickier soon!</p>

<p>Afaik, it&rsquo;s still not too late to register, and it&rsquo;s FREE:
<a href="http://www.coursera.org/course/">http://www.coursera.org/course/progfun</a></p>

<p>Regarding tool setup: Don&rsquo;t even download the Eclipse-based Scala IDE, it sucks <strong>big</strong> time. How can these people get
anything done with a piece of crap that crashes every few minutes, even with just a 2-file project?! Luckily, the
assignments can as well be completed with <a href="http://www.jetbrains.com/idea/">IntelliJ IDEA</a>, with the community edition Scala
plugin.</p>

<p>To end this post with some code, this is how the first exercise looks like:</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='scala'><span class='line'><span class="k">def</span> <span class="n">pascal</span><span class="o">(</span><span class="n">c</span><span class="k">:</span> <span class="kt">Int</span><span class="o">,</span> <span class="n">r</span><span class="k">:</span> <span class="kt">Int</span><span class="o">)</span><span class="k">:</span> <span class="kt">Int</span> <span class="o">=</span> <span class="o">???</span>
</span></code></pre></td></tr></table></div></figure>


<p>The cool thing is that this code compiles &ndash; Scala method naming FTW!</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Mac Tips & Tricks #8: Changing Application Icons]]></title>
    <link href="http://netzwerg.ch/blog/2012/02/19/mac-tips-tricks-8-changing-application-icons/"/>
    <updated>2012-02-19T15:24:50+01:00</updated>
    <id>http://netzwerg.ch/blog/2012/02/19/mac-tips-tricks-8-changing-application-icons</id>
    <content type="html"><![CDATA[<p>There are many reasons why you might want to change an application&rsquo;s icon. In my case, I wanted to be able to
distinguish the stable IntelliJ IDEA 11 version from an early access 11.1 build:</p>

<p><img src="http://netzwerg.ch/images/idea_icons.jpg"></p>

<p>Here&rsquo;s how I changed the default (blue) icon to the new (pink) one:</p>

<p>First, reveal the application&rsquo;s installation location in <em>Finder</em> (from the <em>Dock</em> context menu: <em>Options » Show in Finder</em>).
From within <em>Finder</em>, invoke the context menu on the selected application, and <em>Show Package Contents</em>. Locate the icon file
(<code>*.icns</code>) inside <em>Contents » Resources</em>. Make a backup copy, edit the icon in your favorite image editor (I simply overlaid
a red color filter in <a href="http://flyingmeat.com/acorn/">Acorn</a>), and save it as a <code>*.png</code>.</p>

<p>Now comes the tricky part: <a href="http://en.wikipedia.org/wiki/Apple_Icon_Image_format">Apple&rsquo;s icon format</a> includes more than
just an image, it actually contains a collection of images in different sizes, resolutions &amp; states. To create a new <code>*.icns</code>
file, launch <em>Icon Composer</em> (which ships with OSX). Open the original application icon to check which sizes your new icon
should support:</p>

<p><img src="http://netzwerg.ch/images/icon_composer.jpg"></p>

<p>Create a new file, drag &amp; drop your edited <code>*.png</code> to the required image size containers, and save the result.
Re-launch your application &ndash; tada!</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[IntelliJ IDEA: Reveal in Terminal]]></title>
    <link href="http://netzwerg.ch/blog/2012/02/08/intellij-idea-reveal-in-terminal/"/>
    <updated>2012-02-08T20:51:26+01:00</updated>
    <id>http://netzwerg.ch/blog/2012/02/08/intellij-idea-reveal-in-terminal</id>
    <content type="html"><![CDATA[<p>IntelliJ IDEA ships with a very handy <em>Reveal in Finder</em> action, but unfortunately,
I am still a terminal person. Today I put together a tiny AppleScript which creates a new
<a href="http://www.iterm2.com">iTerm2</a> session and changes to a directory of choice:</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
</pre></td><td class='code'><pre><code class='applescript'><span class='line'><span class="k">on</span> <span class="nb">run</span> <span class="nv">dir</span>
</span><span class='line'>  <span class="k">tell</span> <span class="nb">application</span> <span class="s2">&quot;iTerm&quot;</span>
</span><span class='line'>    <span class="nb">activate</span>
</span><span class='line'>    <span class="k">tell</span> <span class="nb">last</span> <span class="nv">terminal</span>
</span><span class='line'>      <span class="k">set</span> <span class="nv">mysession</span> <span class="k">to</span> <span class="p">(</span><span class="nb">make</span> <span class="nb">new</span> <span class="nv">session</span> <span class="nb">at</span> <span class="nb">the</span> <span class="nv">beginning</span> <span class="k">of</span> <span class="nv">sessions</span><span class="p">)</span>
</span><span class='line'>      <span class="k">tell</span> <span class="nv">mysession</span>
</span><span class='line'>        <span class="k">set</span> <span class="na">name</span> <span class="k">to</span> <span class="s2">&quot;Default&quot;</span>
</span><span class='line'>        <span class="nv">exec</span> <span class="nv">command</span> <span class="s2">&quot;/bin/bash -l&quot;</span>
</span><span class='line'>      <span class="k">end</span> <span class="k">tell</span>
</span><span class='line'>      <span class="k">tell</span> <span class="nv">mysession</span>
</span><span class='line'>        <span class="nb">write</span> <span class="nb">text</span> <span class="s2">&quot;cd &quot;</span> <span class="o">&amp;</span> <span class="nv">dir</span>
</span><span class='line'>      <span class="k">end</span> <span class="k">tell</span>
</span><span class='line'>    <span class="k">end</span> <span class="k">tell</span>
</span><span class='line'>  <span class="k">end</span> <span class="k">tell</span>
</span><span class='line'><span class="k">end</span> <span class="nb">run</span>
</span></code></pre></td></tr></table></div></figure>


<p>IDEA allows to add custom actions via <em>Settings » External Tools</em>. Save the above script to a file (e.g.
<code>launchTerminalAndChangeDir.scpt</code>) and configure a new <em>Reveal in Terminal</em> action as follows:</p>

<p><img src="http://netzwerg.ch/images/reveal.jpg"></p>

<p>Additionally, you may want to associate a key binding via <em>Settings » Keymap</em>. I chose <code>Ctrl-Shift-T</code>, which seems
intuitive and is not conflicting with any OSX defaults.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[The Setup]]></title>
    <link href="http://netzwerg.ch/blog/2011/12/10/the-setup/"/>
    <updated>2011-12-10T15:45:50+01:00</updated>
    <id>http://netzwerg.ch/blog/2011/12/10/the-setup</id>
    <content type="html"><![CDATA[<p>I started my new job at <a href="http://edorasware.com">edorasware</a> last week, with a
new &amp; shiny 15-inch MacBook Pro. A fresh computer with a blank OS is both, a
blessing and a curse &ndash; it takes quite a while until it feels like home again. And
even after a week, I still miss a few configuration settings or shortcuts here and
there.</p>

<p>Setting up the new machine was certainly an opportunity to consolidate the apps and
tools I like and need. Inspired by <a href="http://usesthis.com">The Setup</a>, here&rsquo;s what I
currently use to get things done:</p>

<p>As a Java developer, I spend most of my time in <a href="http://www.jetbrains%0A.com/idea">IntelliJ IDEA</a>, the best IDE ever (weight this statement by the fact that I used
Eclipse for 7+ years before). My second home is the command line. I use <a href="http://www.iterm2.com">iTerm2</a>, which has excellent search support, provides mouseless
copying, and is more unixy than the official <em>Terminal</em>. I&rsquo;m still learning to use _
Finder<em> efficiently. The <a href="http://totalfinder.binaryage.com">TotalFinder</a> plug-in,
with tab support and its </em>Folders on Top_ mode, is my latest attempt at making
friends.</p>

<p>A few crucial things help me organize &amp; navigate my workspace: I use three virtual
desktops (via <em>Mission Control</em>) which I access by keyboard shortcuts &ndash; 1 for
Mail/Calendar, 2 for Browser, and 3 for IDEA. A launcher helps me kick-start
applications. I switched from Quicksilver to <a href="http://alfredapp.com">Alfred</a> &ndash; it
provides the same features and is under active development. <a href="http://mizage.%0Acom">Divvy</a> tames all window sizes &amp; positions, clearly a missing feature in OSX.</p>

<p>Transitioning from <em>Snow Leopard</em> to <em>Lion</em> was more challenging than anticipated,
mainly because of its different mouse usage paradigms. Most of the built-in
gestures are easy to use, but some of them collide with my old habits (how the heck
can I turn off horizontal scrolling in order to re-map the swipe gesture to
back/forward navigation in IDEA?!). A while back I forced myself to exclusively use
taps (rather than clicks) on the trackpad. Wow &ndash; the absence of the mechanical
noise makes such a difference, everything suddenly feels very light and smooth!</p>

<p>These are pretty much the apps at the core. In addition, I like <a href="http://www.%0Agoogle.ch/chrome">Chrome</a>, <a href="http://agilebits.com/onepassword">1Password</a>, <a href="http://macromates.com">TextMate</a>, <a href="http://dropbox.com">Dropbox</a>, <a href="http://skype.com">Skype</a>,
<a href="http://spotify.com">Spotify</a>, <a href="http://flyingmeat.com/acorn">Acorn</a>, <a href="http://inkscape.org">Inkscape</a>, <a href="http://www.adobe.com/products/photoshoplightroom">Lightroom</a>
and <a href="http://www.omnigroup.com/products/omnigraffle">OmniGraffle</a> &ndash; just to name a
few.</p>

<p>What are your favorite tools we should all know about?</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Groovy Gems #1: Generating Data Matrices]]></title>
    <link href="http://netzwerg.ch/blog/2011/09/28/groovy-gems-1-generating-data-matrices/"/>
    <updated>2011-09-28T17:03:38+02:00</updated>
    <id>http://netzwerg.ch/blog/2011/09/28/groovy-gems-1-generating-data-matrices</id>
    <content type="html"><![CDATA[<p>In contrast to its <a href="http://netzwerg.ch/blog/2011/08/23/scala-gems-4-generating-data-matrices/">Scala friend</a>, this Groovy one-liner is handy <em>and</em> readable:</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='groovy'><span class='line'><span class="mi">7</span><span class="o">.</span><span class="na">times</span> <span class="o">{</span> <span class="mi">3</span><span class="o">.</span><span class="na">times</span> <span class="o">{</span> <span class="n">print</span><span class="o">(</span><span class="s2">&quot;X\t&quot;</span><span class="o">)</span> <span class="o">}</span> <span class="n">print</span><span class="o">(</span><span class="s2">&quot;\n&quot;</span><span class="o">)</span> <span class="o">}</span>
</span></code></pre></td></tr></table></div></figure>

]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[GAE + Gson + AngularJS]]></title>
    <link href="http://netzwerg.ch/blog/2011/09/01/gae-gson-angularjs/"/>
    <updated>2011-09-01T22:51:03+02:00</updated>
    <id>http://netzwerg.ch/blog/2011/09/01/gae-gson-angularjs</id>
    <content type="html"><![CDATA[<p>I have been playing with <a href="http://angularjs.org">AngularJS</a> lately. It is a JavaScript library with the following tag line:</p>

<blockquote><p>What HTML would have been had it been designed for web apps.</p></blockquote>


<p>All I can say after a few hours: HTML would haven been great! It would have had a clear MVC separation, data binding, dependency-injection, and it would have kept development simple &amp; fun.</p>

<p>My web app know-how is very rusty, so I hacked together a simple proof-of-concept, just to see how AngularJS actually <em>feels</em>. Here are the crucial snippets from my Google App Engine Java back-end (to generate JSON), and the HTML/AngularJS view (to render it).</p>

<p>The Servlet part:</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
</pre></td><td class='code'><pre><code class='java'><span class='line'><span class="kd">protected</span> <span class="kt">void</span> <span class="nf">doGet</span><span class="o">(...)</span> <span class="o">{</span>
</span><span class='line'>  <span class="n">response</span><span class="o">.</span><span class="na">setContentType</span><span class="o">(</span><span class="s">&quot;text/plain&quot;</span><span class="o">);</span>
</span><span class='line'>  <span class="n">String</span><span class="o">[]</span> <span class="n">movies</span> <span class="o">=</span> <span class="k">new</span> <span class="n">String</span><span class="o">[]{</span>
</span><span class='line'>    <span class="s">&quot;Buffalo 66&quot;</span><span class="o">,</span>
</span><span class='line'>    <span class="s">&quot;Jackie Brown&quot;</span><span class="o">,</span>
</span><span class='line'>    <span class="s">&quot;Vicky Cristina Barcelona&quot;</span><span class="o">};</span>
</span><span class='line'>  <span class="n">response</span><span class="o">.</span><span class="na">getWriter</span><span class="o">().</span><span class="na">print</span><span class="o">(</span><span class="k">new</span> <span class="n">Gson</span><span class="o">().</span><span class="na">toJson</span><span class="o">(</span><span class="n">movies</span><span class="o">));</span>
</span><span class='line'><span class="o">}</span>
</span></code></pre></td></tr></table></div></figure>


<p>The AngularJS Controller:</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
</pre></td><td class='code'><pre><code class='javascript'><span class='line'><span class="kd">function</span> <span class="nx">MovieListCtrl</span><span class="p">(</span><span class="nx">$xhr</span><span class="p">)</span> <span class="p">{</span>
</span><span class='line'>  <span class="kd">var</span> <span class="nx">self</span> <span class="o">=</span> <span class="k">this</span><span class="p">;</span>
</span><span class='line'>  <span class="nx">$xhr</span><span class="p">(</span><span class="s1">&#39;GET&#39;</span><span class="p">,</span> <span class="s1">&#39;http://localhost:8080/json&#39;</span><span class="p">,</span>
</span><span class='line'>    <span class="kd">function</span><span class="p">(</span><span class="nx">code</span><span class="p">,</span> <span class="nx">response</span><span class="p">)</span> <span class="p">{</span>
</span><span class='line'>      <span class="nx">self</span><span class="p">.</span><span class="nx">movies</span> <span class="o">=</span> <span class="nx">response</span><span class="p">;</span>
</span><span class='line'>    <span class="p">}</span>
</span><span class='line'>  <span class="p">);</span>
</span><span class='line'><span class="p">}</span>
</span></code></pre></td></tr></table></div></figure>


<p>The HTML/AngularJS View:</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
</pre></td><td class='code'><pre><code class='html'><span class='line'><span class="nt">&lt;body</span> <span class="na">ng:controller=</span><span class="s">&quot;MovieListCtrl&quot;</span><span class="nt">&gt;</span>
</span><span class='line'>  Rahel&#39;s favorite movies:
</span><span class='line'>  <span class="nt">&lt;ul&gt;</span>
</span><span class='line'>    <span class="nt">&lt;li</span> <span class="na">ng:repeat=</span><span class="s">&quot;movie in movies&quot;</span><span class="nt">&gt;</span>
</span><span class='line'>      {movie}
</span><span class='line'>    <span class="nt">&lt;/li&gt;</span>
</span><span class='line'>  <span class="nt">&lt;/ul&gt;</span>
</span><span class='line'><span class="nt">&lt;/body&gt;</span>
</span></code></pre></td></tr></table></div></figure>


<p>Check out the official <a href="http://docs.angularjs.org/#!/tutorial">AngularJS Tutorial</a> for more details and a ton of cool examples.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Blank Slate]]></title>
    <link href="http://netzwerg.ch/blog/2011/08/25/blank-slate/"/>
    <updated>2011-08-25T23:27:25+02:00</updated>
    <id>http://netzwerg.ch/blog/2011/08/25/blank-slate</id>
    <content type="html"><![CDATA[<p>Inspired by <a href="http://rowdykittens.com/2011/08/digital-clutter-confessions/">Tammy Strobel&rsquo;s post on digital decluttering</a>, this blog is starting fresh — with a simple design, and only a few posts left.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Scala Gems #4: Generating Data Matrices]]></title>
    <link href="http://netzwerg.ch/blog/2011/08/23/scala-gems-4-generating-data-matrices/"/>
    <updated>2011-08-23T14:15:00+02:00</updated>
    <id>http://netzwerg.ch/blog/2011/08/23/scala-gems-4-generating-data-matrices</id>
    <content type="html"><![CDATA[<p>Generating matrix-shaped test data is easy in any spreadsheet application: Enter a few cell values and use the fill handle to complete all others. But firing up a spreadsheet somehow feels lame. This Scala three-liner can do the same:</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
</pre></td><td class='code'><pre><code class='scala'><span class='line'><span class="n">println</span><span class="o">(</span><span class="nc">Array</span><span class="o">.</span><span class="n">fill</span><span class="o">(</span><span class="mi">7</span><span class="o">,</span> <span class="mi">3</span><span class="o">)(</span><span class="s">&quot;X&quot;</span><span class="o">).</span><span class="n">map</span><span class="o">(</span>
</span><span class='line'>  <span class="k">_</span><span class="o">.</span><span class="n">mkString</span><span class="o">(</span><span class="s">&quot;\t&quot;</span><span class="o">)).</span><span class="n">mkString</span><span class="o">(</span><span class="s">&quot;\n&quot;</span><span class="o">)</span>
</span><span class='line'><span class="o">)</span>
</span></code></pre></td></tr></table></div></figure>


<p>Is it readable? No. Is it handy? Yes!</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Scala Gems #3: Named Parameters]]></title>
    <link href="http://netzwerg.ch/blog/2011/04/22/scala-gems-3-named-parameters/"/>
    <updated>2011-04-22T22:21:00+02:00</updated>
    <id>http://netzwerg.ch/blog/2011/04/22/scala-gems-3-named-parameters</id>
    <content type="html"><![CDATA[<p>Just a quick one this time (it&rsquo;s easter holiday and the weather is simply too beautiful to waste time in front of a computer). Anyway, have a look at this constructor call:</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='scala'><span class='line'><span class="nc">MigrosEgg</span><span class="o">(</span><span class="nc">GREEN</span><span class="o">,</span> <span class="nc">BLUE</span><span class="o">)</span>
</span></code></pre></td></tr></table></div></figure>


<p>Unless you&rsquo;re Swiss and just know that I&rsquo;m referring to the &ldquo;Extra&rdquo; variant, wouldn&rsquo;t it be a lot less ambiguous to write</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='scala'><span class='line'><span class="k">val</span> <span class="n">aMigrosEgg</span> <span class="k">=</span> <span class="nc">MigrosEgg</span><span class="o">(</span><span class="n">dotColor</span> <span class="k">=</span> <span class="nc">GREEN</span><span class="o">,</span> <span class="n">bgColor</span> <span class="k">=</span> <span class="nc">BLUE</span><span class="o">)</span>
</span></code></pre></td></tr></table></div></figure>


<p>As of Scala 2.8 you can name your arguments. You can also leave out those which have default values, shuffle their order &ndash; or you can simply have another one of those little suckers:</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='scala'><span class='line'><span class="k">val</span> <span class="n">notAMigrosEgg</span> <span class="k">=</span> <span class="n">aMigrosEgg</span><span class="o">.</span><span class="n">copy</span><span class="o">(</span><span class="n">dotColor</span> <span class="k">=</span> <span class="nc">PINK</span><span class="o">)</span>
</span></code></pre></td></tr></table></div></figure>


<p>Happy easter everyone!</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Scala Gems #2: Getting Functional]]></title>
    <link href="http://netzwerg.ch/blog/2011/04/14/scala-gems-2-getting-functional/"/>
    <updated>2011-04-14T20:43:00+02:00</updated>
    <id>http://netzwerg.ch/blog/2011/04/14/scala-gems-2-getting-functional</id>
    <content type="html"><![CDATA[<p>As promised, here is the second post in my haphazardly thrown together Scala series. Over the past few days I have read some chapters in Odersky&rsquo;s <a href="http://www.artima.com/shop/programming_in_scala_2ed">Programming in Scala</a>, and most importantly, I have written my first ~100 lines of code (a basic Minesweeper app with a simple Swing UI). It&rsquo;s been a lot of fun, and I am still very enthusiastic about many new concepts &amp; constructs. When coding, the biggest challenge is to not fall back to imperative Java style, but really use the functional concepts wherever applicable. I am probably still not radical enough, but for the time being, here is my take on revealing non-mined cells:</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
</pre></td><td class='code'><pre><code class='scala'><span class='line'><span class="k">def</span> <span class="n">reveal</span> <span class="k">=</span> <span class="o">{</span>
</span><span class='line'>  <span class="k">if</span> <span class="o">(</span><span class="n">revealed</span> <span class="o">==</span> <span class="kc">false</span><span class="o">)</span> <span class="o">{</span>
</span><span class='line'>    <span class="n">revealed</span> <span class="k">=</span> <span class="kc">true</span>
</span><span class='line'>    <span class="k">if</span> <span class="o">(</span><span class="n">adjacentMineCount</span> <span class="o">==</span> <span class="mi">0</span><span class="o">)</span> <span class="o">{</span>
</span><span class='line'>      <span class="n">adjacentCells</span><span class="o">.</span><span class="n">foreach</span> <span class="o">(</span><span class="n">cell</span> <span class="k">=&gt;</span> <span class="n">cell</span><span class="o">.</span><span class="n">reveal</span><span class="o">)</span>
</span><span class='line'>    <span class="o">}</span>
</span><span class='line'>  <span class="o">}</span>
</span><span class='line'><span class="o">}</span>
</span></code></pre></td></tr></table></div></figure>


<p>In summary: 1 usage of <code>=&gt;</code> (and even a recursion ;-)).</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Scala Gems: #1]]></title>
    <link href="http://netzwerg.ch/blog/2011/04/08/scala-gems-1/"/>
    <updated>2011-04-08T09:01:00+02:00</updated>
    <id>http://netzwerg.ch/blog/2011/04/08/scala-gems-1</id>
    <content type="html"><![CDATA[<p>This article finally did it: <a href="http://www.infoq.com/articles/guardian_scala">&ldquo;Guardian.co.uk Switching from Java to Scala&rdquo;</a> &ndash; it made me jump head first into the Scala newbie pool. Of course I wanted to learn Scala for quite some time already, but I somehow never managed to get my act together.</p>

<p>Life as a Java programmer had gotten harder over the last few years. Not that I don&rsquo;t enjoy my job anymore, to the contrary, but reading about all these highly dynamic youngsters hacking together their Python/Ruby/Groovy wizardy at the speed of light has made me feel even older than I already am. Old-fashionedness at its finest: I absolutely can&rsquo;t relate to all this enthusiasm for dynamic languages. Ok, I admit that some script-fu will certainly help getting this nasty little problem solved quickly, but how the heck will a huge Rails project be maintainable over 10+ years? Or do we still have to wait longer for time to tell that it will fail? Do these people write tests for each and every thing that otherwise would be checked by a compiler? Isn&rsquo;t this a rather high price for a little duck-typing?</p>

<p>I am obviously being cynical, but luckily I am not the only one in doubt. Some great brains also think that throwing away the type system is not the best compromise to make in order to get rid of Java&rsquo;s (admittedly extensive) boilerplate. In <a href="http://www.parleys.com/#st=5&amp;sl=1&amp;id=10">this excellent talk</a>, Bill Venners speaks about his preference for typed languages. He mentions &ldquo;deterministic refactoring&rdquo; as the main benefit, which he explains like this:</p>

<blockquote><p>I don&#8217;t like types because I think they proof my program correct [&#8230;] but  because they can proof changes that I make to my programs are correct</p><footer><strong>Bill Venners</strong> <cite><a href='http://www.parleys.com/#st=5&sl=1&id=10'>www.parleys.com/&hellip;</a></cite></footer></blockquote>


<p>Coming back to Scala: It seems to combine the best of all worlds &ndash; strictly typed, functional &amp; object-oriented, radically concise, and just close enough to the Java world for old-timers to transition gradually ;-)</p>

<p>To keep my new Scala heart beating, I will start posting weekly Scala gems. Let me start with the example given in the above interview &ndash; just to illustrate what &ldquo;no boilerplate&rdquo; and &ldquo;concise&rdquo; really mean. In Java:</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
</pre></td><td class='code'><pre><code class='java'><span class='line'><span class="kd">public</span> <span class="kd">class</span> <span class="nc">HowdyClass</span> <span class="o">{</span>
</span><span class='line'>
</span><span class='line'>    <span class="kd">private</span> <span class="n">String</span> <span class="n">name</span><span class="o">;</span>
</span><span class='line'>
</span><span class='line'>    <span class="kd">public</span> <span class="nf">HowdyClass</span><span class="o">(</span><span class="n">String</span> <span class="n">name</span><span class="o">)</span> <span class="o">{</span>
</span><span class='line'>        <span class="k">this</span><span class="o">.</span><span class="na">name</span> <span class="o">=</span> <span class="n">name</span><span class="o">;</span>
</span><span class='line'>    <span class="o">}</span>
</span><span class='line'>
</span><span class='line'>
</span><span class='line'>    <span class="kd">public</span> <span class="n">String</span> <span class="nf">sayHowdy</span><span class="o">()</span> <span class="o">{</span>
</span><span class='line'>        <span class="k">return</span> <span class="s">&quot;Howdy &quot;</span> <span class="o">+</span> <span class="n">name</span><span class="o">;</span>
</span><span class='line'>    <span class="o">}</span>
</span><span class='line'><span class="o">}</span>
</span></code></pre></td></tr></table></div></figure>


<p>and in Scala:</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
</pre></td><td class='code'><pre><code class='scala'><span class='line'><span class="k">class</span> <span class="nc">HowdyClass</span><span class="o">(</span><span class="n">name</span><span class="k">:</span> <span class="kt">String</span><span class="o">)</span> <span class="o">{</span>
</span><span class='line'>    <span class="k">def</span> <span class="n">sayHowdy</span> <span class="k">=</span> <span class="s">&quot;Howdy &quot;</span> <span class="o">+</span> <span class="n">name</span>
</span><span class='line'><span class="o">}</span>
</span></code></pre></td></tr></table></div></figure>


<p>The following example is my personal highlight after roughly two hours of playing around with the interpreter: Initializing a two-dimensional grid with indexed cells:</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
</pre></td><td class='code'><pre><code class='scala'><span class='line'><span class="k">class</span> <span class="nc">Cell</span><span class="o">(</span><span class="n">x</span><span class="k">:</span> <span class="kt">Int</span><span class="o">,</span> <span class="n">y</span><span class="k">:</span> <span class="kt">Int</span><span class="o">)</span>
</span><span class='line'><span class="nc">Seq</span><span class="o">.</span><span class="n">tabulate</span><span class="o">(</span><span class="mi">3</span><span class="o">,</span> <span class="mi">9</span><span class="o">)(</span><span class="k">new</span> <span class="nc">Cell</span><span class="o">(</span><span class="k">_</span><span class="o">,</span> <span class="k">_</span><span class="o">))</span>
</span></code></pre></td></tr></table></div></figure>


<p>This is actually almost too concise (or at least as a functional noob it took me quite some time to understand it). Here&rsquo;s a verbose equivalent which is a bit more self explanatory:</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='scala'><span class='line'><span class="nc">Seq</span><span class="o">.</span><span class="n">tabulate</span><span class="o">(</span><span class="mi">3</span><span class="o">,</span> <span class="mi">9</span><span class="o">)((</span><span class="n">x</span><span class="k">:</span> <span class="kt">Int</span><span class="o">,</span> <span class="n">y</span><span class="k">:</span> <span class="kt">Int</span><span class="o">)</span> <span class="k">=&gt;</span> <span class="k">new</span> <span class="nc">Cell</span><span class="o">(</span><span class="n">x</span><span class="o">,</span> <span class="n">y</span><span class="o">))</span>
</span></code></pre></td></tr></table></div></figure>


<p>And now <a href="http://www.scala-lang.org/">go get it</a> and have a lot of fun!</p>
]]></content>
  </entry>
  
</feed>
