<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Zovirl Industries</title>
    <link>/</link>
    <description>Recent content on Zovirl Industries</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-us</language>
    <lastBuildDate>Wed, 24 May 2017 21:52:48 -0700</lastBuildDate>
    <atom:link href="/index.xml" rel="self" type="application/rss+xml" />
    
    <item>
      <title>Nanoblocks Piper Cub Instructions</title>
      <link>/2013/12/piper_cub/</link>
      <pubDate>Wed, 04 Dec 2013 03:26:46 +0000</pubDate>
      
      <guid>/2013/12/piper_cub/</guid>
      <description>

&lt;h1 id=&#34;nanoblocks-piper-cub-instructions-2013-12-piper-cub&#34;&gt;&lt;a href=&#34;/2013/12/piper_cub/&#34;&gt;Nanoblocks Piper Cub Instructions&lt;/a&gt;&lt;/h1&gt;

&lt;p&gt;Here are instructions for building a model of a Piper Cub airplane from Nanoblocks. 

&lt;p&gt;&lt;a href=&#34;/2013/12/piper_cub.jpg&#34;&gt;&lt;img src=&#34;/2013/12/piper_cub_thumb.jpg&#34;/&gt;&lt;/a&gt;
&lt;p&gt;The Cub is a small 2-seat plane that&#39;s been around since 1938. Top speed of the original model was 85mph, though later models increased the size of the engine and got the top speed up to 130 for the Super Cub. The body of the plane is incredibly narrow, with one seat in front of the other instead of having the seats side-by-side. The instrument panel on early cubs was incredibly simple: RPM, airspeed, compass, altimeter, oil temperature &amp;amp; pressure, and slip indicator. That&#39;s it.

&lt;p&gt;I designed the nanoblock model starting with the wing. The only way to get the wing skinny enough is to build it with the studs facing forward. Studs forward is also useful for attaching the propeller and getting the landing gear at the correct angle, so the whole plane is done with the studs forward instead of up. The size of the model was decided by the number of yellow bricks I had.

&lt;p&gt;Hope you enjoy building it!&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Triple Town Economics (How to Never Run Out of Turns)</title>
      <link>/2013/02/21/triple_town_economics/</link>
      <pubDate>Fri, 22 Feb 2013 04:57:47 +0000</pubDate>
      
      <guid>/2013/02/21/triple_town_economics/</guid>
      <description>

&lt;h1 id=&#34;triple-town-economics-how-to-never-run-out-of-turns-2013-02-21-triple-town-economics&#34;&gt;&lt;a href=&#34;/2013/02/21/triple_town_economics/&#34;&gt;Triple Town Economics (How to Never Run Out of Turns)&lt;/a&gt;&lt;/h1&gt;

&lt;p&gt;When I first started playing Triple Town I was annoyed that I kept running out of turns. It felt like the kind of dirty trick a Facebook game would play. Actually, I just wasn&#39;t good at the game. It is possible to earn enough coins from each game to pay for your next game. It also makes the game more fun: instead of bears being troublesome creatures messing up your high score, they are profitable resources to be exploited.

&lt;p&gt;Ironically, now that I don&#39;t need unlimited turns I bought them anyway because I want the other game modes.

&lt;h4&gt;The economics&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;Turns cost between 0 and 4.75 coins/turn, depending on how much play per day (because you get 150 free turns per day). Example: 150 free turns plus buying turns twice: 550 turns for 1900 coins, or 3.45 coins/turn.
&lt;li&gt;You get paid 1 coin per turn (at the end of the game). You also get paid based on your city&#39;s rank, but I&#39;m not sure what the formula is so I don&#39;t worry about it.
&lt;li&gt;Mansions pay 100 coins each (at end of game). Castles pay 200 coins, but require 3 mansions, so it is better to just keep the mansions.
&lt;li&gt;Treasure chests pay 500 coins.
&lt;/li&gt;&lt;/li&gt;&lt;/li&gt;&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;For the example 550 turn game, you need to make 1900 coins total. You&#39;ll get 550 coins (#2 above). If you can get 3 treasure chests, you made a small profit. Or if you get 2 treasure chests and 4 mansions, you also come out ahead.

&lt;h4&gt;Further Nuances&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;It takes 27 bears to get a treasure chest (bears -&amp;gt; churches -&amp;gt; cathedrals -&amp;gt; treasure), so a correctly-placed bear is worth 18.5 coins.
&lt;li&gt;A crystal used to combine two cathedrals to get a treasure chest is worth 167 coins (1/3rd of 500)
&lt;li&gt;A crystal used to combine two houses to get a mansion is worth 33 coins (1/3rd of 100)
&lt;li&gt;Using crystals &amp;amp; robots to make rocks -&amp;gt; big rocks -&amp;gt; treasure chest requires 7 crystals and 1 robot. 71 coins per crystal. You&#39;re better off using crystals to combine cathedrals, except...
&lt;li&gt;At the start of the game you get lots of crystals and sometimes start with a couple rocks. If you get crystals before you have anything useful to combine, the rock -&amp;gt; treasure route is reasonable. This can be a quick way to pick up 500 coins at the start of a game.
&lt;li&gt;All those crystals at the start of the game also mean the early game is more profitable. Once the crystals stop coming and the map is filling up with ninja bears, it is time to scrap the city and start a new one.
&lt;/li&gt;&lt;/li&gt;&lt;/li&gt;&lt;/li&gt;&lt;/li&gt;&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;&lt;i&gt;(I play the Android version of Triple Town. I don&#39;t know if the iOS, web, or kindle versions have different economics, but you could do the same analysis).&lt;/i&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Easier Soldering with Improved Third Hand</title>
      <link>/2012/10/31/improved-third-hand/</link>
      <pubDate>Thu, 01 Nov 2012 01:55:03 +0000</pubDate>
      
      <guid>/2012/10/31/improved-third-hand/</guid>
      <description>

&lt;h1 id=&#34;easier-soldering-with-improved-third-hand-2012-10-31-improved-third-hand&#34;&gt;&lt;a href=&#34;/2012/10/31/improved-third-hand/&#34;&gt;Easier Soldering with Improved Third Hand&lt;/a&gt;&lt;/h1&gt;

&lt;p&gt;When soldering electronic parts together, one hand holds the soldering iron and one hand feeds the solder, leaving no hands to hold the parts being soldered. There&#39;s a common tool nicknamed a third hand which helps here. The tool has one or two (or three) adjustable alligator clips to hold parts and usually has a magnifying glass to help see the work.
&lt;br&gt;
&lt;img src=&#34;/2012/10/31/third_hand.jpg&#34;&gt;
&lt;p&gt;Mine was always a little difficult to use. The clips would fall out of their holders, and the teeth on the clips tended to bite through insulation on wires. I lived with this for years without thinking much about it, but finally fixed it. It took 10 minutes. I should have fixed it years ago.

&lt;p&gt;First, following &lt;a href=&#34;http://www.robotroom.com/Breadboard-Hints-And-Tips4.html&#34;&gt;this advice&lt;/a&gt; from Robot Room, I strengthened the base of the clips so they wouldn&#39;t fall out. The problem is that there&#39;s a screw which clamps down on a flimsy, hollow tube and can easily crush the tube. Solution: fill the hollow tube with metal so it can&#39;t be crushed. The article suggested using a brass rod, but I didn&#39;t have that so instead I found a bolt which fit, cut it to the right length, and screwed it in. &lt;br&gt;
&lt;img src=&#34;/2012/10/31/third_hand_bolt.jpg&#34;&gt;
&lt;p&gt;Second, I put two layers of heatshrink over the teeth so they aren&#39;t as sharp. Should help protect wires.
&lt;br&gt;
&lt;img src=&#34;/2012/10/31/third_hand_heatshrink.jpg&#34;&gt;
&lt;p&gt;These were both easy fixes. If you have one of these third hand tools, you should take 10 minutes and fix it up!&lt;/p&gt;&lt;/img&gt;&lt;/br&gt;&lt;/p&gt;&lt;/img&gt;&lt;/br&gt;&lt;/p&gt;&lt;/p&gt;&lt;/img&gt;&lt;/br&gt;&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Attenuating Headphone Cable</title>
      <link>/2012/09/30/headphone-cable/</link>
      <pubDate>Mon, 01 Oct 2012 05:12:34 +0000</pubDate>
      
      <guid>/2012/09/30/headphone-cable/</guid>
      <description>

&lt;h1 id=&#34;attenuating-headphone-cable-2012-09-30-headphone-cable&#34;&gt;&lt;a href=&#34;/2012/09/30/headphone-cable/&#34;&gt;Attenuating Headphone Cable&lt;/a&gt;&lt;/h1&gt;

&lt;p&gt;My headphones are too loud. I have in-ear headphones which seal out outside noise and are quite sensitive. I have to keep the volume at its lowest setting, almost off, for comfortable listening. This has two drawbacks: it is painfully loud if the volume ends up at its max setting, and there&#39;s usually a hiss coming from my phone or laptop which competes with the music at the lowest volume setting.

&lt;p&gt;To fix this, I made a short headphone cable which reduces the volume. This is similar to the headphones which have a volume knob or slider built into the cable, except that it only has one setting: quiet. The circuit is two simple voltage dividers, one for the left channel and one for the right channel. I found the resistor values through trial-and-error on a breadboard, just trying different values until I found some that gave the ideal volume reduction. The circuit is tiny enough to fit inside the headphone jack and it works well. I can now comfortably use the entire volume range when listening to music, and at the higher volume settings the hiss is drowned out by the music so I can&#39;t hear it any longer.

&lt;p&gt;
&lt;img src=&#34;/2012/09/30/volume_circuit.jpg&#34;&gt;&lt;br&gt;
&lt;img src=&#34;/2012/09/30/jack.jpg&#34;&gt;
&lt;/img&gt;&lt;/br&gt;&lt;/img&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Alpha in WebGL and Canvas</title>
      <link>/2012/08/24/webgl_alpha/</link>
      <pubDate>Sat, 25 Aug 2012 02:46:08 +0000</pubDate>
      
      <guid>/2012/08/24/webgl_alpha/</guid>
      <description>

&lt;h1 id=&#34;alpha-in-webgl-and-canvas-2012-08-24-webgl-alpha&#34;&gt;&lt;a href=&#34;/2012/08/24/webgl_alpha/&#34;&gt;Alpha in WebGL and Canvas&lt;/a&gt;&lt;/h1&gt;

&lt;p&gt;I&#39;ve been learning WebGL and have been confused how alpha blending works.
Coming from working with the 2D &amp;lt;canvas&amp;gt; API, the WebGL behavior was was
surprising to me.

&lt;p&gt;(This post uses some recent HTML5 features which won&#39;t show up properly in
older browsers or IE. I know Chome and Firefox will show it correctly).

&lt;h4&gt;The Problem&lt;/h4&gt;
&lt;p&gt;The demo below uses WebGL to draw white, gray, and black triangles in a
range of alpha values, all with the standard &lt;code&gt;gl.BlendFunc(gl.SRC_ALPHA,
gl.ONE_MINUS_SRC_ALPHA)&lt;/code&gt;. The results are weird. For example, why does the
row of black triangles get &lt;em&gt;lighter&lt;/em&gt; than the background as alpha
decreases? If you change the background to be almost-but-not-quite
white, why do the white triangles stop fading entirely? 
&lt;div id=&#34;webGlAlpha_webGlProblem&#34; style=&#34;margin-bottom: 3em&#34;&gt;&lt;/div&gt;
&lt;p&gt;For reference, here&#39;s a version done using the canvas API
which behaves as expected and clearly shows the differences in alpha behavior
between canvas and WebGL:
&lt;div id=&#34;webGlAlpha_canvas&#34; style=&#34;margin-bottom: 3em&#34;&gt;&lt;/div&gt;
&lt;h4&gt;The Answer&lt;/h4&gt;
&lt;p&gt;As I learned from 
&lt;a href=&#34;http://games.greggman.com/game/webgl-and-alpha/&#34;&gt;Gregg Tavares&lt;/a&gt;, 
the answer to the puzzle is that WebGL blends the alpha channel differently than
canvas does. Using the standard &lt;code&gt;gl.BlendFunc(gl.SRC_ALPHA,
gl.ONE_MINUS_SRC_ALPHA)&lt;/code&gt;, WebGL&#39;s blending equation for alpha is:

&lt;p&gt;&lt;code&gt;A = Asrc * Asrc + Adest * (1 - Asrc)&lt;/code&gt;
&lt;p&gt;If you start with an opaque buffer and render a
semi-transparent polygon, the result is that the buffer is now
semi-transparent (&lt;code&gt;A = .5 * .5 + 1 * (1 - .5) = .75&lt;/code&gt;).

&lt;p&gt;This transparency allows the white background of the page to show through and
blend with the WebGL colors. Putting text behind the WebGL canvas makes
this obvious:
&lt;div id=&#34;webGlAlpha_webGlText&#34; style=&#34;margin-bottom: 3em&#34;&gt;&lt;/div&gt;
&lt;p&gt;
&lt;a href=&#34;http://games.greggman.com/game/webgl-and-alpha/&#34;&gt;Gregg&lt;/a&gt; details
several ways to address this, including using &lt;code&gt;{ alpha: false }&lt;/code&gt; when
requesting the context: 
&lt;div id=&#34;webGlAlpha_webGlFixed&#34; style=&#34;margin-bottom: 3em&#34;&gt;&lt;/div&gt;
&lt;script src=&#34;/static/gl-matrix-min-1.3.6.js&#34;&gt;&lt;/script&gt;
&lt;script src=&#34;/static/jquery-1.7.1.min.js&#34;&gt;&lt;/script&gt;
&lt;script id=&#34;webGlAlpha_vertex_shader&#34; type=&#34;x-shader/x-vertex&#34;&gt;
  attribute vec3 aPosition;
  uniform mat4 uPMatrix; // projection matrix
  uniform mat4 uMVMatrix; // modelview matrix
  void main(void) {
    gl_Position = uPMatrix * uMVMatrix * vec4(aPosition, 1.0);
  }
&lt;/script&gt;
&lt;script id=&#34;webGlAlpha_fragment_shader&#34; type=&#34;x-shader/x-fragment&#34;&gt;
  precision mediump float;
  uniform vec4 uColor;
  void main(void) {
    gl_FragColor = uColor;
  }
&lt;/script&gt;
&lt;script&gt; 
  var webGlAlpha = {};

  webGlAlpha.Shape = function(x, y, greyValue, alpha) {
    this.x = x;
    this.y = y;
    this.greyValue = greyValue;
    this.alpha = alpha
  };

  webGlAlpha.GlDemo = function(canvasElement, disableWebGlAlpha) {
    if (disableWebGlAlpha) {
      this.gl = canvasElement.get(0).getContext(&#39;experimental-webgl&#39;,
          {alpha:false});
    } else {
      this.gl = canvasElement.get(0).getContext(&#39;experimental-webgl&#39;);
    }

    var program = this.createProgram();
    var aPosition = this.gl.getAttribLocation(program, &#39;aPosition&#39;);
    this.gl.enableVertexAttribArray(aPosition);
    var uPMatrix = this.gl.getUniformLocation(program, &#39;uPMatrix&#39;);
    this.uMVMatrix = this.gl.getUniformLocation(program, &#39;uMVMatrix&#39;);
    this.uColor = this.gl.getUniformLocation(program, &#39;uColor&#39;);

    var triangle = this.vertexBuffer([.4, .8, 0,
                                      0, 0, 0,
                                      .8, 0, 0]);
    this.gl.vertexAttribPointer(aPosition, 3, this.gl.FLOAT, false, 0, 0);

    this.gl.enable(this.gl.BLEND);
    this.gl.blendFunc(this.gl.SRC_ALPHA, this.gl.ONE_MINUS_SRC_ALPHA);

    this.gl.viewport(0, 0, canvasElement.width(), canvasElement.height());
    var pMatrix = mat4.create();
    mat4.ortho(-.2, 11, -.2, 3, .1, 100, pMatrix);
    this.gl.uniformMatrix4fv(uPMatrix, false, pMatrix);
  };

  webGlAlpha.GlDemo.prototype.compileShader = function(type, source) {
    var shader = this.gl.createShader(type);
    this.gl.shaderSource(shader, source);
    this.gl.compileShader(shader);
    if (!this.gl.getShaderParameter(shader, this.gl.COMPILE_STATUS)) {
      console.log(&#39;Failed to compile shader&#39;, this.gl.getShaderInfoLog(shader));
      return null;
    }
    return shader;
  };

  webGlAlpha.GlDemo.prototype.createProgram = function() {
    var program = this.gl.createProgram();
    this.gl.attachShader(program, this.compileShader(
        this.gl.VERTEX_SHADER, $(&#39;#webGlAlpha_vertex_shader&#39;).text()));
    this.gl.attachShader(program, this.compileShader(
        this.gl.FRAGMENT_SHADER, $(&#39;#webGlAlpha_fragment_shader&#39;).text()));
    this.gl.linkProgram(program);

    if (!this.gl.getProgramParameter(program, this.gl.LINK_STATUS)) {
      console.log(&#39;failed to set up shaders&#39;);
    }

    this.gl.useProgram(program);
    return program;
  };

  webGlAlpha.GlDemo.prototype.vertexBuffer = function(vertices) {
    var buffer = this.gl.createBuffer();
    this.gl.bindBuffer(this.gl.ARRAY_BUFFER, buffer);
    this.gl.bufferData(this.gl.ARRAY_BUFFER, new Float32Array(vertices), 
                       this.gl.STATIC_DRAW);
    return buffer;
  };
  
  webGlAlpha.GlDemo.prototype.draw = function(clearValue, shapes) {
    this.gl.clearColor(clearValue, clearValue, clearValue, 1);
    this.gl.clear(this.gl.COLOR_BUFFER_BIT);
    var mvMatrix = mat4.create();
    for (var i = 0, shape; shape = shapes[i++];) {
      mat4.identity(mvMatrix);
      mat4.translate(mvMatrix, [shape.x, shape.y, -10]);
      this.gl.uniformMatrix4fv(this.uMVMatrix, false, mvMatrix);
      this.gl.uniform4f(this.uColor, 
          shape.greyValue, shape.greyValue, shape.greyValue, shape.alpha);
      this.gl.drawArrays(this.gl.TRIANGLES, 0, 3);
    }
  };

  webGlAlpha.GlDemo.prototype.getRgbLabel = function(value) {
    return &#39;rgb(&#39; + value + &#39;, &#39; + value + &#39;, &#39; + value + &#39;)&#39;;
  };

  webGlAlpha.CanvasDemo = function(canvasElement) {
    this.context = canvasElement.get(0).getContext(&#39;2d&#39;);
    this.width = canvasElement.width();
    this.height = canvasElement.height();
  };

  webGlAlpha.CanvasDemo.prototype.rgba = function(value, alpha) {
    value = Math.floor(value * 255);
    return &#39;rgba(&#39; + value + &#39;, &#39; + value + &#39;, &#39; + value + &#39;, &#39; + alpha + &#39;)&#39;;
  };

  webGlAlpha.CanvasDemo.prototype.draw = function(clearValue, shapes) {
    var context = this.context;
    context.setTransform(1, 0, 0, 1, 0, 0);
    context.fillStyle = this.rgba(clearValue, 1);
    context.fillRect(0, 0, this.width, this.height);

    context.scale(40, -40);
    context.translate(.2, -2.8);
    for (var i = 0, shape; shape = shapes[i++];) {
      context.fillStyle = this.rgba(shape.greyValue, shape.alpha);
      context.fillRect(shape.x, shape.y, .6, .6);
    }
  };

  webGlAlpha.CanvasDemo.prototype.getRgbLabel = function(value) {
    value = Math.floor(value * 255);
    return &#39;rgb(&#39; + value + &#39;, &#39; + value + &#39;, &#39; + value + &#39;)&#39;;
  };

  webGlAlpha.DemoWidget = function(container, shapes, renderClass,
      backgroundText, disableWebGlAlpha) {
    var canvas = $(&#39;&lt;canvas&gt;&#39;)
        .attr(&#39;width&#39;, 440)
        .attr(&#39;height&#39;, 120)
        .css(&#39;display&#39;, &#39;block&#39;);

    var slider = $(&#39;&lt;input type=&#34;range&#34; min=0 max=1 step=.01 value=.3&gt;&#39;);
    var table = this.buildTable(canvas, renderClass, slider, backgroundText);
    container.append(table);

    var renderer = new renderClass(canvas, disableWebGlAlpha);

    slider.change(function() {
      var clearValue = slider.val();
      renderer.draw(clearValue, shapes);
    });
    slider.change();
  };

  webGlAlpha.DemoWidget.prototype.buildTable = function(canvas, renderClass,
      slider, backgroundText) {
    var table = $(&#39;&lt;table style=&#34;font-style:italic;color:#999&#34;&gt;&#39;);
    var tr = function() {
      var tr = $(&#39;&lt;tr&gt;&#39;);
      for (var i = 0, item; item = arguments[i++];) {
        tr.append(item);
      }
      table.append(tr);
    }

    var td = function(contents, attrs) { 
      var td = $(&#39;&lt;td&gt;&#39;); 
      td.append(contents); 
      for (var key in attrs) {
        td.attr(key, attrs[key]);
      }
      return td; 
    };

    tr(td(&#39;&#39;),
       td(&#39;alpha 1.0&#39;, {style:&#39;text-align:left&#39;}),
       td(&#39;alpha 0.0&#39;, {style:&#39;text-align:right&#39;}));
    if (backgroundText) {
      canvas.css(&#39;position&#39;, &#39;absolute&#39;);
      var canvasDiv = $(&#39;&lt;div&gt;&#39;)
          .css(&#39;position&#39;, &#39;relative&#39;)
          .css(&#39;width&#39;, 440)
          .css(&#39;height&#39;, 120);
      var text = $(&#39;&lt;p&gt;&#39;)
          .css(&#39;color&#39;, &#39;black&#39;)
          .css(&#39;position&#39;, &#39;absolute&#39;)
          .css(&#39;width&#39;, 430)
          .css(&#39;height&#39;, 100)
          .css(&#39;overflow&#39;, &#39;hidden&#39;);
      var fillerText = &#39;&#39;;
      for (var i = 0; i &lt; 150; i++) {
        fillerText += &#39;asdf &#39;;
      }
      text.append(fillerText);
      canvasDiv.append(text);
      canvasDiv.append(canvas);
      canvas = canvasDiv;
    }
    var canvasTd = td(canvas, {colspan:3, rowspan:3});
    tr(td(renderClass.prototype.getRgbLabel(1), {style:&#39;height:40px&#39;}),
       canvasTd);
    tr(td(renderClass.prototype.getRgbLabel(.5), {style:&#39;height:40px&#39;}));
    tr(td(renderClass.prototype.getRgbLabel(.0), {style:&#39;height:40px&#39;}));

    var control = $(&#39;&lt;label&gt;Background Value (0 to 1):&lt;/label&gt;&#39;);
    control.append(slider);
    tr(td(), td(control));

    return table;
  };

  $(document).ready(function () {
    var shapes = [];
    for (var x = 0; x &lt; 11; x++) {
      for (var y = 0; y &lt; 3; y++) {
        var greyValue = y/2;
        var alpha = (10 - x)/10;
        shapes.push(new webGlAlpha.Shape(x, y, greyValue, alpha));
      }
    }

    new webGlAlpha.DemoWidget($(&#39;#webGlAlpha_webGlProblem&#39;), shapes, 
        webGlAlpha.GlDemo, false, false);
    new webGlAlpha.DemoWidget($(&#39;#webGlAlpha_canvas&#39;), shapes, 
        webGlAlpha.CanvasDemo, true, false);
    new webGlAlpha.DemoWidget($(&#39;#webGlAlpha_webGlText&#39;), shapes, 
        webGlAlpha.GlDemo, true, false);
    new webGlAlpha.DemoWidget($(&#39;#webGlAlpha_webGlFixed&#39;), shapes, 
        webGlAlpha.GlDemo, true, true);
  });
&lt;/script&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Game Marketing Tips From GDC</title>
      <link>/2012/05/01/game_marketing_tips/</link>
      <pubDate>Wed, 02 May 2012 02:42:14 +0000</pubDate>
      
      <guid>/2012/05/01/game_marketing_tips/</guid>
      <description>

&lt;h1 id=&#34;game-marketing-tips-from-gdc-2012-05-01-game-marketing-tips&#34;&gt;&lt;a href=&#34;/2012/05/01/game_marketing_tips/&#34;&gt;Game Marketing Tips From GDC&lt;/a&gt;&lt;/h1&gt;

&lt;p&gt;I gleaned some game marketing tips from several talks at GDC this year.

&lt;p&gt;Tom Francis (&lt;i&gt;Gunpoint&lt;/i&gt;) described how to explain games in writing,
while Kert Gartner showed how to make good trailers for games. The techniques
are quite similar since both require efficient communication. Taken together,
these two talks were filled with great advice for telling people about your
game. Also, Nathan Vella (&lt;i&gt;Sword &amp;amp; Sworcery&lt;/i&gt;) explained how they used
consistent PR to communicate the spirit of their game to potential players.

&lt;h4&gt;How to Explain Your Game in Writing&lt;/h4&gt;
&lt;p&gt;Tom Francis talked about explaining a game to impatient readers. Keep the
explanation short, about 3 sentences, by means of ruthless editing.  Do not
make these common mistakes, they waste words:
&lt;ol&gt;
&lt;li&gt;Failing to explain things. Don&#39;t post a gameplay video with no commentary
  and hope viewers understand. They won&#39;t.
  &lt;li&gt;Explaining artistic intent. It doesn&#39;t explain why I would want to play
  your game. It also uses too many words.
  &lt;li&gt;Explaining story. A compelling explanation of your games story takes
  too many words. Skip it.
  &lt;li&gt;Saying it is &#34;innovative&#34; or &#34;awesome.&#34; These words mean nothing coming
  from the creator of the game. 
&lt;/li&gt;&lt;/li&gt;&lt;/li&gt;&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;Instead, you need to fit these 4 things in 3 sentences:
&lt;ol&gt;
&lt;li&gt;Type of game. Just a few words. &lt;i&gt;2D platformer&lt;/i&gt;. &lt;i&gt;Racing game with
RPG elements&lt;/i&gt;.
&lt;li&gt;Coolest unique thing. &lt;i&gt;Rewind time to fix mistakes&lt;/i&gt;. &lt;i&gt;Tear down and
rebuild the entire world&lt;/i&gt;.
&lt;li&gt;The fantasy. Not story, that takes too many words. Just the
fantasy: &lt;i&gt;You&#39;re a criminal driving around a sprawling city&lt;/i&gt;. &lt;i&gt;You&#39;re
searching for your sister in a creepy forest&lt;/i&gt;.
&lt;li&gt;Give one example of the gameplay. &lt;i&gt;You fly your helicopter up the river
bed, staying behind the trees to avoid detection, then sneak over the ridge
to drop the commandos off at the enemy base&lt;/i&gt;. &lt;i&gt;You drive your moped up the
stairs, through the shopping mall, then jump over the embankment to get
away&lt;/i&gt;.
&lt;/li&gt;&lt;/li&gt;&lt;/li&gt;&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;Focusing on efficient communication makes it more likely you&#39;ll get your
point across before the reader loses interest. Tom has posted his talk &lt;a href=&#34;http://www.pentadact.com/2012-03-17-gdc-talk-how-to-explain-your-game-to-an-asshole/&#34;&gt;here.&lt;/a&gt;
&lt;h4&gt;How to make a good trailer&lt;/h4&gt;
&lt;p&gt;Kert Gartner explained how to make good trailers for games. Similar to Tom&#39;s
points about terse writing, Kert stressed the importance of keeping the trailer
short.

&lt;p&gt;Don&#39;t:
&lt;ol&gt;
&lt;li&gt;Make it longer than 60-90 seconds. Most viewers won&#39;t watch that long
  &lt;li&gt;Try to explain everything.
  &lt;li&gt;Cram too much information in.
  &lt;li&gt;List features of your game. This is boring and not a good use of 
  precious time.
  &lt;li&gt;Release a bad trailer. You&#39;d be better off with no trailer.
&lt;/li&gt;&lt;/li&gt;&lt;/li&gt;&lt;/li&gt;&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;Do:
&lt;ol&gt;
&lt;li&gt;Make sure the first 5-10 seconds capture attention.
  &lt;li&gt;Use a simple dramatic story arc. A clear beginning/middle/end structure
  which builds to a climax is good.
  &lt;li&gt;Show what the game is about.
  &lt;li&gt;Capture the style or feel of the game.
  &lt;li&gt;Use zoom-in to focus on the important parts of busy/complex
  gameplay footage.
  &lt;li&gt;Use slow-motion to help the viewer catch important parts of fast gameplay
  footage.
  &lt;li&gt;Leave the viewer wanting more.
&lt;/li&gt;&lt;/li&gt;&lt;/li&gt;&lt;/li&gt;&lt;/li&gt;&lt;/li&gt;&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;He showed several example trailers with a detailed explanation of the
techniques going into each
one. It would be worth going over to &lt;a href=&#34;http://blog.kertgartner.com/2012/03/making-entertaining-and-engaging-video-game-trailers/&#34;&gt;his blog&lt;/a&gt; to see the examples.

&lt;h4&gt;How to Keep Your PR Consistent&lt;/h4&gt;
&lt;p&gt;Nathan Vella talked about PR for &lt;i&gt;Sword &amp;amp; Sworcery&lt;/i&gt;. I was impressed
by how much they focused on consistency and on getting the feel &amp;amp; spirit of
their game into their PR material.

&lt;p&gt;Nathan had a couple tricks for making sure the vision for the game is
communicated in the PR. First, base the PR on the vision for the game
instead of the game itself. If you base the PR on the game, the vision will be
watered down. It is ok to reference the game, obviously, but make sure the PR is
being influenced by the vision. Second, make sure that the person who is in
charge of the vision for the game is involved in the PR directly. Ideally you
want your PR and your game to feel like part of the same whole. Example:
gameplay in &lt;i&gt;Sworcery&lt;/i&gt; is tied to phases of the moon, and they kept this
same astronomical spirit by doing sales of the game around the solstice.

&lt;p&gt;There was also the mechanical side of consistency: use the same fonts in your
game and your PR material. Use the same color palettes. Use the same sound
effects. Maintain a common voice between your game and your PR (and make sure
all your PR uses a common voice, especially if multiple people are involved in
producing it).

&lt;p&gt;You can see some of this consistency in action over at the &lt;a href=&#34;http://www.swordandsworcery.com/&#34;&gt;&lt;i&gt;Sword &amp;amp; Sworcery&lt;/i&gt; website&lt;/a&gt;,
where they talk about &#34;electric computers&#34; and the soundtrack being available on
vinyl &amp;amp; audio cassette and where they label their search box &#34;What do you
seek?&#34;. It feels like their website came from the same weird world that
&lt;i&gt;Sworcery&lt;/i&gt; is set in.
&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Artisan Games</title>
      <link>/2012/04/18/artisan-games/</link>
      <pubDate>Thu, 19 Apr 2012 04:51:46 +0000</pubDate>
      
      <guid>/2012/04/18/artisan-games/</guid>
      <description>

&lt;h1 id=&#34;artisan-games-2012-04-18-artisan-games&#34;&gt;&lt;a href=&#34;/2012/04/18/artisan-games/&#34;&gt;Artisan Games&lt;/a&gt;&lt;/h1&gt;

&lt;p&gt;I like the idea of approaching game development as an artisan baker would
approach making bread or the way a craftsman would approach making a piece of
fine furniture. Making unique, high-quality products for a discerning audience.
Artisan games. 

&lt;p&gt;There were a couple talks at GDC this year that reminded me about this,
especially Nathan Vella&#39;s talk on how they making &lt;i&gt;Sword &amp;amp; Sworcery&lt;/i&gt;
stand out by taking taking risks, targeting a niche audience, and keeping
quality high.

&lt;h4&gt;Unique Games&lt;/h4&gt;
&lt;p&gt;Nathan started with the business reason for making a game which stands out:
There are so many games out there, it is easy for your game to blend into a sea
of similar games. Making a game which stands out is a big step towards
success. I also have a personal reason: I want to make something new, something
unique.  Games take so much time to make that I don&#39;t want to be making games
that have already been done.

&lt;p&gt;Making a game that &lt;i&gt;doesn&#39;t&lt;/i&gt; stand out is straightforward: just follow
convention. Do what other games do. Each game platform has a set of common
trends that you can follow. Making a game for iOS? Use cartoon graphics, one or
two simple mechanics, and keep the game short. Making a Facebook game? Have an
energy mechanic to encourage players to return tomorrow, use asyncronous
multiplayer, and nudge the player to invite their friends. If you always take
the &#34;safe&#34; option when faced with a business choice, your game will probably
blend in.  If you want to stand out, you&#39;re going to have to start breaking
conventions, ignoring trends, and taking risks. Nathan kept coming back to the
idea of taking risks throughout his talk.

&lt;p&gt;Amir Rao (&lt;i&gt;Bastion&lt;/i&gt;) spoke during the failure workshop and mentioned a
great safety net to use when making a risky game:
&lt;ol&gt;
&lt;li&gt;Ask &#34;What&#39;s been done?&#34; Find the conventions.
  &lt;li&gt;Do something else, something new.
  &lt;li&gt;If #2 fails, fall back to the conventions you identified in #1.
&lt;/li&gt;&lt;/li&gt;&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;Falling back to convention sounds like a great way to make progress if the
risky innovation doesn&#39;t pan out.  On &lt;i&gt;Bastion&lt;/i&gt; they ditched a gardening
mechanic that wasn&#39;t working but their game still stands out because they bucked
trends in other areas of the game. You don&#39;t have to innovate on every aspect of
your game to have it stand out. It is ok to stick to conventions in some areas.

&lt;h4&gt;Discerning Audience&lt;/h4&gt;
&lt;p&gt;Nathan specifically warned against trying to make a game with broad
appeal. Yes, the payoff is huge but there&#39;s also stiff competition. He compared
it to a lottery. Instead, Nathan suggested going after a niche.  This lets you
target your game specifically to your audience.  You will be able to know your
customers and know what they want.  You&#39;re much more likely to stand out to your
customers because you&#39;re making a game &lt;i&gt;just for them&lt;/i&gt;. You can tailor your
PR so you are speaking directly to your niche.  Nathan pointed out that there
are enough game players now that niches can still be huge.  They&#39;ve sold
something like 350,000 copies of their niche game on iOS.

&lt;h4&gt;High Quality&lt;/h4&gt;
&lt;p&gt;The last part of artisan games: quality. Nathan said on &lt;i&gt;Sworcery&lt;/i&gt; they
decided it was safer to slip their deadline and over-run their budget than to
release a rushed game that wasn&#39;t great. In the end, they found that finishing a
risky game &lt;i&gt;well&lt;/i&gt; opened a lot of doors. This echoed what Kert Gartner said
in his talk on making trailers for games: a bad trailer is worse than no
trailer, so either make an awesome trailer or don&#39;t make a trailer at all.

&lt;p&gt;This seems especially important if you&#39;re trying to build a reputation for
great games.  The one caveat I would add is that it probably doesn&#39;t apply if
you are just starting out. New developers usually don&#39;t have the skills to
making high-quality games. That&#39;s normal. If you are new it is more important to
make lots of games than to get stuck trying to make your first game
high-quality. Quality will come with practice. Going back to the baker analogy,
no one expects a beginning baker to make a perfect loaf. If you have the skills
to release quality games, though, it seems like a sound choice to do so instead
of rushing crap out the door.
&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Graph Land: A Graphing Calculator for Javascript, with Cows</title>
      <link>/2012/02/20/graph_land/</link>
      <pubDate>Mon, 20 Feb 2012 23:20:41 +0000</pubDate>
      
      <guid>/2012/02/20/graph_land/</guid>
      <description>

&lt;h1 id=&#34;graph-land-a-graphing-calculator-for-javascript-with-cows-2012-02-20-graph-land&#34;&gt;&lt;a href=&#34;/2012/02/20/graph_land/&#34;&gt;Graph Land: A Graphing Calculator for Javascript, with Cows&lt;/a&gt;&lt;/h1&gt;

&lt;p&gt;Graph Land is a graphing calculator for Javascript. In addition to such useful
features as the ability to plot &lt;code&gt;&lt;a href=&#34;/2012/02/graph_land.html#y=Math.cos(Math.floor(x*2))&#34;&gt;Math.cos(Math.floor(x*2))&lt;/a&gt;&lt;/code&gt;, it
also has adorable cows, clouds, dusk, dawn, and other such fine accoutrements
which all fashionable graphing calculators in this modern age aspire toward.&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;/2012/02/graph_land.html&#34;&gt;Try it now&lt;/a&gt;
&lt;p&gt;&lt;a href=&#34;/2012/02/graph_land.html&#34;&gt;&lt;img src=&#34;/2012/02/20/graph_land_screenshot.png&#34;/&gt;&lt;/a&gt;
&lt;h4&gt;A brief account of the creation of Graph Land&lt;/h4&gt;
&lt;p&gt;A flight simulator I&#39;ve been working on needed some interesting terrain for the
player to fly over. I saw two solutions: use a level editor to create some
interesting terrain (the manual route), or make an algorithm that generates
interesting terrain (the procedural route). Making levels by hand is tedious and
time-consuming, so I chose procedural terrain generation, which is also
time-consuming but more entertaining.

&lt;p&gt;To get rapid feedback while working on the terrain I made a simple app that
plotted the output of the algorithm as I tweaked the parameters. It was
basically a graphing calculator that took a Javascript expression as input. I
used the app to get an algorithm capable of producing convincing hills and
mountains, then moved on to work on other things.

&lt;p&gt;Later, I found myself coming back to this app to visualize other things. I used
it to tune the length of daytime/nighttime (a modified sine wave) in a different
game. Then I needed to smoothly switch colors in another app and I knew the
shape of the curve I wanted, but I didn&#39;t know what the actual formula was until
I messed around in the graphing app for a few minutes and found it. 

&lt;p&gt;Much later, cows wandered in. Shortly after that clouds formed in the sky.
Eventually the sun, showing no respect for the traditional order of creation by
its tardiness, started making a daily appearance.

&lt;p&gt;I&#39;ve found Graph Land useful. I&#39;m publishing it so others can use it too.  The
whole thing is licensed under the Apache 2 license, so feel free to reuse it in
other projects.


&lt;h4&gt;Appendix A&lt;/h4&gt;
&lt;p&gt;A collection of examples, most of which may be useful to game programmers:

&lt;table&gt;
&lt;tr&gt;&lt;td&gt;A)
  &lt;td&gt;&lt;code&gt;y = &lt;a href=&#34;/2012/02/graph_land.html#y=x%20%25%203&#34;&gt;x % 3&lt;/a&gt;&lt;/code&gt;
&lt;td&gt;&lt;a href=&#34;/2012/02/graph_land.html#y=x%20%25%203&#34;&gt;&lt;img src=&#34;/2012/02/20/exampleA.png&#34;/&gt;&lt;/a&gt;
&lt;tr&gt;&lt;td&gt;B)
  &lt;td&gt;&lt;code&gt;y = &lt;a href=&#34;/2012/02/graph_land.html#y=x%20-%203%20*%20Math.floor(x%2F3)&#34;&gt;x - 3 * Math.floor(x/3)&lt;/a&gt;&lt;/code&gt;
&lt;td&gt;&lt;a href=&#34;/2012/02/graph_land.html#y=x%20-%203%20*%20Math.floor(x%2F3)&#34;&gt;&lt;img src=&#34;/2012/02/20/exampleB.png&#34;/&gt;&lt;/a&gt;
&lt;tr&gt;&lt;td&gt;C)
  &lt;td&gt;&lt;code&gt;y = &lt;a href=&#34;/2012/02/graph_land.html#y=Math.floor(x%20-%203%20*%20Math.floor(x%2F3))&#34;&gt;Math.floor(x- 3 * Math.floor(x/3))&lt;/a&gt;&lt;/code&gt;
&lt;td&gt;&lt;a href=&#34;/2012/02/graph_land.html#y=Math.floor(x%20-%203%20*%20Math.floor(x%2F3))&#34;&gt;&lt;img src=&#34;/2012/02/20/exampleC.png&#34;/&gt;&lt;/a&gt;
&lt;/td&gt;&lt;/td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/td&gt;&lt;/td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/td&gt;&lt;/td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;p&gt;Javascript&#39;s &lt;code&gt;%&lt;/code&gt; operator (A) behaves like C not like Python,
which always frustrates me when &lt;code&gt;x&lt;/code&gt; is negative. I usually end up
using (B) instead. Rounding down (C) gives a formula that converts any value of
&lt;code&gt;x&lt;/code&gt; to a valid index into an array of length 3.


&lt;table&gt;
&lt;tr&gt;&lt;td&gt;D)
  &lt;td&gt;&lt;code&gt;y = &lt;a href=&#34;/2012/02/graph_land.html#y=1%2F(1%20%2B%20Math.pow(2%2C%20-x))&#34;&gt;1/(1 + Math.pow(2, -x))&lt;/a&gt;&lt;/code&gt;
&lt;td&gt;&lt;a href=&#34;/2012/02/graph_land.html#y=1%2F(1%20%2B%20Math.pow(2%2C%20-x))&#34;&gt;&lt;img src=&#34;/2012/02/20/exampleD.png&#34;/&gt;&lt;/a&gt;
&lt;tr&gt;&lt;td&gt;E)
  &lt;td&gt;&lt;code&gt;y = &lt;a href=&#34;/2012/02/graph_land.html#y=1%2F(1%20%2B%20Math.pow(1000%2C%20-x))&#34;&gt;1/(1 + Math.pow(1000, -x))&lt;/a&gt;&lt;/code&gt;
&lt;td&gt;&lt;a href=&#34;/2012/02/graph_land.html#y=1%2F(1%20%2B%20Math.pow(1000%2C%20-x))&#34;&gt;&lt;img src=&#34;/2012/02/20/exampleE.png&#34;/&gt;&lt;/a&gt;
&lt;tr&gt;&lt;td&gt;F)
  &lt;td&gt;&lt;code&gt;y = &lt;a href=&#34;/2012/02/graph_land.html#y=x%3C0%20%3F%200%20%3A%20x%3E1%20%3F%201%20%3A%203*x*x%20-%202*x*x*x&#34;&gt;x&amp;lt;0 ? 0 : x&amp;gt;1 ? 1 : 3*x*x - 2*x*x*x&lt;/a&gt;&lt;/code&gt;
&lt;td&gt;&lt;a href=&#34;/2012/02/graph_land.html#y=x%3C0%20%3F%200%20%3A%20x%3E1%20%3F%201%20%3A%203*x*x%20-%202*x*x*x&#34;&gt;&lt;img src=&#34;/2012/02/20/exampleF.png&#34;/&gt;&lt;/a&gt;
&lt;/td&gt;&lt;/td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/td&gt;&lt;/td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/td&gt;&lt;/td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;p&gt;Smooth transitions can be down with a modified logistic function (D), which
is very easy to tweak ((A) gives a slow transition, (E) is much more abrupt). A
much faster but less flexible approach is &lt;code&gt;3x^2-2x^3&lt;/code&gt; (F).

&lt;table&gt;
&lt;tr&gt;&lt;td&gt;G)
  &lt;td&gt;&lt;code&gt;y = &lt;a href=&#34;/2012/02/graph_land.html#y=Math.floor(x)%20%25%202%20%3D%3D%200%20%3F%200%20%3A%201&#34;&gt;Math.floor(x) % 2 == 0 ? 0 : 1&lt;/a&gt;&lt;/code&gt;
&lt;td&gt;&lt;a href=&#34;/2012/02/graph_land.html#y=Math.floor(x)%20%25%202%20%3D%3D%200%20%3F%200%20%3A%201&#34;&gt;&lt;img src=&#34;/2012/02/20/exampleG.png&#34;/&gt;&lt;/a&gt;
&lt;tr&gt;&lt;td&gt;H)
  &lt;td&gt;&lt;code&gt;y = &lt;a href=&#34;/2012/02/graph_land.html#y=Math.floor(x)%20%25%204%20%3D%3D%200%20%3F%200%20%3A%201&#34;&gt;Math.floor(x) % 4 == 0 ? 0 : 1&lt;/a&gt;&lt;/code&gt;
&lt;td&gt;&lt;a href=&#34;/2012/02/graph_land.html#y=Math.floor(x)%20%25%204%20%3D%3D%200%20%3F%200%20%3A%201&#34;&gt;&lt;img src=&#34;/2012/02/20/exampleH.png&#34;/&gt;&lt;/a&gt;
&lt;/td&gt;&lt;/td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/td&gt;&lt;/td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;p&gt;Sometimes you want abrupt transitions, not smooth transitions. (G) and (H) will
give you those.


&lt;h4&gt;Appendix B&lt;/h4&gt;
&lt;p&gt;Convincing random terrain is largely a matter of mixing several frequencies
together. 

&lt;p&gt;If you use your imagination, you can pretend this is a hill even though it is
too smooth:&lt;br&gt;
&lt;a href=&#34;/2012/02/graph_land.html#y=Math.sin(x%2F4)&#34;&gt;
&lt;code&gt;y = Math.sin(x/4)&lt;/code&gt;&lt;br&gt;
&lt;img src=&#34;/2012/02/20/terrain1.png&#34;&gt;
&lt;/img&gt;&lt;/br&gt;&lt;/a&gt;
&lt;p&gt;Adding in another higher-frequency, lower-amplitude sine wave makes a 
subtle improvement:&lt;br&gt;
&lt;a href=&#34;/2012/02/graph_land.html#y=Math.sin(x%2F4)%20%2B%20Math.sin(x%2F2%2B17)%2F2&#34;&gt;
&lt;code&gt;y = Math.sin(x/4) + Math.sin(x/2+17)/2&lt;/code&gt;&lt;br&gt;
&lt;img src=&#34;/2012/02/20/terrain2.png&#34;&gt;
&lt;/img&gt;&lt;/br&gt;&lt;/a&gt;
&lt;br&gt;(The &#34;+17&#34; bit offsets the second sine wave so both waves don&#39;t cross (0, 0)
together.)

&lt;p&gt;If you keep adding in higher-frequency, lower-amplitude waves you can see the
hill gets more and more detail:

&lt;table&gt;
&lt;tr&gt;
&lt;td width=&#34;10%&#34;&gt;1 wave: 
  &lt;td&gt;&lt;a href=&#34;/2012/02/graph_land.html#y=Math.sin(x%2F4)&#34;&gt;&lt;code&gt;Math.sin(x/4)&lt;/code&gt;&lt;/a&gt;
&lt;td&gt;&lt;a href=&#34;/2012/02/graph_land.html#y=Math.sin(x%2F4)&#34;&gt;&lt;img src=&#34;/2012/02/20/terrain1.png&#34;/&gt;&lt;/a&gt;
&lt;tr&gt;
&lt;td&gt;2 waves: 
  &lt;td&gt;&lt;a href=&#34;/2012/02/graph_land.html#y=Math.sin(x%2F4)%20%2B%20Math.sin(x%2F2%2B17)%2F2&#34;&gt;&lt;code&gt;Math.sin(x/4) + Math.sin(x/2+17)/2&lt;/code&gt;&lt;/a&gt;
&lt;td&gt;&lt;a href=&#34;/2012/02/graph_land.html#y=Math.sin(x%2F4)%20%2B%20Math.sin(x%2F2%2B17)%2F2&#34;&gt;&lt;img src=&#34;/2012/02/20/terrain2.png&#34;/&gt;&lt;/a&gt;
&lt;tr&gt;
&lt;td&gt;3 waves: 
  &lt;td&gt;&lt;a href=&#34;/2012/02/graph_land.html#y=Math.sin(x%2F4)%20%2B%20Math.sin(x%2F2%2B17)%2F2%20%2B%20Math.sin(x%2B19)%2F4&#34;&gt;&lt;code&gt;Math.sin(x/4) + Math.sin(x/2+17)/2 +
  Math.sin(x+19)/4&lt;/code&gt;&lt;/a&gt;
&lt;td&gt;&lt;a href=&#34;/2012/02/graph_land.html#y=Math.sin(x%2F4)%20%2B%20Math.sin(x%2F2%2B17)%2F2%20%2B%20Math.sin(x%2B19)%2F4&#34;&gt;&lt;img src=&#34;/2012/02/20/terrain3.png&#34;/&gt;&lt;/a&gt;
&lt;tr&gt;
&lt;td&gt;4 waves: 
  &lt;td&gt;&lt;a href=&#34;/2012/02/graph_land.html#y=Math.sin(x%2F4)%20%2B%20Math.sin(x%2F2%2B17)%2F2%20%2B%20Math.sin(x%2B19)%2F4%20%2B%20Math.sin(x*2%2B23)%2F8&#34;&gt;&lt;code&gt;Math.sin(x/4) + Math.sin(x/2+17)/2 + Math.sin(x+19)/4 +
  Math.sin(x*2+23)/8&lt;/code&gt;&lt;/a&gt;
&lt;td&gt;&lt;a href=&#34;/2012/02/graph_land.html#y=Math.sin(x%2F4)%20%2B%20Math.sin(x%2F2%2B17)%2F2%20%2B%20Math.sin(x%2B19)%2F4%20%2B%20Math.sin(x*2%2B23)%2F8&#34;&gt;
&lt;img src=&#34;/2012/02/20/terrain4.png&#34;/&gt;&lt;/a&gt;
&lt;tr&gt;
&lt;td&gt;5 waves: 
  &lt;td&gt;&lt;a href=&#34;/2012/02/graph_land.html#y=Math.sin(x%2F4)%20%2B%20Math.sin(x%2F2%2B17)%2F2%20%2B%20Math.sin(x%2B19)%2F4%20%2B%20Math.sin(x*2%2B23)%2F8%20%2B%20Math.sin(x*4%2B29)%2F16&#34;&gt;&lt;code&gt;Math.sin(x/4) + Math.sin(x/2+17)/2 + Math.sin(x+19)/4 +
  Math.sin(x*2+23)/8 + Math.sin(x*4+29)/16&lt;/code&gt;&lt;/a&gt;
&lt;td&gt;&lt;a href=&#34;/2012/02/graph_land.html#y=Math.sin(x%2F4)%20%2B%20Math.sin(x%2F2%2B17)%2F2%20%2B%20Math.sin(x%2B19)%2F4%20%2B%20Math.sin(x*2%2B23)%2F8%20%2B%20Math.sin(x*4%2B29)%2F16&#34;&gt;
&lt;img src=&#34;/2012/02/20/terrain5.png&#34;/&gt;&lt;/a&gt;
&lt;tr&gt;
&lt;td&gt;6 waves: 
  &lt;td&gt;&lt;a href=&#34;/2012/02/graph_land.html#y=Math.sin(x%2F4)%20%2B%20Math.sin(x%2F2%2B17)%2F2%20%2B%20Math.sin(x%2B19)%2F4%20%2B%20Math.sin(x*2%2B23)%2F8%20%2B%20Math.sin(x*4%2B29)%2F16%20%2B%20Math.sin(x*8%2B31)%2F32&#34;&gt;&lt;code&gt;Math.sin(x/4) + Math.sin(x/2+17)/2 + Math.sin(x+19)/4 +
  Math.sin(x*2+23)/8 + Math.sin(x*4+29)/16 + Math.sin(x*8+31)/32&lt;/code&gt;&lt;/a&gt;
&lt;td&gt;&lt;a href=&#34;/2012/02/graph_land.html#y=Math.sin(x%2F4)%20%2B%20Math.sin(x%2F2%2B17)%2F2%20%2B%20Math.sin(x%2B19)%2F4%20%2B%20Math.sin(x*2%2B23)%2F8%20%2B%20Math.sin(x*4%2B29)%2F16%20%2B%20Math.sin(x*8%2B31)%2F32&#34;&gt;
&lt;img src=&#34;/2012/02/20/terrain6.png&#34;/&gt;&lt;/a&gt;
&lt;tr&gt;
&lt;td&gt;7 waves: 
  &lt;td&gt;&lt;a href=&#34;/2012/02/graph_land.html#y=Math.sin(x%2F4)%20%2B%20Math.sin(x%2F2%2B17)%2F2%20%2B%20Math.sin(x%2B19)%2F4%20%2B%20Math.sin(x*2%2B23)%2F8%20%2B%20Math.sin(x*4%2B29)%2F16%20%2B%20Math.sin(x*8%2B31)%2F32%20%2B%20Math.sin(x*16)%2F64&#34;&gt;&lt;code&gt;Math.sin(x/4) + Math.sin(x/2+17)/2 + Math.sin(x+19)/4 +
  Math.sin(x*2+23)/8 + Math.sin(x*4+29)/16 + Math.sin(x*8+31)/32  +
  Math.sin(x*16)/64&lt;/code&gt;&lt;/a&gt;
&lt;td&gt;&lt;a href=&#34;/2012/02/graph_land.html#y=Math.sin(x%2F4)%20%2B%20Math.sin(x%2F2%2B17)%2F2%20%2B%20Math.sin(x%2B19)%2F4%20%2B%20Math.sin(x*2%2B23)%2F8%20%2B%20Math.sin(x*4%2B29)%2F16%20%2B%20Math.sin(x*8%2B31)%2F32%20%2B%20Math.sin(x*16)%2F64&#34;&gt;
&lt;img src=&#34;/2012/02/20/terrain7.png&#34;/&gt;&lt;/a&gt;
&lt;/td&gt;&lt;/td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/td&gt;&lt;/td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/td&gt;&lt;/td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/td&gt;&lt;/td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/td&gt;&lt;/td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/td&gt;&lt;/td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/td&gt;&lt;/td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;p&gt;The terrain in my flight simulator works the same way except that I use
random noise instead of sine waves for the basic input, so instead of combining
many layers of sine waves, it is combining many layers of random noise.
&lt;/p&gt;&lt;/p&gt;&lt;/br&gt;&lt;/br&gt;&lt;/p&gt;&lt;/br&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>How to fold a paper envelope for storing seeds</title>
      <link>/2012/02/16/howto_make_a_seed_packet/</link>
      <pubDate>Thu, 16 Feb 2012 22:57:39 +0000</pubDate>
      
      <guid>/2012/02/16/howto_make_a_seed_packet/</guid>
      <description>

&lt;h1 id=&#34;how-to-fold-a-paper-envelope-for-storing-seeds-2012-02-16-howto-make-a-seed-packet&#34;&gt;&lt;a href=&#34;/2012/02/16/howto_make_a_seed_packet/&#34;&gt;How to fold a paper envelope for storing seeds&lt;/a&gt;&lt;/h1&gt;

&lt;p&gt;I like collecting seeds from plants in my garden. I store them in little folded paper packets, with the name of the plant and the date collected written on the outside. There are lots of ways to make envelopes out of paper, but this one is my favorite because it is so simple:

&lt;p&gt;&lt;img src=&#34;/2012/02/seed_packet.png&#34;/&gt;&lt;/p&gt;&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Making of an HTML5 game: Forest</title>
      <link>/2012/01/03/making_of_forest/</link>
      <pubDate>Tue, 03 Jan 2012 18:45:30 +0000</pubDate>
      
      <guid>/2012/01/03/making_of_forest/</guid>
      <description>

&lt;h1 id=&#34;making-of-an-html5-game-forest-2012-01-03-making-of-forest&#34;&gt;&lt;a href=&#34;/2012/01/03/making_of_forest/&#34;&gt;Making of an HTML5 game: Forest&lt;/a&gt;&lt;/h1&gt;

&lt;p&gt;I wrote &lt;a href=&#34;/2011/12/20/forest_meditation_game/&#34;&gt;earlier&lt;/a&gt;
about Forest, a meditation game I made for the Super Friendship Club&#39;s Mysticism
Pageant (you can play it &lt;a href=&#34;/2011/09/forest.html&#34;&gt;here&lt;/a&gt;). That article covered my motivations and inspirations, but
not the details of how it was put together. This article covers the details.

&lt;h4&gt;Overview&lt;/h4&gt;
&lt;p&gt;The game uses HTML5, specifically the &amp;lt;canvas&amp;gt; tag for graphics and the
&amp;lt;audio&amp;gt; tag for music.  The world is procedural, which means that
instead of using photoshop to paint the levels by hand I made some algorithms to
generate the world. This has two advantages:
&lt;ol&gt;
&lt;li&gt;It is a very fast way to get a lot of variety, which helps the world look
  natural and convincing.
  &lt;li&gt;It was more fun. I didn&#39;t have to sit down and paint 20 or 30 different
  trees by hand.
&lt;/li&gt;&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;I worked on this in the evenings and on weekends for about three weeks during
the pageant, and then spent a couple more weeks cleaning things up and polishing
it after. It is about 1500 lines of JavaScript.

&lt;h4&gt;Procedural Trees&lt;/h4&gt;
&lt;p&gt;&lt;img src=&#34;/2011/12/trees.png&#34;/&gt;
&lt;p&gt;I had the good fortune to be able to work on the code for generating the
trees while sitting on the porch of a cabin near Lake Tahoe. It was quite
relaxing, reclining in the shade of towering pine trees while making a virtual
forest.

&lt;p&gt;The normal way of doing procedural trees appears to be L-systems, but that
seemed too complicated. I did something simpler:
&lt;ol&gt;
&lt;li&gt;Trees are made up of blocks of varying sizes and colors.
  &lt;li&gt;Blocks are laid out in straight lines to make branches, with blocks
  getting smaller along the branch.
  &lt;li&gt;Starting from the main branch (the trunk), side branches split off
  recursively.
  &lt;li&gt;Lengths and angles are randomly jittered, so some branches are longer,
  some are shorter, they branch off at slightly different angles, etc.
  &lt;li&gt;At the end of some branches a foliage block is added in a somewhat-random
  shade of green.
&lt;/li&gt;&lt;/li&gt;&lt;/li&gt;&lt;/li&gt;&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;&lt;img src=&#34;/2011/12/tree.png&#34;/&gt;
&lt;h4&gt;Procedural Grass and Dirt&lt;/h4&gt;
&lt;p&gt;Grass has somewhat random heights and colors: 
&lt;p&gt;&lt;img src=&#34;/2011/12/grass.png&#34;/&gt;
&lt;div class=&#34;highlight&#34; style=&#34;background: #f0f3f3&#34;&gt;&lt;pre style=&#34;line-height: 125%&#34;&gt;&lt;span style=&#34;color: #0099FF; font-style: italic&#34;&gt;// Returns a css color string like &amp;quot;rgb(30,40,50)&amp;quot;&lt;/span&gt;
&lt;span style=&#34;color: #006699; font-weight: bold&#34;&gt;function&lt;/span&gt; rgb(r,g,b) { 
  &lt;span style=&#34;color: #006699; font-weight: bold&#34;&gt;var&lt;/span&gt; f &lt;span style=&#34;color: #555555&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color: #336666&#34;&gt;Math&lt;/span&gt;.floor; 
  &lt;span style=&#34;color: #006699; font-weight: bold&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color: #CC3300&#34;&gt;&amp;quot;rgb(&amp;quot;&lt;/span&gt; &lt;span style=&#34;color: #555555&#34;&gt;+&lt;/span&gt; f(r) &lt;span style=&#34;color: #555555&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color: #CC3300&#34;&gt;&amp;quot;,&amp;quot;&lt;/span&gt; &lt;span style=&#34;color: #555555&#34;&gt;+&lt;/span&gt; f(g) &lt;span style=&#34;color: #555555&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color: #CC3300&#34;&gt;&amp;quot;,&amp;quot;&lt;/span&gt; &lt;span style=&#34;color: #555555&#34;&gt;+&lt;/span&gt; f(b) &lt;span style=&#34;color: #555555&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color: #CC3300&#34;&gt;&amp;quot;)&amp;quot;&lt;/span&gt;;
}

&lt;span style=&#34;color: #006699; font-weight: bold&#34;&gt;var&lt;/span&gt; width &lt;span style=&#34;color: #555555&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color: #FF6600&#34;&gt;3&lt;/span&gt;;
&lt;span style=&#34;color: #006699; font-weight: bold&#34;&gt;for&lt;/span&gt; (&lt;span style=&#34;color: #006699; font-weight: bold&#34;&gt;var&lt;/span&gt; x &lt;span style=&#34;color: #555555&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color: #FF6600&#34;&gt;0&lt;/span&gt;; x &lt;span style=&#34;color: #555555&#34;&gt;&amp;lt;&lt;/span&gt; SCREEN_WIDTH; x &lt;span style=&#34;color: #555555&#34;&gt;+=&lt;/span&gt; width) {
  &lt;span style=&#34;color: #0099FF; font-style: italic&#34;&gt;// Draw one blade of grass&lt;/span&gt;
  &lt;span style=&#34;color: #006699; font-weight: bold&#34;&gt;var&lt;/span&gt; shade &lt;span style=&#34;color: #555555&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color: #336666&#34;&gt;Math&lt;/span&gt;.random() &lt;span style=&#34;color: #555555&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color: #FF6600&#34;&gt;5&lt;/span&gt;;
  context.fillStyle &lt;span style=&#34;color: #555555&#34;&gt;=&lt;/span&gt; rgb(&lt;span style=&#34;color: #FF6600&#34;&gt;40&lt;/span&gt; &lt;span style=&#34;color: #555555&#34;&gt;+&lt;/span&gt; shade, &lt;span style=&#34;color: #FF6600&#34;&gt;110&lt;/span&gt; &lt;span style=&#34;color: #555555&#34;&gt;+&lt;/span&gt; shade, &lt;span style=&#34;color: #FF6600&#34;&gt;50&lt;/span&gt; &lt;span style=&#34;color: #555555&#34;&gt;+&lt;/span&gt; shade);
  &lt;span style=&#34;color: #006699; font-weight: bold&#34;&gt;var&lt;/span&gt; depth &lt;span style=&#34;color: #555555&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color: #336666&#34;&gt;Math&lt;/span&gt;.random() &lt;span style=&#34;color: #555555&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color: #FF6600&#34;&gt;2&lt;/span&gt;;
  &lt;span style=&#34;color: #006699; font-weight: bold&#34;&gt;var&lt;/span&gt; height &lt;span style=&#34;color: #555555&#34;&gt;=&lt;/span&gt; depth &lt;span style=&#34;color: #555555&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color: #FF6600&#34;&gt;10&lt;/span&gt; &lt;span style=&#34;color: #555555&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color: #336666&#34;&gt;Math&lt;/span&gt;.random() &lt;span style=&#34;color: #555555&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color: #FF6600&#34;&gt;10&lt;/span&gt;;
  context.fillRect(x, SCREEN_HEIGHT &lt;span style=&#34;color: #555555&#34;&gt;-&lt;/span&gt; GROUND_HEIGHT &lt;span style=&#34;color: #555555&#34;&gt;+&lt;/span&gt; depth, width, &lt;span style=&#34;color: #555555&#34;&gt;-&lt;/span&gt;height);
}
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;(I didn&#39;t bother including it in the sample code, but there&#39;s also a little
logic to adjust the color if the grass is in a sunbeam)

&lt;p&gt;The dirt has randomly-sized dark and light rectangles layered on it:
&lt;p&gt;&lt;img src=&#34;/2011/12/dirt.png&#34;/&gt;
&lt;div class=&#34;highlight&#34; style=&#34;background: #f0f3f3&#34;&gt;&lt;pre style=&#34;line-height: 125%&#34;&gt;&lt;span style=&#34;color: #0099FF; font-style: italic&#34;&gt;// Ground&lt;/span&gt;
context.fillStyle &lt;span style=&#34;color: #555555&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color: #CC3300&#34;&gt;&amp;quot;rgb(35, 50, 50)&amp;quot;&lt;/span&gt;;
context.fillRect(&lt;span style=&#34;color: #FF6600&#34;&gt;0&lt;/span&gt;, SCREEN_HEIGHT, SCREEN_WIDTH, &lt;span style=&#34;color: #555555&#34;&gt;-&lt;/span&gt;GROUND_HEIGHT);

&lt;span style=&#34;color: #0099FF; font-style: italic&#34;&gt;// Dark spots&lt;/span&gt;
context.fillStyle &lt;span style=&#34;color: #555555&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color: #CC3300&#34;&gt;&amp;quot;rgb(32, 47, 47)&amp;quot;&lt;/span&gt;;
&lt;span style=&#34;color: #006699; font-weight: bold&#34;&gt;for&lt;/span&gt; (&lt;span style=&#34;color: #006699; font-weight: bold&#34;&gt;var&lt;/span&gt; i &lt;span style=&#34;color: #555555&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color: #FF6600&#34;&gt;0&lt;/span&gt;; i &lt;span style=&#34;color: #555555&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&#34;color: #FF6600&#34;&gt;20&lt;/span&gt;; i&lt;span style=&#34;color: #555555&#34;&gt;++&lt;/span&gt;) {
  context.fillRect(&lt;span style=&#34;color: #336666&#34;&gt;Math&lt;/span&gt;.random() &lt;span style=&#34;color: #555555&#34;&gt;*&lt;/span&gt; SCREEN_WIDTH, 
    SCREEN_HEIGHT &lt;span style=&#34;color: #555555&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color: #336666&#34;&gt;Math&lt;/span&gt;.random() &lt;span style=&#34;color: #555555&#34;&gt;*&lt;/span&gt; GROUND_HEIGHT,
    &lt;span style=&#34;color: #336666&#34;&gt;Math&lt;/span&gt;.random() &lt;span style=&#34;color: #555555&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color: #FF6600&#34;&gt;50&lt;/span&gt; &lt;span style=&#34;color: #555555&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color: #FF6600&#34;&gt;10&lt;/span&gt;, 
    &lt;span style=&#34;color: #336666&#34;&gt;Math&lt;/span&gt;.random() &lt;span style=&#34;color: #555555&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color: #FF6600&#34;&gt;50&lt;/span&gt; &lt;span style=&#34;color: #555555&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color: #FF6600&#34;&gt;10&lt;/span&gt;);
}

&lt;span style=&#34;color: #0099FF; font-style: italic&#34;&gt;// Light spots&lt;/span&gt;
context.fillStyle &lt;span style=&#34;color: #555555&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color: #CC3300&#34;&gt;&amp;quot;rgb(38, 53, 53)&amp;quot;&lt;/span&gt;;
&lt;span style=&#34;color: #006699; font-weight: bold&#34;&gt;for&lt;/span&gt; (&lt;span style=&#34;color: #006699; font-weight: bold&#34;&gt;var&lt;/span&gt; i &lt;span style=&#34;color: #555555&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color: #FF6600&#34;&gt;0&lt;/span&gt;; i &lt;span style=&#34;color: #555555&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&#34;color: #FF6600&#34;&gt;20&lt;/span&gt;; i&lt;span style=&#34;color: #555555&#34;&gt;++&lt;/span&gt;) {
  context.fillRect(&lt;span style=&#34;color: #336666&#34;&gt;Math&lt;/span&gt;.random() &lt;span style=&#34;color: #555555&#34;&gt;*&lt;/span&gt; SCREEN_WIDTH, 
    SCREEN_HEIGHT &lt;span style=&#34;color: #555555&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color: #336666&#34;&gt;Math&lt;/span&gt;.random() &lt;span style=&#34;color: #555555&#34;&gt;*&lt;/span&gt; GROUND_HEIGHT, 
    &lt;span style=&#34;color: #336666&#34;&gt;Math&lt;/span&gt;.random() &lt;span style=&#34;color: #555555&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color: #FF6600&#34;&gt;50&lt;/span&gt; &lt;span style=&#34;color: #555555&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color: #FF6600&#34;&gt;10&lt;/span&gt;, 
    &lt;span style=&#34;color: #336666&#34;&gt;Math&lt;/span&gt;.random() &lt;span style=&#34;color: #555555&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color: #FF6600&#34;&gt;50&lt;/span&gt; &lt;span style=&#34;color: #555555&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color: #FF6600&#34;&gt;10&lt;/span&gt;);
}
&lt;/pre&gt;&lt;/div&gt;

&lt;h4&gt;Canvas optimizations&lt;/h4&gt;
&lt;p&gt;I started out just drawing the entire canvas from scratch in every frame,
using fillRect() calls for almost everything (remember, the grass, dirt, trees,
and player are all made out of blocks). Performance was terrible.

&lt;p&gt;I did some testing and found that at 30 FPS I could only
expect to get 5000 100x100 pixel fillRect() calls. That&#39;s not nearly enough.
Each tree is built from about 1000 blocks so that would only get me five trees.
Worse, &amp;lt;canvas&amp;gt; appears to be fillRate() limited. If I want to fill the whole
800x600 canvas, I only get 500 fillRect() calls.  

&lt;p&gt;Since the trees don&#39;t change, I looked into pre-rendering them to off-screen
canvas elements, then using drawImage() to copy them into the main canvas.
Performance testing suggested that at 30 FPS I could get about 35 800x600
drawImage() calls. This is more than enough, since I only need 3 layers of
trees to give enough depth. 

&lt;p&gt;For scrolling, there are two canvases for each layer. When one of the
canvases scrolls off the left side of the main canvas, it is redrawn and starts
scrolling in from the right side of the main canvas. This means in total, there
are only 8 drawImage() calls per frame (three tree layers plus one ground layer,
two canvases per layer).

&lt;p&gt;&lt;img src=&#34;/2011/12/scrolling.png&#34;/&gt;
&lt;h4&gt;Colors&lt;/h4&gt;
&lt;p&gt;I tried different color palettes:
&lt;ol&gt;
&lt;li&gt;Warm tones with plenty of yellow in the shades of green. This helped
  create the warm, lazy summer afternoon feel I wanted.
  &lt;li&gt;Cooler blue tones to help make the yellow fireflies stand out. The
  fireflies looked great but the forest felt too cold.
  &lt;li&gt;A day/night cycle slowly changing between bright, warm greens in the daytime and dark,
  cool blues at night (there were even stars which came out at night). This
  turned out to not be as awesome as I had imagined.  
&lt;/li&gt;&lt;/li&gt;&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;
&lt;img src=&#34;/2011/12/colors_original.png&#34;/&gt;
&lt;img src=&#34;/2011/12/colors_night.png&#34;/&gt;
&lt;p&gt;In the end, I compromised and ended with with a somewhat cooler version of
#1:
&lt;p&gt;&lt;img src=&#34;/2011/12/colors_final.png&#34;/&gt;
&lt;h4&gt;Text&lt;/h4&gt;
&lt;p&gt;I browsed through &lt;a href=&#34;http://www.google.com/webfonts&#34;&gt;Google&#39;s
repository of web fonts&lt;/a&gt; until I found &lt;a href=&#34;http://www.google.com/webfonts/specimen/Tangerine&#34;&gt;Tangerine Bold&lt;/a&gt;,
which I think goes very nicely with the theme. 

&lt;p&gt;I wanted to use JavaScript to render the text into the canvas directly, but I
couldn&#39;t find a way to make it blocky. The obvious solution is to draw the text
at a small size so the pixels are large in relation to the text, then enlarge
the image. However I couldn&#39;t stop the browser from doing interpolated scaling,
so the text ended up blurry instead of blocky.

&lt;p&gt;I gave up on JavaScript for this and used Python instead to pre-render the
text into images. I also added a slight drop-shadow to help the text stand out
from the background. Using images instead of rendering from JavaScript adds
about 300 KB of data to download, but at least it works.

&lt;p&gt;&lt;img src=&#34;/2011/12/breathe.png&#34;/&gt;
&lt;div class=&#34;highlight&#34; style=&#34;background: #f0f3f3&#34;&gt;&lt;pre style=&#34;line-height: 125%&#34;&gt;&lt;span style=&#34;color: #006699; font-weight: bold&#34;&gt;from&lt;/span&gt; &lt;span style=&#34;color: #00CCFF; font-weight: bold&#34;&gt;PIL&lt;/span&gt; &lt;span style=&#34;color: #006699; font-weight: bold&#34;&gt;import&lt;/span&gt; Image, ImageDraw, ImageFont, ImageFilter

&lt;span style=&#34;color: #006699; font-weight: bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color: #CC00FF&#34;&gt;colorize&lt;/span&gt;(image, textColor, backgroundColor):
  colored &lt;span style=&#34;color: #555555&#34;&gt;=&lt;/span&gt; image&lt;span style=&#34;color: #555555&#34;&gt;.&lt;/span&gt;convert(&lt;span style=&#34;color: #CC3300&#34;&gt;&amp;quot;RGBA&amp;quot;&lt;/span&gt;)
  colored&lt;span style=&#34;color: #555555&#34;&gt;.&lt;/span&gt;putdata([textColor &lt;span style=&#34;color: #006699; font-weight: bold&#34;&gt;if&lt;/span&gt; value &lt;span style=&#34;color: #555555&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color: #FF6600&#34;&gt;0&lt;/span&gt; &lt;span style=&#34;color: #006699; font-weight: bold&#34;&gt;else&lt;/span&gt; backgroundColor 
                   &lt;span style=&#34;color: #006699; font-weight: bold&#34;&gt;for&lt;/span&gt; value &lt;span style=&#34;color: #000000; font-weight: bold&#34;&gt;in&lt;/span&gt; image&lt;span style=&#34;color: #555555&#34;&gt;.&lt;/span&gt;getdata()])
  &lt;span style=&#34;color: #006699; font-weight: bold&#34;&gt;return&lt;/span&gt; colored

text &lt;span style=&#34;color: #555555&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color: #CC3300&#34;&gt;&amp;quot;Breathe&amp;quot;&lt;/span&gt;
font &lt;span style=&#34;color: #555555&#34;&gt;=&lt;/span&gt; ImageFont&lt;span style=&#34;color: #555555&#34;&gt;.&lt;/span&gt;truetype(&lt;span style=&#34;color: #CC3300&#34;&gt;&amp;#39;Tangerine_Bold.ttf&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color: #FF6600&#34;&gt;36&lt;/span&gt;)

image &lt;span style=&#34;color: #555555&#34;&gt;=&lt;/span&gt; Image&lt;span style=&#34;color: #555555&#34;&gt;.&lt;/span&gt;new(&lt;span style=&#34;color: #CC3300&#34;&gt;&amp;quot;1&amp;quot;&lt;/span&gt;, font&lt;span style=&#34;color: #555555&#34;&gt;.&lt;/span&gt;getsize(text), &lt;span style=&#34;color: #CC3300&#34;&gt;&amp;#39;#FFF&amp;#39;&lt;/span&gt;)
draw &lt;span style=&#34;color: #555555&#34;&gt;=&lt;/span&gt; ImageDraw&lt;span style=&#34;color: #555555&#34;&gt;.&lt;/span&gt;Draw(image)
draw&lt;span style=&#34;color: #555555&#34;&gt;.&lt;/span&gt;text((&lt;span style=&#34;color: #FF6600&#34;&gt;0&lt;/span&gt;, &lt;span style=&#34;color: #FF6600&#34;&gt;0&lt;/span&gt;), text, font&lt;span style=&#34;color: #555555&#34;&gt;=&lt;/span&gt;font)
&lt;span style=&#34;color: #0099FF; font-style: italic&#34;&gt;# Use nearest-neighbor when enlarging to make it blocky&lt;/span&gt;
image &lt;span style=&#34;color: #555555&#34;&gt;=&lt;/span&gt; image&lt;span style=&#34;color: #555555&#34;&gt;.&lt;/span&gt;resize([i&lt;span style=&#34;color: #555555&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color: #FF6600&#34;&gt;2&lt;/span&gt; &lt;span style=&#34;color: #006699; font-weight: bold&#34;&gt;for&lt;/span&gt; i &lt;span style=&#34;color: #000000; font-weight: bold&#34;&gt;in&lt;/span&gt; image&lt;span style=&#34;color: #555555&#34;&gt;.&lt;/span&gt;size], Image&lt;span style=&#34;color: #555555&#34;&gt;.&lt;/span&gt;NEAREST)

coloredText &lt;span style=&#34;color: #555555&#34;&gt;=&lt;/span&gt; colorize(image, (&lt;span style=&#34;color: #FF6600&#34;&gt;187&lt;/span&gt;, &lt;span style=&#34;color: #FF6600&#34;&gt;221&lt;/span&gt;, &lt;span style=&#34;color: #FF6600&#34;&gt;153&lt;/span&gt;), (&lt;span style=&#34;color: #FF6600&#34;&gt;0&lt;/span&gt;, &lt;span style=&#34;color: #FF6600&#34;&gt;0&lt;/span&gt;, &lt;span style=&#34;color: #FF6600&#34;&gt;0&lt;/span&gt;, &lt;span style=&#34;color: #FF6600&#34;&gt;0&lt;/span&gt;))
shadow &lt;span style=&#34;color: #555555&#34;&gt;=&lt;/span&gt; colorize(image, (&lt;span style=&#34;color: #FF6600&#34;&gt;0&lt;/span&gt;, &lt;span style=&#34;color: #FF6600&#34;&gt;0&lt;/span&gt;, &lt;span style=&#34;color: #FF6600&#34;&gt;0&lt;/span&gt;), (&lt;span style=&#34;color: #FF6600&#34;&gt;0&lt;/span&gt;, &lt;span style=&#34;color: #FF6600&#34;&gt;0&lt;/span&gt;, &lt;span style=&#34;color: #FF6600&#34;&gt;0&lt;/span&gt;, &lt;span style=&#34;color: #FF6600&#34;&gt;0&lt;/span&gt;))
&lt;span style=&#34;color: #006699; font-weight: bold&#34;&gt;for&lt;/span&gt; i &lt;span style=&#34;color: #000000; font-weight: bold&#34;&gt;in&lt;/span&gt; &lt;span style=&#34;color: #336666&#34;&gt;range&lt;/span&gt;(&lt;span style=&#34;color: #FF6600&#34;&gt;3&lt;/span&gt;):  &lt;span style=&#34;color: #0099FF; font-style: italic&#34;&gt;# Takes several blurs to get blurry enough&lt;/span&gt;
  shadow &lt;span style=&#34;color: #555555&#34;&gt;=&lt;/span&gt; shadow&lt;span style=&#34;color: #555555&#34;&gt;.&lt;/span&gt;filter(ImageFilter&lt;span style=&#34;color: #555555&#34;&gt;.&lt;/span&gt;BLUR)

shadow&lt;span style=&#34;color: #555555&#34;&gt;.&lt;/span&gt;paste(coloredText, (&lt;span style=&#34;color: #FF6600&#34;&gt;0&lt;/span&gt;, &lt;span style=&#34;color: #FF6600&#34;&gt;0&lt;/span&gt;), coloredText)
shadow&lt;span style=&#34;color: #555555&#34;&gt;.&lt;/span&gt;save(&lt;span style=&#34;color: #CC3300&#34;&gt;&amp;quot;breathe.png&amp;quot;&lt;/span&gt;)
&lt;/pre&gt;&lt;/div&gt;

&lt;h4&gt;Movement&lt;/h4&gt;
&lt;p&gt;I wanted the movement to have a specific feel:
&lt;ol&gt;
&lt;li&gt;Syncing input to breathing gives a slow pace
  &lt;li&gt;Possible to run
  &lt;li&gt;Possible to quickly slow down from a run
&lt;/li&gt;&lt;/li&gt;&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;When space is held, there&#39;s an acceleration which decreases as the player&#39;s
speed approaches the target speed. Rapidly clicking space builds up an acceleration boost
which allows running.  Finally, drag slows the player down quickly from
high speeds but has little effect at slow speeds. 

&lt;p&gt;The acceleration from tapping space once is so small it can barely be
noticed. This gives a bad experience if the player just taps space once at the
start of the game because it looks like nothing happened. To fix this, if the player isn&#39;t 
moving and space is pressed, the speed jumps straight to the target speed. This provides 
nice feedback and makes it obvious that pressing space did something.

&lt;div class=&#34;highlight&#34; style=&#34;background: #f0f3f3&#34;&gt;&lt;pre style=&#34;line-height: 125%&#34;&gt;&lt;span style=&#34;color: #006699; font-weight: bold&#34;&gt;function&lt;/span&gt; Player() {
  &lt;span style=&#34;color: #006699; font-weight: bold&#34;&gt;this&lt;/span&gt;.x &lt;span style=&#34;color: #555555&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color: #FF6600&#34;&gt;0&lt;/span&gt;; &lt;span style=&#34;color: #0099FF; font-style: italic&#34;&gt;// position&lt;/span&gt;
  &lt;span style=&#34;color: #006699; font-weight: bold&#34;&gt;this&lt;/span&gt;.dx &lt;span style=&#34;color: #555555&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color: #FF6600&#34;&gt;0&lt;/span&gt;; &lt;span style=&#34;color: #0099FF; font-style: italic&#34;&gt;// speed&lt;/span&gt;
  &lt;span style=&#34;color: #006699; font-weight: bold&#34;&gt;this&lt;/span&gt;.ax &lt;span style=&#34;color: #555555&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color: #FF6600&#34;&gt;0&lt;/span&gt;; &lt;span style=&#34;color: #0099FF; font-style: italic&#34;&gt;// acceleration&lt;/span&gt;
  &lt;span style=&#34;color: #006699; font-weight: bold&#34;&gt;this&lt;/span&gt;.clicks &lt;span style=&#34;color: #555555&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color: #FF6600&#34;&gt;0&lt;/span&gt;;  &lt;span style=&#34;color: #0099FF; font-style: italic&#34;&gt;// Number of times player pressed button within clickWindow &lt;/span&gt;
  &lt;span style=&#34;color: #006699; font-weight: bold&#34;&gt;this&lt;/span&gt;.clickWindow &lt;span style=&#34;color: #555555&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color: #FF6600&#34;&gt;5&lt;/span&gt;; &lt;span style=&#34;color: #0099FF; font-style: italic&#34;&gt;// Number of seconds to measure button presses over&lt;/span&gt;
  &lt;span style=&#34;color: #006699; font-weight: bold&#34;&gt;this&lt;/span&gt;.running &lt;span style=&#34;color: #555555&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color: #006699; font-weight: bold&#34;&gt;false&lt;/span&gt;; &lt;span style=&#34;color: #0099FF; font-style: italic&#34;&gt;// True if player is holding down button&lt;/span&gt;
  &lt;span style=&#34;color: #006699; font-weight: bold&#34;&gt;this&lt;/span&gt;.targetSpeed &lt;span style=&#34;color: #555555&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color: #FF6600&#34;&gt;50&lt;/span&gt;; &lt;span style=&#34;color: #0099FF; font-style: italic&#34;&gt;// Desired speed if button is held continuously&lt;/span&gt;
}

&lt;span style=&#34;color: #0099FF; font-style: italic&#34;&gt;// dt is how much time has elapsed since the last call to update()&lt;/span&gt;
Player.prototype.update &lt;span style=&#34;color: #555555&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color: #006699; font-weight: bold&#34;&gt;function&lt;/span&gt;(dt) { 
  &lt;span style=&#34;color: #0099FF; font-style: italic&#34;&gt;// calculate bonus acceleration for clicking button rapidly&lt;/span&gt;
  &lt;span style=&#34;color: #006699; font-weight: bold&#34;&gt;this&lt;/span&gt;.clicks &lt;span style=&#34;color: #555555&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color: #336666&#34;&gt;Math&lt;/span&gt;.max(&lt;span style=&#34;color: #FF6600&#34;&gt;0&lt;/span&gt;, &lt;span style=&#34;color: #006699; font-weight: bold&#34;&gt;this&lt;/span&gt;.clicks);
  &lt;span style=&#34;color: #006699; font-weight: bold&#34;&gt;var&lt;/span&gt; clickRate &lt;span style=&#34;color: #555555&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color: #006699; font-weight: bold&#34;&gt;this&lt;/span&gt;.clicks&lt;span style=&#34;color: #555555&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color: #006699; font-weight: bold&#34;&gt;this&lt;/span&gt;.clickWindow;
  &lt;span style=&#34;color: #006699; font-weight: bold&#34;&gt;var&lt;/span&gt; boost &lt;span style=&#34;color: #555555&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color: #FF6600&#34;&gt;49&lt;/span&gt; &lt;span style=&#34;color: #555555&#34;&gt;*&lt;/span&gt; clickRate &lt;span style=&#34;color: #555555&#34;&gt;*&lt;/span&gt; clickRate;

  &lt;span style=&#34;color: #006699; font-weight: bold&#34;&gt;var&lt;/span&gt; drag &lt;span style=&#34;color: #555555&#34;&gt;=&lt;/span&gt; .&lt;span style=&#34;color: #FF6600&#34;&gt;003&lt;/span&gt; &lt;span style=&#34;color: #555555&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color: #006699; font-weight: bold&#34;&gt;this&lt;/span&gt;.dx &lt;span style=&#34;color: #555555&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color: #006699; font-weight: bold&#34;&gt;this&lt;/span&gt;.dx;
  &lt;span style=&#34;color: #006699; font-weight: bold&#34;&gt;this&lt;/span&gt;.ax &lt;span style=&#34;color: #555555&#34;&gt;=&lt;/span&gt; boost &lt;span style=&#34;color: #555555&#34;&gt;-&lt;/span&gt; drag;

  &lt;span style=&#34;color: #006699; font-weight: bold&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color: #006699; font-weight: bold&#34;&gt;this&lt;/span&gt;.running) {
    &lt;span style=&#34;color: #0099FF; font-style: italic&#34;&gt;// When running, provide an alternate, possibly higher, acceleration&lt;/span&gt;
    &lt;span style=&#34;color: #006699; font-weight: bold&#34;&gt;this&lt;/span&gt;.ax &lt;span style=&#34;color: #555555&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color: #336666&#34;&gt;Math&lt;/span&gt;.max(&lt;span style=&#34;color: #006699; font-weight: bold&#34;&gt;this&lt;/span&gt;.ax, boost &lt;span style=&#34;color: #555555&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color: #006699; font-weight: bold&#34;&gt;this&lt;/span&gt;.targetSpeed &lt;span style=&#34;color: #555555&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color: #006699; font-weight: bold&#34;&gt;this&lt;/span&gt;.dx); 
  }
  
  &lt;span style=&#34;color: #006699; font-weight: bold&#34;&gt;this&lt;/span&gt;.dx &lt;span style=&#34;color: #555555&#34;&gt;+=&lt;/span&gt; &lt;span style=&#34;color: #006699; font-weight: bold&#34;&gt;this&lt;/span&gt;.ax &lt;span style=&#34;color: #555555&#34;&gt;*&lt;/span&gt; dt;
  &lt;span style=&#34;color: #006699; font-weight: bold&#34;&gt;this&lt;/span&gt;.x &lt;span style=&#34;color: #555555&#34;&gt;+=&lt;/span&gt; &lt;span style=&#34;color: #006699; font-weight: bold&#34;&gt;this&lt;/span&gt;.dx &lt;span style=&#34;color: #555555&#34;&gt;*&lt;/span&gt; dt;
}

Player.prototype.startRunning &lt;span style=&#34;color: #555555&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color: #006699; font-weight: bold&#34;&gt;function&lt;/span&gt;() {
  &lt;span style=&#34;color: #006699; font-weight: bold&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color: #006699; font-weight: bold&#34;&gt;this&lt;/span&gt;.running) {
    &lt;span style=&#34;color: #006699; font-weight: bold&#34;&gt;return&lt;/span&gt;;
  }
  &lt;span style=&#34;color: #006699; font-weight: bold&#34;&gt;this&lt;/span&gt;.running &lt;span style=&#34;color: #555555&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color: #006699; font-weight: bold&#34;&gt;true&lt;/span&gt;;
  &lt;span style=&#34;color: #006699; font-weight: bold&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color: #006699; font-weight: bold&#34;&gt;this&lt;/span&gt;.dx &lt;span style=&#34;color: #555555&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color: #FF6600&#34;&gt;0&lt;/span&gt;) {
    &lt;span style=&#34;color: #0099FF; font-style: italic&#34;&gt;// not moving yet, provide a &amp;quot;kick&amp;quot; so it is obvious something happened.&lt;/span&gt;
    &lt;span style=&#34;color: #006699; font-weight: bold&#34;&gt;this&lt;/span&gt;.dx &lt;span style=&#34;color: #555555&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color: #006699; font-weight: bold&#34;&gt;this&lt;/span&gt;.targetSpeed;
  }
  &lt;span style=&#34;color: #006699; font-weight: bold&#34;&gt;this&lt;/span&gt;.clicks&lt;span style=&#34;color: #555555&#34;&gt;++&lt;/span&gt;;
  &lt;span style=&#34;color: #006699; font-weight: bold&#34;&gt;var&lt;/span&gt; that &lt;span style=&#34;color: #555555&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color: #006699; font-weight: bold&#34;&gt;this&lt;/span&gt;;
  setTimeout(&lt;span style=&#34;color: #006699; font-weight: bold&#34;&gt;function&lt;/span&gt;() {that.clicks&lt;span style=&#34;color: #555555&#34;&gt;--&lt;/span&gt;;}, &lt;span style=&#34;color: #006699; font-weight: bold&#34;&gt;this&lt;/span&gt;.clickWindow&lt;span style=&#34;color: #555555&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color: #FF6600&#34;&gt;1000&lt;/span&gt;);
}

Player.prototype.stopRunning &lt;span style=&#34;color: #555555&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color: #006699; font-weight: bold&#34;&gt;function&lt;/span&gt;() {
  &lt;span style=&#34;color: #006699; font-weight: bold&#34;&gt;this&lt;/span&gt;.running &lt;span style=&#34;color: #555555&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color: #006699; font-weight: bold&#34;&gt;false&lt;/span&gt;;
}

&lt;span style=&#34;color: #006699; font-weight: bold&#34;&gt;var&lt;/span&gt; player &lt;span style=&#34;color: #555555&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color: #006699; font-weight: bold&#34;&gt;new&lt;/span&gt; Player();
&lt;span style=&#34;color: #006699; font-weight: bold&#34;&gt;var&lt;/span&gt; SPACE &lt;span style=&#34;color: #555555&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color: #FF6600&#34;&gt;32&lt;/span&gt;;
$(&lt;span style=&#34;color: #336666&#34;&gt;document&lt;/span&gt;).keydown(&lt;span style=&#34;color: #006699; font-weight: bold&#34;&gt;function&lt;/span&gt;(e) {e.which &lt;span style=&#34;color: #555555&#34;&gt;==&lt;/span&gt; SPACE &lt;span style=&#34;color: #555555&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; player.startRunning();});
$(&lt;span style=&#34;color: #336666&#34;&gt;document&lt;/span&gt;).keyup(&lt;span style=&#34;color: #006699; font-weight: bold&#34;&gt;function&lt;/span&gt;(e) {e.which &lt;span style=&#34;color: #555555&#34;&gt;==&lt;/span&gt; SPACE &lt;span style=&#34;color: #555555&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; player.stopRunning();});
&lt;span style=&#34;color: #0099FF; font-style: italic&#34;&gt;// Prevent space from scrolling the page&lt;/span&gt;
$(&lt;span style=&#34;color: #336666&#34;&gt;document&lt;/span&gt;).keypress(&lt;span style=&#34;color: #006699; font-weight: bold&#34;&gt;function&lt;/span&gt;(e) {&lt;span style=&#34;color: #006699; font-weight: bold&#34;&gt;return&lt;/span&gt; e.which &lt;span style=&#34;color: #555555&#34;&gt;!=&lt;/span&gt; SPACE});
&lt;/pre&gt;&lt;/div&gt;

&lt;h4&gt;Metrics&lt;/h4&gt;
&lt;p&gt;Google Analytics can do &lt;a href=&#34;http://code.google.com/apis/analytics/docs/tracking/eventTrackerGuide.html&#34;&gt;event tracking&lt;/a&gt;, which is perfect for gathering metrics on how many players
start the game and how many players make it all the way to the end.

&lt;div class=&#34;highlight&#34; style=&#34;background: #f0f3f3&#34;&gt;&lt;pre style=&#34;line-height: 125%&#34;&gt;&lt;span style=&#34;color: #006699; font-weight: bold&#34;&gt;function&lt;/span&gt; trackEvent(action) {
  &lt;span style=&#34;color: #006699; font-weight: bold&#34;&gt;if&lt;/span&gt; (_gaq) {
    _gaq.push([&lt;span style=&#34;color: #CC3300&#34;&gt;&amp;quot;_trackEvent&amp;quot;&lt;/span&gt;, &lt;span style=&#34;color: #CC3300&#34;&gt;&amp;quot;forest&amp;quot;&lt;/span&gt;, action]);
  } &lt;span style=&#34;color: #006699; font-weight: bold&#34;&gt;else&lt;/span&gt; {
    console.log(&lt;span style=&#34;color: #CC3300&#34;&gt;&amp;quot;Analytics not loaded. Not logging event: &amp;quot;&lt;/span&gt; &lt;span style=&#34;color: #555555&#34;&gt;+&lt;/span&gt; action);
  }
}
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Even though the game only lasts five minutes, the metrics made it obvious
that players were leaving before finishing. Based on this, I added the &#34;Breathe&#34;
and &#34;Relax&#34; reminders in the middle to hint that the game doesn&#39;t just run on
forever. Metrics showed an improvement in the number of players reaching the end
after this change.
&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Forest: A Meditation Game</title>
      <link>/2011/12/20/forest_meditation_game/</link>
      <pubDate>Wed, 21 Dec 2011 03:45:45 +0000</pubDate>
      
      <guid>/2011/12/20/forest_meditation_game/</guid>
      <description>

&lt;h1 id=&#34;forest-a-meditation-game-2011-12-20-forest-meditation-game&#34;&gt;&lt;a href=&#34;/2011/12/20/forest_meditation_game/&#34;&gt;Forest: A Meditation Game&lt;/a&gt;&lt;/h1&gt;

&lt;p&gt;The Super Friendship Club runs month-long game pageants where participants make
games related to a theme. For the Mysticism Pageant I made a meditation game
called Forest.

&lt;p&gt;Most games are about doing: building empires, killing monsters, driving fast.
This game is about not doing, about breathing. There&#39;s no score, no goal. It
isn&#39;t fun like other games, but is hopefully enjoyable. It&#39;s not really a game,
but that&#39;s the best word I can come up with. (&#34;Experience&#34; would be more
accurate but that sounds silly and has too many syllables)

&lt;p&gt;Go &lt;a href=&#34;/2011/09/forest.html&#34;&gt;play it now&lt;/a&gt;.

&lt;p&gt;
&lt;a href=&#34;/2011/09/forest.html&#34;&gt;
&lt;img src=&#34;/2011/12/forest_screenshot.jpg&#34;/&gt;
&lt;/a&gt;
&lt;h4&gt;Inspiration&lt;/h4&gt;
&lt;p&gt;I wanted to do a game about meditation but mediation usually involves closing
one&#39;s eyes and sitting very still. While I was struggling to figure out how to
translate this to an interactive game, my wife and I attended a meditation
workshop with Thich Nhat Hanh. One of the techniques we practiced was walking
meditation, and I saw this was the solution: One does not need to be sitting
with closed eyes in order to fully experience the present moment. This became
the concept I would try to communicate to the player.

&lt;p&gt;I loved the first half of pOnd, and wanted to make something similar to that,
but taking the subject more seriously. I think pOnd&#39;s ending cheapened the
experience, as if the creators didn&#39;t really believe in what they had started.
They had a brilliant mechanic, though: encouraging the player to synchronize
their breathing with their actions is powerful.

&lt;p&gt;The forest spirits that are so prevalent in Miyazaki&#39;s films kept popping into
my thoughts. Not only did they fit the mysticism theme well, they improved
the game in several ways. Their appearance (or startled flight) provides
feedback to the player. They move with the player&#39;s breath, deepening the
synchronization. Finally, they provide a simple narrative hook for the start
of the game.


&lt;h4&gt;Mechanics&lt;/h4&gt;
&lt;p&gt;I decided the core mechanic would be walking through a forest by pressing space
as you breathe in, releasing as you breathe out. A quick prototype showed this
was relaxing and engrossing.

&lt;p&gt;At first I wanted to make the player figure this out on their own, to encourage
a sense of discovery. The original version of Forest dropped hints about going
slow and only showed the instructions about synchronized breathing if the player
slowed down. If they didn&#39;t slow down, there was a &#34;failure&#34; ending which hinted
at the player being too hurried.  Metrics revealed that almost no one went
slowly enough, though, so I gave up on that. Now everyone gets the breathing
instructions and there is no way to &#34;fail.&#34;

&lt;p&gt;I wanted there to be an &#34;aha!&#34; moment when the player stops running and starts
walking slowly. I intentionally try to mislead the player at the start by
telling them how to run, hoping to get the player to experience the contrast
between running and then relaxing. However, I deliberately avoided artificially
increasing this contrast by changing the way the game is rendered when running.
It would have been easy to decrease color saturation, draw trees in less detail,
etc. but that wouldn&#39;t be true to the theme.  The whole point is that &lt;i&gt;the
player&lt;/i&gt; notices more when walking, not that the game shows them more when
walking. The detail has to be there all along to be authentic and not just a
fake effect.

&lt;p&gt;When making most games, much time is devoted to finding pleasurable reward
loops. Basic breathing meditation is already enjoyable, though, so the game just
tries to nudge the player to try it. I avoided adding traditional reward loops
on top of this, partly because this risked smothering the fragile pleasure from
meditation, and partly because I was concerned about replacing intrinsic
motivation with extrinsic motivation.


&lt;h4&gt;One Last Thought&lt;/h4&gt;
&lt;p&gt;Many of the best games teach the player something, improve them in some way.
This is something I aspired to. Being conscious of one&#39;s own breath is a powerful
relaxation technique that can be used anywhere. Learning to relax and release
stress is important skill that most people can benefit from. I have no illusions
about achieving wide-spread public health gains via this game, but I do hope
that it helps at least one person lead a more relaxed life.
&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Hokkaido, Japan by Bicycle (part 3 of 3)</title>
      <link>/2011/11/04/hokkaido_by_bicycle_part_3/</link>
      <pubDate>Sat, 05 Nov 2011 03:34:52 +0000</pubDate>
      
      <guid>/2011/11/04/hokkaido_by_bicycle_part_3/</guid>
      <description>

&lt;h1 id=&#34;hokkaido-japan-by-bicycle-part-3-of-3-2011-11-04-hokkaido-by-bicycle-part-3&#34;&gt;&lt;a href=&#34;/2011/11/04/hokkaido_by_bicycle_part_3/&#34;&gt;Hokkaido, Japan by Bicycle (part 3 of 3)&lt;/a&gt;&lt;/h1&gt;

&lt;p&gt;&lt;style scoped=&#34;scoped&#34; type=&#34;text/css&#34;&gt;
.hokkaidoDistanceSummary {
  font-style: italic;
}&lt;/p&gt;

&lt;p&gt;.hokkaidoIntroOutro {
  font-style: italic;
  text-align: center
}&lt;/p&gt;

&lt;p&gt;.hokkaido h4 {
  clear:both;
  padding-top: 1em;
}
&lt;/style&gt;
&lt;div class=&#34;hokkaido&#34;&gt;
&lt;div class=&#34;hokkaidoIntroOutro&#34;&gt;
&lt;a href=&#34;https://picasaweb.google.com/lh/photo/3Evspi8LLMfXTkim7itYjg?feat=directlink&#34;&gt;
&lt;img src=&#34;/2011/10/sapporo_ropeway.jpg&#34;&gt;
&lt;/img&gt;&lt;/a&gt;
&lt;p&gt;In 2009, we spent three weeks riding bicycles around Japan.
&lt;br&gt;This is the final part of the story of that trip.
&lt;br&gt;(Part 1 is &lt;a href=&#34;/2011/10/14/hokkaido_by_bicycle_part_1/&#34;&gt;here&lt;/a&gt; and part 2 is &lt;a href=&#34;/2011/10/29/hokkaido_by_bicycle_part_2/&#34;&gt;here.&lt;/a&gt;)
&lt;/br&gt;&lt;/br&gt;&lt;/p&gt;&lt;/div&gt;
&lt;h4&gt;September 10, 7:30 am, Pension Birao, Teshikaga&lt;/h4&gt;
&lt;p class=&#34;hokkaidoDistanceSummary&#34;&gt;Distance ridden yesterday: 89 miles. Weather:
sunny, slight headwind.&lt;/p&gt;

&lt;div class=&#34;verticalPhotoBox alignright&#34;&gt;
&lt;a href=&#34;https://picasaweb.google.com/lh/photo/5HQuMQXlBMiDLHpHPXZ0eA?feat=directlink&#34;&gt;
&lt;img src=&#34;/2011/10/fields.jpg&#34;&gt;
&lt;/img&gt;&lt;/a&gt;
&lt;a href=&#34;https://picasaweb.google.com/lh/photo/h9qD3LdyCwFk4jbJIoYKdg?feat=directlink&#34;&gt;
&lt;img src=&#34;/2011/10/mashuko.jpg&#34;&gt;
&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;Rode 89 miles yesterday, setting a new personal record for the second time in
a week. Started in Rausu and rode down the coast for a couple hours.  Several
tunnels, one of which seemed especially dark until I realized I had forgotten to
take off my sunglasses.  Stopped at a market on the side of the road; they had
white chocolate made with melons from Yubari. It tasted exactly like fresh
melons.

&lt;p&gt;Turned inland after the market, crossing flat farmland with mountains in the
distance. Rode on small back roads between the fields with a slight headwind the
whole way. Yana and I weren&#39;t putting enough effort into drafting tightly behind
Piaw (it takes concentration to stay close enough). Once we dropped back it
was too much work to catch him so we just trailed after him for many miles. 


&lt;p&gt;Found a nice inn in Teshikage where we left our bags before going back
out to ride up to Lake Mashu, part of Akan National Park.  When we
were in the park a few days ago we skipped Lake Mashu because of poor
weather; it was nice to get a second chance.  The scenery was well worth the
climb. The road goes up the ridge so we had great views; the
farmland at the base of the mountain glowed from late afternoon sun streaming
through the clouds. The lake is a deep blue color and lies in a volcanic
crater, far below the road which runs along the crater rim.  On the opposite
side there was a steep set of cliffs with puffy clouds behind. It was cold up
there, and the rapid descent was even colder.

&lt;p&gt;Dinner was Western style, but with an unmistakable Japanese influence: many
small, well-presented dishes.  Delicious.

&lt;div class=&#34;centeredContent&#34;&gt;
&lt;div class=&#34;photo2&#34;&gt;
&lt;a href=&#34;https://picasaweb.google.com/lh/photo/F5gF8rH4ov7iMTfH-fWIFA?feat=directlink&#34;&gt;
&lt;img src=&#34;/2011/10/cranes.jpg&#34;&gt;
&lt;/img&gt;&lt;/a&gt;
&lt;p&gt;Japanese Cranes in a field
  &lt;/p&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h4&gt;September 10, 10:00 pm, Ryokan in Ashoro&lt;/h4&gt;
&lt;p class=&#34;hokkaidoDistanceSummary&#34;&gt;Distance: 60 miles. Weather: patchy clouds.

&lt;div class=&#34;verticalPhotoBox alignright&#34;&gt;
&lt;a href=&#34;https://picasaweb.google.com/lh/photo/u9HEV4KYgZ5YD2FOCh9k3g?feat=directlink&#34;&gt;
&lt;img src=&#34;/2011/10/western_breakfast.jpg&#34;&gt;
&lt;/img&gt;&lt;/a&gt;
&lt;a href=&#34;https://picasaweb.google.com/lh/photo/M9eFe6XUiLbsVU_fDPQjuA?feat=directlink&#34;&gt;
&lt;img src=&#34;/2011/10/sushi_rose.jpg&#34;&gt;
&lt;/img&gt;&lt;/a&gt;
&lt;div class=&#34;photo2&#34;&gt;
&lt;a href=&#34;https://picasaweb.google.com/lh/photo/J8IAJtygMJhmGBl9KPFPcg?feat=directlink&#34;&gt;
&lt;img src=&#34;/2011/10/fish_ice_cream.jpg&#34;&gt;
&lt;/img&gt;&lt;/a&gt;
&lt;p&gt;Fish-shaped ice cream sandwich
  &lt;/p&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Omlettes for breakfast this morning. Very Japanese, with 10 different small
dishes. Well prepared, just like last night.

&lt;p&gt;Rode over two passes today. Cold at times, with a headwind. My bicycle
saddle has become increasingly uncomfortable the last few days.  I&#39;ve been
trying to stay seated on the bike since my fork started making an ominous
popping noise last week but now I can only sit for about 10 minutes before I
have to stand up and give my butt a break.  On the first climb this morning I
couldn&#39;t take it any more and stopped to make a simple adjustment: I tilted
my saddle forward a few degrees. That made all the difference; no pain for the
rest of the day. Funny how the angle was fine for the first week and suddenly
became unbearable.

&lt;p&gt;Saw Lake Akan briefly at lunch. That&#39;s the last of the three lakes in Akan
Park. For lunch I ordered chicken gyoza, expecting dumplings with chicken
inside.  What actually arrived were chicken wings stuffed with gyoza filling.
Meanwhile Yana ordered veggie tempurah, which turned out to be shrimp tempura
served over vegetables. No matter, we&#39;re flexible and both dishes were good.

&lt;p&gt;We&#39;ve been passing lots of road construction. There is almost always a man
standing at the front of the construction with a whistle, motioning to traffic to
slow down. Today we passed a construction site where they had a robot doing this
job. It had a whistle and waved its arm as we rode past.

&lt;p&gt;Staying at a low-end minshuku tonight. It was billed as a ryokan, which is
supposed to be a step up from a minshuku, but this is basically just a room in
some family&#39;s house. The plumbing is questionable. We&#39;ve now experienced the
full range of toilet technology, from robotic toilets with digital control
panels all the way down to squat toilets (both with and without plumbing)

&lt;p&gt;Supper was sushi rice bowls at a restaurant in town. Piaw was still hungry
afterwards, so we went to a second restaurant for another meal. Hard to satisfy
cyclist appetites with Japanese portion sizes. Finally we stopped by Seicomart (a
convenience store) and I got frozen mochi for dessert. We&#39;ve tried almost every
snack Seicomart carries, so we need to start looking for other places to purchase
food.

&lt;p&gt;Our convenience store ritual goes something like this: Find a snack that
looks good. Is it small enough to fit in our luggage? Good. Pick it up to see
how heavy it is. Heavy snacks are good. Light snacks are mostly air, put them
back on the shelf. Next check the calories. More is better. Low-calorie snacks
go back on the shelf. The ideal snack has a high calorie-to-cost ratio and is
dense so it doesn&#39;t take up space in our luggage. Japanese snacks are usually
over-packaged, with outer wrappers, inner wrappers, plastic trays, etc. After
purchasing, throw away most of the packaging before leaving the store to reduce
bulk. 


&lt;h4&gt;September 11, 9:00 pm, Drumkan Minshuku, outside Shintoku&lt;/h4&gt;
&lt;p class=&#34;hokkaidoDistanceSummary&#34;&gt;61 miles, partly cloudy, headwind.

&lt;div class=&#34;verticalPhotoBox alignright&#34;&gt;
&lt;a href=&#34;https://picasaweb.google.com/lh/photo/mZDD7nhBmLf6WfwyQBbFxA?feat=directlink&#34;&gt;
&lt;img src=&#34;/2011/10/drumkan3.jpg&#34;&gt;
&lt;/img&gt;&lt;/a&gt;
&lt;a href=&#34;https://picasaweb.google.com/lh/photo/d7E2TYGRKnZ5JspOn6IJgQ?feat=directlink&#34;&gt;
&lt;img src=&#34;/2011/10/drumkan2.jpg&#34;&gt;
&lt;/img&gt;&lt;/a&gt;
&lt;a href=&#34;https://picasaweb.google.com/lh/photo/nAGIsBtmcGxLxen6RKc-Sg?feat=directlink&#34;&gt;
&lt;img src=&#34;/2011/10/drumkan.jpg&#34;&gt;
&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;Another headwind day, so more pacelining. Good weather still holding. 
Starting to feel like autumn with cool air but warm sun.

Near the end of the day we stopped a few miles outside Shintoku and tried to
find a minshuku that the Touring Mapple recommended. We couldn&#39;t find it.
Couldn&#39;t even find the village that was supposed to be there. Finally gave up
and decided to ride on to Shintoku. As we rolled away Piaw and I finally
spotted the place but it just looked like a house so we kept riding.

&lt;p&gt;Five miles to the info center in Shintoku where the lady at the counter
called a few hotels for us. All full, due to a golf tournament that was in town
(aside: we saw the people playing golf on the courses. It didn&#39;t look like the
golf I&#39;m used to. Instead it looked like a cross between croquet and mini-golf.)
She tried hotels in the next town, same problem: all full. By now three other
people behind the counter had joined the search, calling various hotels.
Finally she found a place: the one we had ridden past. She was concerned that
it was too far for us to ride back, but it really wasn&#39;t. When you&#39;ve already
ridden 56 miles another five isn&#39;t a problem, plus there was a tailwind.

&lt;p&gt;The minshuku was run by two brothers. Front room filled with
guitars (at least 10) and a drum set. Every inn makes you fill out an info slip
with your name, address, etc. Here, though, one of the questions here was &#34;what
is your favorite song?&#34; Music theme firmly established, the brothers drove us to
an awesome onsen for an hour or two, then we returned to enjoy a meal of
Jingisukan together. 

&lt;p&gt;After dinner one brother sat down at the drums, the other grabbed an electric
guitar, and they played a short set for us.  Surf rock, loud and
good. They were having at least as much fun as we were, maybe more, smiling and
laughing. Next they both grabbed acoustic guitars and sang folk
songs with Piaw. Easily one of the best nights of the trip. If you&#39;re in the
area, give them a call and you&#39;ll get a night you won&#39;t forget. Take musical
instruments if you have any. Their web page is &lt;a href=&#34;http://homepage3.nifty.com/drumkan/&#34;&gt;here&lt;/a&gt; and it has a &lt;a href=&#34;http://homepage3.nifty.com/drumkan/drumkan_Mail.html&#34;&gt;contact form&lt;/a&gt;.


&lt;h4&gt;September 12, Noon, restaurant in Tomamu&lt;/h4&gt;
&lt;p&gt;Touring gives you funny food cravings. We daydream about food even while
eating. So far I&#39;ve wanted a good hamburger, milkshake, breakfast cereal (corn
flakes, frosted flakes, corn puffs), donuts (especially apple fritters), pizza,
burritos and all manner of American sweets.


&lt;h4&gt;September 12, 10:20 pm, Yubari Forest Youth Hostel&lt;/h4&gt;
&lt;p class=&#34;hokkaidoDistanceSummary&#34;&gt;82 miles, good weather, no headwind.

&lt;div class=&#34;verticalPhotoBox alignright&#34;&gt;
&lt;a href=&#34;https://picasaweb.google.com/lh/photo/996gG6vP7QZbFpm-7rns1w?feat=directlink&#34;&gt;
&lt;img src=&#34;/2011/10/yubari_cabin.jpg&#34;&gt;
&lt;/img&gt;&lt;/a&gt;
&lt;a href=&#34;https://picasaweb.google.com/lh/photo/G8LbIeG5EVZ9FMdbxdJttw?feat=directlink&#34;&gt;
&lt;img src=&#34;/2011/10/yubari_cabin2.jpg&#34;&gt;
&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;Turned into another long day. Left Shintoku and rode along twisty roads
winding through the mountains towards Shimukappo. Followed some train tracks through
a narrow canyon for a while, then rode next to the Doto Expressway, an unfinished
superhighway.  We originally planned to stop in Shimukappo. Weather was still
holding, though, and no headwind so we decided instead to push on to Yubari. Wanted to spend
another night in the lovely hostel there.

&lt;p&gt;Some very busy roads, tunnels with no sidewalks, mountain descents with large
trucks. Glad we didn&#39;t have to do it in the rain. We kept leap-frogging a
military convoy. They weren&#39;t much faster than us when driving so we would pass them when
they stopped and then when we stopped they would pass us. They
kept the traffic speed low.

&lt;p&gt;Made it to the hostel by five so we had time to shower before dinner. They
put us in the cute cabin next to the main building. Lightly raining now but we
have a warm fire and dry beds. 

&lt;p&gt;Spending so much time on the bike that days are starting to blur together.
Life consists of the three essentials: eat, sleep, ride. 

&lt;h4&gt;September 13, 6:40 pm, Lapland Lodge, Shikotsu&lt;/h4&gt;
&lt;p class=&#34;hokkaidoDistanceSummary&#34;&gt;55 miles, overcast.

&lt;div class=&#34;verticalPhotoBox alignright&#34;&gt;
&lt;a href=&#34;https://picasaweb.google.com/lh/photo/63_KKIVN65boPMhpBNiF8Q?feat=directlink&#34;&gt;
&lt;img src=&#34;/2011/10/sushiboat.jpg&#34;&gt;
&lt;/img&gt;&lt;/a&gt;
&lt;a href=&#34;https://picasaweb.google.com/lh/photo/TAaiOXg3H3Ytpp3jpP1fwQ?feat=directlink&#34;&gt;
&lt;img src=&#34;/2011/10/lapland.jpg&#34;&gt;
&lt;/img&gt;&lt;/a&gt;
&lt;a href=&#34;https://picasaweb.google.com/lh/photo/xwIcPrcPEKL1fA9E6V0Hlg?feat=directlink&#34;&gt;
&lt;img src=&#34;/2011/10/lapland_dinner.jpg&#34;&gt;
&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;This morning I was tired of riding. Tired of pedaling, tired of wind, tired
of bugs hitting my face hard enough to hurt, tired of traffic, ready to put the
bike in its box and not see it again for a long time. 

&lt;p&gt;Met a group of serious cyclists outside Chitose. The first group we&#39;ve seen. They were
getting ready for a ride in a parking lot. We pulled in and chatted with them,
trading snacks.

&lt;p&gt;We stopped for lunch in Chitose at a sushi-boat place. Dishes come around on a
small conveyor belt. Fish, fried chicken, mini-burgers, dessert.  Plates are
color-coded to indicate price. At the end you pay based on the stack of plates
you&#39;ve accumulated.  Small faucet at each seat dispenses hot tea.  Enjoyed this
place more than most sushi places because we could eat exactly what we wanted
and nothing we didn&#39;t.

&lt;p&gt;After eating my spirits were restored and I felt like continuing. Since we
rode extra yesterday we had enough time to take a side trip to Shikotsu today.
It is another National Park east of Chitose with a large lake.
Found a bike path to take us most of the way there. The path was separated from
the road and a little overgrown. 

&lt;p&gt;Shikotsu is hilariously touristy. Between the parking lot and the
information center I counted seven ice cream stands. We arranged lodging, looked at
the stores selling touristy junk, ate some snacks, looked around the museum.
They have evacuation instructions in case one of the local volcanoes errupts. 

&lt;p&gt;We&#39;re staying at the Lapland Lodge near the shore of the lake, a short ride from
the main village. On the way over there was one long straight section of road.
Far behind us I heard a couple motorcycles start accelerating. Sport bikes, by
the sound.  They kept accelerating. Even knowing they were coming I still jumped
when they flew past. I&#39;ve never seen motorcycles go so fast. 

&lt;p&gt;Parked our bikes at the lodge, then the owner drove us to a nearby onsen
(which happened to be right back by the information center we had just been at).
After bathing, we returned to the lodge where the owner made Jingisukan for us.
We enjoyed it along with the other guests.


&lt;h4&gt;September 14, 2:00 pm, Train to Sapporo&lt;/h4&gt;
&lt;p class=&#34;hokkaidoDistanceSummary&#34;&gt;21 miles, sunny.

&lt;p&gt;Gentle downhill ride to Chitose this morning, along the overgrown bike path
most of the way.  Perfect weather. Disassembled and packed our bikes in the
lobby of the airport hotel. Took about two hours. Quick showers then down to the
train station below the airport to catch a train to Sapporo. Glad the ride is
over, glad it went so well, glad our gear worked and glad we saw so many amazing
places and met, if only briefly, so many wonderful people.

&lt;h4&gt;September 14, 8:30 pm, Train to Chitose&lt;/h4&gt;
&lt;div class=&#34;verticalPhotoBox alignright&#34;&gt;
&lt;a href=&#34;https://picasaweb.google.com/lh/photo/Bb2TcUwh_IVZgVpMc_qA1Q?feat=directlink&#34;&gt;
&lt;img src=&#34;/2011/10/moiwa.jpg&#34;&gt;
&lt;/img&gt;&lt;/a&gt;
&lt;div class=&#34;photo2&#34;&gt;
&lt;a href=&#34;https://picasaweb.google.com/lh/photo/sgbPTKufOYBWhoxtJn-ZmA?feat=directlink&#34;&gt;
&lt;img src=&#34;/2011/10/old_ramen_alley.jpg&#34;&gt;
&lt;/img&gt;&lt;/a&gt;
&lt;p&gt;Old Ramen Alley
  &lt;/p&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;In Sapporo we wandered through several shopping malls, including an
underground one called Pole-Town. Purchased gifts for people back home.
Found socks with separate pockets for the big toe so they can be worn with
flip-flops.

&lt;p&gt;After shopping, we took the ropeway up Mt. Moiwa to watch the susnset. Mt.
Moiwa overlooks the city and at the top there is an observation deck and a gift shop
(of course). It was crazy to look off across the plains to the distant mountains in the
west and realize that Yubari was over there. It seemed impossibly far away but it had
only taken us a single day to ride there.

&lt;p&gt;Once it was dark we went back down to the city to get dinner. We&#39;d
already seen New Ramen Alley so decided to go to Old Ramen Alley. Very similar
setup: narrow alley lined with ramen shops, all serving giant bowls of steaming
noodles.

&lt;p&gt;The food on this trip was fantastic. A lot of the places we stayed mentioned
that much of the food they served was grown locally. Makes sense, as we rode
through farmland most days. Some food was even homegrown, like the mushrooms and
homemade bread in Shikotsu.  We noticed that the salads and fresh vegetables all
tasted amazing, especially the tomatoes.  Hard to know how much of this
was because they were high quality, and how much of it was because we were
riding hard enough to get very good appetites.

&lt;h4&gt;September 15, Plane to San Francisco&lt;/h4&gt;
&lt;p&gt;We&#39;re done.

&lt;p&gt;Checked in for our flight early today; found out it was cancelled but we were
early enough that they were able to book us onto a different plane instead. Much
apologizing and bowing from the ticket agents.

&lt;p&gt;Our bike boxes were too big to fit through the x-ray scanner at the airport.
Instead some ANA staff with white gloves had us open the boxes for manual
inspection. More apologizing and bowing.

&lt;p&gt;Enjoyed one last Japanese meal at Narita airport, then boarded our plane
home. And yes, the plane was Pokemon-themed, inside and out.

&lt;div class=&#34;centeredContent&#34;&gt;
&lt;div class=&#34;photo2&#34;&gt;
&lt;a href=&#34;https://picasaweb.google.com/lh/photo/Qj5D8U-2gx_nAL9jsoLbyg?feat=directlink&#34;&gt;
&lt;img src=&#34;/2011/10/pokemon_747.jpg&#34;&gt;
&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h4&gt;Epilogue&lt;/h4&gt;
&lt;p&gt;Over three weeks we rode 952 miles, across Hokkaido and back again.

&lt;p&gt;Even though I ate almost constantly, had ice cream at every opportunity,
tried every snack at Seicomart, even forced myself to eat when not hungry on a
few occasions, I
still lost 10 pounds by the end of the trip.

&lt;p&gt;The first week after returning to the US, Yana and I kept bowing to people.
We bowed when someone held the door, when taking the receipt from a store
clerk, or when saying goodby to someone. We must have looked ridiculous.

&lt;p&gt;Not long after returning we got rid of our bed and replaced it with
Japanese-style futon mattresses stuffed with cotton.  They can be moved out of
the way or stacked in the corner of the room when not needed. We find them more
comfortable and are getting better sleep on them. They are very firm and there&#39;s
absolutely zero motion transfer when the other person moves around.

&lt;p&gt;Took most of a week to get around to putting the bikes back together.
Went out and climbed Old La Honda (one of the classic Bay Area bicycle climbs)
to set a personal record while we were still in peak shape.  It was many weeks
after that before I felt a desire to ride again.

&lt;p&gt;I never heard the popping noise from my front fork again. The only
explanation that makes sense is that the quick release wasn&#39;t quite tight
enough and had a little bit of play.

&lt;p&gt;Yana and I have traveled several times since this trip, but only rented a car
once, finding that we prefer to tour by foot or bicycle now. Without a car we
can really see and smell and hear a place, and get to know it in a way that
drivers don&#39;t.


&lt;div class=&#34;clearboth hokkaidoIntroOutro&#34;&gt;
&lt;a href=&#34;https://picasaweb.google.com/lh/photo/gE5NpdrYle7pVAJWo-ZXDA?feat=directlink&#34;&gt;
&lt;img src=&#34;/2011/10/moiwa_sunset.jpg&#34;&gt;
&lt;/img&gt;&lt;/a&gt;
&lt;p&gt;&lt;a href=&#34;https://picasaweb.google.com/111267409082271470026/HokkaidoBikeTour?authuser=0&amp;amp;feat=directlink&#34;&gt;View more pictures&lt;/a&gt;
&lt;p&gt;The end.&lt;/p&gt;
&lt;/p&gt;&lt;/div&gt;
&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/div&gt;
</description>
    </item>
    
    <item>
      <title>Hokkaido, Japan by Bicycle (part 2 of 3)</title>
      <link>/2011/10/29/hokkaido_by_bicycle_part_2/</link>
      <pubDate>Sat, 29 Oct 2011 19:11:00 +0000</pubDate>
      
      <guid>/2011/10/29/hokkaido_by_bicycle_part_2/</guid>
      <description>

&lt;h1 id=&#34;hokkaido-japan-by-bicycle-part-2-of-3-2011-10-29-hokkaido-by-bicycle-part-2&#34;&gt;&lt;a href=&#34;/2011/10/29/hokkaido_by_bicycle_part_2/&#34;&gt;Hokkaido, Japan by Bicycle (part 2 of 3)&lt;/a&gt;&lt;/h1&gt;

&lt;p&gt;&lt;style scoped=&#34;scoped&#34; type=&#34;text/css&#34;&gt;
.hokkaidoDistanceSummary {
  font-style: italic;
}&lt;/p&gt;

&lt;p&gt;.hokkaidoIntroOutro {
  font-style: italic;
  text-align: center
}&lt;/p&gt;

&lt;p&gt;.hokkaido h4 {
  clear:both;
  padding-top: 1em;
}
&lt;/style&gt;
&lt;div class=&#34;hokkaido&#34;&gt;
&lt;div class=&#34;hokkaidoIntroOutro&#34;&gt;
&lt;a href=&#34;https://picasaweb.google.com/lh/photo/MFfokJfzkHIXFmHj3jktUg?feat=directlink&#34;&gt;
&lt;img src=&#34;/2011/10/lantern.jpg&#34;&gt;
&lt;/img&gt;&lt;/a&gt;
&lt;p&gt;In 2009, we spent three weeks riding bicycles around Japan.
&lt;br&gt;This is part 2 of the story of that trip.
&lt;br&gt;(Part 1 is
&lt;a href=&#34;/2011/10/14/hokkaido_by_bicycle_part_1/&#34;&gt;here&lt;/a&gt;)
&lt;/br&gt;&lt;/br&gt;&lt;/p&gt;&lt;/div&gt;
&lt;h4&gt;September 3, 8:00 am, Daisetsuzan Youth Hostel, Asahidake&lt;/h4&gt;
&lt;p class=&#34;hokkaidoDistanceSummary&#34;&gt;Distance ridden yesterday: 35 miles. Weather:
sunny, increasing clouds through day.&lt;/p&gt;

&lt;div class=&#34;verticalPhotoBox alignright&#34;&gt;
&lt;a href=&#34;https://picasaweb.google.com/lh/photo/XMn9tzWCR-4BRxmChigu9A?feat=directlink&#34;&gt;
&lt;img src=&#34;/2011/10/asahidake_far.jpg&#34;&gt;
&lt;/img&gt;&lt;/a&gt;
&lt;a href=&#34;https://picasaweb.google.com/lh/photo/JJW8Aucmt16Nbjc6O_sg2w?feat=directlink&#34;&gt;
&lt;img src=&#34;/2011/10/asahidake.jpg&#34;&gt;
&lt;/img&gt;&lt;/a&gt;
&lt;a href=&#34;https://picasaweb.google.com/lh/photo/yPQ0ogVXHenJjs8-hw4lcg?feat=directlink&#34;&gt;
&lt;img src=&#34;/2011/10/asahidake_hostel.jpg&#34;&gt;
&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;Yesterday morning fog covered Biei but burned off during breakfast.
The Potato hostel in Biei served toast with breakfast. We had all been craving
bread and ate almost a whole loaf during the meal, plus an entire jar of honey.

&lt;p&gt;Left Biei after breakfast and rode across the valley, up the long gentle
climb to Asahidake. Asahidake is the tallest mountain on Hokkaido, and like
Tokachidake is part of Daisetsuzan National Park. There&#39;s a small ski town near
the base of the peak with a nice hostel. After checking into the hostel we took
the ropeway (gondola) up the mountain. It dropped us off by a small pond and
a group of sulfur vents in the crater. From there, a trail headed straight up the
rocky ridge to the cloud-covered peak. Loose volcanic rock, some dark and some
yellow from sulfur. Above tree line the whole way. On the left side of the ridge
the mountain dropped steeply down to the crater which was obscured by shifting
clouds. On the right, it dropped down to alpine forests far below us. 

&lt;p&gt;The clouds cleared away from the peak for a while as we climbed, then
returned. At a small shoulder just before the peak, we could look out above the
cloud layer. When we reached the peak, the view down into the crater was blocked
by clouds but we could see east across the park.  Peaks and high hills extended
that way for miles.

&lt;p&gt;Met a backpacker at the top whom we had also seen on the trail at Tokachidaki
two days before. While we had biked down to Biei and back up to this peak, he
had hiked across the park to get here. Shared food and stories with him as we
enjoyed the views from the peak.

&lt;p&gt;To keep a light load on our three week trip I only brought two pairs of
shoes: my cycling shoes and a lightweight pair of flip-flops. Cycling shoes are
terrible for hiking so I wore the flip-flops on our hike. I wasn&#39;t sure how
well they would work but I had done some training hikes with them back home to
toughen my feet. Ended up being fine on the ascent, though they were 
amusing to the Japanese hikers we met. Most of them were well-equipped with
sturdy boots, hydration packs, bear bells, trekking poles, etc. and they laughed
when they saw my footwear.

&lt;p&gt;On the steep descent the loose rock made for treacherous footing. With
flip-flops, the trail required concentration to avoid slipping. Clouds started
getting thicker as we descended. Soon the air blowing over the ridge was cold,
gray, and damp.

&lt;p&gt;When we got back to the hostel we were tired, dirty (especially my feet) and
ready for the hot springs. The hostel&#39;s bath consists of an indoor hot pool and
a beautiful outdoor pool formed out of lava rock with lush green plants growing
all around. Very relaxing after a long hike.

&lt;p&gt;At breakfast this morning we met a lady visiting from France. She works for
the government and gets 10 weeks of vacation a year (sounded pretty nice to us).
She wasn&#39;t enjoying the food in Japan, though, and ended up giving us some of
her breakfast. We gladly accepted the extra calories.  Portion sizes in Japan
are healthy, not the ridiculously over-sized portions that American restaurants
serve. This seems to be great for Japanese waistlines, as we have seen very few
obese or even chubby people. Bicycle tourists, however, need massive numbers of
calories every day so we are always on the lookout for extra food.

&lt;h4&gt;September 3, 8:00 pm, Tomato Minshuku, Biei&lt;/h4&gt;
&lt;p class=&#34;hokkaidoDistanceSummary&#34;&gt;Distance: 49 miles. Weather: sunny.

&lt;div class=&#34;verticalPhotoBox alignright&#34;&gt;
&lt;a href=&#34;https://picasaweb.google.com/lh/photo/IrrzMdGga4PeGTWd4oxNYQ?feat=directlink&#34;&gt;
&lt;img src=&#34;/2011/10/hagoramo_waterfall.jpg&#34;&gt;
&lt;/img&gt;&lt;/a&gt;
&lt;a href=&#34;https://picasaweb.google.com/lh/photo/_aCfFrQ5q1Lrv8MJCz_gcA?feat=directlink&#34;&gt;
&lt;img src=&#34;/2011/10/biei_flowers.jpg&#34;&gt;
&lt;/img&gt;&lt;/a&gt;
&lt;a href=&#34;https://picasaweb.google.com/lh/photo/es8Cec8q9fcO5ndeciEVtQ?feat=directlink&#34;&gt;
&lt;img src=&#34;/2011/10/biei_dinner.jpg&#34;&gt;
&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;This morning Brooks, Yana, and I took a side trip to Tenninkyo Gorge to see
the waterfalls. A short gentle climb brought us to a small group of hotels
nestled in a narrow canyon. Both sides of the canyon were cliffs of some kind
of columnar basalt covered with trees and brush. Asked directions to the
falls with my limited Japanese. A short trail brought us to the first one,
Hagoromo-no-taki; smooth streams of water flowing down curved rock. We continued
down the trail, along the edge of the river which flows through the canyon. The
water had an odd blue color but was clear and cold. We soon reached
the second falls, Shikishima-no-taki.  Enjoyed the solitude for a while
before heading back down to our bikes.

&lt;p&gt;Daisetsuzan is a large park but only has a few roads approaching its edges,
and none crossing it. The interior is only accessible by trail which
concentrates visitors on the edges of the park and makes it feel like a small
place. Yesterday on Asahidake we met the backpacker we saw at Takochidake.
Today at Tenninkyo we met a mother/daughter pair whom we had talked to on the
ropeway up to Asahidake.

&lt;p&gt;After Tenninkyo we rode down to the information center in Biei. Talked to
same helpful lady as before. She told us Piaw had already reserved lodging at a
local minshuku (a sort of bed and breakfast) then she took our luggage, to be
delivered to the minshuku.  Service!  

&lt;p&gt;We headed out to lunch and the flower fields in Bibaushi.  Rode along the
&#34;panoramic road&#34; which offered wonderful views of the hills around Biei and the
peaks of Daisetsuzan.  Without heavy luggage the bicycles felt alive, snappy,
full of energy. Ate lunch at a restaurant along the way then stopped at the ice
cream stand next door. The lady running it seemed happy to see us and betwen her
limited English and our limited Japanese we figured out what the flavors were
and ordered. 

&lt;p&gt;The flower fields were filled with all types of flowers, arranged in bright
stripes down the hill. They are at their prime in the spring but even in
September the colors were beautiful. The whole operation was extremely touristy but
I&#39;m starting to expect that in Japan, where every scenic vista and tourist
attraction has a gift shop next to it.  Regardless, it was enjoyable to walk
around among the flowers with mountain peaks rising in the
background.

&lt;p&gt;On the ride back to Biei we had our first flat tire of the trip. 
Caused by an old patch giving out and not road debris. Not surprising
considering how clean the roads are here. The Japanese are either too
polite to litter, or someone is doing an excellent job of picking it all up.
Either way it leads to pleasant riding.

&lt;p&gt;Went to a BBQ place for dinner. There was a small grill in the middle of the
table, but it was so shiny and clean that we weren&#39;t sure whether we were
supposed to put food directly on it on whether there was supposed to be a pan.
Finally our waitress came over and demonstrated that we were in fact supposed to
put the food directly on the grill. 

&lt;h4&gt;September 4, 6:00 pm, Sounkyo Youth Hostel&lt;/h4&gt;
&lt;p class=&#34;hokkaidoDistanceSummary&#34;&gt;61 miles, rain clearing to sun.

&lt;div class=&#34;verticalPhotoBox alignright&#34;&gt;
&lt;a href=&#34;https://picasaweb.google.com/lh/photo/T03Ah_M36P1PBTqBBipSxQ?feat=directlink&#34;&gt;
&lt;img src=&#34;/2011/10/bike_trail.jpg&#34;&gt;
&lt;/img&gt;&lt;/a&gt;
&lt;a href=&#34;https://picasaweb.google.com/lh/photo/TJ3qD2maCcJnprk453JnbA?feat=directlink&#34;&gt;
&lt;img src=&#34;/2011/10/sounkyo.jpg&#34;&gt;
&lt;/img&gt;&lt;/a&gt;
&lt;a href=&#34;https://picasaweb.google.com/lh/photo/wmfGSJJuslzsqJSC-tYacw?feat=directlink&#34;&gt;
&lt;img src=&#34;/2011/10/sounkyo_road.jpg&#34;&gt;
&lt;/img&gt;&lt;/a&gt;
&lt;a href=&#34;https://picasaweb.google.com/lh/photo/j-vq_LB1YzAxOsejnqNVWw?feat=directlink&#34;&gt;
&lt;img src=&#34;/2011/10/ice_cream.jpg&#34;&gt;
&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;Left early this morning on our way to Akan National Park. This was our last
time with Brooks as he has to fly home this weekend and opted to stay in Biei.
It is sad riding on without him.

&lt;p&gt;We left Biei and skirted the edge of Asahikawa on our way towards Sounkyo.
Rained a bit so we were wearing our foul-weather gear. As we crossed the bridge
over the river outside Asahikawa, Piaw noticed a bike path below us running
along the edge of the river. It didn&#39;t show on our maps, but it looked quite nice
and seemed to be headed the direction we wanted. Weren&#39;t sure it would take us
to Sounkyo, but decided to try it so we left the road for the bike path. 

&lt;p&gt;Soon we saw a sign showing the distance to Sounkyo which reassured us that
this path went where we wanted. Every kilometer we would pass another sign
showing the decreasing distance to Sounkyo. The path was well built, looked new,
and was mostly deserted. Unfortunately it turned out to be so new that it wasn&#39;t
even finished yet. It ended abrubtly at a rest area, with a sign explaining that
when the path was finished it would indeed go all the way to Sounkyo. Back to
the road for us.

&lt;p&gt;Arrived in Sounkyo at about 1:30.  Lots of hotels nestled in the bottom of a
river gorge, like Tenninkyo but larger.  Ate lunch in the village then rode over
to the waterfall viewing area. 

&lt;p&gt;There used to be a pedestrian/bicycle road through the bottom of the canyon,
along the edge of the river. The road was closed after a landslide many years
ago and never reopened. The gate across the road had various warning signs on
it. We couldn&#39;t see any landslide and there was no one around so we went
exploring. Weeds were growing through the pavement but the road was still in
good condition.  So much abandoned engineering back there: errosion-controlled
steam beds, tunnels, bridges, all slowly getting overgrown.  Found a second,
taller gate across the road after maybe a mile, with a few large rocks in the
road past the gate.  This gate seemed harder to climb over so we rode back
through the weeds to the gift shop and had ice cream. 

&lt;p&gt;Japan is in love with ice cream. You can buy soft-serve for 
200-300 yen ($2-3) at every tourist stop, and there are tourist stops everywhere
in Hokkaido. Every shop has a cute statue of an ice cream cone so it
is easy to find the ice cream stands. We&#39;ve been eating at least one ice cream
cone every day. One of the benefits of touring by bicycle is that you need a 
&lt;em&gt;lot&lt;/em&gt; of calories so you can eat pretty much anything you want.

&lt;p&gt;Forgot to take off my outdoor slippers when I came back into the hostel after
working on my bicycle. Very embarassing. Here&#39;s a quick rundown of the slipper
system in Japan: There are three kinds of slippers: outdoor, indoor, and
bathroom. Everywhere we&#39;ve stayed has provided communal slippers for these
purposes. You don&#39;t wear outdoor slippers indoors, you don&#39;t take indoor
slippers outdoors, and obviously bathroom slippers stay in the bathroom. As an
aside, you don&#39;t wear &lt;em&gt;any&lt;/em&gt; slippers on tatami mats. This is all second
nature to Japenese, but gaijin tend to screw it up and do shocking things like
taking indoor slippers outside, or wearing bathroom slippers around the house.

&lt;p&gt;Our hostel tonight doesn&#39;t have a bath so we paid to go to one of the fancy
hotels to use their onsen. It was very nice with 2 different baths. One was on
the 7th floor and had a great view of the gorge and surrounding mountains. The
other was at ground level and overlooked a perfectly manicured lawn with lovely
trees. Again Yana couldn&#39;t join us so we met up with her after.

&lt;h4&gt;September 5, 9:00 pm, Bihoro Youth Hostel&lt;/h4&gt;
&lt;p class=&#34;hokkaidoDistanceSummary&#34;&gt;75 miles, rain in morning.

&lt;div class=&#34;verticalPhotoBox alignright&#34;&gt;
&lt;div class=&#34;photo2&#34;&gt;
&lt;a href=&#34;https://picasaweb.google.com/lh/photo/hjpArX5TuruCik9cZGKIzw?feat=directlink&#34;&gt;
&lt;img src=&#34;/2011/10/socks.jpg&#34;&gt;
&lt;/img&gt;&lt;/a&gt;
&lt;p&gt;Drying socks while riding
    &lt;/p&gt;&lt;/div&gt;
&lt;a href=&#34;https://picasaweb.google.com/lh/photo/6hiWO7gGxs1Ac0Bon6olvA?feat=directlink&#34;&gt;
&lt;img src=&#34;/2011/10/street_fair.jpg&#34;&gt;
&lt;/img&gt;&lt;/a&gt;
&lt;a href=&#34;https://picasaweb.google.com/lh/photo/VQLVHoAh-fUpoYtRYzuYGg?feat=directlink&#34;&gt;
&lt;img src=&#34;/2011/10/naan.jpg&#34;&gt;
&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;Long day: 75 miles. Longest ride Yana and I have ever done. Still feeling
great too, so we must be in good shape. Piaw says it is common for riders to get
stronger during a tour, assuming they are eating enough. Rain this morning as we
climbed the pass. Started with a 3.4km tunnel through Sounkyo Gorge. It had a
sidewalk and large ceiling-mounted blowers to move air through the tunnel.
Emergency phone booths the whole way.  We rode with earplugs to escape the noise
from the cars and the blowers.

&lt;p&gt;The descent was cold and wet through the mountain forest, then gradual
downhill across farmland to the city of Kitami. Traffic was heavy near the city
and the road was narrow. Not much fun. No English speakers at the tourist info
center in Kitami so we decided to just ride on to Bihoro.

&lt;p&gt;Couldn&#39;t find the youth hostel when we got to Bihoro. As we were riding
around looking for it we stumbled onto a street fair. A security guard told us
we had to park our bikes in the bike parking area. We asked if he knew where the
hostel was, but he lives in another town so he didn&#39;t know either. We
wandered through the fair and bought a few snacks. When we got back to our
bikes the same guard ran up to us. He had asked around and obtained a
hand-drawn map showing where the hostel was. We ran into this kind of
helpfulness over and over while we were in Japan. It was amazing.

&lt;p&gt;Checked in at the hostel, showered, did laundry, then went back to the fair
for more food. We were quite the curiosity, attracting lots of attention.
People would say hello to us in English and get excited when we said hi back,
but their English wasn&#39;t practiced enough to have a conversation. Everyone was
excited to sell us food.  At one food stall, Yana asked for crepes with
blueberry and banana. This must have been unusual because all the people working
in the stall sounded amazed and the order was repeated several times to confirm,
then everyone laughed. At one place I think we got free chicken skewers just for
being gaijin (foreigners).

&lt;p&gt;In the middle of this fair, we suddenly heard someone speaking perfect
English. This seemed surprising, since we hadn&#39;t seen any other foreigners. It
turned out to be an Indian man making naan in a tandoor oven. He was serving it
with curry and it was really good.

&lt;h4&gt;September 6, 8:30 pm, Lake Kussharo&lt;/h4&gt;
&lt;p class=&#34;hokkaidoDistanceSummary&#34;&gt;43 miles, foggy in morning, headwind.

&lt;div class=&#34;verticalPhotoBox alignright&#34;&gt;
&lt;a href=&#34;https://picasaweb.google.com/lh/photo/0FvsbWRBIytUAIdCLenXsw?feat=directlink&#34;&gt;
&lt;img src=&#34;/2011/10/kotan_onsen.jpg&#34;&gt;
&lt;/img&gt;&lt;/a&gt;
&lt;a href=&#34;https://picasaweb.google.com/lh/photo/ZpX18ooWP9Sm4RUykE0fVg?feat=directlink&#34;&gt;
&lt;img src=&#34;/2011/10/mountain_biking.jpg&#34;&gt;
&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;Short ride today, over the hill to Akan National Park. Headwind most of the
way; foggy on top of the mountain. Foggy enough that my arms were wet and we
couldn&#39;t see the visitor center from the parking lot. While we ate a snack the
fog cleared so we had a good descent to Lake Kussharo on a damp road.  The lake
is pretty with clouds and fog on all the surrounding hills. Very humid. 

&lt;p&gt;As we get farther from Sapporo and deeper into fall it keeps getting harder
to get tourist info in English. Either the information staff doesn&#39;t speak
English (and is without English brochures) or the information desk is closed for
the season. More and more we find ourselves on our own.  Fortunately there
aren&#39;t a lot of other travelers so lodging is easy to get and there is less need
for reservations. We&#39;ve just been riding into town and looking for a place we
like.

&lt;p&gt;For tonight we found a lovely hotel with good food next to Kotan onsen, an
outdoor hot spring. There&#39;s also an Ainu museum next door. The Ainu were the
native people who lived here before the Japanese colonized the island. The
museum is a recreation of an Ainu lodge, filled with smoke from a wood fire in
the middle of the floor. 

&lt;p&gt;The hot spring was the first free public spring we&#39;ve been in and the view
was fantastic, right on the shore of the lake. Separate parts for men and women,
but right next to each other so Yana didn&#39;t feel isolated. After soaking in the
hot spring we still had time before dinner so we rode back along the lake to
ride around the Wakoto Peninsula, which sticks out into the lake. The trail
which goes around the peninsula turned out to be a narrow hiking trail so we
ended up mountain biking on our road bikes.

&lt;p&gt;My fork started making a popping noise yesterday. Every time I try to pedal while standing up it pops. Piaw is worried that it may be breaking so we are hoping it doesn&#39;t get
worse before we find a bicycle shop with a fork for sale. Until then, I&#39;m
staying seated while pedaling since it doesn&#39;t make popping sounds when I&#39;m
seated. Fingers crossed.

&lt;h4&gt;September 7, 8:00 pm, Utoro Minshuku&lt;/h4&gt;
&lt;p class=&#34;hokkaidoDistanceSummary&#34;&gt;61 miles, tail wind turning to headwind in the afternoon.

&lt;div class=&#34;verticalPhotoBox alignright&#34;&gt;
&lt;a href=&#34;https://picasaweb.google.com/lh/photo/vdtH30tKHAG0C_aI2pkVxQ?feat=directlink&#34;&gt;
&lt;img src=&#34;/2011/10/bags_on_feet.jpg&#34;&gt;
&lt;/img&gt;&lt;/a&gt;
&lt;a href=&#34;https://picasaweb.google.com/lh/photo/Ro8b_bY7Q9LeM-gPtQlY2w?feat=directlink&#34;&gt;
&lt;img src=&#34;/2011/10/practicing_english.jpg&#34;&gt;
&lt;/img&gt;&lt;/a&gt;
&lt;a href=&#34;https://picasaweb.google.com/lh/photo/XuX9zQIxEtrAQtsdvp6WRg?feat=directlink&#34;&gt;
&lt;img src=&#34;/2011/10/ocean.jpg&#34;&gt;
&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;Today Yana and I got tired of having wet feet. Piaw&#39;s fenders keep his shoes
fairly dry, but our feet are constantly getting sprayed with water from our
front wheels. Tried taping plastic bags over our shoes to try to keep them dry.
Mixed results; fenders would be better.

&lt;p&gt;This morning, while photographing funny swan-shaped paddle boats at Lake
Kussharo, a young lady approached me. She was studying English and was excited
to be able to practice with some native speakers so we told her about our ride
and had a short conversation.

&lt;p&gt;Though Lake Kussharo is beautiful, Lake Mashu is what Akan is really know
for. It sits in the crater at the top of a volcano. The tops of the mountains
were in the clouds today though. Didn&#39;t seem worth climbing up the
volcano since we wouldn&#39;t be able to see the lake anyway.

&lt;p&gt;Instead we opted for another long ride to get us to Shiretoko. 
Fast tailwind for most of the ride; 20mph at one point. Made good time until
the road turned and the tailwind became a stiff crosswind. To cope, our paceline
had to spread across the lane in an echelon formation, but the traffic was light
and drivers were polite so it wasn&#39;t a problem.

&lt;p&gt;Stopped at one bicycle store along the way but they didn&#39;t have any forks for
my bike. They mostly had casual/commuter bikes, not road bikes. I&#39;ll just keep
babying the fork and hoping for the best.

&lt;p&gt;Saw the ocean for the first time on the trip today, and now we&#39;re in a
minshuku overlooking the Utoro harbor. On this northern part of the island,
signs have started to be in Japanese and Russian.

&lt;p&gt;Ate dinner at a fish market down by the water. Had a sashimi dish that
consisted of carefully arranged salmon on a bowl of rice, topped with salmon
roe. Very good. It was called &#34;Mother and son.&#34;


&lt;h4&gt;September 8, 7:30 pm, Rausu Hotel&lt;/h4&gt;
&lt;p class=&#34;hokkaidoDistanceSummary&#34;&gt;20 miles, rain &amp;amp; wind.

&lt;div class=&#34;verticalPhotoBox alignright&#34;&gt;
&lt;a href=&#34;https://picasaweb.google.com/lh/photo/CF6Vr9BfQua_EyQg8xV2NA?feat=directlink&#34;&gt;
&lt;img src=&#34;/2011/10/sika_deer.jpg&#34;&gt;
&lt;/img&gt;&lt;/a&gt;
&lt;a href=&#34;https://picasaweb.google.com/lh/photo/KQtZTDEmt2l-cW4stRxvWg?feat=directlink&#34;&gt;
&lt;img src=&#34;/2011/10/rainbow.jpg&#34;&gt;
&lt;/img&gt;&lt;/a&gt;
&lt;a href=&#34;https://picasaweb.google.com/lh/photo/hubhmoGYg8nXBT1bf-uogQ?feat=directlink&#34;&gt;
&lt;img src=&#34;/2011/10/shiretokotoge.jpg&#34;&gt;
&lt;/img&gt;&lt;/a&gt;
&lt;a href=&#34;https://picasaweb.google.com/lh/photo/qd274Vo0AYBVELbQf_5o5g?feat=directlink&#34;&gt;
&lt;img src=&#34;/2011/10/rausu_dinner.jpg&#34;&gt;
&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;So wet today. Rain almost all day. Took the bus out from the Shiretoku nature
center to Kamiuiwakka-no-taki, a hot spring waterfall. It was interesting to
wade up the creek in the rain and not have cold feet but the trip was ultimately
disappointing. The rangers didn&#39;t let us go all the way to the actual waterfall.
The water where we were was tepid, not even warm. 

&lt;p&gt;After returning to town on the bus, we started our ride. The climb up
Shiretokotoge pass was lonely, as we all rode at our own pace and were soon
separated. I listened to the rain on the trees, watched drops of water form on
my helmet brim, watched the water drip off my head and shoulders down past the
bike, and watched the water run down the road into storm drains. I unzipped my
jacket, trying to find a balance between getting sweaty with the jacket on or
drenched with the jacket off. It didn&#39;t matter much, as I was wet all day
anyway. Cars and buses drove past and it was like their drivers were in separate
universes, speeding along in a little bubble of comfort, warm and dry. Once they
disappeared in the rain I was alone again and still wet. At least the deer
shared my universe, and understood what it was like to be drenched as they stood in
the wet brush and watched me ride past.

&lt;p&gt;Near the top I rode into the cloud and it felt like my universe got smaller.
The wind picked up and occasional patches of lighter fog blew past. Soon the
wind was racing past and I could see glimpses of blue sky over the pass,
promising better weather on the other side. A false promise. At the top I let
the wind push me into the parking lot. The road I had just climbed was hidden
by a dense gray wall of cloud. Looking down the other side of the pass showed
sunny hills and blue ocean below, with clear sky beyond. The wind whipped over
the pass, pushing me around even as I stood. Yana and I dressed for the descent
in the bathroom as drivers/passengers braved the cold for a few
minutes to look over the edge. They would scurry back to their warm cars after
snapping their photos, while we stood in the doorway of the bathroom, wet and cold
and preparing ourselves for the descent. 

&lt;p&gt;The first few turns were ok, then the wind picked up. It shoved us around our
lanes, threatening to push us off the road or into incoming traffic. It
alternated between a tailwind, hurling us down the mountain faster than we
wanted to go, and a gusting headwind trying to stall us and throw us to the
ground. It was scary and beautiful. Around one corner the headwind was so strong
I couldn&#39;t shift down fast enough to keep pedaling. I wobbled to an unsteady
stop as the wind gusted into my face. Around another corner, a rainbow appeared
over the green hills below me. By the time we reached the town of Rausu at the
bottom we were all cold and mentally exhausted. We decided that was enough
riding for the day, even though we had only gone 20 miles. Shiretokotoge in bad
weather is not to be taken lightly.

&lt;p&gt;Rausu gave us a view of Russia* and really felt like the end of the world. 
Tried four or five places looking to find lodging. They kept saying they were full. 
Never did figure out whether that was true or whether we looked so wet and
bedragled that they decided we wouldn&#39;t make good guests. Finally ended up
going to one of the more expensive looking hotels only to find it wasn&#39;t
expensive after all. We have a view of the harbor from our room.

&lt;p&gt;Dinner was sashimi across the street from our hotel.  On this far end of the
island there are no English menus, no picture menus, no wax models of the food.
Piaw and the waitress ended up writing kanji on a napkin to communicate.
Wonderful food and presentation. At the end of the meal we asked about dessert.
After thinking about it the chef and the waitress decided they could serve
potato mochi. It was fried and sweet, weird and delicious. 

&lt;p&gt;&lt;i&gt;* The islands off the coast are currently under Russian control, though
Japan claims them as part of their territory.&lt;/i&gt;
&lt;div class=&#34;clearboth hokkaidoIntroOutro&#34;&gt;
&lt;a href=&#34;https://picasaweb.google.com/lh/photo/_hyudk6rqiKDr7bp_vIV5A?feat=directlink&#34;&gt;
&lt;img src=&#34;/2011/10/owls.jpg&#34;&gt;
&lt;/img&gt;&lt;/a&gt;
&lt;p&gt;&lt;a href=&#34;https://picasaweb.google.com/111267409082271470026/HokkaidoBikeTour?authuser=0&amp;amp;feat=directlink&#34;&gt;View more pictures&lt;/a&gt;
&lt;p&gt;Continued in &lt;a href=&#34;/2011/11/04/hokkaido_by_bicycle_part_3/&#34;&gt;part 3&lt;/a&gt;...
&lt;/p&gt;&lt;/p&gt;&lt;/div&gt;
&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/div&gt;
</description>
    </item>
    
    <item>
      <title>Hokkaido, Japan by Bicycle (part 1 of 3)</title>
      <link>/2011/10/14/hokkaido_by_bicycle_part_1/</link>
      <pubDate>Sat, 15 Oct 2011 05:14:40 +0000</pubDate>
      
      <guid>/2011/10/14/hokkaido_by_bicycle_part_1/</guid>
      <description>

&lt;h1 id=&#34;hokkaido-japan-by-bicycle-part-1-of-3-2011-10-14-hokkaido-by-bicycle-part-1&#34;&gt;&lt;a href=&#34;/2011/10/14/hokkaido_by_bicycle_part_1/&#34;&gt;Hokkaido, Japan by Bicycle (part 1 of 3)&lt;/a&gt;&lt;/h1&gt;

&lt;p&gt;&lt;style scoped=&#34;scoped&#34; type=&#34;text/css&#34;&gt;
.hokkaidoDistanceSummary {
  font-style: italic;
}&lt;/p&gt;

&lt;p&gt;.hokkaidoIntroOutro {
  font-style: italic;
  text-align: center
}&lt;/p&gt;

&lt;p&gt;.hokkaido h4 {
  clear:both;
  padding-top: 1em;
}
&lt;/style&gt;
&lt;div class=&#34;hokkaido&#34;&gt;
&lt;div class=&#34;hokkaidoIntroOutro&#34;&gt;
&lt;a href=&#34;https://picasaweb.google.com/lh/photo/f2HEBI2BKfn-3b3P9h2sUQ?feat=directlink&#34;&gt;
&lt;img src=&#34;/2011/10/temple.jpg&#34;&gt;
&lt;/img&gt;&lt;/a&gt;
&lt;p&gt;In 2009, we spent three weeks riding bicycles around Japan. This is the story of that trip.
&lt;/p&gt;&lt;/div&gt;
&lt;h4&gt;August 26, 1:20 pm, Flight to Tokyo&lt;/h4&gt;
&lt;p&gt;We&amp;rsquo;re finally on the plane to Japan. There are four of us: Piaw (the trip
leader), Brooks, Yana, and myself. The plan is to spend three weeks riding
around Hokkaido, the northern-most island of Japan. We&amp;rsquo;ve been preparing for
this ride for months: buying supplies, preparing equipment, building new wheels,
studying maps, learning a bit of Japanese, going on training rides. The last
week has been a blur with time flying by constantly as we finished packing. Now
there&amp;rsquo;s a sense of calm: we&amp;rsquo;re on the plane and there is nothing else to
prepare. The trip has been set in motion and we&amp;rsquo;re just along for the ride.&lt;/p&gt;

&lt;p&gt;&lt;p&gt;Below us, in the cargo hold, our bicycles sit in their boxes. Above me I&amp;rsquo;ve
stowed my two small carry-on bags. Bicycling forces you to travel light: those
two bags are all I have for three weeks of riding. It is oddly liberating to not
have a full suitcase of stuff to lug around and worry about.&lt;/p&gt;

&lt;p&gt;&lt;h4&gt;August 27, 8:42 pm, Sapporo International Youth Hostel&lt;/h4&gt;
&lt;p class=&#34;hokkaidoDistanceSummary&#34;&gt;Distance ridden today: 30 miles. Weather: rain, tail wind.&lt;/p&gt;

&lt;p&gt;&lt;p&gt;
&lt;div class=&#34;verticalPhotoBox alignright&#34;&gt;
&lt;a href=&#34;https://picasaweb.google.com/lh/photo/ReQi03DZGVtEzFrfhWjnMg?feat=directlink&#34;&gt;
&lt;img src=&#34;/2011/10/unpacking.jpg&#34;&gt;
&lt;/img&gt;&lt;/a&gt;
&lt;a href=&#34;https://picasaweb.google.com/lh/photo/DmUxCEXsWC6NTo0AxRaNtA?feat=directlink&#34;&gt;
&lt;img src=&#34;/2011/10/climbing_fence.jpg&#34;&gt;
&lt;/img&gt;&lt;/a&gt;
&lt;a href=&#34;https://picasaweb.google.com/lh/photo/UwTjRlsOIfIycFnAZiXZDA?feat=directlink&#34;&gt;
&lt;img src=&#34;/2011/10/sapporo_youth_hostel.jpg&#34;&gt;
&lt;/img&gt;&lt;/a&gt;
&lt;a href=&#34;https://picasaweb.google.com/lh/photo/8UFZqHgYqeJQznAZWl7AOg?feat=directlink&#34;&gt;
&lt;img src=&#34;/2011/10/sapporo.jpg&#34;&gt;
&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;
Flight landed at Chitose airport late last night. Piaw had arranged lodging
at the airport hotel so we didn&amp;rsquo;t even have to leave the terminal. Retrieved our
bulky bicycle boxes from baggage claim, loaded them onto luggage carts, and took
the elevator up to the hotel. Went straight to sleep.&lt;/p&gt;

&lt;p&gt;&lt;p&gt;
Assembled our bikes in the hotel room this morning. They had been packed,
partially disassembled, in cardboard boxes for the flight. The airline (ANA)
handled the boxes quite carefully; not a dent or scratch on them. Moved the
furniture around in the small hotel room to get a space big enough to work in
then built the bikes back up, piece by piece. Pedals back on. Chains back on.
Handlebars reattached and adjusted. Front wheels attached. Rear derailleurs
bolted back on. Luggage racks reattached. Quiet, cathartic work which
reminded me of the book &lt;i&gt;Off the Map: Bicycling Across Siberia&lt;/i&gt; by Mark
Jenkins.  After finishing with the bikes we droped the boxes at the hotel desk
and got breakfast in the airport. We&amp;rsquo;ll be staying in the same hotel on the last
night of the trip so they are willing to hold our empty boxes until we return.&lt;/p&gt;

&lt;p&gt;&lt;p&gt;
When we took our bikes outside after breakfast, it was raining lightly with
overcast clouds. Piaw had previously warned us about his route-finding. He
likes to find obscure back roads, dirt roads, and trails whenever possible.
Twenty minutes into our ride, with the airport still in sight, the side road we
were on came to a dead-end and so we found ourselves climbing over a chain-link
fence with our bikes in order to get back to the main highway. Piaw was
pleased.&lt;/p&gt;

&lt;p&gt;&lt;p&gt;
The gently rolling road cut through miles of forest as it headed northwest
into Sapporo. Had a strong tail wind, making the riding easy. The rain continued
off and on; not enough to be miserable but it kept the road wet so my rear tire
was spraying water up onto my back. My shorts were soon wet and muddy, which was
a little awkward when we stopped for lunch and I had to sit in a restaurant. I
regret not bringing fenders.&lt;/p&gt;

&lt;p&gt;&lt;p&gt;Once in Sapporo, traffic was heavy enough that we decided to follow local
custom and ride our bikes on the sidewalk instead of in the traffic lane. Still
somewhat harrowing as we had to worry about pedestrians, other bicyclists, and
various obstacles. There are bikes everywhere in Sapporo, all of the commuter
variety with no road bikes in sight. Many riders were carrying umbrellas while
riding with one hand. One enterprising young man was holding a clear plastic
umbrella in front of him like a windshield.&lt;/p&gt;

&lt;p&gt;&lt;p&gt;
Tonight we&amp;rsquo;re staying at the Sapporo International Youth Hostel. The
accommodations are quite nice: small private rooms with tatami mat floors. There
is a tiny entryway for removing shoes (wearing shoes on tatami is frowned
upon) and hanging our wet rain jackets. In the middle of the room there is a low
table with chairs; for sleeping the table folds up and stores in the closet so
we can lay thin mattresses on the tatami. Downstairs there&amp;rsquo;s a Japanese-style
bath and a dry garage for our bikes.&lt;/p&gt;

&lt;p&gt;&lt;p&gt;
Washed my clothes in the shower (only brought two shirts so I&amp;rsquo;ll be doing
laundry most days) then headed out for supper. Ended up in New Ramen Alley, an
odd underground tunnel packed with ramen shops (there&amp;rsquo;s also an Old Ramen
Alley). We picked one mostly at random, ducked inside, and were immediately
enveloped by hot, humid air. The interior was dark and cramped. We took four
seats at the counter and gave our order to the chef by pointing at the picture
menu. He cooked the noodles right in front of us and served them in huge bowls.
They were delicious.&lt;/p&gt;

&lt;p&gt;&lt;h4&gt;August 28, 9:40 pm, Sapporo International Youth Hostel&lt;/h4&gt;
&lt;p class=&#34;hokkaidoDistanceSummary&#34;&gt;Distance: 2 miles. Weather: some rain.&lt;/p&gt;

&lt;p&gt;&lt;p&gt;
&lt;div class=&#34;alignright verticalPhotoBox&#34;&gt;
&lt;a href=&#34;https://picasaweb.google.com/lh/photo/vmuSbY1UbYl5rscjSqVLcQ?feat=directlink&#34;&gt;
&lt;img src=&#34;/2011/10/breakfast.jpg&#34;&gt;
&lt;/img&gt;&lt;/a&gt;
&lt;a href=&#34;https://picasaweb.google.com/lh/photo/8bdf5poLF1txmCPXw5Wrfw?feat=directlink&#34;&gt;
&lt;img src=&#34;/2011/10/beer_museum.jpg&#34;&gt;
&lt;/img&gt;&lt;/a&gt;
&lt;a href=&#34;https://picasaweb.google.com/lh/photo/G6ri30m4mDsH5XcLlTyTBA?feat=directlink&#34;&gt;
&lt;img src=&#34;/2011/10/jingisukan.jpg&#34;&gt;
&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;
Woke early this morning and crossed the river to explore Nakajima park. It
was green and beautiful. The clouds had lifted enough to offer views of the
mountains at the edge of town. Saw a group of bicycle tourists preparing their
breakfast on a small stove. They had spent the night camping in a
gazebo in the park.&lt;/p&gt;

&lt;p&gt;&lt;p&gt;
Ate our breakfast back at the hostel. Japanese breakfast consists of steamed
rice, fish, miso soup, various vegetables (some pickled), and eggs. More rain
forecast today. Instead of riding in the rain we decided to see the town.  There
was a subway station right next to the hostel so we got day passes and were off
to explore. Brooks and Piaw wanted to explore the fish market while Yana and I
went to the botanical gardens. The gardens were green and lush, likely owing to
the recent rains. We walked along through the park in the damp air, enjoying the
beautiful collection of plants.&lt;/p&gt;

&lt;p&gt;&lt;p&gt;
Called Piaw and Brooks from our mobile phone and arranged to meet
at the Sapporo beer museum. Had a hard time finding it. Tried asking a lady for
directions but our Japanese is not good enough and we couldn&amp;rsquo;t explain where we
wanted to go. Eventually spied its tall tower after wandering around some more.&lt;/p&gt;

&lt;p&gt;&lt;p&gt;
Found Piaw and Brooks at one of the museum restaurants, where they had just
finished lunch. We joined them for a tour of the museum, then headed back to
downtown to spend the afternoon looking at sights and shopping.&lt;/p&gt;

&lt;p&gt;&lt;p&gt;
As dinner time approached, Yana and I remembered how good the food at the
beer museum had looked so we decided to return. When we
arrived it was crowded, hot, and smoky from meat being grilled. We managed to
order by pointing at the menu and using hand signals. The restaurant specializes
in Jingisukan (sounds like &lt;i&gt;Genghis Khan&lt;/i&gt;), a popular local dish.
The food arrives raw: a huge plate of vegetables and meat.
There is a domed skillet in the middle of the table on which you cook the food.
Similar to Mongolian barbecue, only cooked at the table.&lt;/p&gt;

&lt;p&gt;&lt;p&gt;Back at the hostel we took advantage of their Japanese bath. The centerpiece
is a large pool of hot water. There&amp;rsquo;s also an area with short stools, faucets,
and buckets for washing before entering the pool (getting in the pool without
washing is a major faux pas). After walking all day in flip-flops, my feet were
sore but alternating between soaking them in a bucket of cold water and then hot
water felt great.  There are separate baths for men and women since everyone is
nude. Not a problem for the three guys but Yana was lonely in the bath by
herself.&lt;/p&gt;

&lt;p&gt;&lt;h4&gt;August 29, 8:57 pm, Yubari Forest Youth Hostel&lt;/h4&gt;
&lt;p class=&#34;hokkaidoDistanceSummary&#34;&gt;56 miles, sunny.
&lt;p&gt;
&lt;a href=&#34;https://picasaweb.google.com/lh/photo/3fS4MxHCWB2SUQ0FE8niTQ?feat=directlink&#34;&gt;
&lt;img src=&#34;/2011/10/map_check.jpg&#34;&gt;
&lt;/img&gt;&lt;/a&gt;
&lt;a href=&#34;https://picasaweb.google.com/lh/photo/91KGZf46Kje-c-Ef568SmQ?feat=directlink&#34;&gt;
&lt;img src=&#34;/2011/10/nopporo_park.jpg&#34;&gt;
&lt;/img&gt;&lt;/a&gt;
Long day of riding today, east across the plains and up to the mountain town of
Yubari.  We took a wrong turn leaving Sapporo but didn&amp;rsquo;t realize it for half an
hour.  Eventually we got suspicious when we re-crossed the river that had gone
past the hostel and could still see downtown Sapporo on our left, where it
should not have been. After some careful map checking we realized our mistake.
By then it was easier to pick a new route than double back. Our map (the Touring
Mapple) showed a trail through the nearby Nopporo forest park which went exactly
where we wanted so we headed towards the park.  In the town of Oasa, just
outside the park, we happened across a bike store and showed him our map, asking
about the trail. The owner told us that our plan wouldn&amp;rsquo;t work: we wouldn&amp;rsquo;t be
able to bike across the trail with our road bikes.&lt;/p&gt;

&lt;p&gt;&lt;p&gt;A lesson soon learned when bike touring is that you can&amp;rsquo;t trust route advice.
Drivers underestimate the size of hills, non-cyclists underestimate how far you
are capable of riding, and casual cyclists assume you can&amp;rsquo;t ride off pavement.
During our training we had specifically practiced riding over dirt roads with
loaded bicycles (because we knew that Piaw would ride on dirt if possible), so
we decided to ignore the shopkeeper&amp;rsquo;s warnings and check out the trail anyway.&lt;/p&gt;

&lt;p&gt;&lt;p&gt; The park was flatland forest. Some parts looked natural, others were
obviously planted (with trees in rows). The trail turned out to be a dirt road
which cut right through the middle of the forest. It was perfectly rideable
except for one fallen tree that we had to carry our bikes over, which made two
days of climbing over obstacles in two days of riding. Again, Piaw was pleased.&lt;/p&gt;

&lt;p&gt;&lt;p&gt;After the park, most of our day was spent riding past fields and farmland,
headed east across the plains toward the mountains. The sun was warm when we
stopped at a small restaurant for a late lunch. Had donburi, a rice bowl with
egg on top followed by ice cream from the place next door.&lt;/p&gt;

&lt;div class=&#34;centeredContent&#34;&gt;
&lt;div class=&#34;photo2&#34;&gt;
&lt;a href=&#34;https://picasaweb.google.com/lh/photo/dbQGTn-in60Kevq2Vpy9Yw?feat=directlink&#34;&gt;
&lt;img src=&#34;/2011/10/vending_machines.jpg&#34;&gt;
&lt;/img&gt;&lt;/a&gt;
&lt;p&gt;There are a lot of vending machines in Japan.
  &lt;/p&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p class=&#34;clearboth&#34;&gt;The climb up to Yubari was gentle and not very long. Road
was well-built, like all the roads here. Although it was out in the country it
had a sidewalk wide enough to drive a car on. Even when the road went through a
tunnel, it still had a wide sidewalk.  At the top, Yubari sits nestled in a
small valley. In the winter it is a ski town, but in August it sleeps, waiting
for the snow to come. 

&lt;p&gt;Had some trouble finding the hostel. It is outside of town a bit and we were
riding around the farms and hills looking for it. Stopped to ask a lady
gardening if she knew where it was. She bowed to us, went inside and came back
with her whole family. They decided we were on the right road and just had to
keep riding. We thanked them, bowed quickly, and rode on.

&lt;p&gt;There is a lot of bowing in Japan. Asking for help leads to lots of bowing.
Every purchase involves bowing. Usually entering/leaving a store does too. Hold
a door open for someone and you&#39;re likely to get a quick bow. We even had a lady
riding a bicycle in the opposite direction to us bow as she rode past (I think
she was worried she had inconvenienced us). It is a very polite society and very
pleasant to visit. 

&lt;p&gt; The hostel is a beautiful wooden house that reminds me of a cozy ski lodge,
complete with wood stove.  Japanese-style bedding again, with sliding doors on
the rooms. Back home, this place would be called a bed and breakfast, not a
hostel. The dinner they served was amazing. 2 kinds of cooked fish, pickled
tomatoes, figs for dessert. Best food of the trip so far.

&lt;div class=&#34;centeredContent&#34;&gt;
&lt;a href=&#34;https://picasaweb.google.com/lh/photo/ZdHO9ovI17kMPwW1O-JqLg?feat=directlink&#34;&gt;
&lt;img src=&#34;/2011/10/yubari_youth_hostel.jpg&#34;&gt;
&lt;/img&gt;&lt;/a&gt;
&lt;a href=&#34;https://picasaweb.google.com/lh/photo/sBDSZpVe0pHvRlHhxrw5dA?feat=directlink&#34;&gt;
&lt;img src=&#34;/2011/10/dinner.jpg&#34;&gt;
&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;h4&gt;August 30, 9:00 pm, Highland Onsen, Furano&lt;/h4&gt;
&lt;p class=&#34;hokkaidoDistanceSummary&#34;&gt;65 miles, overcast.
&lt;p&gt;
&lt;div class=&#34;alignright verticalPhotoBox&#34;&gt;
&lt;a href=&#34;https://picasaweb.google.com/lh/photo/NzsOf1iZLuh2fCSH6I-8UQ?feat=directlink&#34;&gt;
&lt;img src=&#34;/2011/10/tunnel.jpg&#34;&gt;
&lt;/img&gt;&lt;/a&gt;
&lt;a href=&#34;https://picasaweb.google.com/lh/photo/UqlaRKR5nYnrXZ1DVQW3pQ?feat=directlink&#34;&gt;
&lt;img src=&#34;/2011/10/fox.jpg&#34;&gt;
&lt;/img&gt;&lt;/a&gt;
&lt;a href=&#34;https://picasaweb.google.com/lh/photo/2FD_-_kDLq21CeQDg-YZCQ?feat=directlink&#34;&gt;
&lt;img src=&#34;/2011/10/furano_sunset.jpg&#34;&gt;
&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;
I woke up early again and went for a ride before breakfast, looking for a
spot to photograph the fog in the valley below us. Air was fresh and cold, with
the smell of flowers and woodsmoke. A good, crisp, mountain morning.

&lt;p&gt;Rode through the mountains today northeast towards Furano. Long gentle climbs
and open, relaxed descents. The top of every climb ends with a tunnel. Most
tunnels were short but one was 2.7 km. It had curves so you couldn&#39;t see the
end. We turned on all our lights and rode in a tight group. The air was cold and
smelled like exhaust; passing cars and motorcycles filled the whole tunnel with
a roar that you couldn&#39;t escape.

&lt;p&gt;
There was no food or water along the route through the mountains so we
brought snacks from a convenience store with us. Stopped by a lake to eat some
and a beautiful red fox came begging for food. It was odd because it
seemed like we were in the middle of nowhere but this fox obviously had seen
enough people to be accustomed to handouts.

&lt;p&gt;
Later we stopped at Sandantaki, a pretty series of craggy waterfalls, and ate
more snacks. Bicycle touring involves a lot of eating. After Sandantaki there
was a long descent towards Furano. Brooks got up front and we all tucked into
line behind him. He had to pedal but the rest of us could just coast, out of the
wind as we drafted behind him.

&lt;p&gt;Tonight we&#39;re staying at the Highland Onsen, a hot-springs resort perched on
a hill above town. Furano is another ski town so there are mountains all around.
Across the valley to the east rise the mountains of Daisetsuzan
National Park. The onsen has large baths, with multiple pools: hot, cold, really
hot, plus
one outside that overlooks the valley. Separate men&#39;s and women&#39;s bath again,
though the wall dividing them does not go all the way to the ceiling so Yana can
hear our chatter as we all soak. 

&lt;p&gt;
The dining room at the onsen overlooks the valley, and as we ate dinner we
got to watch as the setting sun behind us painted the mountains of Daisetsuzan with
brilliant red light.

&lt;p&gt;Western-style beds tonight. A common concern among innkeepers is that we
won&#39;t want Japanese-style meals or bedding. I can only assume that they have had bad
experience with picky tourists before. Our Japanese is not good enough to
explain that we are traveling to see something different and that if we wanted
western-style food we could have just stayed home, so instead we just smile and
reassure them that we find Japanese food delicious.

&lt;h4&gt;August 31, 9:32 pm, Kamihoro Onsen, Tokachidake&lt;/h4&gt;
&lt;p class=&#34;hokkaidoDistanceSummary&#34;&gt;43 miles, overcast.

&lt;p&gt;
&lt;div class=&#34;alignright verticalPhotoBox&#34;&gt;
&lt;a href=&#34;https://picasaweb.google.com/lh/photo/4TgUr22W2Bd1Ota3zT_AQA?feat=directlink&#34;&gt;
&lt;img src=&#34;/2011/10/tokachidake.jpg&#34;&gt;
&lt;/img&gt;&lt;/a&gt;
&lt;a href=&#34;https://picasaweb.google.com/lh/photo/fsXX_oR9ivnPF5aDAmLoTA?feat=directlink&#34;&gt;
&lt;img src=&#34;/2011/10/making_ice_cream.jpg&#34;&gt;
&lt;/img&gt;&lt;/a&gt;
&lt;a href=&#34;https://picasaweb.google.com/lh/photo/N6UTbWsAwtrADGoxiym6Hg?feat=directlink&#34;&gt;
&lt;img src=&#34;/2011/10/tokachidake_sunset.jpg&#34;&gt;
&lt;/img&gt;&lt;/a&gt;
&lt;a href=&#34;https://picasaweb.google.com/lh/photo/afCrQPnVSEzq4SgKU-BBUw?feat=directlink&#34;&gt;
&lt;img src=&#34;/2011/10/kamihoro_dinner.jpg&#34;&gt;
&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;
Glad I learned the kanji for &#34;men&#34; and &#34;women&#34;, as this morning the bath I
had enjoyed last night was labeled &#34;women&#39;s&#34; instead of &#34;men&#39;s.&#34; Apparently they
swap the rooms back and forth. The layout of the two baths is slightly
different; I assume they rotate them so that guests can enjoy both.

&lt;p&gt;Took a morning walk through the woods around Highland Onsen. Judging by the
pictures in the lobby and the gift shop full of lavender products, the onsen&#39;s
claim to fame is the lavender fields out front. Walked through the fields this
morning but we&#39;re too late in the season and there is nothing to see this time
of year but low-cut bushes. 

&lt;p&gt;
After breakfast we rode down to the Furano Cheese Factory and had some really
good samples of cheese: the creamiest brie I&#39;ve ever had and a couple other
varieties. Their cheese-making class was full so we attended an ice-cream making
class instead. After putting on cow-print aprons, the teacher had us mix the
various ingredients together, then we put the milk mixture into a freezer. While
that was freezing she showed us how to make waffle-cone bowls and gave us the
batter so we could make our own bowls. Being hungry cyclists, we ended up making
a lot of waffle cones. Apparently the lady hadn&#39;t expected this, as when she
saw us with more than four bowls she quickly came over and took the batter away.
Oops. They were delicious, though.

&lt;p&gt;
After eating lunch at Furano Cheese Ramen, where they put slices of cheese on
the noodles, we finally got around to the day&#39;s riding. Our goal was the
Kamihoro Onsen on Tokachidake, one of the mountains on the other side of the
valley.  We took the long way, through Rokugo and the foothills. Along the way
the light on my bike fell off and skittered into the road where it was promptly
run over by a truck. The other drivers, having enough time to react, all
politely slowed down and steered around the debris. At a break in the traffic I
was able to retrieve the pieces. Slightly misshapen now, has to be held
together with tape, but it still works. Good thing LED lights are durable. 

&lt;p&gt;
The views back into the Furano valley were amazing: sweeping fields backed by
big mountains. Rolled through the foothills and stopped at a natural spring to
refill water bottles before starting the serious part of the climb.  Volcanoes
tend to get steeper the higher up you go. The closer we got to the onsen at the
top of the road, the slower we were going. At 6 miles, we were going 6 miles per
hour. 45 minutes later, we were going 3 miles an hour with 3 miles left. This
carried on until we finally rolled up to the onsen at about 5 pm. 



&lt;p&gt;
The Kamihoro Onsen is situated on the side of the mountain, with an amazing
view of the valley. We briefly soaked in their outdoor bath looking at the land
we had ridden over. Our room and the dining room also overlooked the valley so
we got to continue enjoying the views while we ate.  As the sun set it lit up
the foothills below us in dozens of shades of orange. 

&lt;p&gt;Dinner was Jingisukan again. Smaller portions than the beer museum but more
variety. One of the most tender pieces of meat I&#39;ve ever had. Dining room was
mostly empty, must not be a peak time for them.

&lt;p class=&#34;clearboth&#34;&gt;
After eating we retired to the baths for the second time to soak our sore
muscles. This bath was built from rustic wood. They must not filter the
hot spring water because it was somewhat murky and smelled like minerals. They
have a fantastic cold pool and although the others couldn&#39;t take more than I
quick dip I kept my legs submerged they were numb.  

&lt;div class=&#34;clearboth centeredContent&#34;&gt;
&lt;div class=&#34;photo2&#34;&gt;
&lt;a href=&#34;https://picasaweb.google.com/lh/photo/E6Yy3UC1A1fug54YGGa35Q?feat=directlink&#34;&gt;
&lt;img src=&#34;/2011/10/kamihoro_onsen1.jpg&#34;&gt;
&lt;/img&gt;&lt;/a&gt;
&lt;p&gt;This is where you wash
&lt;/p&gt;&lt;/div&gt;
&lt;div class=&#34;photo2&#34;&gt;
&lt;a href=&#34;https://picasaweb.google.com/lh/photo/RpQpQLaQ9PiirE-Q_q1xfA?feat=directlink&#34;&gt;
&lt;img src=&#34;/2011/10/kamihoro_onsen2.jpg&#34;&gt;
&lt;/img&gt;&lt;/a&gt;
&lt;p&gt;Cold pool on the left, hot on the right.
&lt;/p&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h4&gt;September 1, 8:00 pm, Potato Hostel, Biei&lt;/h4&gt;
&lt;p class=&#34;hokkaidoDistanceSummary&#34;&gt;44 miles, heavy rain in morning then sunny.
&lt;p&gt;
&lt;a href=&#34;https://picasaweb.google.com/lh/photo/_yyGBu0MM7Q7s731BFe-RA?feat=directlink&#34;&gt;
&lt;img src=&#34;/2011/10/tokachidake_hike.jpg&#34;&gt;
&lt;/img&gt;&lt;/a&gt;

Weather was unsettled this morning, with gusts of wind blowing through our
open window when we woke up. It started raining before breakfast but we went on
a hike anyway. Went up to the volcano crater. Weather got worse as we climbed,
leaning into the wind, the rain stinging like hail. The crater was in a steep
valley with sulfur steam vents. The weather was the perfect compliment to the
location. 

&lt;p&gt;
When we got back down to the onsen we were dripping wet. They kindly
let us warm up in the hot water baths again. The rain
quit while we were relaxing but the road surface was still wet so I attached a
makeshift fender to my bike by cutting a plastic water bottle in half and
bolting it to my fender. Between that and my front light which is now held
together with electrical tape, my bike is starting to look like some kind of
improvised contraption instead of a stately touring bicycle.

&lt;p&gt;
After our descent the sun came out and we rode through beautiful rolling
farmland to Biei. At the visitor center in Biei we met the most helpful lady.
She spoke excellent English and helped us get our lodging reservations for the
next couple nights. Checked in at the hostel. There was some confusion with our
reservation and they did not have dinner for us, and the local restaurants were
already closed. After talking with the cook they decided they could provide food
for us, but they must have seen how much bicycle tourists eat because they
warned us that they wouldn&#39;t be able to provide large portions. We gladly
accepted.

&lt;p&gt;
&lt;div class=&#34;centeredContent&#34;&gt;
&lt;a href=&#34;https://picasaweb.google.com/lh/photo/GUsO5HsirtAI5lypDas9qA?feat=directlink&#34;&gt;
&lt;img src=&#34;/2011/10/biei_hills.jpg&#34;&gt;
&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;
With dinner arranged we went out for a ride along the back roads of Biei
before it got dark. On the way back I stopped to take a picture of a house while
the others continued riding. I jumped back on the bike and rode hard to catch up
with them, but couldn&#39;t manage to get
them back in sight. After a while it dawned on me that I should have seen the
hostel already. I had taken a wrong turn. Rather than go back, I decided to keep
riding as up ahead there was a cross road that I could take to circle back to
the hostel. When I reached the hostel, I saw only two bikes outside. Yana&#39;s bike
was missing so back out I went, looking for Yana as she looked for me.
Eventually we met up and returned to the hostel.


&lt;div class=&#34;hokkaidoIntroOutro&#34;&gt;
&lt;a href=&#34;https://picasaweb.google.com/lh/photo/FwPemfAwYvwPyfHPQRoEgg?feat=directlink&#34;&gt;
&lt;img src=&#34;/2011/10/lamp.jpg&#34;&gt;
&lt;/img&gt;&lt;/a&gt;
&lt;p&gt;&lt;a href=&#34;https://picasaweb.google.com/111267409082271470026/HokkaidoBikeTour?authuser=0&amp;amp;feat=directlink&#34;&gt;View more pictures&lt;/a&gt;
&lt;p&gt;Continued in &lt;a href=&#34;/2011/10/29/hokkaido_by_bicycle_part_2/&#34;&gt;part 2&lt;/a&gt;...
&lt;/p&gt;&lt;/p&gt;&lt;/div&gt;
&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/div&gt;
</description>
    </item>
    
    <item>
      <title>Solarized Cheat Sheet</title>
      <link>/2011/07/22/solarized_cheat_sheet/</link>
      <pubDate>Sat, 23 Jul 2011 05:24:33 +0000</pubDate>
      
      <guid>/2011/07/22/solarized_cheat_sheet/</guid>
      <description>

&lt;h1 id=&#34;solarized-cheat-sheet-2011-07-22-solarized-cheat-sheet&#34;&gt;&lt;a href=&#34;/2011/07/22/solarized_cheat_sheet/&#34;&gt;Solarized Cheat Sheet&lt;/a&gt;&lt;/h1&gt;

&lt;p&gt;&lt;style scoped=&#34;scoped&#34; type=&#34;text/css&#34;&gt;
div.solarizedCheatSheet {
  padding: 1em;
  border: solid 1px #657b83;
  background-color: #fdf6e3;
  color: #657b83;
}&lt;/p&gt;

&lt;p&gt;div.solarizedCheatSheet img {
  border: none;
}&lt;/p&gt;

&lt;p&gt;div.solarizedCheatSheet table {
  border-collapse: collapse;
}&lt;/p&gt;

&lt;p&gt;div.solarizedCheatSheet table,
div.solarizedCheatSheet thead,
div.solarizedCheatSheet colgroup {
 border: solid 1px #657b83;
}&lt;/p&gt;

&lt;p&gt;div.solarizedCheatSheet colGroup.colShaded {
  background-color: #eee8df;
}&lt;/p&gt;

&lt;p&gt;div.solarizedCheatSheet td,
div.solarizedCheatSheet th {
  padding-left: .5em;
  padding-right: .5em;
}&lt;/p&gt;

&lt;p&gt;div.solarizedCheatSheet td {
  border-right: inset 1px #93a1a1;
  font-family: monospace;
  text-align: right;
  font-size: 120%;
}
&lt;/style&gt;
&lt;div class=&#34;solarizedCheatSheet&#34;&gt;
&lt;p&gt;I&amp;rsquo;ve been enjoying Ethan Schoonover&amp;rsquo;s &lt;a href=&#34;http://ethanschoonover.com/solarized&#34;&gt;Solarized Color Scheme&lt;/a&gt;. However,
when setting up various programs to use it, I&amp;rsquo;ve found I wanted to have the
example pictures right next to the table of RGB/Hex values. This makes it easier
to find a color in the picture then look up the values in the table.
So, here are the images and the table, together:&lt;/p&gt;

&lt;p&gt;&lt;p&gt;
&lt;img src=&#34;/2011/07/22/solarized-palette.png&#34;&gt;
&lt;p&gt;
&lt;img src=&#34;/2011/07/22/solarized-values-light.png&#34;&gt;
&lt;img src=&#34;/2011/07/22/solarized-values-dark.png&#34;&gt;
&lt;p&gt;
&lt;table&gt;
&lt;colgroup&gt;
&lt;colgroup class=&#34;colShaded&#34;&gt;
&lt;colgroup span=&#34;3&#34;&gt;
&lt;colgroup class=&#34;colShaded&#34; span=&#34;3&#34;&gt;
&lt;colgroup span=&#34;3&#34;&gt;
&lt;colgroup class=&#34;colShaded&#34;&gt;
&lt;colgroup&gt;
&lt;colgroup class=&#34;colShaded&#34; span=&#34;2&#34;&gt;
&lt;thead&gt;
&lt;tr&gt;&lt;th&gt;SOLARIZED&lt;/th&gt;&lt;th&gt;HEX&lt;/th&gt; &lt;th colspan=&#34;3&#34;&gt;RGB&lt;/th&gt; &lt;th colspan=&#34;3&#34;&gt;HSB&lt;/th&gt; &lt;th colspan=&#34;3&#34;&gt;L*A*B&lt;/th&gt; &lt;th&gt;16/8&lt;/th&gt;&lt;th&gt;TERMCOL&lt;/th&gt; &lt;th colspan=&#34;2&#34;&gt;XTERM/HEX&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;base03&lt;/td&gt; &lt;td&gt;#002b36&lt;/td&gt;&lt;td&gt;0&lt;/td&gt; &lt;td&gt;43&lt;/td&gt; &lt;td&gt;54&lt;/td&gt; &lt;td&gt;193&lt;/td&gt;&lt;td&gt;100&lt;/td&gt;&lt;td&gt;21&lt;/td&gt;&lt;td&gt;15&lt;/td&gt;&lt;td&gt;-12&lt;/td&gt;&lt;td&gt;-12&lt;/td&gt;&lt;td&gt;8/4&lt;/td&gt; &lt;td&gt;brblack&lt;/td&gt; &lt;td&gt;234&lt;/td&gt;&lt;td&gt;#1c1c1c&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;base02&lt;/td&gt; &lt;td&gt;#073642&lt;/td&gt;&lt;td&gt;7&lt;/td&gt; &lt;td&gt;54&lt;/td&gt; &lt;td&gt;66&lt;/td&gt; &lt;td&gt;192&lt;/td&gt;&lt;td&gt;90&lt;/td&gt; &lt;td&gt;26&lt;/td&gt;&lt;td&gt;20&lt;/td&gt;&lt;td&gt;-12&lt;/td&gt;&lt;td&gt;-12&lt;/td&gt;&lt;td&gt;0/4&lt;/td&gt; &lt;td&gt;black&lt;/td&gt; &lt;td&gt;235&lt;/td&gt;&lt;td&gt;#262626&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;base01&lt;/td&gt; &lt;td&gt;#586e75&lt;/td&gt;&lt;td&gt;88&lt;/td&gt; &lt;td&gt;110&lt;/td&gt;&lt;td&gt;117&lt;/td&gt;&lt;td&gt;194&lt;/td&gt;&lt;td&gt;25&lt;/td&gt; &lt;td&gt;46&lt;/td&gt;&lt;td&gt;45&lt;/td&gt;&lt;td&gt;-07&lt;/td&gt;&lt;td&gt;-07&lt;/td&gt;&lt;td&gt;10/7&lt;/td&gt;&lt;td&gt;brgreen&lt;/td&gt; &lt;td&gt;240&lt;/td&gt;&lt;td&gt;#585858&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;base00&lt;/td&gt; &lt;td&gt;#657b83&lt;/td&gt;&lt;td&gt;101&lt;/td&gt;&lt;td&gt;123&lt;/td&gt;&lt;td&gt;131&lt;/td&gt;&lt;td&gt;195&lt;/td&gt;&lt;td&gt;23&lt;/td&gt; &lt;td&gt;51&lt;/td&gt;&lt;td&gt;50&lt;/td&gt;&lt;td&gt;-07&lt;/td&gt;&lt;td&gt;-07&lt;/td&gt;&lt;td&gt;11/7&lt;/td&gt;&lt;td&gt;bryellow&lt;/td&gt; &lt;td&gt;241&lt;/td&gt;&lt;td&gt;#626262&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;base0&lt;/td&gt; &lt;td&gt;#839496&lt;/td&gt;&lt;td&gt;131&lt;/td&gt;&lt;td&gt;148&lt;/td&gt;&lt;td&gt;150&lt;/td&gt;&lt;td&gt;186&lt;/td&gt;&lt;td&gt;13&lt;/td&gt; &lt;td&gt;59&lt;/td&gt;&lt;td&gt;60&lt;/td&gt;&lt;td&gt;-06&lt;/td&gt;&lt;td&gt;-03&lt;/td&gt;&lt;td&gt;12/6&lt;/td&gt;&lt;td&gt;brblue&lt;/td&gt; &lt;td&gt;244&lt;/td&gt;&lt;td&gt;#808080&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;base1&lt;/td&gt; &lt;td&gt;#93a1a1&lt;/td&gt;&lt;td&gt;147&lt;/td&gt;&lt;td&gt;161&lt;/td&gt;&lt;td&gt;161&lt;/td&gt;&lt;td&gt;180&lt;/td&gt;&lt;td&gt;9&lt;/td&gt; &lt;td&gt;63&lt;/td&gt;&lt;td&gt;65&lt;/td&gt;&lt;td&gt;-05&lt;/td&gt;&lt;td&gt;-02&lt;/td&gt;&lt;td&gt;14/4&lt;/td&gt;&lt;td&gt;brcyan&lt;/td&gt; &lt;td&gt;245&lt;/td&gt;&lt;td&gt;#8a8a8a&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;base2&lt;/td&gt; &lt;td&gt;#eee8d5&lt;/td&gt;&lt;td&gt;238&lt;/td&gt;&lt;td&gt;232&lt;/td&gt;&lt;td&gt;213&lt;/td&gt;&lt;td&gt;44&lt;/td&gt; &lt;td&gt;11&lt;/td&gt; &lt;td&gt;93&lt;/td&gt;&lt;td&gt;92&lt;/td&gt;&lt;td&gt;-00&lt;/td&gt;&lt;td&gt;10&lt;/td&gt; &lt;td&gt;7/7&lt;/td&gt; &lt;td&gt;white&lt;/td&gt; &lt;td&gt;254&lt;/td&gt;&lt;td&gt;#e4e4e4&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;base3&lt;/td&gt; &lt;td&gt;#fdf6e3&lt;/td&gt;&lt;td&gt;253&lt;/td&gt;&lt;td&gt;246&lt;/td&gt;&lt;td&gt;227&lt;/td&gt;&lt;td&gt;44&lt;/td&gt; &lt;td&gt;10&lt;/td&gt; &lt;td&gt;99&lt;/td&gt;&lt;td&gt;97&lt;/td&gt;&lt;td&gt;00&lt;/td&gt; &lt;td&gt;10&lt;/td&gt; &lt;td&gt;15/7&lt;/td&gt;&lt;td&gt;brwhite&lt;/td&gt; &lt;td&gt;230&lt;/td&gt;&lt;td&gt;#ffffd7&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;yellow&lt;/td&gt; &lt;td&gt;#b58900&lt;/td&gt;&lt;td&gt;181&lt;/td&gt;&lt;td&gt;137&lt;/td&gt;&lt;td&gt;0&lt;/td&gt; &lt;td&gt;45&lt;/td&gt; &lt;td&gt;100&lt;/td&gt;&lt;td&gt;71&lt;/td&gt;&lt;td&gt;60&lt;/td&gt;&lt;td&gt;10&lt;/td&gt; &lt;td&gt;65&lt;/td&gt; &lt;td&gt;3/3&lt;/td&gt; &lt;td&gt;yellow&lt;/td&gt; &lt;td&gt;136&lt;/td&gt;&lt;td&gt;#af8700&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;orange&lt;/td&gt; &lt;td&gt;#cb4b16&lt;/td&gt;&lt;td&gt;203&lt;/td&gt;&lt;td&gt;75&lt;/td&gt; &lt;td&gt;22&lt;/td&gt; &lt;td&gt;18&lt;/td&gt; &lt;td&gt;89&lt;/td&gt; &lt;td&gt;80&lt;/td&gt;&lt;td&gt;50&lt;/td&gt;&lt;td&gt;50&lt;/td&gt; &lt;td&gt;55&lt;/td&gt; &lt;td&gt;9/3&lt;/td&gt; &lt;td&gt;brred&lt;/td&gt; &lt;td&gt;166&lt;/td&gt;&lt;td&gt;#d75f00&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;red&lt;/td&gt; &lt;td&gt;#dc322f&lt;/td&gt;&lt;td&gt;220&lt;/td&gt;&lt;td&gt;50&lt;/td&gt; &lt;td&gt;47&lt;/td&gt; &lt;td&gt;1&lt;/td&gt; &lt;td&gt;79&lt;/td&gt; &lt;td&gt;86&lt;/td&gt;&lt;td&gt;50&lt;/td&gt;&lt;td&gt;65&lt;/td&gt; &lt;td&gt;45&lt;/td&gt; &lt;td&gt;1/1&lt;/td&gt; &lt;td&gt;red&lt;/td&gt; &lt;td&gt;160&lt;/td&gt;&lt;td&gt;#d70000&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;magenta&lt;/td&gt;&lt;td&gt;#d33682&lt;/td&gt;&lt;td&gt;211&lt;/td&gt;&lt;td&gt;54&lt;/td&gt; &lt;td&gt;130&lt;/td&gt;&lt;td&gt;331&lt;/td&gt;&lt;td&gt;74&lt;/td&gt; &lt;td&gt;83&lt;/td&gt;&lt;td&gt;50&lt;/td&gt;&lt;td&gt;65&lt;/td&gt; &lt;td&gt;-05&lt;/td&gt;&lt;td&gt;5/5&lt;/td&gt; &lt;td&gt;magenta&lt;/td&gt; &lt;td&gt;125&lt;/td&gt;&lt;td&gt;#af005f&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;violet&lt;/td&gt; &lt;td&gt;#6c71c4&lt;/td&gt;&lt;td&gt;108&lt;/td&gt;&lt;td&gt;113&lt;/td&gt;&lt;td&gt;196&lt;/td&gt;&lt;td&gt;237&lt;/td&gt;&lt;td&gt;45&lt;/td&gt; &lt;td&gt;77&lt;/td&gt;&lt;td&gt;50&lt;/td&gt;&lt;td&gt;15&lt;/td&gt; &lt;td&gt;-45&lt;/td&gt;&lt;td&gt;13/5&lt;/td&gt;&lt;td&gt;brmagenta&lt;/td&gt;&lt;td&gt;61&lt;/td&gt; &lt;td&gt;#5f5faf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;blue&lt;/td&gt; &lt;td&gt;#268bd2&lt;/td&gt;&lt;td&gt;38&lt;/td&gt; &lt;td&gt;139&lt;/td&gt;&lt;td&gt;210&lt;/td&gt;&lt;td&gt;205&lt;/td&gt;&lt;td&gt;82&lt;/td&gt; &lt;td&gt;82&lt;/td&gt;&lt;td&gt;55&lt;/td&gt;&lt;td&gt;-10&lt;/td&gt;&lt;td&gt;-45&lt;/td&gt;&lt;td&gt;4/4&lt;/td&gt; &lt;td&gt;blue&lt;/td&gt; &lt;td&gt;33&lt;/td&gt; &lt;td&gt;#0087ff&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;cyan&lt;/td&gt; &lt;td&gt;#2aa198&lt;/td&gt;&lt;td&gt;42&lt;/td&gt; &lt;td&gt;161&lt;/td&gt;&lt;td&gt;152&lt;/td&gt;&lt;td&gt;175&lt;/td&gt;&lt;td&gt;74&lt;/td&gt; &lt;td&gt;63&lt;/td&gt;&lt;td&gt;60&lt;/td&gt;&lt;td&gt;-35&lt;/td&gt;&lt;td&gt;-05&lt;/td&gt;&lt;td&gt;6/6&lt;/td&gt; &lt;td&gt;cyan&lt;/td&gt; &lt;td&gt;37&lt;/td&gt; &lt;td&gt;#00afaf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;green&lt;/td&gt; &lt;td&gt;#859900&lt;/td&gt;&lt;td&gt;133&lt;/td&gt;&lt;td&gt;153&lt;/td&gt;&lt;td&gt;0&lt;/td&gt; &lt;td&gt;68&lt;/td&gt; &lt;td&gt;100&lt;/td&gt;&lt;td&gt;60&lt;/td&gt;&lt;td&gt;60&lt;/td&gt;&lt;td&gt;-20&lt;/td&gt;&lt;td&gt;65&lt;/td&gt; &lt;td&gt;2/2&lt;/td&gt; &lt;td&gt;green&lt;/td&gt; &lt;td&gt;64&lt;/td&gt; &lt;td&gt;#5f8700&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/colgroup&gt;&lt;/colgroup&gt;&lt;/colgroup&gt;&lt;/colgroup&gt;&lt;/colgroup&gt;&lt;/colgroup&gt;&lt;/colgroup&gt;&lt;/colgroup&gt;&lt;/table&gt;
&lt;/p&gt;&lt;/img&gt;&lt;/img&gt;&lt;/p&gt;&lt;/img&gt;&lt;/p&gt;&lt;/p&gt;&lt;/div&gt;&lt;/p&gt;
</description>
    </item>
    
  </channel>
</rss>
