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

  <title><![CDATA[Banshee's stuff]]></title>
  <link href="http://www.ilbanshee.net/press/atom.xml" rel="self"/>
  <link href="http://www.ilbanshee.net/press/"/>
  <updated>2012-02-05T16:37:19+01:00</updated>
  <id>http://www.ilbanshee.net/press/</id>
  <author>
    <name><![CDATA[Banshee]]></name>
    
  </author>
  <generator uri="http://octopress.org/">Octopress</generator>

  
  <entry>
    <title type="html"><![CDATA[Alias Method]]></title>
    <link href="http://www.ilbanshee.net/press/blog/2012/02/05/alias-method/"/>
    <updated>2012-02-05T13:33:00+01:00</updated>
    <id>http://www.ilbanshee.net/press/blog/2012/02/05/alias-method</id>
    <content type="html"><![CDATA[<p>Need to generate random samples from a given discrete distribution?
The <em>Alias Method</em>
(wonderfully described <a href="http://www.keithschwarz.com/darts-dice-coins/">here</a>)
comes to mind&#8230; for those who haven&#8217;t heard of it it&#8217;s a simple but powerfull
$\Theta(1)$ random generator with a $\Theta(n)$ initial setup time,
so&#8230; need to generate random samples from a given discrete distribution
in Scala?
Check out this implementation.</p>

<div><script src='https://gist.github.com/1745222.js?file='></script>
<noscript><pre><code>import scala.util.Random
import scala.collection.mutable.MutableList
import scala.collection.mutable.Queue

object Runner extends App {
  val prob = List(0.05, 0.15, 0.35, 0.25, 0.09, 0.1, 0.01)
  val acc = new Array[Int](prob.size)
  val am = AliasMethod(prob)
  for (i &lt;- 0 until 1000000) am.next match {
    case x: Int =&gt; acc(x) += 1
  }
  for (v &lt;- acc) print(&quot;%d\t&quot;.format(v))
}

class AliasMethod(givenProbs: List[Double], random: Random) {
  // copy data into a mutable list
  val probabilities = MutableList[Double](givenProbs: _*)
  // declare probability and alias tables
  val prob = new Array[Double](probabilities.size)
  val alias = new Array[Int](probabilities.size)
  // declare the working queues
  val small, large = new Queue[Int]
  // compute the average
  val average: Double = 1.0 / probabilities.size;
  
  // populate the working queues
  for (p &lt;- probabilities.indices)
    if (probabilities(p) &gt;= average) large += p else small += p
  // use both queues as sentinel value 
  while (small.size != 0 &amp;&amp; large.size != 0) {
    val less = small.dequeue
    val more = large.dequeue
    // assign and scale probability
    prob(less) = probabilities(less) * probabilities.size
    alias(less) = more
    // decrease the probability of the larger one
    probabilities(more) = (probabilities(more) + probabilities(less)) - average
    // assign to large or small queue
    if (probabilities(more) &gt;= average) large += more else small += more
  }
  // the remaining probabilities are now 1/n so we empty the queues 
  for (i &lt;- large) prob(i) = 1.0
  for (i &lt;- small) prob(i) = 1.0

  // sample the next value from given distribution
  def next: Int = {
    val column = random.nextInt(prob.size)
    val coinToss = random.nextDouble() &lt; prob(column)
    if (coinToss) column else alias(column)
  }
}

object AliasMethod {
  def apply(probs: List[Double], random: Random = new Random) = new AliasMethod(probs, random)
}</code></pre></noscript></div>


<p>PS: I love github&#8217;s gist feature!</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Life]]></title>
    <link href="http://www.ilbanshee.net/press/blog/2012/01/16/life/"/>
    <updated>2012-01-16T20:12:00+01:00</updated>
    <id>http://www.ilbanshee.net/press/blog/2012/01/16/life</id>
    <content type="html"><![CDATA[<p>Or the <a href="http://en.wikipedia.org/wiki/Conway's_Game_of_Life">game of life</a>
written in Scala with a little bit of Swing for the gui.</p>

<div><script src='https://gist.github.com/1737798.js?file='></script>
<noscript><pre><code>package net.ilbanshee.gol
import swing._
import java.awt.Color
import java.awt.Dimension
import scala.collection.immutable.HashSet
import java.util.concurrent.ExecutorService
import java.util.concurrent.Executors
import java.util.concurrent.TimeUnit._

object Life extends SimpleSwingApplication {
  val startData: Set[Coord] = Set(
      (2,6),(3,6),(2,7),(3,7),
      (12,6),(12,7),(12,8),(13,5),(13,9),(14,4),(15,4),(14,10),(15,10),(16,7),
      (17,5),(17,9),(18,6),(18,7),(18,8),(19,7),
      (22,6),(22,5),(22,4),(23,6),(23,5),(23,4),(24,3),(24,7),(26,7),(26,8),(26,3),(26,2),
      (36,4),(37,4),(36,5),(37,5))
  val it = Iterator.iterate(Generation(startData))(_.nextGeneration)

  val board = new Board
  def top = new MainFrame {
    title = &quot;Game of Life&quot;
    contents = board
  }

  val gameIterator = new java.lang.Runnable {
    def run() = board.updateStatus(it.next)
  }
  val es = Executors.newScheduledThreadPool(1);
  es.scheduleAtFixedRate(gameIterator, 0, 130, MILLISECONDS)
}

class Board extends Component {
  var status: Set[Coord] = new HashSet[Coord]
  preferredSize = new Dimension(500, 250)

  override def paintComponent(g: Graphics2D) = {
    super.paintComponent(g)
    g.setColor(new Color(100, 100, 100))
    for (i &lt;- 0 to size.width / 10)
      g.drawLine(i * 10, 0, i * 10, size.height)
    for (i &lt;- 0 to size.height / 10)
      g.drawLine(0, i * 10, size.width, i * 10)
    g.setColor(Color.red)
    g.drawString(&quot;There are %d cells alive&quot;.format(status.size), 10, size.height - 10)
    g.setColor(Color.green)
    for (coord &lt;- status) {
      val x = coord.x * 10 - 9
      val y = coord.y * 10 - 9
      g.fillRect(x, y, 9, 9)
    }
  }

  def updateStatus(newCoords: Set[Coord]) = {
    status = newCoords
    repaint
  }
}

class Coord(val x: Int, val y: Int) {
  private val offsets = List(-1, 0, 1)
  private def offsetsOf(n: Int) = offsets map (_ + n)
  def neighbors = for {
    xn &lt;- offsetsOf(x)
    yn &lt;- offsetsOf(y) if (x, y) != (xn, yn)
  } yield Coord(xn, yn)

  override def equals(other: Any) = other match {
    case c: Coord =&gt; x == c.x &amp;&amp; y == c.y
    case _ =&gt; false
  }
  override def hashCode = ((x * 31) + y) * 61
}

object Coord {
  implicit def tupleToCoord(t: (Int, Int)): Coord = apply(t._1, t._2)

  private val board = new scala.collection.mutable.HashMap[(Int, Int), Coord]
  def apply(x: Int, y: Int) = board getOrElseUpdate ((x, y), new Coord(x, y))
}

class Generation(val alive: Set[Coord]) extends Set[Coord] {
  import Generation._

  def contains(elem: Coord): Boolean = alive contains elem
  def iterator: Iterator[Coord] = alive.iterator
  def +(elem: Coord): Generation = if (alive contains elem) this else Generation(alive + elem)
  def -(elem: Coord): Generation = if (alive contains elem) Generation(alive - elem) else this
  override def hashCode = alive.hashCode

  private val neighbors = alive.toList flatMap(_.neighbors) groupBy (identity) map { case (c, l) =&gt; (c, l.size) }
  private def neighborhood(filter: Filter) = for (filter(coord) &lt;- neighbors) yield coord
  private def babies = neighborhood(newborn)
  private def adults = alive &amp; neighborhood(stable).toSet
  def nextGeneration = Generation(adults ++ babies)
}

object Generation {
  case class Filter(f: ((Coord, Int)) =&gt; Option[Coord]) {
    def unapply(t: (Coord, Int)): Option[Coord] = f(t)
  }
  def apply(alive: Set[Coord]) = new Generation(alive)

  val newborn = Filter {
    case (c, 3) =&gt; Some(c)
    case _ =&gt; None
  }
  val stable = Filter {
    case (c, 2) =&gt; Some(c)
    case (c, 3) =&gt; Some(c)
    case _ =&gt; None
  }
}</code></pre></noscript></div>


<p>Let&#8217;s explore this code a little bit&#8230;</p>

<p>The basic idea is to visualize a Set[<strong>Coord</strong>] instances on the graphical
grid and obtain, with every iteration, the new Set of alive cells.</p>

<p>In order to do that let&#8217;s define our beginning state inside the <strong>Life</strong>
main object and create an iterable element using Iterator.iterate method..</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="k">object</span> <span class="nc">Life</span> <span class="k">extends</span> <span class="nc">SimpleSwingApplication</span> <span class="o">{</span>
</span><span class='line'>  <span class="k">val</span> <span class="n">startData</span><span class="k">:</span> <span class="kt">Set</span><span class="o">[</span><span class="kt">Coord</span><span class="o">]</span> <span class="k">=</span> <span class="nc">Set</span><span class="o">(</span><span class="cm">/* initial state */</span><span class="o">)</span>
</span><span class='line'>  <span class="k">val</span> <span class="n">it</span> <span class="k">=</span> <span class="nc">Iterator</span><span class="o">.</span><span class="n">iterate</span><span class="o">(</span><span class="nc">Generation</span><span class="o">(</span><span class="n">startData</span><span class="o">))(</span><span class="n">_</span><span class="o">.</span><span class="n">nextGeneration</span><span class="o">)</span>
</span><span class='line'>  <span class="c1">// setup swing window components and </span>
</span><span class='line'>  <span class="c1">// a runnable element to use as an &quot;updater&quot;</span>
</span><span class='line'><span class="o">}</span>
</span></code></pre></td></tr></table></div></figure>


<p>The <strong>Generation</strong> class is a extended Set[Coord] which is able to obtain
the <strong>nextGeneration</strong> concatenating (still) alive cells with newborn cells</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>
</pre></td><td class='code'><pre><code class='scala'><span class='line'><span class="k">class</span> <span class="nc">Generation</span><span class="o">(</span><span class="k">val</span> <span class="n">alive</span><span class="k">:</span> <span class="kt">Set</span><span class="o">[</span><span class="kt">Coord</span><span class="o">])</span> <span class="k">extends</span> <span class="nc">Set</span><span class="o">[</span><span class="kt">Coord</span><span class="o">]</span> <span class="o">{</span>
</span><span class='line'>  <span class="c1">// Set contract methods...</span>
</span><span class='line'>
</span><span class='line'>  <span class="c1">// get all neighbors for every cell, group by cell</span>
</span><span class='line'>  <span class="c1">// and get a tuple with Coord and neighbors count</span>
</span><span class='line'>  <span class="k">private</span> <span class="k">val</span> <span class="n">neighbors</span> <span class="k">=</span> <span class="n">alive</span><span class="o">.</span><span class="n">toList</span> <span class="n">flatMap</span><span class="o">(</span><span class="n">_</span><span class="o">.</span><span class="n">neighbors</span><span class="o">)</span> <span class="n">groupBy</span> <span class="o">(</span><span class="n">identity</span><span class="o">)</span> <span class="n">map</span> <span class="o">{</span> <span class="k">case</span> <span class="o">(</span><span class="n">c</span><span class="o">,</span> <span class="n">l</span><span class="o">)</span> <span class="k">=&gt;</span> <span class="o">(</span><span class="n">c</span><span class="o">,</span> <span class="n">l</span><span class="o">.</span><span class="n">size</span><span class="o">)</span> <span class="o">}</span>
</span><span class='line'>  <span class="c1">// define a generic method to obtain a filtered selection of cells</span>
</span><span class='line'>  <span class="k">private</span> <span class="k">def</span> <span class="n">neighborhood</span><span class="o">(</span><span class="n">filter</span><span class="k">:</span> <span class="kt">Filter</span><span class="o">)</span> <span class="k">=</span> <span class="k">for</span> <span class="o">(</span><span class="n">filter</span><span class="o">(</span><span class="n">coord</span><span class="o">)</span> <span class="k">&lt;-</span> <span class="n">neighbors</span><span class="o">)</span> <span class="k">yield</span> <span class="n">coord</span>
</span><span class='line'>  <span class="c1">// obtain new born cells </span>
</span><span class='line'>  <span class="c1">// (ie the ones that meet newborn filter requirements)</span>
</span><span class='line'>  <span class="k">private</span> <span class="k">def</span> <span class="n">babies</span> <span class="k">=</span> <span class="n">neighborhood</span><span class="o">(</span><span class="n">newborn</span><span class="o">)</span>
</span><span class='line'>  <span class="c1">// obtain current alive cells, watch out for the &quot;alive &amp;&quot; stuff...</span>
</span><span class='line'>  <span class="k">private</span> <span class="k">def</span> <span class="n">adults</span> <span class="k">=</span> <span class="n">alive</span> <span class="o">&amp;</span> <span class="n">neighborhood</span><span class="o">(</span><span class="n">stable</span><span class="o">).</span><span class="n">toSet</span>
</span><span class='line'>  <span class="c1">// concatenate adults with babies</span>
</span><span class='line'>  <span class="k">def</span> <span class="n">nextGeneration</span> <span class="k">=</span> <span class="nc">Generation</span><span class="o">(</span><span class="n">adults</span> <span class="o">++</span> <span class="n">babies</span><span class="o">)</span>
</span><span class='line'><span class="o">}</span>
</span></code></pre></td></tr></table></div></figure>


<p>Filters are defined in <strong>Generation</strong> Object as</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>
<span class='line-number'>22</span>
</pre></td><td class='code'><pre><code class='scala'><span class='line'><span class="k">object</span> <span class="nc">Generation</span> <span class="o">{</span>
</span><span class='line'>  <span class="c1">// case class already defines an apply() method so</span>
</span><span class='line'>  <span class="c1">// let&#39;s only define an unapply method which</span>
</span><span class='line'>  <span class="c1">// accepts a function((Coord, Int)) to Option[Coord]</span>
</span><span class='line'>  <span class="c1">// as filtering logic</span>
</span><span class='line'>  <span class="k">case</span> <span class="k">class</span> <span class="nc">Filter</span><span class="o">(</span><span class="n">f</span><span class="k">:</span> <span class="o">((</span><span class="kt">Coord</span><span class="o">,</span> <span class="kt">Int</span><span class="o">))</span> <span class="k">=&gt;</span> <span class="nc">Option</span><span class="o">[</span><span class="kt">Coord</span><span class="o">])</span> <span class="o">{</span>
</span><span class='line'>    <span class="k">def</span> <span class="n">unapply</span><span class="o">(</span><span class="n">t</span><span class="k">:</span> <span class="o">(</span><span class="kt">Coord</span><span class="o">,</span> <span class="kt">Int</span><span class="o">))</span><span class="k">:</span> <span class="kt">Option</span><span class="o">[</span><span class="kt">Coord</span><span class="o">]</span> <span class="k">=</span> <span class="n">f</span><span class="o">(</span><span class="n">t</span><span class="o">)</span>
</span><span class='line'>  <span class="o">}</span>
</span><span class='line'>  <span class="k">def</span> <span class="n">apply</span><span class="o">(</span><span class="n">alive</span><span class="k">:</span> <span class="kt">Set</span><span class="o">[</span><span class="kt">Coord</span><span class="o">])</span> <span class="k">=</span> <span class="k">new</span> <span class="nc">Generation</span><span class="o">(</span><span class="n">alive</span><span class="o">)</span>
</span><span class='line'>
</span><span class='line'>  <span class="c1">// if a cell has 3 neighbors it&#39;s ok for a new birth</span>
</span><span class='line'>  <span class="k">val</span> <span class="n">newborn</span> <span class="k">=</span> <span class="nc">Filter</span> <span class="o">{</span>
</span><span class='line'>    <span class="k">case</span> <span class="o">(</span><span class="n">c</span><span class="o">,</span> <span class="mi">3</span><span class="o">)</span> <span class="k">=&gt;</span> <span class="nc">Some</span><span class="o">(</span><span class="n">c</span><span class="o">)</span>
</span><span class='line'>    <span class="k">case</span> <span class="k">_</span> <span class="k">=&gt;</span> <span class="nc">None</span>
</span><span class='line'>  <span class="o">}</span>
</span><span class='line'>  <span class="c1">// 2 or 3 neighbors are ok...</span>
</span><span class='line'>  <span class="k">val</span> <span class="n">stable</span> <span class="k">=</span> <span class="nc">Filter</span> <span class="o">{</span>
</span><span class='line'>    <span class="k">case</span> <span class="o">(</span><span class="n">c</span><span class="o">,</span> <span class="mi">2</span><span class="o">)</span> <span class="k">=&gt;</span> <span class="nc">Some</span><span class="o">(</span><span class="n">c</span><span class="o">)</span>
</span><span class='line'>    <span class="k">case</span> <span class="o">(</span><span class="n">c</span><span class="o">,</span> <span class="mi">3</span><span class="o">)</span> <span class="k">=&gt;</span> <span class="nc">Some</span><span class="o">(</span><span class="n">c</span><span class="o">)</span>
</span><span class='line'>    <span class="k">case</span> <span class="k">_</span> <span class="k">=&gt;</span> <span class="nc">None</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>The last interesting stuff is the <em>implicit</em> conversion from Tuple to Coord
objects</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">implicit</span> <span class="k">def</span> <span class="n">tupleToCoord</span><span class="o">(</span><span class="n">t</span><span class="k">:</span> <span class="o">(</span><span class="kt">Int</span><span class="o">,</span> <span class="kt">Int</span><span class="o">))</span><span class="k">:</span> <span class="kt">Coord</span> <span class="o">=</span> <span class="n">apply</span><span class="o">(</span><span class="n">t</span><span class="o">.</span><span class="n">_1</span><span class="o">,</span> <span class="n">t</span><span class="o">.</span><span class="n">_2</span><span class="o">)</span>
</span></code></pre></td></tr></table></div></figure>


<p>Now add some graphic code and here we are:</p>

<p><img class="center" src="http://www.ilbanshee.net/press/post_images/12/gol1.png"></p>

<p><em>Update (04 feb): code is now stored on github</em></p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Pulizie di primavera]]></title>
    <link href="http://www.ilbanshee.net/press/blog/2012/01/15/pulizie-di-primavera/"/>
    <updated>2012-01-15T09:43:00+01:00</updated>
    <id>http://www.ilbanshee.net/press/blog/2012/01/15/pulizie-di-primavera</id>
    <content type="html"><![CDATA[<p>Questa volta non ci casco, è inutile promettere di seguire questo blog quando
so benissimo che ci sono talmente tante cose da fare in una vita che già
spazzare
il pavimento di casa e portar fuori l&#8217;immondizia fanno
passare in secondo-terzo-quarto piano le routinarie operazioni di igiene
dovute al proprio sito personale.</p>

<p>D&#8217;altra parte, visto lo stato pietoso in cui versava il mio dominio, era
necessario fare qualcosa&#8230; tanto per dare un segno di vita!</p>

<p>Innanzi tutto si imponeva un cambio di look, font decisamente troppo piccolo
e magro per una lettura piacevole e riposante, tema eccessivamente bianco
e troppo spazio vuoto. Non potevo, tuttavia, limitarmi alla
ricerca/creazione/modifica di una skin qualsiasi per
<a href="http://wordpress.org/extend/themes/">wordpress</a>, troppa roba da scartabellare
(<em>1465</em> temi al momento!) e un certo malessere al pensiero di imbastire
nuovamente la baracca:</p>

<ul>
<li>wordpress (che ormai avevo riempito di plugin in preda al delirio
della sperimentazioni);</li>
<li>database (mysql) con annesso phpmyadmin;</li>
<li>setup del pannello di amministrazione (plugin&#8230;);</li>
<li>cercare un plugin come-dico-io&trade; per la visualizzazione delle gallery;</li>
<li>aggiornamenti automatici;</li>
<li>uso di un editor html per scrivere i post;</li>
<li>etc etc&#8230;</li>
</ul>


<p><span class='pullquote-right' data-pullquote='wordpress mi ha rotto'>
Insomma, dopo svariati anni di utilizzo, e pur considerandolo uno strumento
eccezionale ed estremamente flessibile, wordpress mi ha rotto.
</span>
La ricerca di alternative (e nemmeno io sapevo esattamente di quale genere
queste potessero essere) mi ha portato a scoprire l&#8217;esistenza di
<a href="http://jekyllrb.com/">Jekill</a> prima e di <a href="http://octopress.org/">Octopress</a>
dopo&#8230; e qui ci sta una spiegazione per chi non è avvezzo a questi <em>blogging
framework per hacker</em> (come si autodefiniscono).</p>

<!-- more -->


<p>In un normale sito dinamico del codice viene eseguito (sia esso scritto in php,
java, qualche sarcazzo di .net o similare) lato server e, questo, accedendo
ad una base di dati (solitamente un database mysql) genera al volo
una pagina web pronta per essere vista dal browser.
Il procedimento è estremamente flessibile e permette una personalizzazione e
reattività estrema nella presentazione dei contenuti agli utenti e questo
paradigma si è imposto rapidamente sul mercato visti i suoi indiscutibili
vantaggi; CMS, blog e portali vari sono tutti basati su questa architettura al
giorno d&#8217;oggi e non potrebbero essere altrimenti visti i requisiti che devono
soddisfare (multiutenza, presentazione diversa dei dati, ricerca ed
indicizzazione, &#8230;).</p>

<p>D&#8217;altra parte Octopress si propone di essere un <em>generatore</em> di blog, una serie
di script e programmi installati sul mio pc personale che, una volta letta una
pletora di file, sono in grado di costruire tutte le pagine html che compongono
il mio sito. Pur rendendomi conto che, tecnologicamente parlando, stiamo
tornando indietro alle pagine statiche in un mondo in cui <strong>tutti</strong> gli hosting
danno supporto php, spazio su disco illimitato e 50MB di database per
un tozzo di pane/anno,
non posso non considerare i vantaggi che un simile approccio comporta per il mio
personale utilizzo:</p>

<ul>
<li>niente da installare in remoto (e da mantenere/far mantenere aggiornato);</li>
<li>l&#8217;installazione sul mio pc consta di un checkout dal repository git e
l&#8217;installazione di ruby;</li>
<li>il sito è aggiornabile tramite linea di comando utilizzando <strong>rsync</strong>
(ripetete con me <em>&#8220;lode lode a rsync ed ssh!&#8221;</em>);</li>
<li>i 4 plugin in croce che compongono Octopress sono in grado di soddisfare le
mie personali esigenze e, se proprio non dovessi resistere, mi danno modo di
espandere in qualche modo la piattaforma in futuro (non avrò mai voglia, lo so
bene);</li>
<li>il tema, passata qualche ora a personalizzarlo, è molto gradevole e
leggibilissimo, il supporto per l&#8217;incorporazione del codice sorgente è
meraviglioso e trovo le operazioni di modifica molto semplici e naturali;</li>
<li>una volta esportati i miei post precedenti dal database di wordpress e
convertiti in <a href="http://daringfireball.net/projects/markdown/">Markdown</a> posso
utilizzare sed, grep, awk e tutti i loro amichetti per gestire da shell il loro
contenuto. Roba da nerd vero, ma il dominio è mio e me lo gestisco io&#8230;</li>
<li>posso comodamente scrivere i post da Emacs;</li>
<li>il sito è statico, non è che domani esce uno zero-day per wordpress e mi
trovo a distribuire spyware al mondo, e non vivendo attaccato al pc e alla
mailinglist di wordpress questa cosa è fantastica;</li>
<li>non potendo incorporare gallery mi sono finalmente deciso a scaricare il
problema ad altri e ho aperto un account su
<a href="http://www.flickr.com/photos/tzipporah/">Flick</a>;</li>
<li>stesso ragionamento vale per i commenti, dove ho incorporato Disqus, già
supportato di default da Octopress.</li>
</ul>


<p>Mi rendo conto che questi sono i miei personali vantaggi e per voi la situazione
potrebbe essere radicalmente diversa&#8230; infatti sul vostro dominio potete fare
come meglio credete :D</p>

<p>Purtroppo questa migrazione non è indolore ed i riferimenti alle vecchie
immagini sono andate tutte incasinati. I post più vecchi non visualizzeranno
tutte le foto in modo corretto e le gallery più vecchie mancheranno di
visualizzarsi. Per quanto riguarda le gallery potete tranquillamente andare su
<a href="http://www.flickr.com/photos/tzipporah/">Flick</a>. Ho, inoltre, intenzione di
raccogliere tutti i post riguardanti
la tecnica fotografica e argomenti annessi in una pagina apposita,
riorganizzando un po&#8217; il contenuto e rivedendolo, del resto quando un amico
mi chiede un&#8217;introduzione alla fotografia lo dirigo sempre su queste pagine e,
ora che non sono visualizzabili come si deve, mi tocca fare qualcosa ;).</p>

<p>Ultimo appunto è il passaggio all&#8217;hosting su <a href="http://dreamhost.com">DreamHost</a>
(un grazie a <a href="http://www.diegobetto.com/">Mav</a>, che prima o poi metterà su
il suo portfolio mi auguro) e all&#8217;abbandono di quella crosta di Aruba
(che nemmeno linko per gentilezza nei vostri confronti).
Adesso è tutto molto più performante, molto (e posso usare ssh+rsync).</p>

<p>E ora&#8230;</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='bash'><span class='line'>rake deploy
</span></code></pre></td></tr></table></div></figure>



]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Mai portare i filosofi a cena]]></title>
    <link href="http://www.ilbanshee.net/press/blog/2011/12/30/mai-portare-i-filosofi-a-cena/"/>
    <updated>2011-12-30T00:17:52+01:00</updated>
    <id>http://www.ilbanshee.net/press/blog/2011/12/30/mai-portare-i-filosofi-a-cena</id>
    <content type="html"><![CDATA[<p>Ovvero il <a href="http://it.wikipedia.org/wiki/Problema_dei_filosofi_a_cena">problema dei filosofi a cena</a> risolto utilizzando Scala ed Akka 2.0 (l’attuale snapshot)</p>

<figure class='code'><figcaption><span> (dining_philosophers.scala)</span> <a href='http://www.ilbanshee.net/press/downloads/code/dining_philosophers.scala'>download</a></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>
<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>
<span class='line-number'>22</span>
<span class='line-number'>23</span>
<span class='line-number'>24</span>
<span class='line-number'>25</span>
<span class='line-number'>26</span>
<span class='line-number'>27</span>
<span class='line-number'>28</span>
<span class='line-number'>29</span>
<span class='line-number'>30</span>
<span class='line-number'>31</span>
<span class='line-number'>32</span>
<span class='line-number'>33</span>
<span class='line-number'>34</span>
<span class='line-number'>35</span>
<span class='line-number'>36</span>
<span class='line-number'>37</span>
<span class='line-number'>38</span>
<span class='line-number'>39</span>
<span class='line-number'>40</span>
<span class='line-number'>41</span>
<span class='line-number'>42</span>
<span class='line-number'>43</span>
<span class='line-number'>44</span>
<span class='line-number'>45</span>
<span class='line-number'>46</span>
<span class='line-number'>47</span>
<span class='line-number'>48</span>
<span class='line-number'>49</span>
<span class='line-number'>50</span>
<span class='line-number'>51</span>
<span class='line-number'>52</span>
<span class='line-number'>53</span>
<span class='line-number'>54</span>
<span class='line-number'>55</span>
<span class='line-number'>56</span>
<span class='line-number'>57</span>
<span class='line-number'>58</span>
<span class='line-number'>59</span>
<span class='line-number'>60</span>
<span class='line-number'>61</span>
<span class='line-number'>62</span>
<span class='line-number'>63</span>
<span class='line-number'>64</span>
<span class='line-number'>65</span>
<span class='line-number'>66</span>
<span class='line-number'>67</span>
<span class='line-number'>68</span>
<span class='line-number'>69</span>
<span class='line-number'>70</span>
<span class='line-number'>71</span>
<span class='line-number'>72</span>
<span class='line-number'>73</span>
<span class='line-number'>74</span>
<span class='line-number'>75</span>
<span class='line-number'>76</span>
<span class='line-number'>77</span>
<span class='line-number'>78</span>
<span class='line-number'>79</span>
<span class='line-number'>80</span>
<span class='line-number'>81</span>
<span class='line-number'>82</span>
<span class='line-number'>83</span>
<span class='line-number'>84</span>
<span class='line-number'>85</span>
<span class='line-number'>86</span>
<span class='line-number'>87</span>
<span class='line-number'>88</span>
<span class='line-number'>89</span>
<span class='line-number'>90</span>
<span class='line-number'>91</span>
<span class='line-number'>92</span>
<span class='line-number'>93</span>
<span class='line-number'>94</span>
<span class='line-number'>95</span>
<span class='line-number'>96</span>
<span class='line-number'>97</span>
<span class='line-number'>98</span>
<span class='line-number'>99</span>
<span class='line-number'>100</span>
</pre></td><td class='code'><pre><code class='scala'><span class='line'><span class="k">import</span> <span class="nn">akka.actor.Actor</span>
</span><span class='line'><span class="k">import</span> <span class="nn">akka.actor.ActorRef</span>
</span><span class='line'><span class="k">import</span> <span class="nn">akka.actor.Props</span>
</span><span class='line'><span class="k">import</span> <span class="nn">akka.util.duration._</span>
</span><span class='line'><span class="k">import</span> <span class="nn">scala.actors.threadpool.TimeUnit</span>
</span><span class='line'><span class="k">import</span> <span class="nn">akka.actor.ActorSystem</span>
</span><span class='line'>
</span><span class='line'><span class="k">sealed</span> <span class="k">trait</span> <span class="nc">TableMessage</span>
</span><span class='line'><span class="k">case</span> <span class="k">class</span> <span class="nc">Take</span><span class="o">(</span><span class="n">philosopher</span><span class="k">:</span> <span class="kt">ActorRef</span><span class="o">)</span> <span class="k">extends</span> <span class="nc">TableMessage</span>
</span><span class='line'><span class="k">case</span> <span class="k">class</span> <span class="nc">Taken</span><span class="o">(</span><span class="n">fork</span><span class="k">:</span> <span class="kt">ActorRef</span><span class="o">)</span> <span class="k">extends</span> <span class="nc">TableMessage</span>
</span><span class='line'><span class="k">object</span> <span class="nc">Eat</span> <span class="k">extends</span> <span class="nc">TableMessage</span>
</span><span class='line'><span class="k">object</span> <span class="nc">Think</span> <span class="k">extends</span> <span class="nc">TableMessage</span>
</span><span class='line'><span class="k">object</span> <span class="nc">Busy</span> <span class="k">extends</span> <span class="nc">TableMessage</span>
</span><span class='line'><span class="k">object</span> <span class="nc">Put</span> <span class="k">extends</span> <span class="nc">TableMessage</span>
</span><span class='line'>
</span><span class='line'><span class="k">class</span> <span class="nc">Fork</span> <span class="k">extends</span> <span class="nc">Actor</span> <span class="o">{</span>
</span><span class='line'>  <span class="k">import</span> <span class="nn">context.become</span>
</span><span class='line'>
</span><span class='line'>  <span class="k">def</span> <span class="n">available</span><span class="k">:</span> <span class="kt">Receive</span> <span class="o">=</span> <span class="o">{</span>
</span><span class='line'>    <span class="k">case</span> <span class="nc">Take</span><span class="o">(</span><span class="n">philosopher</span><span class="o">)</span> <span class="k">=&gt;</span>
</span><span class='line'>      <span class="n">become</span><span class="o">(</span><span class="n">taken</span><span class="o">)</span>
</span><span class='line'>      <span class="n">philosopher</span> <span class="o">!</span> <span class="nc">Taken</span><span class="o">(</span><span class="n">self</span><span class="o">)</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">taken</span><span class="k">:</span> <span class="kt">Receive</span> <span class="o">=</span> <span class="o">{</span>
</span><span class='line'>    <span class="k">case</span> <span class="nc">Take</span><span class="o">(</span><span class="n">otherOne</span><span class="o">)</span> <span class="k">=&gt;</span>
</span><span class='line'>      <span class="n">otherOne</span> <span class="o">!</span> <span class="nc">Busy</span>
</span><span class='line'>    <span class="k">case</span> <span class="nc">Put</span> <span class="k">=&gt;</span>
</span><span class='line'>      <span class="n">become</span><span class="o">(</span><span class="n">available</span><span class="o">)</span>
</span><span class='line'>    <span class="k">case</span> <span class="n">x</span> <span class="k">=&gt;</span> <span class="n">println</span><span class="o">(</span><span class="n">x</span><span class="o">)</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">receive</span> <span class="k">=</span> <span class="n">available</span>
</span><span class='line'><span class="o">}</span>
</span><span class='line'>
</span><span class='line'><span class="k">class</span> <span class="nc">Philosopher</span><span class="o">(</span><span class="n">left</span><span class="k">:</span> <span class="kt">ActorRef</span><span class="o">,</span> <span class="n">right</span><span class="k">:</span> <span class="kt">ActorRef</span><span class="o">)</span> <span class="k">extends</span> <span class="nc">Actor</span> <span class="o">{</span>
</span><span class='line'>  <span class="k">import</span> <span class="nn">context.become</span>
</span><span class='line'>  <span class="k">import</span> <span class="nn">context.system</span>
</span><span class='line'>
</span><span class='line'>  <span class="k">def</span> <span class="n">hungry</span><span class="k">:</span> <span class="kt">Receive</span> <span class="o">=</span> <span class="o">{</span>
</span><span class='line'>    <span class="k">case</span> <span class="nc">Taken</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="n">left</span><span class="o">)</span> <span class="k">=&gt;</span>
</span><span class='line'>      <span class="n">become</span><span class="o">(</span><span class="n">waiting_for</span><span class="o">(</span><span class="n">right</span><span class="o">,</span> <span class="n">left</span><span class="o">))</span>
</span><span class='line'>    <span class="k">case</span> <span class="nc">Taken</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="n">right</span><span class="o">)</span> <span class="k">=&gt;</span>
</span><span class='line'>      <span class="n">become</span><span class="o">(</span><span class="n">waiting_for</span><span class="o">(</span><span class="n">left</span><span class="o">,</span> <span class="n">right</span><span class="o">))</span>
</span><span class='line'>    <span class="k">case</span> <span class="nc">Busy</span> <span class="k">=&gt;</span>
</span><span class='line'>      <span class="n">become</span><span class="o">(</span><span class="n">denied</span><span class="o">)</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">eating</span><span class="k">:</span> <span class="kt">Receive</span> <span class="o">=</span> <span class="o">{</span>
</span><span class='line'>    <span class="k">case</span> <span class="nc">Think</span> <span class="k">=&gt;</span>
</span><span class='line'>      <span class="n">println</span><span class="o">(</span><span class="n">self</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">name</span> <span class="o">+</span> <span class="s">&quot; puts down his forks and starts to think&quot;</span><span class="o">)</span>
</span><span class='line'>      <span class="n">become</span><span class="o">(</span><span class="n">thinking</span><span class="o">)</span>
</span><span class='line'>      <span class="n">left</span> <span class="o">!</span> <span class="nc">Put</span>
</span><span class='line'>      <span class="n">right</span> <span class="o">!</span> <span class="nc">Put</span>
</span><span class='line'>      <span class="n">system</span><span class="o">.</span><span class="n">scheduler</span><span class="o">.</span><span class="n">scheduleOnce</span><span class="o">(</span><span class="mi">3</span> <span class="n">seconds</span><span class="o">,</span> <span class="n">self</span><span class="o">,</span> <span class="nc">Eat</span><span class="o">)</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">waiting_for</span><span class="o">(</span><span class="n">toWaitFor</span><span class="k">:</span> <span class="kt">ActorRef</span><span class="o">,</span> <span class="n">taken</span><span class="k">:</span> <span class="kt">ActorRef</span><span class="o">)</span><span class="k">:</span> <span class="kt">Receive</span> <span class="o">=</span> <span class="o">{</span>
</span><span class='line'>    <span class="k">case</span> <span class="nc">Taken</span><span class="o">(</span><span class="n">toWaitFor</span><span class="o">)</span> <span class="k">=&gt;</span>
</span><span class='line'>      <span class="n">become</span><span class="o">(</span><span class="n">eating</span><span class="o">)</span>
</span><span class='line'>      <span class="n">println</span><span class="o">(</span><span class="n">self</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">name</span> <span class="o">+</span> <span class="s">&quot; has taken &quot;</span> <span class="o">+</span> <span class="n">taken</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">name</span> <span class="o">+</span> <span class="s">&quot; and &quot;</span> <span class="o">+</span> <span class="n">toWaitFor</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">name</span><span class="o">)</span>
</span><span class='line'>      <span class="n">system</span><span class="o">.</span><span class="n">scheduler</span><span class="o">.</span><span class="n">scheduleOnce</span><span class="o">(</span><span class="mi">3</span> <span class="n">seconds</span><span class="o">,</span> <span class="n">self</span><span class="o">,</span> <span class="nc">Think</span><span class="o">)</span>
</span><span class='line'>    <span class="k">case</span> <span class="nc">Busy</span> <span class="k">=&gt;</span>
</span><span class='line'>      <span class="n">become</span><span class="o">(</span><span class="n">thinking</span><span class="o">)</span>
</span><span class='line'>      <span class="n">taken</span> <span class="o">!</span> <span class="nc">Put</span>
</span><span class='line'>      <span class="n">self</span> <span class="o">!</span> <span class="nc">Eat</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">thinking</span><span class="k">:</span> <span class="kt">Receive</span> <span class="o">=</span> <span class="o">{</span>
</span><span class='line'>    <span class="k">case</span> <span class="nc">Eat</span> <span class="k">=&gt;</span>
</span><span class='line'>      <span class="n">become</span><span class="o">(</span><span class="n">hungry</span><span class="o">)</span>
</span><span class='line'>      <span class="n">left</span> <span class="o">!</span> <span class="nc">Take</span><span class="o">(</span><span class="n">self</span><span class="o">)</span>
</span><span class='line'>      <span class="n">right</span> <span class="o">!</span> <span class="nc">Take</span><span class="o">(</span><span class="n">self</span><span class="o">)</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">denied</span><span class="k">:</span> <span class="kt">Receive</span> <span class="o">=</span> <span class="o">{</span>
</span><span class='line'>    <span class="k">case</span> <span class="nc">Taken</span><span class="o">(</span><span class="n">fork</span><span class="o">)</span> <span class="k">=&gt;</span>
</span><span class='line'>      <span class="n">become</span><span class="o">(</span><span class="n">thinking</span><span class="o">)</span>
</span><span class='line'>      <span class="n">fork</span> <span class="o">!</span> <span class="nc">Put</span>
</span><span class='line'>      <span class="n">self</span> <span class="o">!</span> <span class="nc">Eat</span>
</span><span class='line'>    <span class="k">case</span> <span class="nc">Busy</span> <span class="k">=&gt;</span>
</span><span class='line'>      <span class="n">become</span><span class="o">(</span><span class="n">thinking</span><span class="o">)</span>
</span><span class='line'>      <span class="n">self</span> <span class="o">!</span> <span class="nc">Eat</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">receive</span> <span class="k">=</span> <span class="o">{</span>
</span><span class='line'>    <span class="k">case</span> <span class="nc">Think</span> <span class="k">=&gt;</span>
</span><span class='line'>      <span class="n">become</span><span class="o">(</span><span class="n">thinking</span><span class="o">)</span>
</span><span class='line'>      <span class="n">system</span><span class="o">.</span><span class="n">scheduler</span><span class="o">.</span><span class="n">scheduleOnce</span><span class="o">(</span><span class="mi">1</span> <span class="n">seconds</span><span class="o">,</span> <span class="n">self</span><span class="o">,</span> <span class="nc">Eat</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><span class='line'><span class="k">object</span> <span class="nc">Dining</span> <span class="k">extends</span> <span class="nc">App</span> <span class="o">{</span>
</span><span class='line'>  <span class="k">val</span> <span class="n">system</span> <span class="k">=</span> <span class="nc">ActorSystem</span><span class="o">(</span><span class="s">&quot;DiningTable&quot;</span><span class="o">)</span>
</span><span class='line'>  <span class="k">val</span> <span class="n">forks</span> <span class="k">=</span> <span class="k">for</span> <span class="o">(</span><span class="n">i</span> <span class="k">&lt;-</span> <span class="mi">1</span> <span class="n">to</span> <span class="mi">5</span><span class="o">)</span> <span class="k">yield</span> <span class="n">system</span><span class="o">.</span><span class="n">actorOf</span><span class="o">(</span><span class="nc">Props</span><span class="o">[</span><span class="kt">Fork</span><span class="o">],</span> <span class="s">&quot;fork&quot;</span> <span class="o">+</span> <span class="n">i</span><span class="o">)</span>
</span><span class='line'>  <span class="k">val</span> <span class="n">philosophers</span> <span class="k">=</span> <span class="k">for</span> <span class="o">{</span>
</span><span class='line'>    <span class="o">(</span><span class="n">name</span><span class="o">,</span> <span class="n">i</span><span class="o">)</span> <span class="k">&lt;-</span> <span class="o">(</span><span class="nc">List</span><span class="o">(</span><span class="s">&quot;Pluto&quot;</span><span class="o">,</span> <span class="s">&quot;Socrates&quot;</span><span class="o">,</span> <span class="s">&quot;Aristotle&quot;</span><span class="o">,</span> <span class="s">&quot;Pythagoras&quot;</span><span class="o">,</span> <span class="s">&quot;Zeno&quot;</span><span class="o">).</span><span class="n">zipWithIndex</span><span class="o">)</span>
</span><span class='line'>  <span class="o">}</span> <span class="k">yield</span> <span class="n">system</span><span class="o">.</span><span class="n">actorOf</span><span class="o">(</span><span class="nc">Props</span><span class="o">(</span><span class="k">new</span> <span class="nc">Philosopher</span><span class="o">(</span><span class="n">forks</span><span class="o">(</span><span class="n">i</span><span class="o">),</span> <span class="n">forks</span><span class="o">((</span><span class="n">i</span> <span class="o">+</span> <span class="mi">1</span><span class="o">)</span> <span class="o">%</span> <span class="mi">5</span><span class="o">))),</span> <span class="n">name</span><span class="o">)</span>
</span><span class='line'>  <span class="n">philosophers</span><span class="o">.</span><span class="n">foreach</span><span class="o">(</span><span class="k">_</span> <span class="o">!</span> <span class="nc">Think</span><span class="o">)</span>
</span><span class='line'><span class="o">}</span>
</span></code></pre></td></tr></table></div></figure>


<p>ispirato da <a href="http://klangism.tumblr.com/post/968180337/dining-hakkers">questa</a>
soluzione, ossia da <a href="http://www.dalnefre.com/wp/2010/08/dining-philosophers-in-humus/">questa</a></p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Carnevale a Venezia!]]></title>
    <link href="http://www.ilbanshee.net/press/blog/2011/03/06/carnevale-a-venezia/"/>
    <updated>2011-03-06T15:35:53+01:00</updated>
    <id>http://www.ilbanshee.net/press/blog/2011/03/06/carnevale-a-venezia</id>
    <content type="html"><![CDATA[<p>Ci voleva proprio quello per farmi riapparire :P Buona visione!</p>

<object width="400" height="300"> <param name="flashvars" value="offsite=true&lang=it-it&page_show_url=%2Fphotos%2Ftzipporah%2Fsets%2F72157628747975993%2Fshow%2F&page_show_back_url=%2Fphotos%2Ftzipporah%2Fsets%2F72157628747975993%2F&set_id=72157628747975993&jump_to="></param> <param name="movie" value="http://www.flickr.com/apps/slideshow/show.swf?v=109615"></param> <param name="allowFullScreen" value="true"></param><embed type="application/x-shockwave-flash" src="http://www.flickr.com/apps/slideshow/show.swf?v=109615" allowFullScreen="true" flashvars="offsite=true&lang=it-it&page_show_url=%2Fphotos%2Ftzipporah%2Fsets%2F72157628747975993%2Fshow%2F&page_show_back_url=%2Fphotos%2Ftzipporah%2Fsets%2F72157628747975993%2F&set_id=72157628747975993&jump_to=" width="400" height="300"></embed></object>

]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Eppure...]]></title>
    <link href="http://www.ilbanshee.net/press/blog/2010/11/12/eppure/"/>
    <updated>2010-11-12T00:17:52+01:00</updated>
    <id>http://www.ilbanshee.net/press/blog/2010/11/12/eppure</id>
    <content type="html"><![CDATA[<blockquote><p>Non si può negare che il male esista; occorre vederlo e prendere delle precauzioni. Ma anche se esiste, non è una buona ragione per non vedere altro.</p><p>Purtroppo, ci sono persone che si compiacciono nel male come se fosse per loro un nutrimento: vanno matti per gli scandali, le catastrofi, le sordidezze&#8230;<br/>Sostengono di parlare del male per denunciarlo, per combatterlo. <br/>No, è falso; ne parlano perché lo amano, e ne godono. Senza il male si annoierebbero, non avrebbero niente da dire, niente da scrivere. Bisognerebbe abituare i bambini sin da piccoli a interessarsi di preferenza a tutto ciò che è bello, buono, nobile, puro. È talmente più benefico per la loro formazione! Del resto, è questa la vera pedagogia: sforzarsi di nutrire nei bambini l&#8217;amore per tutto ciò che esiste di meglio, perché solo l’amore per la bellezza, per la bontà e per la giustizia permette veramente di neutralizzare il male in se stessi e negli altri.</p><footer><strong>Omraam Mikhaël Aïvanhov</strong> <cite></cite></footer></blockquote>


<p>Mi fa venire in mente certa parte dell&#8217;Italia&#8230; ma non solo per (s)fortuna</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Essere sviluppatori oggi]]></title>
    <link href="http://www.ilbanshee.net/press/blog/2010/10/24/essere-sviluppatori-oggi/"/>
    <updated>2010-10-24T23:22:46+02:00</updated>
    <id>http://www.ilbanshee.net/press/blog/2010/10/24/essere-sviluppatori-oggi</id>
    <content type="html"><![CDATA[<p>Dunque, spiegatemi se ho capito bene, io mi giro un attimo e succede che
Oracle (proprio quella sudiciona dell&#8217;omonimo database) si compra Sun (e
quindi MySql) mandando a puttane OpenOffice e Java (con tanto di stupida causa
contro Google) e nessuno dice un tubo, se MS avesse provato a comprare un
vendor linux sarebbero stati pronti a farsi saltare in aria 1000 pinguini
imbottiti di tritolo, qui il silenzio e la fuga dei dipendenti&#8230;</p>

<p>Non paghi di tutto questo casino Apple decide che è ora che Java e Flash si
arrangino e che l&#8217;utente non deve averli nel suo pc splendidamente integrati
come sempre era stato; così può propinare l&#8217;app store anche sulle macchine di
classe desktop/notebook, a questo punto togliamo la possibilità di installare
applicazioni da dvd, che ne dite? Il futuro è un&#8217;unica famiglia di iPad
con/senza telefono, con/senza tastiera fisica e col monitor più o meno grande?
Wow&#8230;</p>

<p>In tutto questo MS decide che effettivamente Vista era una crosta senza fine e
lancia 7, e, visto che il mondo si sta spostando verso i sistemi operativi
mobile (che dei pc non gliene fotte più a nessuno per muovere i soldi veri),
capisce di dover cestinare quella schifezza di Windows Mobile e scriverne uno
che sia vagamente utilizzabile ed in linea con gli standard attuali e ora, con
solo un paio d&#8217;anni di ritardo, si getta anche lei nella mischia. I miei
personali auguri ma mi sa che non ci sono idee chiare li dentro (del resto
Ballmer non ha ancora capito qual è il lavoro per cui viene pagato&#8230;)</p>

<p>Abbiamo parlato di mobile? E il supergigante Nokia? Che ha fatto di bello?
Comprato Symbian, lo ha rilasciato open, lo ha fatto morire, ne ha ripreso lo
sviluppo, l&#8217;ha rinnegato e poi ha deciso che il futuro è MeeGo. Bravi, se
continuate così persino l&#8217;LG vi mangerà il culo nella fascia degli smartphone,
arrendetevi e ricacciate in gola l&#8217;orgoglio ve ne prego che l&#8217;hw lo fate bene
:( (persino Sony si è arresa e sembra sulla scia di una certa ripresa&#8230;)</p>

<p>Nel mentre Google continua a muoversi in modo apparentemente casuale,
comprando aziende di cui non sa cosa farsene (salvo poi riuscire a farle
fruttare lo stesso :) ), producendo un sistema operativo da utilizzare su
device connesse alla rete, e interpretando correttamente (almeno secondo me)
la prossima lotta nel panorama aziendale informatico: connettere qualsiasi
cosa alla rete e usarla per vendere/distribuire/promuovere qualcosa
(tipicamente merda ma ci son tante cose anche carine, credo).</p>

<p>Apple lo sta facendo da più tempo, Google lo sta facendo su più fronti, MS sta
cercando di capirlo, chissà cosa ne tireranno fuori.</p>

<p>E se vi state chiedendo cosa centri la parte iniziale su Sun è presto detto,
il backend di tutto questo marasma di roba (a parte per MS, forse) in che
linguaggio credete che sia stato e sarà scritto? Maremma che casino, per
fortuna me ne son tirato fuori&#8230; è dura essere sviluppatori oggi&#8230;</p>

<p>P.S. se il discorso vi pare sconfusionato è perché è stato scritto di getto,
sono certo che chi deve capire, tuttavia, capirà</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Splendido Dalí]]></title>
    <link href="http://www.ilbanshee.net/press/blog/2010/09/26/splendido-dali/"/>
    <updated>2010-09-26T13:35:05+02:00</updated>
    <id>http://www.ilbanshee.net/press/blog/2010/09/26/splendido-dali</id>
    <content type="html"><![CDATA[<p>non so che altro dire&#8230;</p>

<iframe width="1280" height="720" src="http://www.youtube.com/embed/1GFkN4deuZU?hd=1" frameborder="0" allowfullscreen></iframe>



]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Comunicazione di servizio]]></title>
    <link href="http://www.ilbanshee.net/press/blog/2010/08/27/comunicazione-di-servizio-2/"/>
    <updated>2010-08-27T10:19:05+02:00</updated>
    <id>http://www.ilbanshee.net/press/blog/2010/08/27/comunicazione-di-servizio-2</id>
    <content type="html"><![CDATA[<p>Siamo di nuovo in piedi, risolti dei &#8220;piccoli&#8221; problemi di funzionamento del
tutto.</p>

<p>Shit happens, capita anche nelle migliori famiglie :)</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Suunto Vector Hr, molto più di un orologio?]]></title>
    <link href="http://www.ilbanshee.net/press/blog/2010/08/22/suunto-vector-hr-molto-piu-di-un-orologio-2/"/>
    <updated>2010-08-22T21:26:56+02:00</updated>
    <id>http://www.ilbanshee.net/press/blog/2010/08/22/suunto-vector-hr-molto-piu-di-un-orologio-2</id>
    <content type="html"><![CDATA[<p><img class="right" src="http://www.ilbanshee.net/press/post_images/10/suunto-vector-white.png"></p>

<p>Dovete sapere che per me
l&#8217;acquisto di un oggetto personale si riconduce a due sole possibili modalità
d&#8217;azione: nella prima compro la prima cosa che vagamente assomiglia a quello
che mi serve e viviamo tutti felici e contenti; nella seconda modalità
(tipicamente mi sto occupando di un oggetto in qualche modo &#8220;tecnico&#8221; e,
quindi, in grado di stimolare i miei istinti geek, tra gli altri) la
valutazione è lunga, difficile e la decisione, in mancanza di una chiara
supremazia a livello di caratteristiche o rapporto qualità/prezzo, è
travagliata.</p>

<p>Ovviamente questo è stato il caso per l&#8217;acquisto di questo orologio da polso
con millemila funzionalità annesse.</p>

<p>In prima battuta stavo cercando un orologio dotato di funzionalità evolute
come cronometro/timer, unica vera mancanza del mio precedente (e ancora in
servizio) G-Shock, e/o un orologio dotato di funzionalità ABC, ovvero
altimetro, barometro, bussola (compass in inglese), possibilmente con
alimentazione solare e una buona resistenza costruttiva. Risparmiatevi pure la
fatica&#8230; non ne esistono con tutte queste funzioni incluse (o se esistono e
non li conosco lasciate pure un commento perché ne sarei davvero felice :) ).</p>

<p>Insomma, per fare breve una storia lunga, la scelta si è ridotta a due
modelli, il <a href="http://www.casio-europe.com/it/watch/technology/radiocontrolled/protrek/prw-2000-1er/">Casio Protrek PRW-2000</a> o il
<a href="http://www.suunto.com/it/Products/Outdoor/Suunto-Vector-Heart-%0ARate-HR/Suunto-Vector-HR-White/">Suunto Vector</a>, disponibile anche col l&#8217;opzione del
cardiofrequenzimetro (HR). Da bravo metodico ho individuato i miei personali
Pro/Contro dei due modelli e poi ho proceduto alla scelta&#8230;</p>

<p>Pro del Casio:</p>

<ul>
<li>alimentazione solare;</li>
<li>retroilluminazione automatica (con un sensore di inclinazione) attivabile (voi riderete ma in ambulanza ogni tanto torna utile);</li>
<li>5 allarmi giornalieri;</li>
<li>vetro minerale e, in generale, costruzione meno robusta dei G-Shock ma comunque robusta.</li>
</ul>


<p>Contro del Casio:</p>

<ul>
<li>sensoristica &#8220;sacrificata&#8221; al risparmio energetico, tipicamente con letture automatiche meno frequenti dei sensori con annesso logbook &#8220;striminzito&#8221; e che culminano, infine, con l&#8217;impossibilità di retroilluminare il display durante l&#8217;uso della bussola e, in generale, sensori meno precisi (almeno così dicono sui vari forum, le prove in negozio valgono quel che valgono&#8230;).</li>
</ul>


<p>Pro del Suunto:</p>

<ul>
<li>sensoristica senza compromessi di uso e di precisione con funzionalità complete di logbook automatico oggettivamente più utilizzabili e chicche come la velocità di salita/discesa &#8220;istantanea&#8221;;</li>
<li>bolla per poter allineare la bussola (oh, se mi dai una cosa tanto vale darmela bene&#8230;);</li>
<li>intervallometro per allenamenti e, in genere, funzionalità migliori per timer/cronometro rispetto al Protrek;</li>
<li>cardiofrequenzimetro (opinabile lo so);</li>
<li>per quanto non solare le batterie sono cmq sostituibili dall&#8217;utente tranquillamente;</li>
<li>lettura dell&#8217;altimetro con compenso della temperatura (i Casio sembrano avere molteplici problemi in tal senso).</li>
</ul>


<p>Contro del Suunto:</p>

<ul>
<li>costruzione così così, intendiamoci non è che non sembri robusto o non sia costruito bene, è solo che i Casio danno delle sensazioni decisamente migliori da questo punto di vista&#8230;</li>
<li>vetro di plastica&#8230; ragazzi in un orologio di questa fascia di prezzo sinceramente mi fa un po&#8217; tristezza;</li>
<li>3 sole sveglie giornaliere (voi riderete ma io le uso&#8230; è il motivo per cui ho scartato il Suunto Core dalla lista dei papabili).
Alla fine la scelta è caduta sul Vector HR un po&#8217; per l&#8217;estetica (il modello
bianco che ho comprato mi piace assai), un po&#8217; per il cardio e un po&#8217; per i
compromessi a cui l&#8217;alimentazione solare fa scendere nel Protrek. Se deve
essere orologio ABC che almeno lo faccia bene e gli cambierò le batterie ogni
tanto, al massimo il prossimo orologio della mia collezione sarà un G-Shock
solare :P</li>
</ul>


<p>Ed eccoci giunti all&#8217;oggetto vero e proprio, una sola premessa ulteriore:
personalmente trovo l&#8217;usabilità degli orologi Casio superiore a tutti gli
altri, mi sembrano semplicemente più &#8220;logici&#8221;, come accade per le reflex Nikon
rispetto alla concorrenza questo accade per gli orologi, da questo punto di
vista il Suunto è stato da parte mia un &#8220;azzardo&#8221; e una &#8220;sfida&#8221; ai loro
prodotti (ok, ai finnici non gliene sbatterà niente se a me piace o no
l&#8217;usabilità del loro orologio ormai che l&#8217;ho comprato&#8230;).</p>

<p>Diciamo le cose buone per prime, l&#8217;orologio si comporta bene, è comodo, molto
leggibile pur essendo completamente digitale ed esteticamente mi sta bene
indosso (il quadrante è piuttosto grande&#8230;), una volta completato il setup
iniziale (data/ora/unità di misura) la visualizzazione delle informazioni base
è intuitiva e, rispetto al Casio, ammetto che è finalmente un piacere vedere
riportata la data con <em>prima</em> il giorno e <em>poi</em> il mese (anche se ormai mi ci
ero talmente abituato che non ci facevo più caso). Le funzioni base sono
generalmente accessibili con pochi click e l&#8217;intuitività è abbastanza buona
una volta capito il meccanismo modalità/sottomodalità in cui è impostata
l&#8217;interfaccia utente. In sintesi l&#8217;orologio funziona in 5 modalità principali:
tempo; altimetro; barometro; bussola e cardiofrequenzimetro; ognuna di queste
modalità (ciclabili col tasto in alto a dx) include alcune sottomodalità
specifiche per la modalità selezionata in quel momento (ciclabili col tasto in
alto a sx). In questo modo è possibile passare, per esempio, dalla
visualizzazione del battito cardiaco corrente (modalità cardio) al timer per
gli intervalli o al cronometro (due diverse sottomodalità del modo cardio) e
via dicendo (guardatevi i manuali online se li volete tutti elencati, non
intendo ripetervi tutto qui :) ). I restanti due tasti (dx e sx in basso)
svolgono generalmente funzione di +/- per i valori da editare o start/stop e
reset per le funzionalità di timer/cronometro. A livello di comandi si sente
la mancanza di un tasto dedicato per l&#8217;accensione della retroilluminazione,
tenere premuto per due secondi il tasto di cambio modalità è una discreta
rottura per quanto mi riguarda e, in più, il feedback dei tasti non è sempre
perfetto e capita di cambiare visualizzazione invece che accendere il display
(molto male Suunto&#8230;). I logbook del cardiofrequenzimetro riporta FC
max/min/media dell&#8217;allenamento, data e ora di inizio e durata dello stesso,
tempo passato sopra/sotto/internamente alle soglie impostate e durata
effettiva dell&#8217;allenamento nel caso di ripetute con intervallo di riposo,
l&#8217;unica pecca è la presenza di un solo banco di memoria per questi dati e
quindi è meglio che ve li segnate a parte prima di riavviare il cronometro o
il timer per mettere a cuocere la pasta ;) Il logbook dell&#8217;altimetro, invece,
è dotato di 99 memorie con data/ora della registrazione, durata della stessa,
ascesa e discesa totali (con media di velocità di salita/discesa) e numero
complessivo di giri (per loro un giro corrisponde ad una salita e discesa
verticale di 50 metri o più, non chiedetemi il perché). Pecca di questa
modalità è che per iniziare la registrazione bisogna premere DUE volte il
tasto + dell&#8217;orologio (quello usato per avviare il cronometro o il timer per
capirci) senza che le icone visualizzate diano il minimo indizio
all&#8217;utilizzatore del fatto che sia richiesto un simile comportamento da parte
nostra&#8230; Ulteriori due difettucci riscontrati sono la sveglia un po&#8217; poco
rumorosa (anche se fatta l&#8217;abitudine mi riesce comunque a svegliare) e il
manuale, il cui filo logico nel trattare gli argomenti sinceramente mi sfugge,
sembra davvero che abbiano preso il manuale del modello precedente, senza
cardiofrequenzimetro, e ci abbiano infilato dentro le pagine aggiuntive per
questa nuova funzione&#8230;</p>

<p>Al di la di questi tre problemi (che comunque non ne rovinano la fruizione una
volta noti, sveglia a parte se siete un po&#8217; duri d&#8217;orecchie) l&#8217;orologio è
consistente e facile da utilizzare, i sensori si sono rivelati perfetti
nell&#8217;uso in montagna e la fascia cardio è molto comoda e non si sposta durante
l&#8217;esercizio, non posso fare paragoni non avendo avuto altri cardio prima ma mi
sembra comunque di ottima fattura. In pratica se il vostro hobby è
l&#8217;escursionismo montano, l&#8217;attività fisica e, in particolar modo la corsa,
soprattutto la corsa in montagna ma non avete voglia di comprarvi un gps
specifico per l&#8217;allenamento (come il Garmin Forerunner, tanto per dirne uno)
questo è sicuramente il prodotto che fa per voi; se la vostra idea di
escursionismo include 6 mesi nell&#8217;artico da soli senza rifornimenti
probabilmente il pannello solare del Protrek fa al caso vostro  :)</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Camminatina in montagna]]></title>
    <link href="http://www.ilbanshee.net/press/blog/2010/08/18/camminatina-in-montagna/"/>
    <updated>2010-08-18T10:20:49+02:00</updated>
    <id>http://www.ilbanshee.net/press/blog/2010/08/18/camminatina-in-montagna</id>
    <content type="html"><![CDATA[<p>Ieri, giusto per fare due passi e godersi il panorama, ci siamo fatti un
giretto dalle parti del <a href="http://maps.google.it/maps?f=q&amp;source=s_%0Aq&amp;hl=it&amp;q=Wolayersee,+9652+Lesachtal,+Hermagor,+Carinzia,+Austria&amp;sll=41.44272%0A6,12.392578&amp;sspn=30.439993,44.604492&amp;ie=UTF8&amp;cd=1&amp;geocode=FVtQxwIda1TEAA&amp;split%0A=0&amp;hq=&amp;hnear=Wolayersee&amp;ll=46.611744,12.869239&amp;spn=0.027328,0.043559&amp;t=h&amp;z=15">lago Volaia</a>
, grazie a Dema e Ste per la compagnia!</p>

<object width="400" height="300"> <param name="flashvars" value="offsite=true&lang=it-it&page_show_url=%2Fphotos%2Ftzipporah%2Fsets%2F72157628748232533%2Fshow%2F&page_show_back_url=%2Fphotos%2Ftzipporah%2Fsets%2F72157628748232533%2F&set_id=72157628748232533&jump_to="></param> <param name="movie" value="http://www.flickr.com/apps/slideshow/show.swf?v=109615"></param> <param name="allowFullScreen" value="true"></param><embed type="application/x-shockwave-flash" src="http://www.flickr.com/apps/slideshow/show.swf?v=109615" allowFullScreen="true" flashvars="offsite=true&lang=it-it&page_show_url=%2Fphotos%2Ftzipporah%2Fsets%2F72157628748232533%2Fshow%2F&page_show_back_url=%2Fphotos%2Ftzipporah%2Fsets%2F72157628748232533%2F&set_id=72157628748232533&jump_to=" width="400" height="300"></embed></object>


<p>P.S. ho avuto modo di testare il
<a href="http://www.ilbanshee.net/press/blog/2010/08/06/arrivato/">Vector</a> in quello che è il suo
ambiente naturale e si è comportato molto bene, ci medito un po&#8217; sopra e
scrivo due righe di recensione a breve ;)</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Come in 300?]]></title>
    <link href="http://www.ilbanshee.net/press/blog/2010/08/10/come-in-300/"/>
    <updated>2010-08-10T11:49:03+02:00</updated>
    <id>http://www.ilbanshee.net/press/blog/2010/08/10/come-in-300</id>
    <content type="html"><![CDATA[<p>Il cielo giuro che non era così drammatico nella prima foto, mi è piaciuto
calcare la mano, lo ammetto :)</p>

<object width="400" height="300"> <param name="flashvars" value="offsite=true&lang=it-it&page_show_url=%2Fphotos%2Ftzipporah%2Fsets%2F72157628748213185%2Fshow%2F&page_show_back_url=%2Fphotos%2Ftzipporah%2Fsets%2F72157628748213185%2F&set_id=72157628748213185&jump_to="></param> <param name="movie" value="http://www.flickr.com/apps/slideshow/show.swf?v=109615"></param> <param name="allowFullScreen" value="true"></param><embed type="application/x-shockwave-flash" src="http://www.flickr.com/apps/slideshow/show.swf?v=109615" allowFullScreen="true" flashvars="offsite=true&lang=it-it&page_show_url=%2Fphotos%2Ftzipporah%2Fsets%2F72157628748213185%2Fshow%2F&page_show_back_url=%2Fphotos%2Ftzipporah%2Fsets%2F72157628748213185%2F&set_id=72157628748213185&jump_to=" width="400" height="300"></embed></object>

]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Arrivato!]]></title>
    <link href="http://www.ilbanshee.net/press/blog/2010/08/06/arrivato/"/>
    <updated>2010-08-06T17:30:07+02:00</updated>
    <id>http://www.ilbanshee.net/press/blog/2010/08/06/arrivato</id>
    <content type="html"><![CDATA[<p>Cosa è arrivato??? LUI<br/>
<img class="center" src="http://www.ilbanshee.net/press/post_images/10/ss015300000_l.png"><br/>
A presto le prime impressioni in merito :)</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Il mestierante]]></title>
    <link href="http://www.ilbanshee.net/press/blog/2010/08/04/il-mestierante/"/>
    <updated>2010-08-04T08:02:54+02:00</updated>
    <id>http://www.ilbanshee.net/press/blog/2010/08/04/il-mestierante</id>
    <content type="html"><![CDATA[<p>Nei miei buoni propositi dell&#8217;ultimo periodo c&#8217;è anche quello di svegliarmi
(relativamente) presto al mattino e prendere la giornata con calma iniziando
con una buona colazione. L&#8217;unico problema di questo mio brillante piano sembra
essere, ultimamente, la rassegna stampa di Rai News 24. Ormai sono abbastanza
cresciuto per capire la faziosità delle diverse testate giornalistiche e per
&#8220;compensare&#8221;, in una qualche misura, le informazioni che mi vengono fornite
ma, questa mattina, abbiamo veramente rasentato il patetico secondo me. I
fatti: mostrando la rassegna stampa estera, riguardo agli scontri di confine
avvenuti ieri tra Libano e Israele sono stati mostrati 3 articoli, uno di un
quotidiano arabo londinese che, com&#8217;è &#8220;giusto&#8221; nella logica perversa
dell&#8217;informazione, accusa l&#8217;IDF (Israel Defense Forces - Forze armate
israeliane) senza mezzi termini di aver causato l&#8217;incidente (con tanto di foto
truculenta per un miglior impatto emotivo); uno del Jerusalem Post in cui si
fa un&#8217;analisi geopolitica della vicenda parlando della possibilità di un
aumento di intensità dello scontro tra le due nazioni ed uno in cui si dice
che l&#8217;origine della vicenda è stata attribuita, da parte dell&#8217;IDF,
all&#8217;eccessivo zelo di un ufficiale libanese. Peccato che, mostrando l&#8217;home
page del Jerusalem Post si sia visto benissimo questo articolo (cliccate pure
sulla miniatura per ingrandirlo)</p>

<p><a href="http://www.ilbanshee.net/press/post_images//10/Schermata-2010-08-04-a-07.47.39.png"><img src="http://www.ilbanshee.net/press/post_images/10/Schermata-2010-08-04-a-07.47.39_tn.png" alt="Jerusalem Post,
04/08/10" /></a></p>

<p>dal titolo <a href="http://www.jpost.com/MiddleEast/Article.aspx?id=183597">UNIFIL confirms IDF claims</a> in cui vengono esplicitate due cose, dal grande
valore informativo:</p>

<ol>
<li><em><strong>&#8220;I can confirm that we received notification from the IDF about the work and we passed the information on to the Lebanese Army,&#8221;</strong> said the Hungarian diplomat who is part of the UNIFIL force in southern Lebanon.</em></li>
<li><em>The violence began around noon, when a force from Harari’s reserve battalion entered an enclave along the border and near Kibbutz Misgav Am to conduct the maintenance work. </em><strong><em>Enclaves refer to land that is sovereign Israeli territory but is on the other side of the border fence, which does not always run directly parallel to the internationally recognized border, known as the Blue Line</em></strong><em>.</em>
(grassetto mio) da questi due punti possiamo evincere che l&#8217;IDF (almeno questa
volta) non ha mentito e che, il fatto che i soldati si trovassero <em>oltre</em> la
recinzione, non significa <em>automaticamente</em> che avessero sconfinato in
territorio Libanese. Poi ci sarà stato l&#8217;ufficiale troppo zelante, l&#8217;errore
umano, la violazione del confine, tutto quel che volete ma un articolo simile
andava, secondo me, letto nel corso della rassegna stampa, nonostante (o
appunto perché) contrasti con l&#8217;immagine di Israele &#8220;cattiva a prescindere&#8221;
che piace tanto mostrare a certa stampa.</li>
</ol>

]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Panorama? Fretta?]]></title>
    <link href="http://www.ilbanshee.net/press/blog/2010/08/02/panorama-fretta/"/>
    <updated>2010-08-02T09:48:59+02:00</updated>
    <id>http://www.ilbanshee.net/press/blog/2010/08/02/panorama-fretta</id>
    <content type="html"><![CDATA[<p>Tanto per gradire ho rivisto un hdr fatto qualche mese fa in fretta e furia
prestandogli la giusta attenzione&#8230; Molto meglio secondo me :)</p>

<p><img class="center" src="http://www.ilbanshee.net/press/post_images/10/fontana.jpg" title="Seconda" alt="Seconda versione"></p>

<p><img class="center" src="http://www.ilbanshee.net/press/post_images/10/fontana_prima.jpg" title="Prima" alt="Prima versione"></p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Chi ha paura muore ogni giorno...]]></title>
    <link href="http://www.ilbanshee.net/press/blog/2010/07/18/chi-ha-paura-muore-ogni-giorno/"/>
    <updated>2010-07-18T20:33:44+02:00</updated>
    <id>http://www.ilbanshee.net/press/blog/2010/07/18/chi-ha-paura-muore-ogni-giorno</id>
    <content type="html"><![CDATA[<p><img class="center" src="http://www.ilbanshee.net/press/post_images/10/falcone_borsellino.png"></p>

<p>&#8230; chi non ha paura muore una volta sola.</p>

<p>p.s. perdonate l&#8217;aspetto demagogico, vi assicuro che non è assolutamente
così&#8230;</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Reelight, la luce cool per la vostra bici]]></title>
    <link href="http://www.ilbanshee.net/press/blog/2010/07/17/reelight-la-luce-cool-per-la-vostra-bici/"/>
    <updated>2010-07-17T00:25:40+02:00</updated>
    <id>http://www.ilbanshee.net/press/blog/2010/07/17/reelight-la-luce-cool-per-la-vostra-bici</id>
    <content type="html"><![CDATA[<p>La bici, stando alle statistiche, è il mezzo più pericoloso che circola sulle
nostre strade (per il conducente, ovviamente). Personalmente una teoria sul
perché le cose stiano così ce l&#8217;ho pure, per esempio trovo poco salutare
attraversare le rotonde di notte, a tutto sprint e con le cuffiette
dell&#8217;immancabile iPod infilate nelle orecchie ma, comunque sia, anche da bravi
ciclisti prudenti possiamo fare qualcosa di utile per la nostra pelle.</p>

<p>Le luci!!! Personalmente continuo a non capire come mai gran parte della gente
si ostini a girare nel cuore della notte rigorosamente senza una minchia di
lucetta led da 10€ e sperare che l&#8217;automobilista che li incrocia si accorga
che c&#8217;è qualche ombra strana in un punto minuscolo della carreggiata (a meno
che non si percorrano solo e sempre strade perfettamente illuminate, ma tanto
non vi credo :) ) e li possa, così, schivare.</p>

<p>Ad ogni buon conto ora che vi ho convinti dell&#8217;importanza delle luci di
posizione anche sulle biciclette arriva il grosso problema: cosa montare?</p>

<p>Ho posseduto per diverso tempo una lucina led qualsiasi, di marca
rigorosamente ignota, che mi consumava batterie troppo in fretta (anche perché
il tastino di accensione si attivava con una facilità estrema e capitava di
lasciarla tutta la notte a consumarsi&#8230;) e finiva sempre per perdersi nelle
borse quando ero in giro a bere tagli la sera (dovendola togliere dalla bici
per evitare il taccheggio). Soluzione pessima, mi seccava troppo controllare
le batterie, accendere/spegnere, montare/smontare e tutta questa trafila
andava risolta.</p>

<p>Girovagando sulla rete (e poi ricevendo conferme da un caro amico) ho scovato
la <a href="http://www.reelight.com/">reelight</a>, una ditta nord europea che si è
ingegnata nella produzione di un kit di luci da bici che funzionassero senza
batteria alcuna. E senza dinamo&#8230; :D</p>

<p>L&#8217;idea è semplice: prendiamo un paio di magneti, li appendiamo ai raggi della
ruota, li facciamo passare a pochi millimetri da un altro magnete e,
sfruttando la piccola corrente indotta da questo movimento reciproco,
raggiungiamo lo scopo; ovviamente esistono diversi modelli, con luce pulsante
o continua (con tanto di piccolo accumulatore di backup per quando la bici è
ferma allo stop) e altre amenità. Insomma, per fare breve una storia lunga ho
montato l&#8217;SL150 sulla mia MTB (rigorosamente arancione-fastidio).</p>

<p><a href="http://www.ilbanshee.net/press/post_images/10/DSC00236a.jpg"><img src="http://www.ilbanshee.net/press/post_images/10/DSC00236a_tn.jpg" alt="luce anteriore" /></a>
<a href="http://www.ilbanshee.net/press/post_images/10/DSC00234a.jpg"><img src="http://www.ilbanshee.net/press/post_images/10/DSC00234a_tn.jpg" alt="luce posteriore" /></a></p>

<p>Le due piccole &#8220;masse&#8221; che si vedono avvitate ai raggi sono i magneti
dell&#8217;alimentazione, non c&#8217;è contatto alcuno e, quindi, nessun attrito. La
staffa è fissa, si impernia sul fermo del mozzo della ruota e si avvita la
lucetta.</p>

<p>Il trafugamento richiede una certa voglia di rompere il cazzo: smontare la
ruota, sfilare i perni, le staffe e i magneti non è certo comodissimo (e ho
aumentato leggermente la difficoltà montando i lock&#8217;n&#8217;roll della Zéfal al
posto degli sganci rapidi di serie).
<span class='pullquote-right' data-pullquote='voi pedalate e loro si accendono '>
Una volta montati il funzionamento è semplice, voi pedalate e loro si accendono. Fine. Non dovete più pensarci :)
</span></p>

<p>Unici difetti riscontrati:</p>

<ol>
<li>la luce è più bassa sulla strada rispetto alle tradizionali soluzioni sotto sella;</li>
<li>nel caso di ruota da 26&#8221; (MTB) il rischio di sbattere la luce contro le staffe porta bici quando la si parcheggia è alto, ho ovviato inclinandole un po&#8217; come vedete in foto. Nessun problema in questo modo;</li>
<li>dipendentemente dalla forma dell&#8217;attacco della vostra forcella potrebbe servire un piccolo spessore per sistemare la staffa in modo ottimale;
E ora tutti fuori a pedalare!</li>
</ol>

]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Giorni migliori per l'Italia]]></title>
    <link href="http://www.ilbanshee.net/press/blog/2010/07/14/giorni-migliori-per-litalia/"/>
    <updated>2010-07-14T21:23:07+02:00</updated>
    <id>http://www.ilbanshee.net/press/blog/2010/07/14/giorni-migliori-per-litalia</id>
    <content type="html"><![CDATA[<p><a href="http://www.ilbanshee.net/press/post_images/10/Schermata-2010-07-14-a-20.54.56.png"><img src="http://www.ilbanshee.net/press/post_images/10/Schermata-2010-07-14-a-20.54.56_tn.png" alt="" /></a>Cavoli non avevo
capito proprio niente (e nemmeno voi eh? Ammettetelo dai&#8230;). Con la
situazione politica italiana attuale, il gossip che domina la scena e la gente
che continua a ripetere a pappagallo il jingle del suo partito preferito è
finalmente giunta l&#8217;ora di dare una risposta forte ai problemi del Paese.</p>

<p>In fondo perché sprecarsi coi contenuti, con gli approfondimenti e con
l&#8217;analisi. Perché mai dare all&#8217;utenza (pardon, all&#8217;elettorato) gli strumenti
giusti per poter gestire questa farsa che continuano a spacciare per
Democrazia? Perché mai, davanti ad un partito che si occupa della mafia (o
almeno così ce la vogliono vendere) e uno di tutti i liberi pensatori 2.0
liberal-i-miei-cazzi, non offrire uno strumento al passo coi tempi, un mezzo
che permetta ai vecchi media stampati di essere un passo avanti, quella marcia
in più che rappresenta lo slancio verso il futuro (migliore of course) che
tutte le grandi menti elette prospettano per la nazione che diede i natali a
Dante e amici?</p>

<p>Detto e fatto! Il PD sarà il primo Partito politico a utilizzare i QR Code per
veicolare le nuove ed affascinanti proposte del direttivo (e di chi ne faccia
parte quel giorno, nello specifico) a noi popolo (sovrano, come mi piace
ricordare di tanto in tanto).</p>

<p>Ora mancano solo i contenuti&#8230; ma quelli, si sa, sono così 1.0 ormai.</p>

<p>P.S. non vi spiego nemmeno cos&#8217;è un QR Code, ormai è roba talmente vecchia da
godere di fama persino tra i giornalisti iscritti all&#8217;ordine.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Windowfarms]]></title>
    <link href="http://www.ilbanshee.net/press/blog/2010/07/11/windowfarms/"/>
    <updated>2010-07-11T21:54:10+02:00</updated>
    <id>http://www.ilbanshee.net/press/blog/2010/07/11/windowfarms</id>
    <content type="html"><![CDATA[<p>Segnalato da Enrico qualche giorno fa, che robe strane che pensa la gente ogni
tanto&#8230; :)</p>

<iframe width="560" height="315" src="http://www.youtube.com/embed/ykeE1Kk95Bw?rel=0&amp;hd=1" frameborder="0" allowfullscreen></iframe>



]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Ciao mondo!!]]></title>
    <link href="http://www.ilbanshee.net/press/blog/2010/07/10/ciao-mondo/"/>
    <updated>2010-07-10T21:44:38+02:00</updated>
    <id>http://www.ilbanshee.net/press/blog/2010/07/10/ciao-mondo</id>
    <content type="html"><![CDATA[<p>Ennesima reinstallazione di wordpress sul dominio, pronti per riprendere il
controllo sulle trasmissioni!</p>
]]></content>
  </entry>
  
</feed>

