<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>gatillos.com - gun-toting kittens</title>
  <link href="https://gatillos.com/yay/" rel="alternate" type="text/html" />
  <link href="https://gatillos.com/yay/atom.xml" rel="self" type="application/atom+xml" />
  <id>https://gatillos.com/yay/</id>
  <updated>2026-02-14T18:20:00Z</updated>
  <author>
    <name>osuka</name>
  </author>
  <entry>
    <title>Kind: kubernetes in docker</title>
    <link href="https://gatillos.com/yay/2026/02/14/kind-kubernetes-in-docker/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2026/02/14/kind-kubernetes-in-docker/</id>
    <updated>2026-02-14T18:20:00Z</updated>
    <content type="html"><![CDATA[<p>I&rsquo;ve meaning to upgrade to an even easier to manage kubernetes cluster for testing and development than the one you can get from <a href="/yay/2022/10/01/local-kubernetes-with-microk8s/">microk8s</a>. Today I&rsquo;m using <a href="https://kind.sigs.k8s.io/">kind (kubernetes in docker)</a>, this is specifically meant for <strong>testing</strong> and <strong>local development machines</strong>.</p>
<h2 id="installing-kind">Installing Kind</h2>
<p>These days I&rsquo;m on nixos so I went with a simple <code>nix-shell -p kind -p kubectl</code> to setup the tool.</p>
<p>Example config for 4 workers</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nt">kind</span><span class="p">:</span><span class="w"> </span><span class="l">Cluster</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">apiVersion</span><span class="p">:</span><span class="w"> </span><span class="l">kind.x-k8s.io/v1alpha4</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">nodes</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl">- <span class="nt">role</span><span class="p">:</span><span class="w"> </span><span class="l">control-plane</span><span class="w">
</span></span></span><span class="line"><span class="cl">- <span class="nt">role</span><span class="p">:</span><span class="w"> </span><span class="l">worker</span><span class="w">
</span></span></span><span class="line"><span class="cl">- <span class="nt">role</span><span class="p">:</span><span class="w"> </span><span class="l">worker</span><span class="w">
</span></span></span><span class="line"><span class="cl">- <span class="nt">role</span><span class="p">:</span><span class="w"> </span><span class="l">worker</span><span class="w">
</span></span></span><span class="line"><span class="cl">- <span class="nt">role</span><span class="p">:</span><span class="w"> </span><span class="l">worker</span><span class="w">
</span></span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">❯ kind create cluster -n <span class="nb">test</span> --config 4-worker-cluster.yaml
</span></span><span class="line"><span class="cl">Creating cluster <span class="s2">&#34;test&#34;</span> ...
</span></span><span class="line"><span class="cl"> ✓ Ensuring node image <span class="o">(</span>kindest/node:v1.34.0<span class="o">)</span> 🖼
</span></span><span class="line"><span class="cl"> ✓ Preparing nodes 📦 📦 📦 📦 📦
</span></span><span class="line"><span class="cl"> ✓ Writing configuration 📜
</span></span><span class="line"><span class="cl"> ✓ Starting control-plane 🕹️
</span></span><span class="line"><span class="cl"> ✓ Installing CNI 🔌
</span></span><span class="line"><span class="cl"> ✓ Installing StorageClass 💾
</span></span><span class="line"><span class="cl"> ✓ Joining worker nodes 🚜
</span></span><span class="line"><span class="cl">Set kubectl context to <span class="s2">&#34;kind-test&#34;</span>
</span></span><span class="line"><span class="cl">You can now use your cluster with:
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">kubectl cluster-info --context kind-test
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Thanks <span class="k">for</span> using kind! 😊
</span></span></code></pre></div><p>We verify what this has done to our config</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">❯ kubectl config get-contexts
</span></span><span class="line"><span class="cl">CURRENT   NAME                     CLUSTER                                                                  AUTHINFO                                                                 NAMESPACE
</span></span><span class="line"><span class="cl"><span class="o">(</span>my existing configuratino<span class="o">)</span>
</span></span><span class="line"><span class="cl">...
</span></span><span class="line"><span class="cl">*         kind-test                kind-test                                                                kind-test
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">❯ kubectl cluster-info --context kind-test
</span></span><span class="line"><span class="cl">Kubernetes control plane is running at https://127.0.0.1:39157
</span></span><span class="line"><span class="cl">CoreDNS is running at https://127.0.0.1:39157/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">To further debug and diagnose cluster problems, use <span class="s1">&#39;kubectl cluster-info dump&#39;</span>.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">❯ docker ps
</span></span><span class="line"><span class="cl">CONTAINER ID   IMAGE                                COMMAND                  CREATED              STATUS                PORTS                                                   NAMES
</span></span><span class="line"><span class="cl">6ec5f2806ac4   kindest/node:v1.34.0                 <span class="s2">&#34;/usr/local/bin/entr…&#34;</span>   About a minute ago   Up About a minute     127.0.0.1:39157-&gt;6443/tcp                               test-control-plane
</span></span><span class="line"><span class="cl">758a9749959b   kindest/node:v1.34.0                 <span class="s2">&#34;/usr/local/bin/entr…&#34;</span>   About a minute ago   Up About a minute                                                             test-worker
</span></span><span class="line"><span class="cl">894b1de24498   kindest/node:v1.34.0                 <span class="s2">&#34;/usr/local/bin/entr…&#34;</span>   About a minute ago   Up About a minute                                                             test-worker4
</span></span><span class="line"><span class="cl">c143d5c8c64c   kindest/node:v1.34.0                 <span class="s2">&#34;/usr/local/bin/entr…&#34;</span>   About a minute ago   Up About a minute                                                             test-worker3
</span></span><span class="line"><span class="cl">e726f48d9c21   kindest/node:v1.34.0                 <span class="s2">&#34;/usr/local/bin/entr…&#34;</span>   About a minute ago   Up About a minute                                                             test-worker2
</span></span></code></pre></div><h2 id="launching-pods">Launching pods</h2>
<p>Images can be provided by a <a href="https://kind.sigs.k8s.io/docs/user/local-registry/">local registry</a> but also can be &ldquo;loaded&rdquo; into the cluster, ideal for development and CI flows:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">&gt; kind load docker-image my-local-image:my-tag
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># example to load a docker hub missage</span>
</span></span><span class="line"><span class="cl">&gt; docker pull busybox:1.37.0-musl
</span></span><span class="line"><span class="cl">&gt; kind load docker-image busybox:1.37.0-musl --name <span class="nb">test</span>
</span></span><span class="line"><span class="cl">Image: <span class="s2">&#34;busybox:1.37.0-musl&#34;</span> with ID <span class="s2">&#34;sha256:0188a8de47ca89b720586f01da7d7f870bdcf5f770b19f740291d716235d3107&#34;</span> not yet present on node <span class="s2">&#34;test-control-plane&#34;</span>, loading...
</span></span><span class="line"><span class="cl">Image: <span class="s2">&#34;busybox:1.37.0-musl&#34;</span> with ID <span class="s2">&#34;sha256:0188a8de47ca89b720586f01da7d7f870bdcf5f770b19f740291d716235d3107&#34;</span> not yet present on node <span class="s2">&#34;test-worker&#34;</span>, loading...
</span></span><span class="line"><span class="cl">Image: <span class="s2">&#34;busybox:1.37.0-musl&#34;</span> with ID <span class="s2">&#34;sha256:0188a8de47ca89b720586f01da7d7f870bdcf5f770b19f740291d716235d3107&#34;</span> not yet present on node <span class="s2">&#34;test-worker4&#34;</span>, loading...
</span></span><span class="line"><span class="cl">... <span class="o">(</span>loads to all nodes<span class="o">)</span>
</span></span></code></pre></div>]]></content>
  </entry>
  <entry>
    <title>Bottlerocket and instance-store ephemeral SSD volumes in AWS</title>
    <link href="https://gatillos.com/yay/2024/03/03/bottlerocket/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2024/03/03/bottlerocket/</id>
    <updated>2024-03-03T23:20:00Z</updated>
    <content type="html"><![CDATA[<p>For a while now I&rsquo;ve been using <strong>Bottlerocket</strong> as the base OS for instances in the cloud (i.e. the AMI), instead of using Amazon Linux or Ubuntu etc. In our workload we don&rsquo;t really have much use for local storage until recently so I finally invested some time in figuring out how to actually make use of the local SSDs where available (usually this type of storage is called <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/InstanceStorage.html">instance-store</a> in AWS).</p>
<p>Some Bottlerocket concepts:</p>
<ul>
<li>Minimalist, container-centric</li>
<li>There is no ssh or even a login shell by default</li>
<li>It provides &lsquo;host containers&rsquo; that are not orchestrated (not part of kubernetes)
<ul>
<li>Control container - this is the one that allows us to connect via SSM</li>
<li>Admin container - this is the one that allow us to interact with the host container as root
<ul>
<li>The <strong>root file system</strong> is stored in <code>/.bottlerocket/rootfs</code> and there you can find /dev etc</li>
</ul>
</li>
</ul>
</li>
<li>You can launch bootstrap containers if you need to run tasks, instead of using user-data scripts</li>
</ul>
<p>Typically you don&rsquo;t connect to these instances, but if you need to you can enable the control and admin containers in the user-data settings, connect to the control container and then type <code>enter-admin-container</code>. To connect to the control container use SSM (easiest is to do this via the EC2 web console, but also with <code>aws ssm start-session --target &lt;instanceid&gt;</code>))</p>
<p>You can learn more on <a href="https://github.com/bottlerocket-os/bottlerocket?tab=readme-ov-file">bottlerocket&rsquo;s github</a>, <a href="https://bottlerocket.dev/en/os/1.19.x/concepts/">their concept overview</a> and the FAQ (<a href="https://bottlerocket.dev/en/faq/">https://bottlerocket.dev/en/faq/</a>)</p>
<p>Bottlerocket is configured by providing <a href="https://bottlerocket.dev/en/os/1.19.x/api/settings/">settings</a> via user data in TOML format and what you provide will be <strong>merged</strong> with the defaults.</p>
<h2 id="configuring-bottlerocket-in-node-groups">Configuring Bottlerocket in node groups</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-terraform" data-lang="terraform"><span class="line"><span class="cl"><span class="kr">module</span> <span class="s2">&#34;my-nodegroup&#34;</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="nx">source</span>  <span class="o">=</span> <span class="s2">&#34;terraform-aws-modules/eks/aws//modules/eks-managed-node-group&#34;</span>
</span></span><span class="line"><span class="cl">  <span class="p">...</span>
</span></span><span class="line"><span class="cl">  <span class="nx">ami_type</span> <span class="o">=</span> <span class="s2">&#34;BOTTLEROCKET_ARM_64&#34;</span>
</span></span><span class="line"><span class="cl">  <span class="nx">platform</span> <span class="o">=</span> <span class="s2">&#34;bottlerocket&#34;</span>
</span></span><span class="line"><span class="cl">  <span class="nx">bootstrap_extra_args</span> <span class="o">=</span> <span class="o">&lt;&lt;-EOT</span><span class="s">
</span></span></span><span class="line"><span class="cl"><span class="s">    [settings.host-containers.admin]
</span></span></span><span class="line"><span class="cl"><span class="s">    enabled = true
</span></span></span><span class="line"><span class="cl"><span class="s">    [settings.host-containers.control]
</span></span></span><span class="line"><span class="cl"><span class="s">    enabled = true
</span></span></span><span class="line"><span class="cl"><span class="s">    [settings.xxx.xxx]
</span></span></span><span class="line"><span class="cl"><span class="s">    setting1 = &#34;value&#34;
</span></span></span><span class="line"><span class="cl"><span class="s">    setting2 = &#34;value&#34;
</span></span></span><span class="line"><span class="cl"><span class="s">    setting3 = true
</span></span></span><span class="line"><span class="cl"><span class="s">  </span><span class="o">EOT</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><h2 id="configuring-bottlerocket-in-karpenter">Configuring Bottlerocket in Karpenter</h2>
<p>See <a href="https://karpenter.sh/preview/concepts/nodeclasses/#bottlerocket-2">the default values that Karpenter sets</a>.</p>
<p>In Karpenter these days for AWS you define an <code>EC2NodeClass</code> that basically describes the image to be used and where it will be placed, and a <code>NodePool</code> that defines the hardware it will run in.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nt">apiVersion</span><span class="p">:</span><span class="w"> </span><span class="l">karpenter.k8s.aws/v1beta1</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">kind</span><span class="p">:</span><span class="w"> </span><span class="l">EC2NodeClass</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">metadata</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">myproject</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">spec</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">amiFamily</span><span class="p">:</span><span class="w"> </span><span class="l">Bottlerocket</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">userData</span><span class="p">:</span><span class="w"> </span><span class="p">|</span><span class="sd">
</span></span></span><span class="line"><span class="cl"><span class="sd">    [settings.host-containers.admin]
</span></span></span><span class="line"><span class="cl"><span class="sd">    enabled = true
</span></span></span><span class="line"><span class="cl"><span class="sd">    [settings.host-containers.control]
</span></span></span><span class="line"><span class="cl"><span class="sd">    enabled = true
</span></span></span><span class="line"><span class="cl"><span class="sd">    [settings.xxx.xxx]
</span></span></span><span class="line"><span class="cl"><span class="sd">    setting1 = &#34;value&#34;
</span></span></span><span class="line"><span class="cl"><span class="sd">    setting2 = &#34;value&#34;
</span></span></span><span class="line"><span class="cl"><span class="sd">    setting3 = true</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">subnetSelectorTerms</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span>- <span class="nt">tags</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">Name</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;us-east-1a&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span>- <span class="nt">tags</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">Name</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;us-east-1b&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">securityGroupSelectorTerms</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span>- <span class="nt">tags</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">karpenter.sh/discovery</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;my-cluster&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">instanceProfile</span><span class="p">:</span><span class="w"> </span><span class="l">eksctl-KarpenterNodeInstanceProfile-my-cluster</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nn">---</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">apiVersion</span><span class="p">:</span><span class="w"> </span><span class="l">karpenter.sh/v1beta1</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">kind</span><span class="p">:</span><span class="w"> </span><span class="l">NodePool</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">metadata</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">myproject</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">spec</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">limits</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="c"># limit how many instances this can actually create, we limit by cpu only</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">cpu</span><span class="p">:</span><span class="w"> </span><span class="m">100</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">template</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">spec</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">nodeClassRef</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">apiVersion</span><span class="p">:</span><span class="w"> </span><span class="l">karpenter.k8s.aws/v1beta1</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">kind</span><span class="p">:</span><span class="w"> </span><span class="l">EC2NodeClass</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">myproject</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">requirements</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span>- <span class="nt">key</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;karpenter.sh/capacity-type&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">          </span><span class="nt">operator</span><span class="p">:</span><span class="w"> </span><span class="l">In</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">          </span><span class="nt">values</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="s2">&#34;spot&#34;</span><span class="p">]</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span>- <span class="nt">key</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;kubernetes.io/arch&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">          </span><span class="nt">operator</span><span class="p">:</span><span class="w"> </span><span class="l">In</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">          </span><span class="nt">values</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="s2">&#34;arm64&#34;</span><span class="p">]</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span>- <span class="nt">key</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;karpenter.k8s.aws/instance-cpu&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">          </span><span class="nt">operator</span><span class="p">:</span><span class="w"> </span><span class="l">In</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">          </span><span class="nt">values</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="s2">&#34;4&#34;</span><span class="p">,</span><span class="w"> </span><span class="s2">&#34;8&#34;</span><span class="p">]</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span>- <span class="nt">key</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;karpenter.k8s.aws/instance-generation&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">          </span><span class="nt">operator</span><span class="p">:</span><span class="w"> </span><span class="l">Gt</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">          </span><span class="nt">values</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="s2">&#34;6&#34;</span><span class="p">]</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span>- <span class="nt">key</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;karpenter.k8s.aws/instance-category&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">          </span><span class="nt">operator</span><span class="p">:</span><span class="w"> </span><span class="l">In</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">          </span><span class="nt">values</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="s2">&#34;c&#34;</span><span class="p">,</span><span class="w"> </span><span class="s2">&#34;m&#34;</span><span class="p">,</span><span class="w"> </span><span class="s2">&#34;r&#34;</span><span class="p">]</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="c"># alternatively</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="c">#- key: &#34;node.kubernetes.io/instance-type&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="c">#  operator: In</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="c">#  values:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="c">#  - &#34;c6g.xlarge&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="c">#  - &#34;m7g.xlarge&#34;</span><span class="w">
</span></span></span></code></pre></div><blockquote>
<p>This <a href="https://aws.amazon.com/blogs/containers/reduce-container-startup-time-on-amazon-eks-with-bottlerocket-data-volume/">article</a> discusses some options for pre-caching images that we won&rsquo;t do, but illustrates the architecture of Bottlerocket OS and how it can be combined with Karpenter.</p>
</blockquote>
<h2 id="storage-in-bottlerocket-permanent-ephemeral-and-local">Storage in Bottlerocket (permanent, ephemeral and local)</h2>
<p>Bottlerocket operates with two default storage volumes: root and data. The root is read only and the data is used as persistent storage (EBS that will survive reboots) for non-Kubernetes containers that run inside the instance. The data container is 20 GB EBS drive and the root device is around 4 GB.</p>
<p>Check the Karpenter <a href="https://karpenter.sh/preview/concepts/nodeclasses/#bottlerocket-1">default volume configuration</a></p>
<p>Now the whole point of this post is to show how you can use the local SSD disks that machines often have but that Amazon makes particularly cumbersome to use. Many instances have local SSD storage that will show up inside the host as an extra unmounted device (eg /dev/nvme2n1). How do you make this available to Kubernetes in an automated way?</p>
<h2 id="kubernetes-storage-local-static-provisioner">Kubernetes Storage local static provisioner</h2>
<p>Learn more <a href="https://github.com/kubernetes-sigs/sig-storage-local-static-provisioner">on the storage-local-static-provisioner github page</a> and <a href="https://github.com/kubernetes-sigs/sig-storage-local-static-provisioner/blob/master/docs/getting-started.md">the getting started guide</a>.</p>
<p>The way we expose local disks to kubernetes as resource is via a persistent storage class called &lsquo;fast-disks&rsquo;. The local provisioner will allow creating of these resources of that type by finding local storage</p>
<ul>
<li>It expects the host to have a folder called /mnt/fast-disks (configurable)</li>
<li>It expects there to be links to the actual device files of drives we want exposed</li>
<li>It is installed by generating a configuration file using helm and applying it with kubectl</li>
</ul>
<p>Before going further we need to define a storage class that will be used to flag the new type of storage.</p>
<ul>
<li>Download <a href="https://github.com/kubernetes-sigs/sig-storage-local-static-provisioner/blob/76b022f7dbb48757f19ee11f31f91ab19b938407/deployment/kubernetes/example/default_example_storageclass.yaml">the storage class file</a></li>
</ul>
<p>It looks like this and effectively does nothing (see the no-provisioner):</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nt">apiVersion</span><span class="p">:</span><span class="w"> </span><span class="l">storage.k8s.io/v1</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">kind</span><span class="p">:</span><span class="w"> </span><span class="l">StorageClass</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">metadata</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">fast-disks</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">provisioner</span><span class="p">:</span><span class="w"> </span><span class="l">kubernetes.io/no-provisioner</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">volumeBindingMode</span><span class="p">:</span><span class="w"> </span><span class="l">WaitForFirstConsumer</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="c"># Supported policies: Delete, Retain</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">reclaimPolicy</span><span class="p">:</span><span class="w"> </span><span class="l">Delete</span><span class="w">
</span></span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-sh" data-lang="sh"><span class="line"><span class="cl">kubectl apply -f ./default_example_storageclass.yaml
</span></span></code></pre></div><p>Then setup the local provisioner daemonset that will handle it</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-sh" data-lang="sh"><span class="line"><span class="cl"><span class="c1"># Generate the configuration file</span>
</span></span><span class="line"><span class="cl">helm repo add sig-storage-local-static-provisioner https://kubernetes-sigs.github.io/sig-storage-local-static-provisioner
</span></span><span class="line"><span class="cl">helm template --debug sig-storage-local-static-provisioner/local-static-provisioner --version 2.0.0 --namespace myproject &gt; local-volume-provisioner.generated.yaml
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># edit local-volume-provisioner.generated.yaml if necessary</span>
</span></span><span class="line"><span class="cl"><span class="c1"># optional: kubectl diff -f local-volume-provisioner.generated.yaml</span>
</span></span><span class="line"><span class="cl">kubectl apply -f local-volume-provisioner.generated.yaml
</span></span></code></pre></div><blockquote>
<p>See more <a href="https://github.com/kubernetes-sigs/sig-storage-local-static-provisioner/blob/master/helm/README.md#install-local-volume-provisioner-with-helm">about the installation procedure</a></p>
</blockquote>
<p>This creates a <strong>daemonset</strong> that runs in all instances.</p>
<p>These are some excerpts of what it creates:</p>
<p>The storage class - note that by default it will use <code>shred.sh</code> to initialize the disk, which is rather slow. You can change it to other methods. This will be done only on first boot.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="c"># Source: local-static-provisioner/templates/configmap.yaml</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">apiVersion</span><span class="p">:</span><span class="w"> </span><span class="l">v1</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">kind</span><span class="p">:</span><span class="w"> </span><span class="l">ConfigMap</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">metadata</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">release-name-local-static-provisioner-config</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">namespace</span><span class="p">:</span><span class="w"> </span><span class="l">myproject</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">labels</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">helm.sh/chart</span><span class="p">:</span><span class="w"> </span><span class="l">local-static-provisioner-2.0.0</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">app.kubernetes.io/name</span><span class="p">:</span><span class="w"> </span><span class="l">local-static-provisioner</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">app.kubernetes.io/managed-by</span><span class="p">:</span><span class="w"> </span><span class="l">Helm</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">app.kubernetes.io/instance</span><span class="p">:</span><span class="w"> </span><span class="l">release-name</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">data</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">storageClassMap</span><span class="p">:</span><span class="w"> </span><span class="p">|</span><span class="sd">
</span></span></span><span class="line"><span class="cl"><span class="sd">    fast-disks:
</span></span></span><span class="line"><span class="cl"><span class="sd">      hostDir: /mnt/fast-disks
</span></span></span><span class="line"><span class="cl"><span class="sd">      mountDir: /mnt/fast-disks
</span></span></span><span class="line"><span class="cl"><span class="sd">      blockCleanerCommand:
</span></span></span><span class="line"><span class="cl"><span class="sd">        - &#34;/scripts/shred.sh&#34;
</span></span></span><span class="line"><span class="cl"><span class="sd">        - &#34;2&#34;
</span></span></span><span class="line"><span class="cl"><span class="sd">      volumeMode: Filesystem
</span></span></span><span class="line"><span class="cl"><span class="sd">      fsType: ext4
</span></span></span><span class="line"><span class="cl"><span class="sd">      namePattern: &#34;*&#34;</span><span class="w">
</span></span></span></code></pre></div><h2 id="joining-local-static-provisioner-aws-instance-store-and-bottlerocket">Joining local static provisioner, AWS instance store and Bottlerocket</h2>
<p><a href="https://bottlerocket.dev/en/os/1.19.x/concepts/bootstrap-containers/#capabilities-and-permissions">Bootstrap containers</a> have root access and boot with the root file system mounted.</p>
<p>You can create one like this, and publish to your own repository:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-sh" data-lang="sh"><span class="line"><span class="cl">FROM alpine:latest
</span></span><span class="line"><span class="cl">RUN apk add --no-cache util-linux
</span></span><span class="line"><span class="cl">FROM alpine:latest
</span></span><span class="line"><span class="cl">RUN <span class="nb">echo</span> <span class="s1">&#39;#!/bin/sh&#39;</span> &gt; /script.sh <span class="se">\
</span></span></span><span class="line"><span class="cl">    <span class="o">&amp;&amp;</span> <span class="nb">echo</span> <span class="s1">&#39;mkdir -p /.bottlerocket/rootfs/mnt/fast-disks&#39;</span> &gt;&gt; /script.sh <span class="se">\
</span></span></span><span class="line"><span class="cl">    <span class="o">&amp;&amp;</span> <span class="nb">echo</span> <span class="s1">&#39;cd /.bottlerocket/rootfs/mnt/fast-disks&#39;</span> &gt;&gt; /script.sh <span class="se">\
</span></span></span><span class="line"><span class="cl">    <span class="o">&amp;&amp;</span> <span class="nb">echo</span> <span class="s1">&#39;for device in $(ls /.bottlerocket/rootfs/dev/nvme*n1); do&#39;</span> &gt;&gt; /script.sh <span class="se">\
</span></span></span><span class="line"><span class="cl">    <span class="o">&amp;&amp;</span> <span class="nb">echo</span> <span class="s1">&#39;  base_device=$(basename $device)&#39;</span> &gt;&gt; /script.sh <span class="se">\
</span></span></span><span class="line"><span class="cl">    <span class="o">&amp;&amp;</span> <span class="nb">echo</span> <span class="s1">&#39;  if ! mount | grep -q &#34;$base_device&#34;; then&#39;</span> &gt;&gt; /script.sh <span class="se">\
</span></span></span><span class="line"><span class="cl">    <span class="o">&amp;&amp;</span> <span class="nb">echo</span> <span class="s1">&#39;    [ ! -e &#34;./$base_device&#34; ] &amp;&amp; ln -s &#34;../../dev/$base_device&#34; &#34;./$base_device&#34;&#39;</span> &gt;&gt; /script.sh <span class="se">\
</span></span></span><span class="line"><span class="cl">    <span class="o">&amp;&amp;</span> <span class="nb">echo</span> <span class="s1">&#39;  fi&#39;</span> &gt;&gt; /script.sh <span class="se">\
</span></span></span><span class="line"><span class="cl">    <span class="o">&amp;&amp;</span> <span class="nb">echo</span> <span class="s1">&#39;done&#39;</span> &gt;&gt; /script.sh <span class="se">\
</span></span></span><span class="line"><span class="cl">    <span class="o">&amp;&amp;</span> <span class="nb">echo</span> <span class="s1">&#39;ls -l /.bottlerocket/rootfs/mnt/fast-disks&#39;</span> &gt;&gt; /script.sh <span class="se">\
</span></span></span><span class="line"><span class="cl">    <span class="o">&amp;&amp;</span> chmod +x /script.sh
</span></span><span class="line"><span class="cl">CMD <span class="o">[</span><span class="s2">&#34;/script.sh&#34;</span><span class="o">]</span>
</span></span></code></pre></div><p>Add this to the Bottlerocket settings</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-toml" data-lang="toml"><span class="line"><span class="cl"><span class="p">[</span><span class="nx">settings</span><span class="p">.</span><span class="nx">bootstrap-containers</span><span class="p">.</span><span class="nx">diskmounter</span><span class="p">]</span>
</span></span><span class="line"><span class="cl"><span class="nx">essential</span> <span class="p">=</span> <span class="kc">true</span>
</span></span><span class="line"><span class="cl"><span class="nx">mode</span> <span class="p">=</span> <span class="s2">&#34;always&#34;</span>
</span></span><span class="line"><span class="cl"><span class="nx">source</span> <span class="p">=</span> <span class="s2">&#34;YOURACCOUNT.ecr.public.ecr.aws/YOURREPO:latest&#34;</span>
</span></span></code></pre></div><h2 id="caveat-node-cleanup">Caveat: node cleanup</h2>
<p>By default, when you set this up if an instance dies (which in AWS can happen any minute) the persistent volume claim will remain.</p>
<p>Basically the life cycle is a bit like:</p>
<ul>
<li>Pod is created that has a persistent storage claim of a fast-disk</li>
<li>This is allocated in one of the instances</li>
<li>Once it is assigned, the pod will be assigned to that instance</li>
<li>If the instance dies, the pod is still assigned to that specific instance and deleting it won&rsquo;t fix it</li>
</ul>
<p>This will manifest as an error about the pod not being able to find <code>nodeinfo</code> for the now defunct node.</p>
<p>This cleaning process is achieved by the <a href="https://github.com/kubernetes-sigs/sig-storage-local-static-provisioner/blob/master/docs/node-cleanup-controller.md">node-cleanup-controller</a></p>
<p>To set it up:</p>
<ul>
<li>Download <a href="https://github.com/kubernetes-sigs/sig-storage-local-static-provisioner/blob/master/deployment/kubernetes/example/node-cleanup-controller/deployment.yaml">the deployment file</a></li>
<li>Download <a href="https://github.com/kubernetes-sigs/sig-storage-local-static-provisioner/blob/master/deployment/kubernetes/example/node-cleanup-controller/rbac.yaml">the permissions file</a></li>
<li>Edit it to <strong>change the storage class</strong> (default is called nvme-ssd-block)</li>
</ul>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nt">apiVersion</span><span class="p">:</span><span class="w"> </span><span class="l">apps/v1</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">kind</span><span class="p">:</span><span class="w"> </span><span class="l">Deployment</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nn">...</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">spec</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nn">...</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">containers</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">local-volume-node-cleanup-controller</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">image</span><span class="p">:</span><span class="w"> </span><span class="l">gcr.io/k8s-staging-sig-storage/local-volume-node-cleanup:canary</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">args</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">          </span>- <span class="s2">&#34;--storageclass-names=fast-disks&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">          </span>- <span class="s2">&#34;--pvc-deletion-delay=60s&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">          </span>- <span class="s2">&#34;--stale-pv-discovery-interval=10s&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">ports</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">          </span>- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">metrics</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">            </span><span class="nt">containerPort</span><span class="p">:</span><span class="w"> </span><span class="m">8080</span><span class="w">
</span></span></span></code></pre></div><p>Now apply both deployment and permissions</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-sh" data-lang="sh"><span class="line"><span class="cl">kubectl apply -f ./deployment.yaml
</span></span><span class="line"><span class="cl">kubectl apply -f ./permissions.yaml
</span></span></code></pre></div><p>You will end up with</p>
<ul>
<li>A new Storage class called &lsquo;fast-disks&rsquo;</li>
<li>The CleanupController looks for Local Persistent Volumes that have a NodeAffinity to a deleted Node. When it finds such a PV, it starts a timer to wait and see if the deleted Node comes back up again. If at the end of the timer, the Node is not back up, the PVC bound to that PV is deleted. The PV is deleted in the next step.</li>
<li>The Deleter looks for Local PVs with a NodeAffinity to deleted Nodes. When it finds such a PV it deletes the PV if (and only if) the PV&rsquo;s status is Available or if its status is Released and it has a Delete reclaim policy.</li>
</ul>
]]></content>
  </entry>
  <entry>
    <title>Paul the innovator (85): The goat</title>
    <link href="https://gatillos.com/yay/2023/09/17/paul-the-innovator-85-the-goat/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2023/09/17/paul-the-innovator-85-the-goat/</id>
    <updated>2023-09-17T12:30:00&#43;01:00</updated>
    <content type="html"><![CDATA[<span class="multilingual">
<span class="en">A manouvre used since biblical times...
</span>
<span class="es">Maniobra usada desde tiempos bíblicos...
</span>
</span>
]]></content>
  </entry>
  <entry>
    <title>Diving into service account token authentication in Kubernetes</title>
    <link href="https://gatillos.com/yay/2022/10/02/blog-how-do-tokens-work-in-kubernetes/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2022/10/02/blog-how-do-tokens-work-in-kubernetes/</id>
    <updated>2022-10-02T09:23:10&#43;01:00</updated>
    <content type="html"><![CDATA[<p>I set up a local kubernetes cluster using microk8s
just as a development/home cluster and as part of it I ended up connecting to
the kubernetes dashboard application using a service account token, as <a href="https://microk8s.io/docs/addon-dashboard">recommended</a></p>
<p><a href="https://gatillos.com/yay/2022/10/02/blog-how-do-tokens-work-in-kubernetes/001-superkube.png"><img class="" title="Superkube" src="https://gatillos.com/yay/2022/10/02/blog-how-do-tokens-work-in-kubernetes/001-superkube.png" alt="A silly drawing of Superkube" style="width:10%"></a></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">$ microk8s kubectl create token default
</span></span><span class="line"><span class="cl"><span class="o">(</span>...token output...<span class="o">)</span>
</span></span></code></pre></div><p>This process lead me to a few questions:</p>
<ul>
<li>What is that token?</li>
<li>Where does it come from?</li>
<li>Where is it stored?</li>
<li>Does it expire?</li>
</ul>
<p>Essentially, &ldquo;wait how does the whole token authentication thing
work?&rdquo;</p>
<h2 id="token-types">Token types</h2>
<p>So far we have dealt with two token types:</p>
<ol>
<li>We have static tokens, like the one we added in the kube config
file. This token is equivalent to a user:password pair. If exposed
it could be used forever to act as that user.
<ul>
<li>These are either stored as secrets or via some other mechanism</li>
<li>In microk8s there are some credentials created during
installation, including the <code>admin</code> user we have been using.
This can be found in /var/snap/microk8s/current under
credentials/known_tokens.csv.
Changing the token can be done by editing the file.</li>
</ul>
</li>
<li>Then we have temporary tokens, like the one we used for the
dashboard access</li>
</ol>
<p>Now, let&rsquo;s think about those&hellip; what is a temporary token? where are
they stored? how do they expire? Those are the kind of questions I like
to dig in to learn about the internals, and I end up finding a lot of
this is implemented in a perfectly reasonable and standards-based way.</p>
<h2 id="inspecting-a-temporary-token">Inspecting a temporary token</h2>
<p>As usual:</p>
<ul>
<li>Kubernetes <a href="https://kubernetes.io/docs/reference/access-authn-authz/authentication/">authentication docs</a>
to the rescue</li>
</ul>
<p>There we see:</p>
<ul>
<li>The created token is a signed JSON Web Token (JWT)</li>
<li>The signed JWT can be used as a bearer token to authenticate as thegiven service account</li>
</ul>
<p>Now, let&rsquo;s take our token and inspect it - pasting it into
<a href="https://jwt.io">jwt.io</a> to see its content (this is safe as long as you
don&rsquo;t expose your cluster anywhere):</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-json" data-lang="json"><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="nt">&#34;alg&#34;</span><span class="p">:</span> <span class="s2">&#34;RS256&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">  <span class="nt">&#34;kid&#34;</span><span class="p">:</span> <span class="s2">&#34;_h3i-pvtWSsSXXVyXxxxxxxxxxxxxxxx&#34;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="nt">&#34;aud&#34;</span><span class="p">:</span> <span class="p">[</span>
</span></span><span class="line"><span class="cl">    <span class="s2">&#34;https://kubernetes.default.svc&#34;</span>
</span></span><span class="line"><span class="cl">  <span class="p">],</span>
</span></span><span class="line"><span class="cl">  <span class="nt">&#34;exp&#34;</span><span class="p">:</span> <span class="mi">1664705605</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">  <span class="nt">&#34;iat&#34;</span><span class="p">:</span> <span class="mi">1664702005</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">  <span class="nt">&#34;iss&#34;</span><span class="p">:</span> <span class="s2">&#34;https://kubernetes.default.svc&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">  <span class="nt">&#34;kubernetes.io&#34;</span><span class="p">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;namespace&#34;</span><span class="p">:</span> <span class="s2">&#34;default&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;serviceaccount&#34;</span><span class="p">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">      <span class="nt">&#34;name&#34;</span><span class="p">:</span> <span class="s2">&#34;default&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">      <span class="nt">&#34;uid&#34;</span><span class="p">:</span> <span class="s2">&#34;755e1766-e817-xxxx-xxxx-xxxxxxxxxxxx&#34;</span>
</span></span><span class="line"><span class="cl">    <span class="p">}</span>
</span></span><span class="line"><span class="cl">  <span class="p">},</span>
</span></span><span class="line"><span class="cl">  <span class="nt">&#34;nbf&#34;</span><span class="p">:</span> <span class="mi">1664702005</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">  <span class="nt">&#34;sub&#34;</span><span class="p">:</span> <span class="s2">&#34;system:serviceaccount:default:default&#34;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><ul>
<li>The <code>aud</code> parameter indicates the audience, in this case kubernetes</li>
<li>The <code>sub</code> indicates the &lsquo;subject&rsquo; (user, service account, etc).
When we created the token we didn&rsquo;t specify a service account,
which means it used the &lsquo;default&rsquo; service account (not great
practice but hey we are starting)
<ul>
<li>This means the authentication request is coming from
system:serviceaccount:default:default</li>
<li>You can take a look at this account with kubectl get sa default -o yaml</li>
</ul>
</li>
<li>The date parameters define the validity period: <code>&quot;nbf&quot;: 1664702005</code>
(not before), <code>&quot;iat&quot;: 1664702005</code> (issued at) and
<code>&quot;exp&quot;: 1664705605</code> (expiry) which you can quickly convert to a date
with:</li>
</ul>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">$ date -d@<span class="s2">&#34;1664702005&#34;</span>
</span></span><span class="line"><span class="cl">Sun  <span class="m">2</span> Oct 10:13:25 BST <span class="m">2022</span>
</span></span><span class="line"><span class="cl">$ date -d@<span class="s2">&#34;1664705605&#34;</span>
</span></span><span class="line"><span class="cl">Sun  <span class="m">2</span> Oct 11:13:25 BST <span class="m">2022</span>
</span></span></code></pre></div><h2 id="how-can-i-use-this-token">How can I use this token?</h2>
<p>Any client application we give the token to will be sending an HTTPS
request to the API server with a header set to
<code>Authentication: Bearer &lt;token&gt;</code>. That&rsquo;s all is needed. Any requests
will then be approved/rejected based on the permissions of that account.</p>
<p>If you want to test a particular call, you can use the token with for
example:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-sh" data-lang="sh"><span class="line"><span class="cl">kubectl --token<span class="o">=</span><span class="s2">&#34;xxxxxxxxxxxxxx&#34;</span> get pods --all-namespaces
</span></span></code></pre></div><h2 id="and-finally-where-is-it-stored">And finally, where is it stored?</h2>
<ul>
<li>The token is <strong>not</strong> stored as a secret and it&rsquo;s not directly
linked from the service account object</li>
<li>In fact, the token is <strong>not stored anywhere</strong> in kubernetes, it&rsquo;s
validated from the signature</li>
<li>Secrets don&rsquo;t expire but these tokens do (an hour as seen above in
the JWT token itself)</li>
</ul>
<p>As usual, you will be able to dig into the Dashboard project itself, for
instance <a href="https://github.com/kubernetes/dashboard/blob/master/docs/user/accessing-dashboard/README.md">here you have alternative access methods</a></p>
<p>A final note on temporary tokens: they do provide advantages in limiting
the scope of attack as they will expire but you will still need to
associate them to limited users or service accounts with limited
restrictions, something I haven&rsquo;t gone into yet and we have been using
the default service account. For example, if the temporary account is
captured it can be used to create permanent accounts/secrets.</p>
]]></content>
  </entry>
  <entry>
    <title>Play with a local kubernetes cluster using microk8s</title>
    <link href="https://gatillos.com/yay/2022/10/01/local-kubernetes-with-microk8s/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2022/10/01/local-kubernetes-with-microk8s/</id>
    <updated>2022-10-01T09:20:00&#43;01:00</updated>
    <content type="html"><![CDATA[<h2 id="but-why">But why?</h2>
<p>Whatever you think about Kubernetes, it is here to stay. At work it&rsquo;s
replaced all our custom orchestration and ECS usage. It solves
infrastructure problems in a common way that most Cloud providers have
agreed to, which is no small feat.</p>
<p>So why would you want to install it locally anyway? For work your
company will most likely provide you access to a cluster and give you a
set of credentials that somewhat limit what you can do. Depending on
your interests that won&rsquo;t be enough to properly learn about what is
going on under the hood. Getting familiar with how Kubernetes stores
containers, container logs, how networking is handled, DNS resolution,
load balancing etc will help remove a huge barrier.</p>
<p>The best thing I can say about Kubernetes is that when you dig into it,
everything makes sense and turns out to be relatively simple. You will see
that most tasks are actually performed by a container, one that has
parameters, logs and a github repo somewhere you can check. Your DNS
resolution is not working? Well then take a look at &ldquo;kubectl -n
kube-system logs coredns-d489fb88-n7q9p&rdquo;, check the configuration in
&ldquo;-n kube-system get deployments coredns -o yaml&rdquo;, proxy or
port-forward to it, check the metrics&hellip;</p>
<p>In my particular case I also always have a bunch of code I need to run,
scripts to aggregate and publish things, renew my Letsencrypt
certificates, update podcast and RSS services, installed tools like
Grocy and others. Over the years I&rsquo;ve tried various solutions to handle
all of this. Currently I have a bunch of scripts running on my main
machine (Linux) that I usually have always running, some of those
spawning containers (to ease dependency management, sometimes it&rsquo;s not
completely under my control) and other tasks are done by my Synology DS.</p>
<p>For me, having kubernetes seems like a logical step even if it&rsquo;s just
to see if this solution will age better over time. I like the
declarative nature of the YAML configuration and the relative isolation
of having Dockerfiles with their own minimal needs defined.</p>
<p>But let&rsquo;s be clear, for most non developers this is a pretty silly
thing to do!</p>
<h2 id="lets-reuse-some-hardware">Let&rsquo;s reuse some hardware</h2>
<p>There are multiple ways to have a local kubernetes cluster. One of the
most popular is minikube but this time we are going to try the
<a href="https://microk8s.io/">Microk8s</a> offer from Canonical (Ubuntu) running
in a spare Linux box (rather than a VM).</p>
<p>Microk8s is a developer-orientated kubernetes distribution. You should
most certainly not use it as your day to day driver but it&rsquo;s a good
option to play with Kubernetes without getting too lost in the actual
setup</p>
<p>Do you have a spare computer somewhere? I have an old Mac Mini I was
using as my main OS X (for iOS builds) and as a secondary backup system.
Now it has been superseded by a much better Intel Mac Mini I kind friend
gave me, leaving me with a machine that is too nice to just shelve but
too cumbersome to maintain as another Mac OS X machine (it won&rsquo;t be
plugged in to a monitor most of the time).</p>
<ul>
<li>I installed a minimal Ubuntu 22.04.1 LTS on it (Server edition)</li>
<li>Cpu according to /proc/cpuinfo is i5-4278U CPU @ 2.60GHz</li>
<li>RAM according to /proc/raminfo is 16GB of RAM</li>
<li>And according to hdparm -I I have two SSDs since some time ago I
replaced the old HDD with a spare SDD: Samsung SSD 860 EVO 500GB and
the original APPLE SSD SM0128F
<ul>
<li>I decided to mount the smaller Apple SSD as ext4 in / and the
bigger 500GB one as zfs in a separate mountpoint called /main.
Mostly because I have tendency to reinstall the whole OS but
like to keep the ZFS partition between installs.</li>
</ul>
</li>
</ul>
<h2 id="setting-up-microk8s">Setting up microk8s</h2>
<p>Once the Mac Mini linux installation was setup (nothing extra needed to
do there), I enabled SSH and the remaining setup was done from inside
SSH sessions.</p>
<p>Installation didn&rsquo;t start very promising as it failed the first time,
but re-running did finish, following the official installation guide:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">$ sudo snap install microk8s --classic
</span></span><span class="line"><span class="cl">microk8s <span class="o">(</span>1.25/stable<span class="o">)</span> v1.25.2 from Canonical✓ installed
</span></span></code></pre></div><p>For ease of use I&rsquo;ve given my own user access to it with:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">sudo usermod -a -G microk8s osuka
</span></span><span class="line"><span class="cl">sudo chown -f -R osuka ~/.kube
</span></span><span class="line"><span class="cl"><span class="c1"># exiting the ssh session and logging in again is needed at this point</span>
</span></span></code></pre></div><p>That you have the correct permissions can be checked by running
<code>microk8s status --wait-ready</code> As per the guide, enable some services:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">$ microk8s status
</span></span><span class="line"><span class="cl">high-availability: no
</span></span><span class="line"><span class="cl">  datastore master nodes: 127.0.0.1:19001
</span></span><span class="line"><span class="cl">  datastore standby nodes: none
</span></span><span class="line"><span class="cl">addons:
</span></span><span class="line"><span class="cl">  enabled:
</span></span><span class="line"><span class="cl">    ha-cluster           <span class="c1"># (core) Configure high availability on the current node</span>
</span></span><span class="line"><span class="cl">    helm                 <span class="c1"># (core) Helm - the package manager for Kubernetes</span>
</span></span><span class="line"><span class="cl">    helm3                <span class="c1"># (core) Helm 3 - the package manager for Kubernetes</span>
</span></span><span class="line"><span class="cl">    metrics-server       <span class="c1"># (core) K8s Metrics Server for API access to service metrics</span>
</span></span><span class="line"><span class="cl">  disabled:
</span></span><span class="line"><span class="cl">    cert-manager         <span class="c1"># (core) Cloud native certificate management</span>
</span></span><span class="line"><span class="cl">    community            <span class="c1"># (core) The community addons repository</span>
</span></span><span class="line"><span class="cl">    dashboard            <span class="c1"># (core) The Kubernetes dashboard</span>
</span></span><span class="line"><span class="cl">    ...
</span></span></code></pre></div><p>We activate the following services, by running <code>microk8s enable XXXX</code>
for each one:</p>
<ul>
<li>dashboard: Provides us with a web UI to check the status of the
luster. See <a href="https://github.com/kubernetes/dashboard">more on
github</a></li>
<li>dns: installs coredns which will allow us to have cluster-local DNS
resolution</li>
<li>registry: installs a private container registry where we can push
our images</li>
</ul>
<p>We enable also the &ldquo;community&rdquo; services with
<code>microk8s enable community</code> which gives us additional services we can
enable. From the community, we install</p>
<ul>
<li>istio: this creates a service mesh which provides load balancing,
service-to-service authentication and monitoring on top of existing
services, see <a href="https://istio.io/latest/about/service-mesh/">their
docs</a></li>
</ul>
<p>Make <code>microk8s kubectl</code> the default command to run:</p>
<ul>
<li>add <code>alias mkctl=&quot;microk8s kubectl&quot;</code></li>
<li>this is just the standard kubectl, just provided via microk8s so we
on&rsquo;t need to install it separately - we can still use kubectl from
other machines</li>
</ul>
<h2 id="lets-use-it-remotely">Let&rsquo;s use it remotely</h2>
<h3 id="access-the-cluster-itself-with-kubectl">Access the cluster itself with kubectl</h3>
<p>The last thing I want is to have yet another computer I have to keep
connecting to a display so this installation will be used remotely. Also
I don&rsquo;t really want to be ssh&rsquo;ing inside of it just to run kubectl
commands.</p>
<p>From inside the ssh session, check stuff is running:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">$ mkctl get pods --all-namespaces
</span></span><span class="line"><span class="cl">NAMESPACE            NAME                                         READY   STATUS    RESTARTS   AGE
</span></span><span class="line"><span class="cl">kube-system          kubernetes-dashboard-74b66d7f9c-6ngts        1/1     Running   <span class="m">0</span>          18m
</span></span><span class="line"><span class="cl">kube-system          dashboard-metrics-scraper-64bcc67c9c-pth8h   1/1     Running   <span class="m">0</span>          18m
</span></span><span class="line"><span class="cl">kube-system          metrics-server-6b6844c455-5t85g              1/1     Running   <span class="m">0</span>          19m
</span></span><span class="line"><span class="cl">...
</span></span></code></pre></div><p>There&rsquo;s quite a bit of documentation on how to do most common tasks,
check the <a href="https://microk8s.io/docs/how-to">how to section</a> of the
Microk8s site. To configure access:</p>
<ul>
<li>Expose configuration</li>
</ul>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">$ microk8s config
</span></span><span class="line"><span class="cl">apiVersion: v1
</span></span><span class="line"><span class="cl">clusters:
</span></span><span class="line"><span class="cl">- cluster:
</span></span><span class="line"><span class="cl">    certificate-authority-data: LS0tLS1CRUdJTiBDRV... <span class="c1"># (certificate)</span>
</span></span><span class="line"><span class="cl">    server: https://192.168.x.x:16443   <span class="c1"># (ip in local network)</span>
</span></span><span class="line"><span class="cl">  name: microk8s-cluster
</span></span><span class="line"><span class="cl">contexts:
</span></span><span class="line"><span class="cl">- context:
</span></span><span class="line"><span class="cl">    cluster: microk8s-cluster
</span></span><span class="line"><span class="cl">    user: admin
</span></span><span class="line"><span class="cl">  name: microk8s
</span></span><span class="line"><span class="cl">current-context: microk8s
</span></span><span class="line"><span class="cl">kind: Config
</span></span><span class="line"><span class="cl">preferences: <span class="o">{}</span>
</span></span><span class="line"><span class="cl">users:
</span></span><span class="line"><span class="cl">- name: admin
</span></span><span class="line"><span class="cl">  user:
</span></span><span class="line"><span class="cl">    token: WDBySG1.......  <span class="c1"># direct token authentication</span>
</span></span></code></pre></div><p>At some point we will create users but for initial development tasks all
we need is to concatenate the contents of this configuration into our
~/.kube/config file (or create it if it&rsquo;s the first time using
kubectl).</p>
<p>After doing this, all kubectl commands will work as usual. I&rsquo;ve renamed
my context to &lsquo;minion&rsquo;:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">❯ kubectl config use-context minion
</span></span><span class="line"><span class="cl">❯ kubectl get pods --all-namespaces
</span></span></code></pre></div><p>More details for this specific step <a href="https://microk8s.io/docs/working-with-kubectl">in the official
howto</a>.</p>
<h3 id="access-the-dashboard">Access the dashboard</h3>
<p>Since we haven&rsquo;t enabled any other mechanism, to access the dashboard
you will need a token. At this point you could use the same token you
have in .kube/config, but the recommended way is to create a temporary
token instead:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">$ kubectl create token default
</span></span><span class="line"><span class="cl">... a token is printed
</span></span><span class="line"><span class="cl">$ kubectl port-forward -n kube-system service/kubernetes-dashboard 10443:443
</span></span></code></pre></div><p>Then connect to <a href="https://localhost:10443">https://localhost:10443</a> and paste the output from the
first command. See <a href="/yay/2022/10/02/blog-how-do-tokens-work-in-Kubernetes.html">the next post</a>
for an explanation of the token used there.</p>
]]></content>
  </entry>
  <entry>
    <title>Paul the innovator (84): Defensive programming</title>
    <link href="https://gatillos.com/yay/2022/07/07/paul-the-innovator-84-defensive-programming/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2022/07/07/paul-the-innovator-84-defensive-programming/</id>
    <updated>2022-07-07T08:30:00&#43;01:00</updated>
    <content type="html"><![CDATA[<span class="multilingual">
<span class="en">I used python but this is arguably even worse in Javascript/Typescript. Sorry I mean JavaScript. It turned out the problem wasn't java it was the people (also: are katas a type of defensive programming?)
</span>
<span class="es">Aquí he usado python pero esto pasa igual o más en Javascript/Typescript. Quiero decir JavaScript. Al final resultó que el problema no era java si no la gente (por cierto: son las katas un tipo de programación defensiva?)
</span>
</span>
]]></content>
  </entry>
  <entry>
    <title>Paul the innovator (83): The A-Team</title>
    <link href="https://gatillos.com/yay/2022/06/19/paul-the-innovator-83-the-a-team-copy/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2022/06/19/paul-the-innovator-83-the-a-team-copy/</id>
    <updated>2022-06-19T11:30:00&#43;01:00</updated>
    <content type="html"><![CDATA[<span class="multilingual">
<span class="en">Chewing tobacco in a work meeting with your clients, the ultimate power move.
</span>
<span class="es">Mascar tabaco en una reunión de trabajo frente a tus clients, el power move definitivo.
</span>
</span>
]]></content>
  </entry>
  <entry>
    <title>Paul the innovator (82): Mask mandate</title>
    <link href="https://gatillos.com/yay/2021/06/20/paul-the-innovator-82-mask-mandate/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2021/06/20/paul-the-innovator-82-mask-mandate/</id>
    <updated>2021-06-20T11:30:00&#43;01:00</updated>
    <content type="html"><![CDATA[<span class="multilingual">
<span class="en">No matter what your pet may think of you, wear your mask don't be stupid.
</span>
<span class="es">Independientemente de lo que tu mascota pueda pensar de ti, ponte la máscara no seas estúpido.
</span>
</span>
]]></content>
  </entry>
  <entry>
    <title>Embedded software / architecture diagrams: Mermaid with Visual Studio Code and Jekyll</title>
    <link href="https://gatillos.com/yay/2020/10/14/mermaid-diagrams/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2020/10/14/mermaid-diagrams/</id>
    <updated>2020-10-14T12:23:10&#43;01:00</updated>
    <content type="html"><![CDATA[<p>When transmitting complex information I find having some kind of diagram extremely helpful. Sometimes they are there just to have something to look at and point, sometimes they are key to following a complex flow.</p>
<p>Over the years of trying lots of different tools, still seems to me that what I would call &lsquo;hand drawn&rsquo; diagrams are best - but I don&rsquo;t mean actually hand drawn, I&rsquo;m quite bad at whiteboard drawing but give me a tool like Omnigraffle and I&rsquo;ll make the nicest diagrams. I&rsquo;ll throw in some pastel colors even.</p>
<p>The issue is that integrating that with documentation when most of the documentation is in markdown is getting very annoying: you have to export the diagram as an image, save it somewhere and then insert a reference to it inside the markdown document.</p>
<p>It&rsquo;s pretty much impossible to do a decent version control on those, other than replacing a binary blow by another binary blob.</p>
<p><strong>WARNING:</strong> If you read this post in an RSS reader it&rsquo;s not going to look pretty - diagrams are rendered client-side, you&rsquo;ll need to go to the website.</p>
<h2 id="mermaid">Mermaid</h2>
<p>Many times all I want is to draw a small simple figure to help the narrative or to more effectively highlight some point, something that <em>belongs</em> to the document. Enter <a href="https://mermaid-js.github.io/mermaid/">mermaidjs</a>, that lets you embed diagrams by writing a description of them. Here is a simple example diagram, you will have to enclose it in <strong>three backticks and the word mermaid</strong> (I can&rsquo;t seem to be able to escape that in a way that works in jekyll):</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">sequenceDiagram
</span></span><span class="line"><span class="cl">    Mobile Device-&gt;&gt;Server: Request
</span></span><span class="line"><span class="cl">    Server-&gt;&gt;Cache: get [x-something]
</span></span><span class="line"><span class="cl">    Cache--&gt;&gt;Server: null || contents
</span></span></code></pre></div><p>Renders:</p>
<div class="mermaid">
sequenceDiagram
    Mobile Device->>Server: Request
    Server->>Cache: get [x-something]
    Cache-->>Server: null || contents
</div>
<p>The great thing about this is that now I can edit the source file for this post and open a preview in Visual Studio Code (by installing the extension <a href="https://marketplace.visualstudio.com/items?itemName=bierner.markdown-mermaidbierner.markdown-mermaid">Markdown Preview Mermaid Support</a>) that shows me what it would look like.</p>
<p>Here are some more examples, there is a ton of diagram types:</p>
<div class="mermaid">
pie title When to use a pie chart
    "Never" : 235
    "When lying about your data" : 85
    "When hungry" : 15
</div>
<p>I can see myself writing a quick gantt diagram that I can store as part of my project&rsquo;s code, and then export as PDF when needed with the &ldquo;Markdown PDF: Export (pdf)&rdquo; command of the <a href="https://marketplace.visualstudio.com/items?itemName=yzane.markdown-pdf">Markdown PDF plugin</a>.</p>
<div class="mermaid">
gantt
    title A Gantt Diagram: This is not how things work in reality but you need something
    dateFormat  YYYY-MM-DD
    section Governing
    Planning          :done, planning, 2013-12-21, 5d
    Budget allocation :done, budget, after planning, 5d
    section Backend
    API definition     :active, api-interface, 2014-01-01, 5d
    API implementation :api-implementation, after api-interface, 10d
    E2E testing :e2e, after api-implementation, 3d
    Announcing it's all done and leaving the company: after api-interface, 3d
    section Frontend
    Implementation      :fe-implementation, after api-interface branding, 12d
    Implementation extension : fe-again, after fe-implementation we-didnt-think-about-that, 12d
    section Design
    Branding      :active, branding, after budget, 12d
    We didn't think about that      : we-didnt-think-about-that, after api-implementation, 24d
</div>
<p>You can do pretty interesting things in the gantt charts, multiple dependencies etc</p>
<div class="mermaid">
erDiagram
    CUSTOMER ||--o{ ORDER : places
    ORDER ||--|{ LINE-ITEM : contains
    CUSTOMER }|..|{ DELIVERY-ADDRESS : uses
</div>
<p>You can have class diagrams</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">classDiagram
</span></span><span class="line"><span class="cl">      Animal &lt;|-- Duck
</span></span><span class="line"><span class="cl">      Animal &lt;|-- Fish
</span></span><span class="line"><span class="cl">      Animal &lt;|-- Zebra
</span></span><span class="line"><span class="cl">      class Duck{
</span></span><span class="line"><span class="cl">          +String beakColor
</span></span><span class="line"><span class="cl">          +swim()
</span></span><span class="line"><span class="cl">          +quack()
</span></span><span class="line"><span class="cl">      }
</span></span><span class="line"><span class="cl">      ...
</span></span></code></pre></div><div class="mermaid">
classDiagram
      Animal <|-- Duck
      Animal <|-- Fish
      Animal <|-- Zebra
      Animal : +int age
      Animal : +String gender
      Animal: +isMammal()
      Animal: +mate()
      class Duck{
          +String beakColor
          +swim()
          +quack()
      }
      class Fish{
          -int sizeInFeet
          -canEat()
      }
      class Zebra{
          +bool is_wild
          +run()
      }
</div>
<p>You can have nice state diagrams</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">stateDiagram
</span></span><span class="line"><span class="cl">    [*] --&gt; State1
</span></span><span class="line"><span class="cl">    State3 --&gt; State4
</span></span><span class="line"><span class="cl">    State1 --&gt; State2
</span></span><span class="line"><span class="cl">    State3 --&gt; [*]
</span></span><span class="line"><span class="cl">    State2 --&gt; State4
</span></span><span class="line"><span class="cl">    State2 --&gt; State3: Conked
</span></span></code></pre></div><p>or with the newer plugin:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">stateDiagram-v2
</span></span><span class="line"><span class="cl">    [*] --&gt; State1
</span></span><span class="line"><span class="cl">    state fork_state &lt;&lt;fork&gt;&gt;
</span></span><span class="line"><span class="cl">        [*] --&gt; fork_state
</span></span><span class="line"><span class="cl">        fork_state --&gt; State1
</span></span><span class="line"><span class="cl">        fork_state --&gt; State3
</span></span><span class="line"><span class="cl">    ...
</span></span></code></pre></div><div class="mermaid">
stateDiagram-v2
    [*] --> State1
    state fork_state <<fork>>
        [*] --> fork_state
        fork_state --> State1
        fork_state --> State3
    State3 --> State4
    State1: The state with a note
    note right of State1
            Important information! You can write
            notes.
        end note
        State1 --> State2
        note left of State2 : This is the note to the left.
        State2 --> Active
    state Active {
            [*] --> NumLockOff
            NumLockOff --> NumLockOn : EvNumLockPressed
            NumLockOn --> NumLockOff : EvNumLockPressed
            --
            [*] --> ScrollLockOff
            ScrollLockOff --> ScrollLockOn : EvCapsLockPressed
            ScrollLockOn --> ScrollLockOff : EvCapsLockPressed
    }
    state join_state <<join>>
        State4 --> join_state
        Active --> join_state
        join_state --> [*]
</div>
<div class="mermaid">
stateDiagram
    [*] --> State1
    State3 --> State4
    State1 --> State2
    State3 --> [*]
    State2 --> State4
    State2 --> State3: Conked
</div>
<p>Entity relationship diagrams:</p>
<div class="mermaid">
graph LR
    A[Hard edge] -->|Link text| B(Round edge)
    B --> C{Decision}
    C -->|One| D[Result one]
    C -->|Two| E[Result two]
</div>
<h2 id="caveats">Caveats</h2>
<p>One thing to note is the different diagram plugins are almost independent applications and have subtle syntax differences: for instance you must use quotes in pie charts, but not in gantt.</p>
<p>The &ldquo;Markdown: Open preview to the side&rdquo; command on visual studio code right now works but has a very annoying refresh effect on the document you are typing in making it mostly unusable. You will be better of just opening previews that refresh only when you focus them using the &ldquo;Markdown: Open Preview&rdquo; command.</p>
<h2 id="integration-with-jekyll">Integration with Jekyll</h2>
<p>There&rsquo;s no real integration with Jekyll, you just add the library to your layout and then embed a <code>&lt;div&gt;</code> which automatically gets expanded client-side by the library:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-html" data-lang="html"><span class="line"><span class="cl"><span class="p">&lt;</span><span class="nt">div</span> <span class="na">class</span><span class="o">=</span><span class="s">&#34;mermaid&#34;</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">sequenceDiagram
</span></span><span class="line"><span class="cl">    Mobile Device-&gt;&gt;Server: Request
</span></span><span class="line"><span class="cl">    Server-&gt;&gt;Cache: get [x-something]
</span></span><span class="line"><span class="cl">    Cache--&gt;&gt;Server: null || contents
</span></span><span class="line"><span class="cl"><span class="p">&lt;/</span><span class="nt">div</span><span class="p">&gt;</span>
</span></span></code></pre></div><p>To add the library (quite a hefty library at 800K for the minified version, but for a site like this it&rsquo;s acceptable):</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-sh" data-lang="sh"><span class="line"><span class="cl">mkdir lib
</span></span><span class="line"><span class="cl"><span class="nb">cd</span> lib
</span></span><span class="line"><span class="cl">curl -O https://raw.githubusercontent.com/mermaid-js/mermaid/develop/dist/mermaid.min.js
</span></span></code></pre></div><p>To add it to your layout, edit for instance <code>_layouts/default.html</code>:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-html" data-lang="html"><span class="line"><span class="cl">...
</span></span><span class="line"><span class="cl"><span class="p">&lt;</span><span class="nt">body</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">...
</span></span><span class="line"><span class="cl"><span class="p">&lt;</span><span class="nt">script</span> <span class="na">src</span><span class="o">=</span><span class="s">&#34;{{ site.baseurl }}/lib/mermaid.min.js&#34;</span><span class="p">&gt;&lt;/</span><span class="nt">script</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl"><span class="p">&lt;/</span><span class="nt">body</span><span class="p">&gt;</span>
</span></span></code></pre></div><h2 id="customization">Customization</h2>
<p>One of the greatest things about mermaid is that you can tweak most of it using just CSS <em>and</em> you can add event listeners to make the diagrams more interactive. Check the excellent <a href="https://mermaid-js.github.io/mermaid/diagrams-and-syntax-and-examples/">documentation</a></p>
]]></content>
  </entry>
  <entry>
    <title>Wacom on Linux: my 2020 setup with aspect ratio fix, pan to scroll, drag, multitouch and more</title>
    <link href="https://gatillos.com/yay/2020/08/27/wacom-on-linux-setup/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2020/08/27/wacom-on-linux-setup/</id>
    <updated>2020-08-27T13:23:10&#43;01:00</updated>
    <content type="html"><![CDATA[<p>I&rsquo;ve been a very big fan of small Wacom tablets as a replacement for a mouse. I&rsquo;ll go through my current setup for Linux in case it can help anyone out there.</p>
<p>I started using a Wacom tablet for drawing but found it an excellent replacement for a mouse and moved to exclusive use when I started having symptons of RSI. The change from having the wrist on top of a mouse to having it gripping a pen made a big difference and my problems went away.</p>
<p>When I started using macbooks this became almost a non issue since the trackpad (on OS X) removes a lot of the stress points, in particular if you enable tap to click, tap with two fingers to right click and three finger drag.</p>
<p>Now I find myself on desktop PCs running Linux most of the time so I went back to using it as my main device, tweaking it to my liking. I have compiled my tweaks and hacks here, currently all is tested on a relatively old Wacom Intuos pen &amp; touch small tablet (CTH-480).</p>
<p>Oh and kudos to Jason Gerecke the maintainer of the linuxwacom driver, such an essential but slightly thankless job (and Wacom for supporting him).</p>
<h2 id="the-basics">The basics</h2>
<p>Luckily most distros these days detect Wacom tablets without any hassle and provide even a tool that will help you do some simple mappings.</p>
<p>First of all you&rsquo;ll need to find the ID of the device you want to modify, and you&rsquo;ll need to have xsetwacom installed (part of xserver-xorg-input-wacom, normally installed by default).</p>
<p>In my case:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-sh" data-lang="sh"><span class="line"><span class="cl">xsetwacom --list devices
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> Wacom Intuos PT S Finger touch    id: <span class="m">13</span>  type: TOUCH
</span></span><span class="line"><span class="cl"> Wacom Intuos PT S Pad pad         id: <span class="m">14</span>  type: PAD
</span></span><span class="line"><span class="cl"> Wacom Intuos PT S Pen eraser      id: <span class="m">17</span>  type: ERASER
</span></span><span class="line"><span class="cl"> Wacom Intuos PT S Pen stylus      id: <span class="m">16</span>  type: STYLUS
</span></span></code></pre></div><p>The following commands can use the name of the device or the id number, I&rsquo;ll use the name to make it easier to read.</p>
<h2 id="absolute-positioning">Absolute positioning</h2>
<p>This is a must, trying to use the pen as if it was a trackpad just doesn&rsquo;t function in an usable way. What you want is to map a point on the tablet to a point on the screen. This allows you to fly from one corner of the screen to the other faster than a trackpad could do.</p>
<p>For almost all distros you can switch this on via a UI, but if you don&rsquo;t have it, you can do it manually, for my case:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-sh" data-lang="sh"><span class="line"><span class="cl">xsetwacom --set <span class="s2">&#34;Wacom Intuos PT S Pen stylus&#34;</span> Mode Absolute
</span></span><span class="line"><span class="cl">xsetwacom --set <span class="s2">&#34;Wacom Intuos PT S Pen eraser&#34;</span> Mode Absolute
</span></span></code></pre></div><h2 id="aspect-ratio">Aspect ratio</h2>
<p>There is one subtle but very big problem I have noticed as the aspect ratio of my monitors have diverged from the aspect ratio of the tablet over time.</p>
<p>If your tablet proportions don&rsquo;t match the proportions of the screen it will be impossible to draw properly, this is painfully evident on an Ultrawide screen: you&rsquo;ll draw a circle but it will show as an oval. The brain is able to more or less adjust to that and you may be able to manage it but it&rsquo;s a very frustrating experience.</p>
<p>For my case I have written a small script that will calculate the aspect ratio of the screen and map the tablet to it.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-sh" data-lang="sh"><span class="line"><span class="cl"><span class="c1"># if you have more than one monitor you can specify which one to use by</span>
</span></span><span class="line"><span class="cl"><span class="c1"># adding a --display option to the xrandr call</span>
</span></span><span class="line"><span class="cl"><span class="nv">s_w</span><span class="o">=</span><span class="sb">`</span>xrandr <span class="p">|</span> grep -w connected  <span class="p">|</span> awk -F<span class="s1">&#39;[ \+]&#39;</span> <span class="s1">&#39;{print $4}&#39;</span> <span class="p">|</span> sed <span class="s1">&#39;s/x/ /&#39;</span> <span class="p">|</span> awk <span class="s1">&#39;{print $1}&#39;</span><span class="sb">`</span>
</span></span><span class="line"><span class="cl"><span class="nv">s_h</span><span class="o">=</span><span class="sb">`</span>xrandr <span class="p">|</span> grep -w connected  <span class="p">|</span> awk -F<span class="s1">&#39;[ \+]&#39;</span> <span class="s1">&#39;{print $4}&#39;</span> <span class="p">|</span> sed <span class="s1">&#39;s/x/ /&#39;</span> <span class="p">|</span> awk <span class="s1">&#39;{print $2}&#39;</span><span class="sb">`</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nv">ratio</span><span class="o">=</span><span class="sb">`</span><span class="nb">echo</span> <span class="s2">&#34;</span><span class="si">${</span><span class="nv">s_h</span><span class="si">}</span><span class="s2">/</span><span class="si">${</span><span class="nv">s_w</span><span class="si">}</span><span class="s2">&#34;</span> <span class="p">|</span> bc -l<span class="sb">`</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nb">echo</span> <span class="s2">&#34;Screen detected: </span><span class="si">${</span><span class="nv">s_w</span><span class="si">}</span><span class="s2">x</span><span class="si">${</span><span class="nv">s_h</span><span class="si">}</span><span class="s2">&#34;</span>
</span></span><span class="line"><span class="cl"><span class="k">for</span> device in <span class="s1">&#39;Wacom Intuos PT S Pen stylus&#39;</span> <span class="s1">&#39;Wacom Intuos PT S Pen eraser&#39;</span> <span class="p">;</span> <span class="k">do</span>
</span></span><span class="line"><span class="cl">  <span class="nb">echo</span> <span class="s2">&#34;&#34;</span>
</span></span><span class="line"><span class="cl">  <span class="nb">echo</span> <span class="s2">&#34;</span><span class="si">${</span><span class="nv">device</span><span class="si">}</span><span class="s2">:&#34;</span>
</span></span><span class="line"><span class="cl">  xsetwacom <span class="nb">set</span> <span class="s2">&#34;</span><span class="nv">$device</span><span class="s2">&#34;</span> ResetArea
</span></span><span class="line"><span class="cl">  <span class="nv">area</span><span class="o">=</span><span class="sb">`</span>xsetwacom get <span class="s2">&#34;</span><span class="nv">$device</span><span class="s2">&#34;</span> area <span class="p">|</span> awk <span class="s1">&#39;{print $3,$4}&#39;</span><span class="sb">`</span>
</span></span><span class="line"><span class="cl">  <span class="nv">w</span><span class="o">=</span><span class="sb">`</span><span class="nb">echo</span> <span class="si">${</span><span class="nv">area</span><span class="si">}</span> <span class="p">|</span> awk <span class="s1">&#39;{print $1}&#39;</span><span class="sb">`</span>
</span></span><span class="line"><span class="cl">  <span class="nv">h</span><span class="o">=</span><span class="sb">`</span><span class="nb">echo</span> <span class="si">${</span><span class="nv">area</span><span class="si">}</span> <span class="p">|</span> awk <span class="s1">&#39;{print $2}&#39;</span><span class="sb">`</span>
</span></span><span class="line"><span class="cl">  <span class="nv">hn</span><span class="o">=</span><span class="sb">`</span><span class="nb">echo</span> <span class="s2">&#34;</span><span class="si">${</span><span class="nv">w</span><span class="si">}</span><span class="s2">*</span><span class="si">${</span><span class="nv">ratio</span><span class="si">}</span><span class="s2">&#34;</span> <span class="p">|</span> bc -l<span class="sb">`</span>
</span></span><span class="line"><span class="cl">  <span class="nv">hn</span><span class="o">=</span><span class="sb">`</span><span class="nb">printf</span> %.0f <span class="s2">&#34;</span><span class="si">${</span><span class="nv">hn</span><span class="si">}</span><span class="s2">&#34;</span><span class="sb">`</span>
</span></span><span class="line"><span class="cl">  <span class="nb">echo</span> <span class="s2">&#34;  Area </span><span class="si">${</span><span class="nv">w</span><span class="si">}</span><span class="s2">x</span><span class="si">${</span><span class="nv">h</span><span class="si">}</span><span class="s2"> ==&gt; </span><span class="si">${</span><span class="nv">w</span><span class="si">}</span><span class="s2">x</span><span class="si">${</span><span class="nv">hn</span><span class="si">}</span><span class="s2">&#34;</span>
</span></span><span class="line"><span class="cl">  xsetwacom <span class="nb">set</span> <span class="s2">&#34;</span><span class="nv">$device</span><span class="s2">&#34;</span> area <span class="m">0</span> <span class="m">0</span> <span class="si">${</span><span class="nv">w</span><span class="si">}</span> <span class="si">${</span><span class="nv">hn</span><span class="si">}</span>
</span></span><span class="line"><span class="cl"><span class="k">done</span>
</span></span></code></pre></div><h2 id="fix-the-jitter">Fix the jitter</h2>
<p>My hand is not particularly steady and I find that if I try to keep it still I will get tiny movements (jitter). These two parameters make it less sensitive. You can play with the values. This seems to work for my Intuos S.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-sh" data-lang="sh"><span class="line"><span class="cl">xsetwacom --set <span class="s2">&#34;Wacom Intuos PT S Pen stylus&#34;</span> Suppress <span class="m">10</span>
</span></span><span class="line"><span class="cl">xsetwacom --set <span class="s2">&#34;Wacom Intuos PT S Pen stylus&#34;</span> RawSample <span class="m">9</span>
</span></span><span class="line"><span class="cl">xsetwacom --set <span class="s2">&#34;Wacom Intuos PT S Pen eraser&#34;</span> RawSample <span class="m">9</span>
</span></span><span class="line"><span class="cl">xsetwacom --set <span class="s2">&#34;Wacom Intuos PT S Pen eraser&#34;</span> Suppress <span class="m">10</span>
</span></span></code></pre></div><h2 id="mapping-of-the-tablet-buttons">Mapping of the tablet buttons</h2>
<p>There are some buttons on the tablet. I find the most useful thing to do is to map them to mouse buttons so that I can click more precisely. I find hovering over a selection and using the other hand to press the buttons makes me more precise. You can also map them to any key or combination of keys.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-sh" data-lang="sh"><span class="line"><span class="cl"><span class="c1"># the pad of my tablet has 4 buttons</span>
</span></span><span class="line"><span class="cl"><span class="c1"># the mapping is a bit weird because Xinput reserves some buttons</span>
</span></span><span class="line"><span class="cl"><span class="c1"># https://github.com/linuxwacom/xf86-input-wacom/wiki/Tablet-Configuration-1%3A-xsetwacom-and-xorg.conf</span>
</span></span><span class="line"><span class="cl"><span class="c1">#</span>
</span></span><span class="line"><span class="cl"><span class="c1">#  [ button 3 ]               [ button 9 ]</span>
</span></span><span class="line"><span class="cl"><span class="c1">#  [ button 1 ]               [ button 8 ]</span>
</span></span><span class="line"><span class="cl"><span class="c1">#</span>
</span></span><span class="line"><span class="cl">xsetwacom <span class="nb">set</span> <span class="s2">&#34;Wacom Intuos PT S Pad pad&#34;</span> Button <span class="m">9</span> <span class="s2">&#34;key +ctrl z -ctrl&#34;</span>  <span class="c1"># undo</span>
</span></span><span class="line"><span class="cl">xsetwacom <span class="nb">set</span> <span class="s2">&#34;Wacom Intuos PT S Pad pad&#34;</span> Button <span class="m">8</span> <span class="m">2</span>  <span class="c1"># middle button</span>
</span></span><span class="line"><span class="cl">xsetwacom <span class="nb">set</span> <span class="s2">&#34;Wacom Intuos PT S Pad pad&#34;</span> button <span class="m">1</span> <span class="m">1</span>  <span class="c1"># mouse click</span>
</span></span><span class="line"><span class="cl">xsetwacom <span class="nb">set</span> <span class="s2">&#34;Wacom Intuos PT S Pad pad&#34;</span> button <span class="m">3</span> <span class="m">2</span>  <span class="c1"># middle button</span>
</span></span></code></pre></div><p>You can use trial and error to find which buttons correspond to which numbers. Note the mapping for the &lsquo;undo&rsquo; functionality, it&rsquo;s equivalent to saying &ldquo;press control, while holding it press z, then release control&rdquo;</p>
<h2 id="mapping-of-pen-buttons">Mapping of pen buttons</h2>
<p>You can map the buttons on the pen itself to various functions.</p>
<p>For years one feature I missed was the ability to scroll just using the pen. The way this works is I press on the button on the side of the pen (which is very ergonomic) and then press with the pen on the tablet and move up and down. Works like a charm as a relaxed way of scrolling. This is called &ldquo;pan scroll&rdquo;, I have seen it called &ldquo;drag to scroll&rdquo; too and has worked in Linux for a couple of years now and it&rsquo;s implemented as a button mapping.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-sh" data-lang="sh"><span class="line"><span class="cl"><span class="c1"># pan scroll (press lower button + click and drag to scroll)</span>
</span></span><span class="line"><span class="cl">xsetwacom --set <span class="s2">&#34;Wacom Intuos PT S Pen stylus&#34;</span> button <span class="m">2</span> <span class="s2">&#34;pan&#34;</span>
</span></span><span class="line"><span class="cl">xsetwacom --set <span class="s2">&#34;Wacom Intuos PT S Pen stylus&#34;</span> <span class="s2">&#34;PanScrollThreshold&#34;</span> <span class="m">200</span>
</span></span></code></pre></div><p>I leave the other buttons as they are, which is the tip of the button acts as a &rsquo;left click&rsquo; and the second button on the side acts as a right click. This particular pen can also be used as an eraser - so you can change the eraser mapping too. Defaults work fine for me.</p>
<h2 id="touch-and-multi-touch-fusuma">Touch and multi-touch (fusuma)</h2>
<p>Without doing anything you get functional trackpad functionality on Wacom touch models. For mine you get standard movement, tap to click, tap with two fingers to right click and what I can best describe as &ldquo;tap + release + tap again and move&rdquo; to select or drag, plus scrolling by using two fingers up and down the tablet. Some distributions enable also going forwards and backwards in browsers by sliding both fingers left or right, while the most common case seems to enable scrolling left and right.</p>
<p>There&rsquo;s a few multi touch frameworks you can use to extend what&rsquo;s possible. I&rsquo;m currently using <a href="https://github.com/iberianpig/fusuma">fusuma</a>, I simply followed the instructions to set it up and then launch it as part of my window manager startup. It can do a lot more than what I need so my configuration is very simple:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-sh" data-lang="sh"><span class="line"><span class="cl">$ cat ~/.config/fusuma/config.yml
</span></span><span class="line"><span class="cl">swipe:
</span></span><span class="line"><span class="cl">  3:
</span></span><span class="line"><span class="cl">    left:
</span></span><span class="line"><span class="cl">      sendkey: <span class="s2">&#34;LEFTALT+RIGHT&#34;</span> <span class="c1"># History forward</span>
</span></span><span class="line"><span class="cl">    right:
</span></span><span class="line"><span class="cl">      sendkey: <span class="s2">&#34;LEFTALT+LEFT&#34;</span> <span class="c1"># History back</span>
</span></span><span class="line"><span class="cl">    up:
</span></span><span class="line"><span class="cl">      sendkey: <span class="s2">&#34;LEFTMETA&#34;</span> <span class="c1"># Activity</span>
</span></span><span class="line"><span class="cl">  4:
</span></span><span class="line"><span class="cl">    left:
</span></span><span class="line"><span class="cl">      sendkey: <span class="s2">&#34;LEFTALT+LEFTMETA+LEFT&#34;</span>
</span></span><span class="line"><span class="cl">    right:
</span></span><span class="line"><span class="cl">      sendkey: <span class="s2">&#34;LEFTALT+LEFTMETA+RIGHT&#34;</span>
</span></span><span class="line"><span class="cl">pinch:
</span></span><span class="line"><span class="cl">  in:
</span></span><span class="line"><span class="cl">    command: <span class="s2">&#34;xdotool keydown ctrl click 4 keyup ctrl&#34;</span> <span class="c1"># Zoom in</span>
</span></span><span class="line"><span class="cl">  out:
</span></span><span class="line"><span class="cl">    command: <span class="s2">&#34;xdotool keydown ctrl click 5 keyup ctrl&#34;</span> <span class="c1"># Zoom out</span>
</span></span></code></pre></div><p>Basically I use four fingers to move between workspaces (I have mapped those keys in my window manager to switch workspaces) and three fingers to go back/forwards in browsers. I have pinch configured but it&rsquo;s not very practical to be honest.</p>
<p>Here you can really play with whatever fits best with your preferences and window manager. Note that you can issue extended complicated commands via <a href="https://www.linux.org/threads/xdotool-keyboard.10528/">xdotool</a> in a similar way to what linuxwacom can already do by itself.</p>
<p>That&rsquo;s it. This is what works for me so far, feel free to ping me if you get stuck setting up something.</p>
]]></content>
  </entry>
  <entry>
    <title>Working from home: Pandemia Edition</title>
    <link href="https://gatillos.com/yay/2020/04/02/paul-the-weekly-developers-call/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2020/04/02/paul-the-weekly-developers-call/</id>
    <updated>2020-04-02T19:00:00&#43;01:00</updated>
    <content type="html"><![CDATA[<p>For some, things haven&rsquo;t changed that much.</p>
]]></content>
  </entry>
  <entry>
    <title>Working from home: Pandemia Edition</title>
    <link href="https://gatillos.com/yay/2020/03/30/working-from-home-pandemia-edition/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2020/03/30/working-from-home-pandemia-edition/</id>
    <updated>2020-03-30T07:00:00&#43;01:00</updated>
    <content type="html"><![CDATA[<p>I&rsquo;ll see if I can post some simple comics like this, to lighten the mood a bit.</p>
]]></content>
  </entry>
  <entry>
    <title>Wacom and Wayland: tweaks</title>
    <link href="https://gatillos.com/yay/2018/12/31/wacom-wayland-invisible-cursor/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2018/12/31/wacom-wayland-invisible-cursor/</id>
    <updated>2018-12-31T09:23:10Z</updated>
    <content type="html"><![CDATA[<p>Until very recently you couldn&rsquo;t really use a Wacom tablet on a Linux desktop that was using Wayland instead of Xorg. There is a major difference between X and Wayland in terms of tablets:</p>
<ul>
<li>Wayland supports tablet and other pointing devices as separate inputs</li>
</ul>
<p>Previously we have been able to simply have the pencil move the main cursor whenever it gets close to the tablet. This worked fine but the Wayland way is actually better and allows for other functionality, unfortunately it means applications needed to be updated to be multiple cursor aware.</p>
<p>Until recently, xwayland (the component that translates Wayland events to X events for older applications) wasn&rsquo;t able to transform tablet events at all, since the Wayland tablet specification wasn&rsquo;t finished.</p>
<p>Things have improved a lot and now a default installation of Gnome Shell (in this case in Ubuntu) <em>mostly</em> works, but in my case at least it still needed a simple tweak that is not particularly easy to guess. Documenting it here for posterity:</p>
<ul>
<li>The cursor is invisible. You can see your mouse cursor (if you have an additional mouse or trackpad), but the Wacom cursor is not visible. Clicking on things does indicate it is actually working but simply not rendering.</li>
</ul>
<pre tabindex="0"><code>gsettings set org.gnome.settings-daemon.plugins.cursor active false
</code></pre><p><strong>Explanation</strong>: There is a running plugin in Gnome Shell sessions called &ldquo;the cursor plugin&rdquo; that apparently tries to help by hiding inactive cursors. Whatever it does, it breaks the Wacom cursor, but since it&rsquo;s not an essential component we can just disable it (set it to false) which is what the above command does. Set it to <code>true</code> to revert.</p>
]]></content>
  </entry>
  <entry>
    <title>Inktober 2018 Recap: Drawing and cartoon illustration on an iPad Pro</title>
    <link href="https://gatillos.com/yay/2018/12/17/inktober-2018-recap/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2018/12/17/inktober-2018-recap/</id>
    <updated>2018-12-17T16:23:10Z</updated>
    <content type="html"><![CDATA[<p>A bit late for an Inktober recap but here it goes. I participated in <a href="https://inktober.com/">Inktober 2018</a> which is a loose initiative to encourage drawing aficionados to draw one ink drawing every day for a month. Originally I think part of the idea came from promoting actual ink and paper usage, but it&rsquo;s quite open to digital solutions too. In my case I was interested in trying out an iPad Pro with an Apple Pencil that I had been given recently, and seeing what that could be used for.</p>
<div class="post-image"><a href="https://gatillos.com/yay/2018/12/17/inktober-2018-recap/25_Prickly_Inktober2018.png"><img 
class="" title="Tranquil" src="https://gatillos.com/yay/2018/12/17/inktober-2018-recap/25_Prickly_Inktober2018.png" alt="" width="320" height="240"></a></div>
<div class="post-image"><a href="https://gatillos.com/yay/2018/12/17/inktober-2018-recap/05-chicken.png"><img 
class="" title="Tranquil" src="https://gatillos.com/yay/2018/12/17/inktober-2018-recap/05-chicken.png" alt="" width="640" height="470"></a></div>
<div class="post-image"><a href="https://gatillos.com/yay/2018/12/17/inktober-2018-recap/31_slice_inktober2018.png"><img 
class="" title="Tranquil" src="https://gatillos.com/yay/2018/12/17/inktober-2018-recap/31_slice_inktober2018.png" alt="" width="320" height="240"></a></div>
<div class="post-image"><a href="https://gatillos.com/yay/2018/12/17/inktober-2018-recap/29_double_inktober2018.png"><img 
class="" title="Tranquil" src="https://gatillos.com/yay/2018/12/17/inktober-2018-recap/29_double_inktober2018.png" alt="" width="320" height="240"></a></div>
<div class="post-image"><a href="https://gatillos.com/yay/2018/12/17/inktober-2018-recap/26_Stretch_Inktober2018.png"><img 
class="" title="Tranquil" src="https://gatillos.com/yay/2018/12/17/inktober-2018-recap/26_Stretch_Inktober2018.png" alt="" width="320" height="240"></a></div>
<p>From others I already knew one of the biggest issues is having a work flow involving an iPad, as it&rsquo;s a very closed system that is fighting you a lot of the way. Thinks have improved now that Apple introduced the concept of &ldquo;Files&rdquo; into the operating system, believe it or not that wasn&rsquo;t a thing until recently. Now you can have your various clouds providers appear as a file system and things are slightly easier. It is still a pain to work with.</p>
<p>I decided I wanted to try as many tools as I could get my hands on. Along the way I was posting to twitter as a kind of public commitment to continue. You can see all my <a href="https://twitter.com/search?q=from%3Aosuka%20%23inktober&amp;src=typd">posts following this link</a></p>
<h2 id="tools-i-examined">Tools I examined</h2>
<ul>
<li>
<p>Procreate:
<a href="https://gatillos.com/yay/2018/12/17/inktober-2018-recap/01-poisonous.png">Poisonous</a>,
<a href="https://gatillos.com/yay/2018/12/17/inktober-2018-recap/05-chicken.png">Chicken</a>,
<a href="https://gatillos.com/yay/2018/12/17/inktober-2018-recap/15-weak.png">Weak</a>,
<a href="https://gatillos.com/yay/2018/12/17/inktober-2018-recap/07-exhausted.png">Exhausted</a>,
<a href="https://gatillos.com/yay/2018/12/17/inktober-2018-recap/24_Chop_Inktober2018.png">Chop</a>,
<a href="https://gatillos.com/yay/2018/12/17/inktober-2018-recap/25_Prickly_Inktober2018.png">Prickly</a>,
<a href="https://gatillos.com/yay/2018/12/17/inktober-2018-recap/26_Stretch_Inktober2018.png">Stretch</a>,
<a href="https://gatillos.com/yay/2018/12/17/inktober-2018-recap/27_Thunder_Inktober2018.png">Thunder</a>,
<a href="https://gatillos.com/yay/2018/12/17/inktober-2018-recap/29_double_inktober2018.png">Double</a>,
<a href="https://gatillos.com/yay/2018/12/17/inktober-2018-recap/28_gift_inktober2018.png">Gift</a>,
<a href="https://gatillos.com/yay/2018/12/17/inktober-2018-recap/30_jolt_inktober2018.png">Jolt</a>,
<a href="https://gatillos.com/yay/2018/12/17/inktober-2018-recap/31_slice_inktober2018.png">Slice</a></p>
</li>
<li>
<p>Pixelmator:
<a href="https://gatillos.com/yay/2018/12/17/inktober-2018-recap/12-whale.png">Whale</a></p>
</li>
<li>
<p>MediBang Paint:
<a href="https://gatillos.com/yay/2018/12/17/inktober-2018-recap/10-flowing.png">Flowing</a>,
<a href="https://gatillos.com/yay/2018/12/17/inktober-2018-recap/09-precious.png">Precious</a></p>
</li>
<li>
<p>Inkscape (PC):
<a href="https://gatillos.com/yay/2018/12/17/inktober-2018-recap/06-drooling.png">Drooling</a></p>
</li>
<li>
<p>Autodesk Sketchbook:
<a href="https://gatillos.com/yay/2018/12/17/inktober-2018-recap/03-roasted.png">Roasted</a>,
<a href="https://gatillos.com/yay/2018/12/17/inktober-2018-recap/04-spell.png">Spell</a>,
<a href="https://gatillos.com/yay/2018/12/17/inktober-2018-recap/07-exhausted.png">Cruel</a>,
<a href="https://gatillos.com/yay/2018/12/17/inktober-2018-recap/08-star.png">Star</a>,
<a href="https://gatillos.com/yay/2018/12/17/inktober-2018-recap/14-clock.png">Clock</a>,
<a href="https://gatillos.com/yay/2018/12/17/inktober-2018-recap/13-guarded.png">Guarded</a>,
<a href="https://gatillos.com/yay/2018/12/17/inktober-2018-recap/17-swollen-inktober2018.png">Swollen</a>,
<a href="https://gatillos.com/yay/2018/12/17/inktober-2018-recap/19-scorched-inktober2018.png">Scorched</a>,
<a href="https://gatillos.com/yay/2018/12/17/inktober-2018-recap/21-drain-inktober2018.png">Drain</a></p>
</li>
<li>
<p>Vectornator:
<a href="https://gatillos.com/yay/2018/12/17/inktober-2018-recap/16_Angular_Inktober2018.png">Angular</a>,
<a href="https://gatillos.com/yay/2018/12/17/inktober-2018-recap/18-bottle-inktober2018.png">Bottle</a>,
<a href="https://gatillos.com/yay/2018/12/17/inktober-2018-recap/20-breakable-inktober2018.png">Breakable</a>,
<a href="https://gatillos.com/yay/2018/12/17/inktober-2018-recap/23-muddy-inktober2018.png">Muddy</a></p>
</li>
<li>
<p>Adobe Illustrator Draw:
<a href="https://gatillos.com/yay/2018/12/17/inktober-2018-recap/02-tranquil_c.png">Tranquil</a>
<a href="https://gatillos.com/yay/2018/12/17/inktober-2018-recap/22-expensive-inktober2018.png">Expensive</a></p>
</li>
<li>
<p>Affinity Designer, Inspire Pro and Pixelmator:
Only tried after the Inktober challenge.</p>
</li>
</ul>
<h2 id="veredict">Veredict</h2>
<p>My goal with this whole Inktober thing was to get a bit again into drawing, as I left it for too long. It was just an excuse as any other.</p>
<p>I did find that as of today, an iPad Pro with a Pencil is great for sketching, great for painting but not so great for doing the whole process up until publishing. Some things like handling a lot of images and group them in collections is a sub par experience.</p>
<p>Handling of a lot of files is a horrible experience, most dialogs to choose images seem to show a preview of the file and truncate names (really bad when you have similar versions of a drawing and you need to tell one from the other), they tend to forget were you where and you find yourself using the cumbersome folder selection dialog to find where your image is.</p>
<p>I also found that drafting on paper is still much easier for me than drafting on the iPad directly. The surface of an iPad is glass and the feel is nowhere near paper. That said, sketching something on a piece of paper, taking a high quality picture with an iPad and then working over it is a very nice work flow that works better than scanning and importing on a more traditional setup.</p>
<p>Oh, if you are doubting whether to get an iPad Pro or a Microsoft Surface: iPad Pro all the time. I&rsquo;ve had a Surface SP4 and that has the worst of both worlds. Also, the debate between 12.9 and 10.5 inches: get the 12.9. It is not as big as it seems.</p>
<h3 id="raster-drawings">Raster drawings</h3>
<p>For my particular style (I&rsquo;m not that great at drawing), I found Procreate to be one of the best application overall. You can clearly see this was thought for the iPad Pro rather than being an app retrofitted for it. It&rsquo;s the most intuitive and easy to use of them all.</p>
<p>You can certainly do great drawings with all of them but as you can see by the results, the nicest images for me seemed to correlate with when I was using Procreate.</p>
<h3 id="vector-drawings">Vector drawings</h3>
<p>That said, I&rsquo;m a big fan of vector graphics for comics, I like to be able to stretch my drawings and transform them and just play with segments of a drawing. For comic strips it&rsquo;s also very handy if you have to repeat the same character in similar positions. You can do a similar thing with raster layers but for me it&rsquo;s never been easy. I tried Adobe Draw, Vectornator and after Inktober finished I&rsquo;ve been also trying Affinity Designer.</p>
<ul>
<li>Adobe Draw is a poor man&rsquo;s Illustrator, completely tied to the Adobe Creative Cloud, which needs an expensive subscription. For people like me that do this as a hobby and/or that have a mostly hate-hate relationship with Adobe (horrible customer service), that is simply not an option.</li>
<li>Vectornator has an amazingly easy to use interface and it&rsquo;s a great program on its own.</li>
<li>Affinity Designer: in terms of work flow I found it worked the best, offering me more options to save and share. I have chosen this for Vector drawing going forward.</li>
</ul>
<h3 id="issues">Issues</h3>
<p>Font management is a gigantic mess on an iPad Pro. Either your tool has its own font management or you can import fonts individually (which is really annoying) using some applications. Affinity Designer seems to have a nice font manager though.</p>
<p>Moving from one application to the other is terribly inefficient, most of the time I found myself having to save as a PNG to Dropbox and then importing on the other app.</p>
<p>SVGs generated by the vector tools work pretty well in Inkscape with a big problem: text management. Basically there is no standard in SVG for flowing text. Inkscape implemented a version of what was going to be the standard but that later changed and currently everybody seems to do their own thing. This has been a big pain point for me since my little comics all use Inkscape&rsquo;s text flowing and don&rsquo;t render correctly. Moving to handwritten text seems to be the easiest option but I publish both in Spanish and in English and that&rsquo;s a lot of lettering.</p>
]]></content>
  </entry>
  <entry>
    <title>Inktober 2018 - 2 - tranquil</title>
    <link href="https://gatillos.com/yay/2018/10/02/inktober-2018-2-tranquil/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2018/10/02/inktober-2018-2-tranquil/</id>
    <updated>2018-10-02T21:23:10Z</updated>
    <content type="html"><![CDATA[<p>Drawing using Adobe Draw on iPad Pro with Apple Pencil.</p>
<div class="post-image"><a href="https://gatillos.com/yay/2018/10/02/inktober-2018-2-tranquil/02-tranquil_c.png"><img 
class="" title="Tranquil" src="https://gatillos.com/yay/2018/10/02/inktober-2018-2-tranquil/02-tranquil_c.png" alt="" width="640" height="470"></a></div>
]]></content>
  </entry>
  <entry>
    <title>Inktober 2018 - 1 - poisonous</title>
    <link href="https://gatillos.com/yay/2018/10/01/inktober-2018-1-poisonous/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2018/10/01/inktober-2018-1-poisonous/</id>
    <updated>2018-10-01T21:23:55Z</updated>
    <content type="html"><![CDATA[<p>Will do some quick drawings for <a href="https://inktober.com/">Inktober 2018</a>, which is a loose movement that asks for 31 ink drawings during the 31 days of the month of October. They are flexible between digital and actual ink (actual ink was the original goal though). They give a word to be used as a &lsquo;prompt&rsquo; for each day. This one is &ldquo;Poisonous&rdquo;. I used Procreate on an iPad Pro with the Apple pencil.</p>
<div class="post-image"><a href="https://gatillos.com/yay/2018/10/01/inktober-2018-1-poisonous/01-poisonous.png"><img 
class="" title="Poisonous" src="https://gatillos.com/yay/2018/10/01/inktober-2018-1-poisonous/01-poisonous.png" alt="" width="640" height="470"></a></div>
]]></content>
  </entry>
  <entry>
    <title>Migrating a jekyll-based project to gitlab</title>
    <link href="https://gatillos.com/yay/2018/06/05/migrating-a-jekyll-based-project-to-gitlab/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2018/06/05/migrating-a-jekyll-based-project-to-gitlab/</id>
    <updated>2018-06-05T08:32:14Z</updated>
    <content type="html"><![CDATA[<p>Github has worked great for me over the past many years, and I&rsquo;ve been a paying
customer for about 8 years. That&rsquo;s not likely to change but I took the recent
acquisition by Microsoft as a prompt to explore other options as I saw many comments
praising gitlab, and specifically their continuous integration options.</p>
<p>I found that really interesting as I had found the plugin restrictions in Github
very limiting - I want to be able to run preprocesses on my files so I don&rsquo;t have
to type or copy and paste so much.</p>
<p>This post explores how I migrated <a href="https://onlydognews.com">one of my sites</a> there.</p>
<p><strong>Outline of the process</strong></p>
<ol>
<li>Import old project (PRs, issues etc)</li>
<li>Create a .gitlab-ci.yml file (build pipeline) and build</li>
<li>Check that page is live under gitlab.io domain</li>
<li>Add a custom domain and SSL support using Let&rsquo;s Encrypt (certbot)</li>
<li>&hellip;</li>
<li>PROFIT</li>
</ol>
<p>Optionally: run your own runner to do the build (future post).</p>
<h3 id="import-old-project">Import old project</h3>
<p><strong>Option 1:</strong> Import using Gitlab&rsquo;s wizard. Very easy but you give access to all
projects you have access to. Some client companies may not be fine with it. At
the very least remember to disable access on Github settings when you&rsquo;re done with the
import.</p>
<div class="post-image"><a href="https://gatillos.com/yay/2018/06/05/migrating-a-jekyll-based-project-to-gitlab/2018-06-05-gitlab-import-01.png"><img class="" title="Importing steps" src="https://gatillos.com/yay/2018/06/05/migrating-a-jekyll-based-project-to-gitlab/2018-06-05-gitlab-import-01.png" alt="" width="360" height="101"></a></div>
<div class="post-image"><a href="https://gatillos.com/yay/2018/06/05/migrating-a-jekyll-based-project-to-gitlab/2018-06-05-gitlab-import-02.png"><img 
class="" title="Importing steps" src="https://gatillos.com/yay/2018/06/05/migrating-a-jekyll-based-project-to-gitlab/2018-06-05-gitlab-import-02.png" alt="" width="360" height="101"></a></div>
<p><strong>Option 2:</strong> If you just need the git history.</p>
<ul>
<li>create a new empty repo in gitlab,</li>
<li>add that repo as a new remote on your current github repo local copy,</li>
<li>push to the remote,</li>
<li>remove your local repo copy, clone the gitlab one and you should have everything
there.</li>
</ul>
<h3 id="create-a-pipeline-job-definition">Create a pipeline job definition</h3>
<p>We will be creating a file called <code>.gitlab-ci.yml</code> on the root folder.</p>
<h4 id="very-brief-introduction-to-gitlabs-pipelines">Very brief introduction to gitlab&rsquo;s pipelines</h4>
<ul>
<li>They are based on a YAML file describing the steps and scripts to run</li>
<li>They run inside &lsquo;runners&rsquo; that create containers to run the pipeline jobs</li>
<li>There are shared runners owned by Gitlab but you can also have local runners</li>
<li>Jobs can generate artifacts that pass from one step to the other or are end
results</li>
</ul>
<h4 id="brief-introduction-to-gitlabs-pages">Brief introduction to Gitlab&rsquo;s Pages</h4>
<ul>
<li>If there is a job called <code>pages</code> that generates an artifact that contains a
folder called <code>public</code>, everything under that folder will be served as static
contents</li>
<li>By default, this will be served under <a href="https://GITLABUSERNAME.gitlab.io/PROJECTNAME">https://GITLABUSERNAME.gitlab.io/PROJECTNAME</a></li>
</ul>
<h3 id="example-file-for-a-jekyll-project-using-ruby-244">Example file for a jekyll project using ruby 2.4.4</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nt">image</span><span class="p">:</span><span class="w"> </span><span class="l">ruby:2.4.4</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">variables</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">JEKYLL_ENV</span><span class="p">:</span><span class="w"> </span><span class="l">production</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">before_script</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span>- <span class="l">bundle install</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">pages</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">stage</span><span class="p">:</span><span class="w"> </span><span class="l">deploy</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">script</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span>- <span class="l">bundle exec jekyll build -d public</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">artifacts</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">paths</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span>- <span class="l">public</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">only</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span>- <span class="l">master</span><span class="w">
</span></span></span></code></pre></div><p>and here&rsquo;s the <code>Gemfile</code> I was used for jekyll already:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-ruby" data-lang="ruby"><span class="line"><span class="cl"><span class="n">source</span> <span class="s2">&#34;https://rubygems.org&#34;</span>
</span></span><span class="line"><span class="cl"><span class="n">ruby</span> <span class="s2">&#34;2.4.4&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">gem</span> <span class="s1">&#39;jekyll&#39;</span><span class="p">,</span><span class="s1">&#39;3.6.2&#39;</span>
</span></span><span class="line"><span class="cl"><span class="n">gem</span> <span class="s1">&#39;jekyll-paginate&#39;</span>
</span></span></code></pre></div><p>You should never lose the ability to build locally, so keep the pipeline script
ultra simple.</p>
<p>It&rsquo;s important to match the ruby versions between Gemfile and pipeline, otherwise the runner would be launched with a different version.</p>
<h2 id="check-your-page-under-gitlabio-domain">Check your page under gitlab.io domain</h2>
<p>Just by pushing the CI file it will create the pipeline and it will build every time there is a push to master.</p>
<p>After a first build passes you will be able to access the site. If you don&rsquo;t, check where you went wrong as all the rest is meaningless until you get to this stage.</p>
<blockquote>
<p>Now you can rest, keep playing with your site and check that everything looks ok. Depending on how you implemented it, it may not be able to find CSS and images, but don&rsquo;t panic - just use view source to check the URLs will be ok when it&rsquo;s in its own domain (or fix your jekyll config so that it is)</p>
</blockquote>
<h2 id="add-a-custom-domain-and-ssl-support">Add a custom domain and SSL support</h2>
<p>A nice github feature is that you, simply by checking a box, get a valid SSL certificate (they do internally all the let&rsquo;s encrypt domain validation). On Gitlab pages this is a manual process. You&rsquo;ll find lots of guides for this, but here&rsquo;s what I did (word of advice: the best approach is probably to do first adding a domain without SSL and then adding SSL support, but I did all at the same time)</p>
<p>Install certbot:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">apt install certbot
</span></span></code></pre></div><p>You can use yum, brew or whatever your poison is.</p>
<p>Decide of a home to store your certificates. I decided this certificate is pretty much irrelevant so put it inside the container itself:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="nb">export</span> <span class="nv">CERTDIR</span><span class="o">=</span>~/onlydognews.com/certs
</span></span></code></pre></div><p>Generate a certificate request and send it to letsencrypt:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">certbot certonly -d onlydognews.com --work-dir <span class="si">${</span><span class="nv">CERTDIR</span><span class="si">}</span>/work/ --logs-dir <span class="si">${</span><span class="nv">CERTDIR</span><span class="si">}</span>/logs/ --config-dir <span class="si">${</span><span class="nv">CERTDIR</span><span class="si">}</span>/config/ --manual
</span></span></code></pre></div><p>Output:</p>
<pre tabindex="0"><code>...
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for onlydognews.com
...
Are you OK with your IP being logged?
-------------------------------------------------------------------------------
(Y)es/(N)o: y

-------------------------------------------------------------------------------
Create a file containing just this data:

dasjlkdjasiojXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.dasdjskljxp-21rwefQQEWr8

And make it available on your web server at this URL:

http://onlydognews.com/.well-known/acme-challenge/jdaslkdjsaXXXXXXXXXXXXXXXXXXjklxjklxj

-------------------------------------------------------------------------------
Press Enter to Continue
</code></pre><p>This turned out to be a bit tricky since my domain was still pointing to the old Github project. So I cloned that repo and added a commit to publish that file, in order to verify my domain.</p>
<p>I added this to <code>_config.yml</code>, the Jekyll configuration file:</p>
<pre tabindex="0"><code>include: [.well-known]
</code></pre><p>I created a new file under the path instructed by cerbot and pushed both changes upstream, which made the file available online. Then continued the certbot process.</p>
<pre tabindex="0"><code>Waiting for verification...
Cleaning up challenges
Non-standard path(s), might not work with crontab installed by your operating system package manager

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   .../_certs/config/live/onlydognews.com/fullchain.pem
   Your key file has been saved at:
   .../_certs/config/live/onlydognews.com/privkey.pem
   Your cert will expire on 2018-09-02. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot
   again. To non-interactively renew *all* of your certificates, run
   &#34;certbot renew&#34;
</code></pre><blockquote>
<p>There&rsquo;s an important bit there, we will have to remember to renew the certificate in three months. Certbot can automatically update some servers but not Gitlab as far as I&rsquo;m aware.</p>
</blockquote>
<h3 id="the-result-of-all-this-setup-process-is">The result of all this setup process is</h3>
<p>&lsquo;Live&rsquo; folder</p>
<ul>
<li><code>DOMAIN/privkey.pem</code>: the private key for your certificate</li>
<li><code>DOMAIN/fullchain.pem</code>: the certificate file used in most server software.</li>
<li><code>DOMAIN/chain.pem</code>: we don&rsquo;t need it</li>
<li><code>DOMAIN/cert.pem</code>: we don&rsquo;t need it</li>
</ul>
<p>&lsquo;Renewal&rsquo; folder:</p>
<ul>
<li><code>DOMAIN.conf</code>: File that certbot will use for renewal</li>
</ul>
<p>&lsquo;Archive&rsquo; folder: History of all the certificates generated. This will contain just the one just created.</p>
<p>&lsquo;Renewal-hooks&rsquo; folder: Empty folders for deploy, pre and post hooks.</p>
<p>&lsquo;Keys&rsquo; folder: Certificate private keys used. I have a few because I tried this process a few times.</p>
<p>&lsquo;CSR&rsquo; folder: Certificate requests used. Again, one for every try.</p>
<p>&lsquo;Accounts&rsquo; folder: Output of the registration process</p>
<ul>
<li><code>meta.json</code>: creation date, host name that issued the request</li>
<li><code>private_key.json</code>: private key used during registration</li>
<li><code>regr.json</code>: data used during registration, contact details, terms and conditions</li>
</ul>
<h2 id="installation-into-gitlab">Installation into Gitlab</h2>
<p>Go to your project/pages/domains/new</p>
<p>Check the enforce SSL option and add your domain name</p>
<div class="post-image"><a href="https://gatillos.com/yay/2018/06/05/migrating-a-jekyll-based-project-to-gitlab/2018-06-05-gitlab-domain.png"><img 
class="" title="Gitlab Pages" src="https://gatillos.com/yay/2018/06/05/migrating-a-jekyll-based-project-to-gitlab/2018-06-05-gitlab-domain.png" alt="" width="360" height="101"></a></div>
<p>In Certificate(PEM) add the <code>fullchain.pem</code> text contents</p>
<p>In Key(PEM) add the <code>privkey.pem</code> text contents</p>
<p>It will show:</p>
<blockquote>
<p>This domain is not verified. You will need to verify ownership before access is enabled.</p>
</blockquote>
<p>To do so, from your DNS provider create a new DNS record:</p>
<ul>
<li>Type: TXT</li>
<li>Name: _gitlab-pages-verification-code</li>
<li>Value: gitlab-pages-verification-code=XXXXXXXXXXXXXXXXXXXXXXXXXXXX</li>
</ul>
<blockquote>
<p>Important: the gitlab page displays the full Name (including the domain, as in <code>_gitlab-pages-verification-code.YOURDOMAIN.com</code>), but on the DNS settings you just add the host part</p>
</blockquote>
<p>Now we can finally move our domain to the new one. In the settings page Gitlab will show a <code>CNAME</code> entry that you should use. This is fine if your site is on a subdomain (for example <code>www</code>), but if it&rsquo;s the root (as in <code>gatillos.com</code>), you can&rsquo;t create a CNAME of it. This is a DNS restriction that some people are not aware of: the root domain is called APEX domain and is used by a number of things. If you create a CNAME of it you can lose control of MX and similar registers.</p>
<p>To find out the IP address you need, simply lookup the domain showed on the settings page:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">dig +short YOURCNAME.gitlab.io
</span></span><span class="line"><span class="cl">52.167.214.135
</span></span></code></pre></div><p>Which means we need to add an A record on your DNS, something like:</p>
<pre tabindex="0"><code>a   @   52.167.214.135   1 hour   
</code></pre><p>Final result:</p>
<div class="post-image"><a href="https://gatillos.com/yay/2018/06/05/migrating-a-jekyll-based-project-to-gitlab/2018-06-05-gitlab-domain-final.png"><img 
class="" title="Final result" src="https://gatillos.com/yay/2018/06/05/migrating-a-jekyll-based-project-to-gitlab/2018-06-05-gitlab-domain-final.png" alt="" width="360" height="101"></a></div>]]></content>
  </entry>
  <entry>
    <title>Creating an Apple Time Machine compatible docker container</title>
    <link href="https://gatillos.com/yay/2018/05/28/creating-an-apple-time-machine-compatible-docker-container/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2018/05/28/creating-an-apple-time-machine-compatible-docker-container/</id>
    <updated>2018-05-28T12:33:51Z</updated>
    <content type="html"><![CDATA[<p>If you have a MacBook or similar the easiest backup solution is Time Machine and
having a small server that is always ready to backup is my recommended option,
as using an external disk depends on you remembering to plug it in.</p>
<p>The best option was the AirPort Time Capsule but Apple discontinued it last
month. Nowadays there are quite a few networked hard drives that advertise
support for Time Machine but if you have a Raspberry Pi or a computer that is
mostly on all the time you can just build your own. Plus, you get to launch
other things on that server, including other systems for non-time machine
compatible devices.</p>
<p>In this post I&rsquo;ll just talk about how to setup a Time Machine server using a
docker container.</p>
<p>After trying various containers, I&rsquo;ve settled on
<a href="https://github.com/arve0/docker-timemachine">this one</a>. It hasn&rsquo;t changed in
a while but still works fine.</p>
<p>First, clone the repo, or the fork of it I have under
<a href="https://github.com/osuka/docker-timemachine">my account</a> and build it,
by running this inside your server machine:</p>
<pre tabindex="0"><code>git clone https://github.com/arve0/docker-timemachine
docker build docker-time-machine/ -t local/docker-timemachine
</code></pre><p>You will need docker community edition for that, but I won&rsquo;t go into that here
as it depends on what device you are actually using, it should be as easy as
going <a href="https://www.docker.com/community-edition#/download">to their site</a> and
finding a version.</p>
<blockquote>
<p>On a side note, be aware that docker (the company) is in dire need of a
business model and will try to trick you into trying their bloated products. You
just need the community edition runtime engine.</p>
</blockquote>
<p>Now, decide where you will be storing the backups. If it is an external drive
make sure that it is plugged in before starting the container. Say you want
to store in <code>/media/time-machine</code>.</p>
<p>Then, create a new docker container that will hold your server and the
parameters it needs.</p>
<ol>
<li>
<p>Replace the password below with one that will be used
to allow access to the server (the backups themselves can be encrypted with
a different one). The user name will be <code>TimeMachine</code>.</p>
</li>
<li>
<p>Replace <code>/media/time-machine</code> with the location for your backups</p>
</li>
</ol>
<pre tabindex="0"><code>docker create --name timemachine --restart=always -e &#34;PASSWORD=CHOOSE_ONE&#34; -v /media/time-machine:/backup -p 548:548 --net=host local/docker-timemachine
</code></pre><p>The container above has <code>--net=host</code> which indicates a privileged container and
may be dangerous if it gets hacked although in a normal/personal setup you
won&rsquo;t be making it accessible to the Internet so the risk is minimal. Enabling
it makes the Time Machine server discoverable (ie it shows in Finder). If you
want, you can remove it and just use <code>afp://nameofyourhost</code> to connect, also
if for some reason your server doesn&rsquo;t show in Finder, just go open Finder, then
/Go/Connect To Server and type in that to make it show.</p>
<p>Finally, from you Apple device, launch Time Machine preferences, Click Select
Disk and then select your server. Input user name <code>TimeMachine</code> and your
password and don&rsquo;t forget to select <code>[x] Encrypt backups</code> on the Mac OS X Time
Machine dialog to add another layer of protection.</p>
<h2 id="update-recovery">UPDATE: Recovery</h2>
<p>I finally had to use the time machine backup after a bug in Disk Utility destroyed my partition table (a whole story in itself), and one thing I noticed is that a full recovery from a Time Machine backup is very slow, and anecdotal evidence from twitter peers said this is a problem with Time Machine itself (that affects even Airport based devices etc). My backup was taking about 700GB, including all the history and it was encrypted, I believe TC has to walk through a lot of that data to find the latest versions so it took forever (about 13h), but the worse part is that it kept failing. My recommended solution: don&rsquo;t use time machine to do a full recovery. Simply install a clean system, then launch migration assistant a few times to recover everything, first settings, then your user, then apps. This worked flawlessly.</p>]]></content>
  </entry>
  <entry>
    <title>Creating jekyll post snippets in Sublime Text 3</title>
    <link href="https://gatillos.com/yay/2018/05/27/creating-jekyll-post-snippets-in-sublime-text-3/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2018/05/27/creating-jekyll-post-snippets-in-sublime-text-3/</id>
    <updated>2018-05-27T11:53:29Z</updated>
    <content type="html"><![CDATA[<p>I have now a couple of sites using jekyll, one is this one and another one is
this little news site that simply posts links to
<a href="https://onlydognews.com">happy dog news</a>. So far I&rsquo;ve always created new
posts using a small shell script or simply copying the previous entry and
changing date/title.</p>
<p>Since that is a bit annoying, I decided to try using a plugin in Sublime Text,
and this article explores how to do just that (spoiler: it&rsquo;s all python).</p>
<p>Jekyll templates have a relatively simple structure, based on a mix of
<a href="https://jekyllrb.com/docs/frontmatter/">YAML</a> metadata and
<a href="https://daringfireball.net/projects/markdown/">Markdown</a> contents. For example:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-markdown" data-lang="markdown"><span class="line"><span class="cl">---
</span></span><span class="line"><span class="cl">layout: post
</span></span><span class="line"><span class="cl">title: &#34;Let&#39;s Encrypt support in Dreamhost&#34;
</span></span><span class="line"><span class="cl">categories: [blog]
</span></span><span class="line"><span class="cl">tags: [main]
</span></span><span class="line"><span class="cl">date: 2016-01-31 18:48:32 +0200
</span></span><span class="line"><span class="cl">---
</span></span><span class="line"><span class="cl">First paragraphs that will be shown on list views where you want only an
</span></span><span class="line"><span class="cl">excerpt of the text.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">&lt;!--more--&gt;
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Rest of the article goes here
</span></span></code></pre></div><p>One can add any number of tags to the front matter, and then use them in
templates to add particular behaviours. I use those in comics, for instance,
to indicate the main image of the comic, or if it&rsquo;s a simple reference to a news
article then I include a <code>target-url</code> to the source site.</p>
<p>The file name should include the date of the post, but they are actually
sorted based on the date indicated inside the YAML front matter.</p>
<p>So, long story short, this is how to create a sublime text plugin:</p>
<ol>
<li>Go to Tools/Developer/New Plugin (creates a template file in the right location)</li>
<li>Replace contents with something similar to the code below</li>
<li>Any method ending in <code>Command</code> becomes available (eg &ldquo;NewBlogEntryCommand&rdquo; becomes <code>new_blog_entry</code>).</li>
<li>Save file in the location indicated, name is irrelevant.</li>
<li>Associate the command to a new shortcut: Preferences/Key Bindings and add an entry like:</li>
</ol>
<pre tabindex="0"><code>  {&#34;keys&#34;: [&#34;ctrl+shift+b&#34;], &#34;command&#34;: &#34;new_blog_entry&#34; }
</code></pre><p>Here&rsquo;s the actual code I&rsquo;m using, yours can be simpler or more complex. I&rsquo;m
asking for two parameters from the user: a title and a &rsquo;target url&rsquo;. I will
add thumbnailing capabilities to it soon (similar to what Twitter etc do).</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">sublime</span>
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">sublime_plugin</span>
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">datetime</span>
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">re</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">class</span> <span class="nc">NewBlogEntryCommand</span><span class="p">(</span><span class="n">sublime_plugin</span><span class="o">.</span><span class="n">TextCommand</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="k">def</span> <span class="nf">run</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">edit</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">        <span class="bp">self</span><span class="o">.</span><span class="n">url</span> <span class="o">=</span> <span class="s2">&#34;&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">        <span class="k">def</span> <span class="nf">on_done_url</span><span class="p">(</span><span class="n">input_string</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">            <span class="bp">self</span><span class="o">.</span><span class="n">url</span> <span class="o">=</span> <span class="n">input_string</span>
</span></span><span class="line"><span class="cl">            <span class="bp">self</span><span class="o">.</span><span class="n">thumbnail</span> <span class="o">=</span> <span class="s2">&#34;&#34;</span>  <span class="c1"># todo: fetch</span>
</span></span><span class="line"><span class="cl">            <span class="n">now</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="o">.</span><span class="n">utcnow</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">            <span class="n">targetview</span><span class="o">.</span><span class="n">run_command</span><span class="p">(</span><span class="s2">&#34;insert_snippet&#34;</span><span class="p">,</span> <span class="p">{</span> <span class="s2">&#34;contents&#34;</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">              <span class="s2">&#34;&#34;&#34;---
</span></span></span><span class="line"><span class="cl"><span class="s2">layout: post
</span></span></span><span class="line"><span class="cl"><span class="s2">title: &#34;</span><span class="si">%s</span><span class="s2">&#34;
</span></span></span><span class="line"><span class="cl"><span class="s2">categories: [blog]
</span></span></span><span class="line"><span class="cl"><span class="s2">tags: [main]
</span></span></span><span class="line"><span class="cl"><span class="s2">date: </span><span class="si">%s</span><span class="s2">
</span></span></span><span class="line"><span class="cl"><span class="s2">target-url: </span><span class="si">%s</span><span class="s2">
</span></span></span><span class="line"><span class="cl"><span class="s2">thumbnail: </span><span class="si">%s</span><span class="s2">
</span></span></span><span class="line"><span class="cl"><span class="s2">---
</span></span></span><span class="line"><span class="cl"><span class="s2">Text
</span></span></span><span class="line"><span class="cl"><span class="s2">&lt;!--more--&gt;
</span></span></span><span class="line"><span class="cl"><span class="s2">Text
</span></span></span><span class="line"><span class="cl"><span class="s2">&#34;&#34;&#34;</span>
</span></span><span class="line"><span class="cl">            <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">title</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">               <span class="n">now</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s2">&#34;%Y-%m-</span><span class="si">%d</span><span class="s2">T%H:%M:%S+00:00&#34;</span><span class="p">),</span>
</span></span><span class="line"><span class="cl">               <span class="bp">self</span><span class="o">.</span><span class="n">url</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">               <span class="bp">self</span><span class="o">.</span><span class="n">thumbnail</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">            <span class="p">})</span>
</span></span><span class="line"><span class="cl">            <span class="n">filename</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="sa">r</span><span class="s1">&#39;[^0-9a-z\-_ ]&#39;</span><span class="p">,</span> <span class="s1">&#39;&#39;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">title</span><span class="o">.</span><span class="n">lower</span><span class="p">())</span>
</span></span><span class="line"><span class="cl">            <span class="n">filename</span> <span class="o">=</span> <span class="n">filename</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s1">&#39; &#39;</span><span class="p">,</span> <span class="s1">&#39;-&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">            <span class="n">targetview</span><span class="o">.</span><span class="n">set_name</span><span class="p">(</span><span class="s2">&#34;</span><span class="si">%s</span><span class="s2">-</span><span class="si">%s</span><span class="s2">.markdown&#34;</span> <span class="o">%</span> <span class="p">(</span><span class="n">now</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s2">&#34;%Y-%m-</span><span class="si">%d</span><span class="s2">&#34;</span><span class="p">),</span>
</span></span><span class="line"><span class="cl">              <span class="n">filename</span><span class="p">[:</span><span class="mi">80</span><span class="p">]))</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">        <span class="k">def</span> <span class="nf">on_done</span><span class="p">(</span><span class="n">input_string</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">            <span class="bp">self</span><span class="o">.</span><span class="n">title</span> <span class="o">=</span> <span class="n">input_string</span>
</span></span><span class="line"><span class="cl">            <span class="n">targetwindow</span><span class="o">.</span><span class="n">show_input_panel</span><span class="p">(</span><span class="s2">&#34;Main Url:&#34;</span><span class="p">,</span> <span class="s2">&#34;&#34;</span><span class="p">,</span> <span class="n">on_done_url</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">        <span class="n">window</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">view</span><span class="o">.</span><span class="n">window</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">        <span class="n">targetview</span> <span class="o">=</span> <span class="n">window</span><span class="o">.</span><span class="n">new_file</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">        <span class="n">targetwindow</span> <span class="o">=</span> <span class="n">targetview</span><span class="o">.</span><span class="n">window</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">        <span class="n">targetwindow</span><span class="o">.</span><span class="n">show_input_panel</span><span class="p">(</span><span class="s2">&#34;Blog post title:&#34;</span><span class="p">,</span> <span class="s2">&#34;&#34;</span><span class="p">,</span> <span class="n">on_done</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
</span></span></code></pre></div><p>A couple of notes:</p>
<ol>
<li>Receiving input from the user is asynchronous, so you register a callback</li>
<li>You can add any python code you want, which is quite powerful if you are
doing repetitive tasks.</li>
</ol>]]></content>
  </entry>
  <entry>
    <title>Paul the innovator (81): Ageism</title>
    <link href="https://gatillos.com/yay/2018/01/04/paul-the-innovator-81-ageism/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2018/01/04/paul-the-innovator-81-ageism/</id>
    <updated>2018-01-04T22:30:00&#43;01:00</updated>
    <content type="html"><![CDATA[<span class="multilingual">
<span class="en">It's been a while since the last comic, and I feel old.
</span>
<span class="es">Ha pasado un tiempo desde el último comic, y me siento viejo.
</span>
</span>
]]></content>
  </entry>
  <entry>
    <title>Let&#39;s Encrypt support in Dreamhost</title>
    <link href="https://gatillos.com/yay/2016/01/31/lets-encrypt-dreamhost/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2016/01/31/lets-encrypt-dreamhost/</id>
    <updated>2016-01-31T18:48:32&#43;02:00</updated>
    <content type="html"><![CDATA[<p>It seems that the impossible is happening and free SSL certificates are becoming commonplace.
About time! If you&rsquo;ve hosted sites before you will know how expensive an SSL certificate is,
particularly for small sites like this one where there is no revenue.</p>
<p>Thankfully some big companies have joined in an initiative called <a href="https://letsencrypt.org/">Let&rsquo;s Encrypt</a>,
which does just that: provide you with a free, automatically generated security certificate that is
acccepted by all major browsers.</p>
<p>It&rsquo;s worth mentioning that Amazon is doing exactly the same thing if you host sites there, although
you&rsquo;ll need to be using either an Elastic Load Balancer or Cloudfront CDN, both of which incur costs
(see more at <a href="https://aws.amazon.com/certificate-manager/">Amazon&rsquo;s Certificate Manager</a>).</p>
<p>Even with all these, the process of setting it up is a bit cumbersome, so I was very happy to find
that <a href="https://dreamhost.com">Dreamhost</a>, the hosting server I use for this site, just enabled
one click setup. It&rsquo;s literally one click:</p>
<div class="post-image"><a href="https://gatillos.com/yay/2016/01/31/lets-encrypt-dreamhost/letsencrypt-dreamhost.png"><img class="" title="Click to enlarge" src="https://gatillos.com/yay/2016/01/31/lets-encrypt-dreamhost/letsencrypt-dreamhost.png" alt="" width="490" height="292"></a></div>
<div class="post-image-caption">Enabling SSL with just one click</div>
<p>That&rsquo;s all there is to it. Just a note: you&rsquo;ll have to wait a few minutes for it to take effect. If you try it immediately, it shows as
using a self-signed certificate which obviously is no good. Be patient.</p>
<p>I did have to fix some references to non-ssl links that I had in the site (for instance, including images with an <code>http://</code> prefix). For
most use cases you can replace references to <code>http://</code> with just <code>//</code> and it will work both in http and https modes. Or just use https everywhere.</p>]]></content>
  </entry>
  <entry>
    <title>Paul the innovator (80): Matt the intern 2 - Training</title>
    <link href="https://gatillos.com/yay/2015/06/28/paul-the-innovator-80-matt-the-intern-2/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2015/06/28/paul-the-innovator-80-matt-the-intern-2/</id>
    <updated>2015-06-28T23:50:00&#43;01:00</updated>
    <content type="html"><![CDATA[<span class="multilingual">
<span class="en">Remember, during those first critical weeks where you are in probation, the company is in probation too. Just saying.
</span>
<span class="es">Recuerda, durante esas primeras semánas críticas en que estás en periodo de prueba, la empresa también lo está. No, por nada.
</span>
</span>
]]></content>
  </entry>
  <entry>
    <title>Paul the innovator (79): Matt the intern</title>
    <link href="https://gatillos.com/yay/2015/06/20/paul-the-innovator-79-matt-the-intern/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2015/06/20/paul-the-innovator-79-matt-the-intern/</id>
    <updated>2015-06-20T23:50:00&#43;01:00</updated>
    <content type="html"><![CDATA[<span class="multilingual">
<span class="en">This is the start of a mini series about Matt the intern, and his slow but inexorable descent into the darkness of professional software development. No interns were harmed during the production of this comic.
</span>
<span class="es">Éste es el inicio de una mini serie sobre Matt el becario y su lento pero inexorable descenso a la oscuridad del desarrollo de software profesional. Ningún becario fue lastimado durante la realización de este comic.
</span>
</span>
]]></content>
  </entry>
  <entry>
    <title>Paul the innovator (78): Declining revenue</title>
    <link href="https://gatillos.com/yay/2015/02/09/paul-the-innovator-78-declining-revenue/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2015/02/09/paul-the-innovator-78-declining-revenue/</id>
    <updated>2015-02-09T20:10:00&#43;01:00</updated>
    <content type="html"><![CDATA[<span class="multilingual">
<span class="en">I'm sure this actually exists as a skill in Linkedin. If not, we should start tagging people with it.
</span>
<span class="es">Seguro que esto existe ya como un skill en Linkedin. Si no, deberíamos empezar a tagger a gente con ello.
</span>
</span>
]]></content>
  </entry>
  <entry>
    <title>Paul the innovator (77): Requests</title>
    <link href="https://gatillos.com/yay/2014/11/16/paul-the-innovator-77-requests/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2014/11/16/paul-the-innovator-77-requests/</id>
    <updated>2014-11-16T23:00:00&#43;01:00</updated>
    <content type="html"><![CDATA[<span class="multilingual">
<span class="en">Note, the characters represented in this strip are in no manner or form related to real persons, living or dead. Trust me.
<br><br>
By the way, I just wasted an hour of my life compiling ruby for Yosemite and trying to update this site, which was using Jekyll 0.10 (currently at 2.5). If you see anything broken please shout.
</span>
<span class="es">Nota, los personajes representados en esta tira no tienen relación alguna con personas reales, vivas o fallecidas. Créeme.
<br><br>
Por cierto, acabo de malgastar una hora de mi vida compilando ruby para Yosemite y actualizando esta web, que usaba Jekyll 0.10 (ahora van por la 2.55). Si ves algo roto por favor avisa.
</span>
</span>
]]></content>
  </entry>
  <entry>
    <title>Quick and easy game text images with Inkscape</title>
    <link href="https://gatillos.com/yay/2014/08/31/quick-and-easy-game-text-images-with-inkscape/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2014/08/31/quick-and-easy-game-text-images-with-inkscape/</id>
    <updated>2014-08-31T13:48:32&#43;02:00</updated>
    <content type="html"><![CDATA[<p>I&rsquo;m making a little game using <a href="http://unity3d.com/">Unity</a>, a very simple word game that hopefully I&rsquo;ll soon publish for Android, iPhone and iPad.</p>
<p>Here&rsquo;s the thing, I&rsquo;m not that good a designer but I don&rsquo;t have enough going on to justify hiring a proper one. Good news is, if you&rsquo;re in a similar situation there&rsquo;s hope for you.</p>
<h4 id="hey-i-dont-have-time-to-read-this-thing">Hey I don&rsquo;t have time to read this thing!</h4>
<p>If you scroll below, that will seem like <em>a lot of work</em>.</p>
<p>But think about it this way:</p>
<ol>
<li>This is reusable. You&rsquo;ll only have to do it once.</li>
<li>You can modify effects, colors, font types and see the results <strong>immediately</strong> thanks to clones</li>
<li>Crucially, you can change the text and have a new image in seconds</li>
</ol>
<p>Not convinced? <a href="https://gatillos.com/yay/2014/08/31/quick-and-easy-game-text-images-with-inkscape/game-labels-with-inkscape.svg">download this Inkscape SVG file</a> and start playing with it right away. Change the font, the text, export, enjoy!</p>
<div class="post-image"><a href="https://gatillos.com/yay/2014/08/31/quick-and-easy-game-text-images-with-inkscape/shuffle-for-points-2x.png"><img class="" title="Click to enlarge" src="https://gatillos.com/yay/2014/08/31/quick-and-easy-game-text-images-with-inkscape/shuffle-for-points-2x.png" alt="" width="360" height="101"></a></div>
<h3 id="illustrating-the-problem">Illustrating the problem</h3>
<p>Unity 3D does not support bitmap fonts (not easily at least), so you will be using normal TrueType fonts.</p>
<code>
String text = "Shuffle\nFor Points!";<br/>
Rect textRect = GuiHelper.calculateLabelRect(new Vector2(Screen.width / 2, 1 * Screen.height / 3), text);<br/>
GUI.Label (textRect, text);<br/>
</code>
<p>In this example I&rsquo;m using <code>kenvector_future.ttf</code>, part of <a href="http://opengameart.org/content/tappy-plane">this bundle</a> and made by <a href="http://kenney.nl">Kenney</a> (and on the public domain). It&rsquo;s a nice font, but on a game, using only one colour it feels quite dull.</p>
<p>Take a look:</p>
<div class="post-image"><a href="https://gatillos.com/yay/2014/08/31/quick-and-easy-game-text-images-with-inkscape/01-shuffle-for-points-plain-font.png"><img class="" title="Click to enlarge" src="https://gatillos.com/yay/2014/08/31/quick-and-easy-game-text-images-with-inkscape/01-shuffle-for-points-plain-font.png" alt="" width="348" height="345"></a></div>
<div class="post-image-caption">Text displayed using Unity's GUI.Label and plain-color font</div>
<p>Ugly, isn&rsquo;t it?</p>
<h3 id="creating-a-bitmap-font-label-with-inkscape">Creating a bitmap font label with Inkscape</h3>
<p>What we will do is replace the text with a nice image with colors and effects. We will be doing it the clever way too, using clones so that everything is derived from a single original object that can be modified afterwards.</p>
<p>On Inkscape, create a text box at the top level part of the screen. Set a nice font for it, in my experience bold fonts look better (like Stencil Std and Bauhaus).</p>
<div class="post-image"><a href="https://gatillos.com/yay/2014/08/31/quick-and-easy-game-text-images-with-inkscape/02-inskcape-text.png"><img class="" title="Click to enlarge" src="https://gatillos.com/yay/2014/08/31/quick-and-easy-game-text-images-with-inkscape/02-inskcape-text.png" alt="" width="269" height="283"></a></div>
<div class="post-image-caption">Use the Text tool to create a box</div>
<p>Now, open the Fill and Stroke settings dialog and mark both &ldquo;Fill&rdquo; and &ldquo;Stroke paint&rdquo; as unset (select the option marked as &lsquo;?&rsquo;).</p>
<div class="post-image"><a href="https://gatillos.com/yay/2014/08/31/quick-and-easy-game-text-images-with-inkscape/03-inkscape-fill-paint.png"><img class="" title="Click to enlarge" src="https://gatillos.com/yay/2014/08/31/quick-and-easy-game-text-images-with-inkscape/03-inkscape-fill-paint.png" alt="" width="373" height="283"></a></div>
<div class="post-image-caption">Unset the Fill and Stroke Paint colors</div>
<p>Now, create a background box with a color similar to what they will have as background in your game. Then create three <em>clones</em> of the original text.</p>
<div class="post-image"><a href="https://gatillos.com/yay/2014/08/31/quick-and-easy-game-text-images-with-inkscape/04-inkscape-clone.png"><img class="" title="Click to enlarge" src="https://gatillos.com/yay/2014/08/31/quick-and-easy-game-text-images-with-inkscape/04-inkscape-clone.png" alt="" width="320" height="369"></a></div>
<div class="post-image-caption">Create three clones of the original text</div>
<div class="post-image"><a href="https://gatillos.com/yay/2014/08/31/quick-and-easy-game-text-images-with-inkscape/05-inkscape-clones-created.png"><img class="" title="Click to enlarge" src="https://gatillos.com/yay/2014/08/31/quick-and-easy-game-text-images-with-inkscape/05-inkscape-clones-created.png" alt="" width="320" height="369"></a></div>
<div class="post-image-caption">Create three clones of the original text</div>
<p>Now, for the fun part. We are going to modify these clones with different effects, then stack them one over the other.</p>
<ol>
<li>Clone 1: Choose a color and set it to both fill and stroke. Set a big width, for instance 6. We will use this image as a background, it doesn&rsquo;t have to be readable.</li>
</ol>
<div class="post-image"><a href="https://gatillos.com/yay/2014/08/31/quick-and-easy-game-text-images-with-inkscape/06-inkscape-clone-1.png"><img class="" title="Click to enlarge" src="https://gatillos.com/yay/2014/08/31/quick-and-easy-game-text-images-with-inkscape/06-inkscape-clone-1.png" alt="" width="373" height="368"></a></div>
<div class="post-image-caption">Clone one is a thick outline of the text</div>
<ol start="2">
<li>Clone 2: Choose a related color and set it to both fill and stroke. Same width as Clone 1. Set transparency (also known as Opacity) to 60% and blur to 4.0. You can play with these values later.</li>
</ol>
<div class="post-image"><a href="https://gatillos.com/yay/2014/08/31/quick-and-easy-game-text-images-with-inkscape/07-inkscape-clone-2.png"><img class="" title="Click to enlarge" src="https://gatillos.com/yay/2014/08/31/quick-and-easy-game-text-images-with-inkscape/07-inkscape-clone-2.png" alt="" width="373" height="368"></a></div>
<div class="post-image-caption">Clone two is a blur effect</div>
<ol start="3">
<li>Clone 3: This will be the one actually going on top of the others so it should be readable. Just choose an appropriate color.</li>
</ol>
<div class="post-image"><a href="https://gatillos.com/yay/2014/08/31/quick-and-easy-game-text-images-with-inkscape/08-inkscape-clone-3.png"><img class="" title="Click to enlarge" src="https://gatillos.com/yay/2014/08/31/quick-and-easy-game-text-images-with-inkscape/08-inkscape-clone-3.png" alt="" width="373" height="368"></a></div>
<div class="post-image-caption">Clone three is the actual text</div>
<p>Now, bear with me, <strong>clone all the clones!</strong>. This will make it easier to change colors later.</p>
<div class="post-image"><a href="https://gatillos.com/yay/2014/08/31/quick-and-easy-game-text-images-with-inkscape/09-inkscape-clone-clones.png"><img class="" title="Click to enlarge" src="https://gatillos.com/yay/2014/08/31/quick-and-easy-game-text-images-with-inkscape/09-inkscape-clone-clones.png" alt="" width="320" height="369"></a></div>
<div class="post-image-caption">Select the clones and clone them. Make sure they show as a 'Clone of Clone'.</div>
<p>Select the three &ldquo;clones of clones&rdquo; and align them horizontally and verticall against the box, so that they are all in the same position, stacked over each other.</p>
<div class="post-image"><a href="https://gatillos.com/yay/2014/08/31/quick-and-easy-game-text-images-with-inkscape/10-inkscape-stack.png"><img class="" title="Click to enlarge" src="https://gatillos.com/yay/2014/08/31/quick-and-easy-game-text-images-with-inkscape/10-inkscape-stack.png" alt="" width="320" height="369"></a></div>
<div class="post-image-caption">Stack each clone on top of the other.</div>
<p>This is already more acceptable than the original text and looks more &ldquo;game-like&rdquo;.</p>
<h4 id="adding-some-effects">Adding some effects</h4>
<p>To make it a little prettier, we will add a couple of simple tricks to create a glow effect.</p>
<p>First, create an ellipse of the same size as the box. Then select the three stacked clones and duplicate them. Join the duplicated result in a group (this whole process can be done by just pressing Control + D then Control + G). Finally, select the group, <em>then</em> while pressing shift select the ellipse and select Object/Clip/Set.</p>
<div class="post-image"><a href="https://gatillos.com/yay/2014/08/31/quick-and-easy-game-text-images-with-inkscape/11-inkscape-clip-set.png"><img class="" title="Click to enlarge" src="https://gatillos.com/yay/2014/08/31/quick-and-easy-game-text-images-with-inkscape/11-inkscape-clip-set.png" alt="" width="320" height="369"></a></div>
<div class="post-image-caption">Duplicate clones and clip them with an ellipse.</div>
<div class="post-image"><a href="https://gatillos.com/yay/2014/08/31/quick-and-easy-game-text-images-with-inkscape/12-inkscape-clipped.png"><img class="" title="Click to enlarge" src="https://gatillos.com/yay/2014/08/31/quick-and-easy-game-text-images-with-inkscape/12-inkscape-clipped.png" alt="" width="320" height="369"></a></div>
<div class="post-image-caption">Clipped result.</div>
<p>Now you can play with this clipped result, applying effects to it, changing its color to white and so on.</p>
<div class="post-image"><a href="https://gatillos.com/yay/2014/08/31/quick-and-easy-game-text-images-with-inkscape/13-inkscape-colored.png"><img class="" title="Click to enlarge" src="https://gatillos.com/yay/2014/08/31/quick-and-easy-game-text-images-with-inkscape/13-inkscape-colored.png" alt="" width="486" height="367"></a></div>
<div class="post-image-caption">Adding a bit of coloring and the Metallized Paint effect.</div>
<h4 id="exporting">Exporting</h4>
<p>Obviously you&rsquo;ll want to export your labels as images. The best way to do this is to temporarily remove or hide the background box (otherwise it would show on the image). In my case I put that box in a separate layer just to be able to do that quickly. After that, select the text and click on File / Export Bitmap.</p>
<ul>
<li>Choose the right size in pixels for your game</li>
<li>You may want to export multiple versions with different sizes, for instance a 2x version for retina displays</li>
</ul>
<h4 id="final-result">Final result</h4>
<p>Here&rsquo;s an example. The code would look like</p>
<code>
int screenCenterX = Screen.width / 2;<br/>
int topThird = Screen.height / 3;<br/>
Rect titleRect = new Rect(screenCenterX - (shuffleTexture.width / 2), topThird - (shuffleTexture.height / 2), shuffleTexture.width, shuffleTexture.height);<br/>
GUI.DrawTexture (titleRect, shuffleTexture);<br/>
</code>
<div class="post-image"><a href="https://gatillos.com/yay/2014/08/31/quick-and-easy-game-text-images-with-inkscape/14-final.png"><img class="" title="Click to enlarge" src="https://gatillos.com/yay/2014/08/31/quick-and-easy-game-text-images-with-inkscape/14-final.png" alt="" width="696" height="697"></a></div>
<div class="post-image-caption">Adding a bit of coloring and the Metallized Paint effect.</div>
<p>In this case, <code>shuffleTexture</code> is a public Texture2D property of the script and can be set via Unity.</p>]]></content>
  </entry>
  <entry>
    <title>Paul the innovator (76): 360 Evaluation</title>
    <link href="https://gatillos.com/yay/2014/08/25/paul-the-innovator-76-360-evaluation/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2014/08/25/paul-the-innovator-76-360-evaluation/</id>
    <updated>2014-08-25T18:30:00&#43;01:00</updated>
    <content type="html"><![CDATA[<span class="multilingual">
<span class="en">It would be fair enough to say HR would be the ones doing a policy like this, but I find that lately the dreaded __Agile__ proponents have managed to get themselves defining these things. And just to be clear, I'm a big fan of what Agile / XP used to mean, not so much of all this lets-turn-it-into-another-process of late.
</span>
<span class="es">Alguien podría decir que RRHH serían los que definirían políticas como ésta, pero encuentro que últimamente los temidos proponentes del __Agile__ han conseguido colocarse a definir estas cosas. Por si no queda claro, estoy más que a favor de lo que Agile / XP significaba al principio, pero no tanto de esto de vamos-a-convertirlo-en-otro-proceso que se lleva últimamente.
</span>
</span>
]]></content>
  </entry>
  <entry>
    <title>Paul the innovator (75): Updated iOS</title>
    <link href="https://gatillos.com/yay/2014/06/16/paul-the-innovator-75-updated-ios/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2014/06/16/paul-the-innovator-75-updated-ios/</id>
    <updated>2014-06-16T20:30:00&#43;01:00</updated>
    <content type="html"><![CDATA[<span class="multilingual">
<span class="en">To be honest I think google is stuffing way more in our mouths than that, but today we are here to talk about Apple.
</span>
<span class="es">La verdad es que creo que google nos está enchufando mucho más que eso, pero hoy estamos aquí para hablar de Apple.
</span>
</span>
]]></content>
  </entry>
  <entry>
    <title>Paul the innovator (74): The monkey CEO</title>
    <link href="https://gatillos.com/yay/2014/06/01/paul-the-innovator-74-the-monkey-ceo/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2014/06/01/paul-the-innovator-74-the-monkey-ceo/</id>
    <updated>2014-06-01T10:50:00&#43;01:00</updated>
    <content type="html"><![CDATA[<span class="multilingual">
<span class="en">I'll just say that the probability of this happening to a monkey re-converted into CEO is higher than I feel comfortable admitting. Responses to the Mozilla fiasco are quite revealing.
</span>
<span class="es">Sólo diré que la probabilidad de que esto pase con un mono convertido a CEO es más alta de lo que me gusta aceptar. Y a las reacciones al fiasco de Mozilla me remito.
</span>
</span>
]]></content>
  </entry>
  <entry>
    <title>Paul the innovator (73): Two pizza rule</title>
    <link href="https://gatillos.com/yay/2014/04/21/paul-the-innovator-73-two-pizza-rule/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2014/04/21/paul-the-innovator-73-two-pizza-rule/</id>
    <updated>2014-04-21T19:39:00&#43;01:00</updated>
    <content type="html"><![CDATA[<span class="multilingual">
<span class="en">I don't know if people at Amazon are particularly lean, but every time I see how people launch to the pizzas as a pack of wolves, I shiver. Anyway, this comic was inspired by a comment from dear colleague [@paulpod](https://twitter.com/paulpod)
</span>
<span class="es">No sé si la gente en Amazon son especialmente delgados, pero cada vez que veo como la gente se lanza a las pizzas como una manda de lobos, me estremezco. En fin, este cómic ha sido inspirado en un comentario de mi estimado compañero [@paulpod](https://twitter.com/paulpod)
</span>
</span>
]]></content>
  </entry>
  <entry>
    <title>Paul the innovator (72): Vanity metrics</title>
    <link href="https://gatillos.com/yay/2014/03/09/paul-the-innovator-72-vanity-metrics/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2014/03/09/paul-the-innovator-72-vanity-metrics/</id>
    <updated>2014-03-09T18:39:00&#43;01:00</updated>
    <content type="html"><![CDATA[<span class="multilingual">
<span class="en">And by the way, "users that have logged in in the past month" are **not** active users either. But if you want to go there, here's a tip: make unsuscribing and closing accounts so difficult that people will go to your site to try to remove themselves once every month, immediately after receiving your "opt-in newsletter", just to give up after 2 minutes trying to figure out how to do it. Woohoo! A visitor!
</span>
<span class="es">Y por cierto, los "usuarios que han entrado en el site en el último mes" **tampoco** son usuarios activos. Pero si quieres ir por ahí, aquí va un consejo: haz que sea tan difícil de-registrarse y cerrar una cuenta en tu site que la gente vaya ahí cada mes para darse de baja, justo después de recibir tu "newsletter opcional", y acaben dándose por vencidos al cabo de 2 minutos intentando encontrar cómo borrarse. ¡Yeah! ¡Una visita!
</span>
</span>
]]></content>
  </entry>
  <entry>
    <title>Paul the innovator (71): The rumor mill</title>
    <link href="https://gatillos.com/yay/2014/03/02/paul-the-innovator-71-the-rumor-mill/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2014/03/02/paul-the-innovator-71-the-rumor-mill/</id>
    <updated>2014-03-02T20:39:00&#43;01:00</updated>
    <content type="html"><![CDATA[<span class="multilingual">
<span class="en">That *Soylent Green is people!* [moment](http://www.imdb.com/title/tt0070723/).
</span>
<span class="es">Ese [momento](http://www.imdb.com/title/tt0070723/) *El Soylent Verde está hecho de humanos!*.
</span>
</span>
]]></content>
  </entry>
  <entry>
    <title>Paul the innovator (70): Happy xmas 2013</title>
    <link href="https://gatillos.com/yay/2013/12/22/paul-the-innovator-70-happy-xmas-2013/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2013/12/22/paul-the-innovator-70-happy-xmas-2013/</id>
    <updated>2013-12-22T23:10:00&#43;01:00</updated>
    <content type="html"><![CDATA[<span class="multilingual">
<span class="en">Happy Xmas everybody and enjoy your holidays!
</span>
<span class="es">Feliz Navidad a todo el mundo y disfrutad de las fiestas!
</span>
</span>
]]></content>
  </entry>
  <entry>
    <title>Paul the innovator (69): The monkey brain</title>
    <link href="https://gatillos.com/yay/2013/12/08/paul-the-innovator-69-the-monkey-brain/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2013/12/08/paul-the-innovator-69-the-monkey-brain/</id>
    <updated>2013-12-08T16:10:00&#43;01:00</updated>
    <content type="html"><![CDATA[<span class="multilingual">
<span class="en">I find all this talk about monkey brains very monkeyist. What's next? Putting them in cages?
</span>
<span class="es">Toda esta charla sobre la mente del mono me parece muy monista. Qué será lo siguiente? Meterlos en jaulas?
</span>
</span>
]]></content>
  </entry>
  <entry>
    <title>Paul the innovator (68): Handling failure</title>
    <link href="https://gatillos.com/yay/2013/11/24/paul-the-innovator-68-handling-failure/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2013/11/24/paul-the-innovator-68-handling-failure/</id>
    <updated>2013-11-24T23:50:00&#43;01:00</updated>
    <content type="html"><![CDATA[<span class="multilingual">
<span class="en">If you look harder, there's always a struggling monkey under the pile of bosses.
</span>
<span class="es">Si mirás con atención, siempre hay un mono pasándolas canutas debajo de la pila de jefes.
</span>
</span>
]]></content>
  </entry>
  <entry>
    <title>Paul the innovator (67): Panic mode</title>
    <link href="https://gatillos.com/yay/2013/10/27/paul-the-innovator-67-panic-mode/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2013/10/27/paul-the-innovator-67-panic-mode/</id>
    <updated>2013-10-27T20:50:00&#43;01:00</updated>
    <content type="html"><![CDATA[<span class="multilingual">
<span class="en">Jumping was probably easier than getting the Junos VPN client to work in his mac. (Must admit the idea for this comic comes from [@phobeo](https://twitter.com/phobeo), via [@ladybenko](https://twitter.com/ladybenko))
</span>
<span class="es">Saltar era más fácil que hacer funcionar la VPN de Junos en su mac. (Debo confesar que la idea de este comic viene de [@phobeo](https://twitter.com/phobeo), via [@ladybenko](https://twitter.com/ladybenko))
</span>
</span>
]]></content>
  </entry>
  <entry>
    <title>Paul the innovator (66): Overseeing committee</title>
    <link href="https://gatillos.com/yay/2013/10/13/paul-the-innovator-66-overseeing-committee/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2013/10/13/paul-the-innovator-66-overseeing-committee/</id>
    <updated>2013-10-13T19:50:00&#43;01:00</updated>
    <content type="html"><![CDATA[<span class="multilingual">
<span class="en">To be realistic, management should be defined downwards. So instead of _Upper Management_ one would have _Lower Management_, which I find a more appropriate name, morally speaking.
</span>
<span class="es">Para ser realistas, management se debería definir hacia abajo. Así en lugar de _Alta dirección_ tendríamos _Baja dirección_, que creo más moralmente apropiado.
</span>
</span>
]]></content>
  </entry>
  <entry>
    <title>Paul the innovator (65): Company structure review</title>
    <link href="https://gatillos.com/yay/2013/09/08/paul-the-innovator-65-company-structure-review/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2013/09/08/paul-the-innovator-65-company-structure-review/</id>
    <updated>2013-09-08T19:40:00&#43;01:00</updated>
    <content type="html"><![CDATA[<span class="multilingual">
<span class="en">This is the only way to achieve a true lean process.
</span>
<span class="es">La única forma de ser "lean" de verdad.
</span>
</span>
]]></content>
  </entry>
  <entry>
    <title>Paul the innovator (64): Heart of darkness</title>
    <link href="https://gatillos.com/yay/2013/09/01/paul-the-innovator-64-heart-of-darkness/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2013/09/01/paul-the-innovator-64-heart-of-darkness/</id>
    <updated>2013-09-01T14:40:00&#43;01:00</updated>
    <content type="html"><![CDATA[<span class="multilingual">
<span class="en">Fear not, here I am to continue the Paul Saga. This is a projection of what I expect will be the next two weeks for me.
</span>
<span class="es">No temáis, aquí estoy para continuar con la saga de Paul. Lo que ves aquí es una proyección de cómo espero que vayan las dos próximas semanas para mí.
</span>
</span>
]]></content>
  </entry>
  <entry>
    <title>Paul the innovator (63): Strategy</title>
    <link href="https://gatillos.com/yay/2013/07/07/paul-the-innovator-63-strategy/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2013/07/07/paul-the-innovator-63-strategy/</id>
    <updated>2013-07-07T22:40:00&#43;01:00</updated>
    <content type="html"><![CDATA[<span class="multilingual">
<span class="en">Long-term strategy: get rich.
</span>
<span class="es">Estrategia a largo plazo: hacerse rico.
</span>
</span>
]]></content>
  </entry>
  <entry>
    <title>Paul the innovator (62): Quality assurance</title>
    <link href="https://gatillos.com/yay/2013/06/29/paul-the-innovator-62-quality-assurance/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2013/06/29/paul-the-innovator-62-quality-assurance/</id>
    <updated>2013-06-29T13:00:00&#43;01:00</updated>
    <content type="html"><![CDATA[<span class="multilingual">
<span class="en">I don't think I have yet tackled the funny interactions that happen between QA and development departments. It's a relation by its own nature prone to misunderstanding and finger pointing, but overall can be made to work pretty well. That is, if everybody understands that breaking a thing in itself is not particularly productive unless it's accompanied by rigorous logging and as much information as possible of what happend up until that point. However, it seems there are still quite a few QA trolls around there. From what I've heard.
</span>
<span class="es">Creo que todavía no he abordado las divertidas interacciones que se producen entre desarrolladores y control de calidad (QA). Por naturaleza, siempre habrá discusiones, malentendidos y acusaciones, pero normalmente se puede hacer funcionar bien. Lo único necesario es que todo el mundo entienda que no es particularmente útil romper algo a menos que se acompañe de un detallado registro de todo lo que se hizo hasta ese punto. Sin embargo, parece que todavía quedan unos cuantos trolls de QA. Me han dicho.
</span>
</span>
]]></content>
  </entry>
  <entry>
    <title>Paul the innovator (61): Headless chicken management</title>
    <link href="https://gatillos.com/yay/2013/05/27/paul-the-innovator-61-headless-chicken-management/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2013/05/27/paul-the-innovator-61-headless-chicken-management/</id>
    <updated>2013-05-27T13:00:00&#43;01:00</updated>
    <content type="html"><![CDATA[<span class="multilingual">
<span class="en">A final installment of the headless chicken management series. In these cases the Dilbert principle stands true most of the time, and the manager keeps being promoted until the point where he or she becomes less harmful for the company. <br><br>And surprisingly enough, this was also an idea contributed to the comic, this time by the multi-talented [JaviGala](https://twitter.com/JaviGala).
</span>
<span class="es">Un episodio final para la saga del jefe pollo-descabezado. En estos casos se suele cumplir el principio de Dilbert y el jefe sigue ascendiendo hasta llegar al punto en el que resulta menos pernicioso para la compañía. <br><br>Y sorprendentemente, esta idea también es una contribución al cómic, esta vez por el polivante [JaviGala](https://twitter.com/JaviGala).
</span>
</span>
]]></content>
  </entry>
  <entry>
    <title>Paul the innovator (60): Monkey see, monkey do</title>
    <link href="https://gatillos.com/yay/2013/05/19/paul-the-innovator-60-monkey-see-monkey-do/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2013/05/19/paul-the-innovator-60-monkey-see-monkey-do/</id>
    <updated>2013-05-19T23:35:00&#43;01:00</updated>
    <content type="html"><![CDATA[<span class="multilingual">
<span class="en">Continuing the saga of the headless chicken manager, watch in horror as the panic spreads. <br><br>With special thanks this time to [ladybenko](https://twitter.com/ladybenko) for the idea.
</span>
<span class="es">Continuando con la saga del pollo descabezado como jefe, miren con horror cómo el pánico se extiende. <br><br>Mención especial esta vez para [ladybenko](https://twitter.com/ladybenko) por la idea.
</span>
</span>
<p>(As usual, a reminder that you can <a href="https://www.facebook.com/gatilloscom">like the facebook page</a> to get updates, and if you are into this kind of stuff you could also <a href="https://twitter.com/osuka">follow me on twitter</a>)</p>
]]></content>
  </entry>
  <entry>
    <title>Paul the innovator (59): Crisis management</title>
    <link href="https://gatillos.com/yay/2013/05/06/paul-the-innovator-59-crisis-management/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2013/05/06/paul-the-innovator-59-crisis-management/</id>
    <updated>2013-05-06T21:35:00&#43;01:00</updated>
    <content type="html"><![CDATA[<span class="multilingual">
<span class="en">This is an increasingly common management technique that we've come to name "headless-chicken management". It involves panicking at the most insignificant problem and transferring that panic to the team, other management and everyone else in the company until the only solution seems to be mass suicide. <br><br>With special thanks to [rafeca](https://twitter.com/rafeca) for the idea.
</span>
<span class="es">Ésta es una técnica de gestión que hemos denominado "gestión pollo descabezado". Implica entrar en pánica con cualquier mínimo problema y hacer que ese pánico se pase al equipo, al resto de los managers y a todo el mundo en la empresa hasta el punto en el que la única solución parece ser el suicidio en masa. <br><br>Mención especial para [rafeca](https://twitter.com/rafeca) por la idea.
</span>
</span>
<p>(As usual, a reminder that you can <a href="https://www.facebook.com/gatilloscom">like the facebook page</a> to get updates, and if you are into this kind of stuff you could also <a href="https://twitter.com/osuka">follow me on twitter</a>)</p>
]]></content>
  </entry>
  <entry>
    <title>Paul the innovator (58): Scooters</title>
    <link href="https://gatillos.com/yay/2013/04/07/paul-the-innovator-58-scooters/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2013/04/07/paul-the-innovator-58-scooters/</id>
    <updated>2013-04-07T21:35:00&#43;01:00</updated>
    <content type="html"><![CDATA[<span class="multilingual">
<span class="en">Somebody had to say it. If you go to work with one of those little scooters, nobody is going to take you seriously. It's about the laziest thing you can do and still pretend to be doing "exercise". Maybe I should do another comic exploring the relation between the use of a scooter and belly size of the owner.
</span>
<span class="es">Alguien lo tenía que decir. Si vas al trabajo con uno de esos patinetes, nadie te tomará en serio. Lo curioso es que es una de las cosas más vagas que se puede hacer y sin embargo se presenta como que estás haciendo "ejercicio". Puede que haga otro comic explorando la relación que hay entre el uso de un patinete y el tamaño de la barriga del que lo lleva.
</span>
</span>
<p>(As usual, a reminder that you can <a href="https://www.facebook.com/gatilloscom">like the facebook page</a> to get updates, and if you are into this kind of stuff you could also <a href="https://twitter.com/osuka">follow me on twitter</a>)</p>
]]></content>
  </entry>
  <entry>
    <title>Paul the innovator (57): Hipster glasses</title>
    <link href="https://gatillos.com/yay/2013/03/24/paul-the-innovator-57-hipster-glasses/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2013/03/24/paul-the-innovator-57-hipster-glasses/</id>
    <updated>2013-03-24T23:05:00&#43;01:00</updated>
    <content type="html"><![CDATA[<span class="multilingual">
<span class="en">There is some autobiographical aspects to this comic. The effects of the hipster glasses must not be underestimated. The same way that when you look into the abyss, the abyss looks back at you, when you wear hipster glasses they slowly transform you. Watch out for skinny trousers, intellectual discussions about things you haven't actually read or seen and of course, the all-telling "I was into them way before when they were not famous".
</span>
<span class="es">Hay algo de autobiográfico en este cómic. Los efectos de las gafas de pasta no deben ser tomados a la ligera. De la misma manera que cuando uno mira al abismo, el abismo le mira a él, cuando llevas las gafas de pasta el hipster se va apoderando lentamente de ti. Ten cuidado con los pantalones apretados, las discusiones intelectuales sobre cosas que no has leído ni visto y por supuesto, el definitivo "me gustaban antes de que fueran famosos".
</span>
</span>
<p>(As usual, a reminder that you can <a href="https://www.facebook.com/gatilloscom">like the facebook page</a> to get updates, and if you are into this kind of stuff you could also <a href="https://twitter.com/osuka">follow me on twitter</a>)</p>
]]></content>
  </entry>
  <entry>
    <title>Paul the innovator (56): The framework developer</title>
    <link href="https://gatillos.com/yay/2013/03/10/paul-the-innovator-56-the-framework-developer/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2013/03/10/paul-the-innovator-56-the-framework-developer/</id>
    <updated>2013-03-10T17:05:00&#43;01:00</updated>
    <content type="html"><![CDATA[<p>Rule number one for a framework developer should be: don&rsquo;t be a framework developer, it&rsquo;s not worth it.</p>
<p>(As usual, a reminder that you can <a href="https://www.facebook.com/gatilloscom">like the facebook page</a> to get updates, and if you are into this kind of stuff you could also <a href="https://twitter.com/osuka">follow me on twitter</a>)</p>
]]></content>
  </entry>
  <entry>
    <title>Paul the innovator (55): Being lean</title>
    <link href="https://gatillos.com/yay/2013/02/19/paul-the-innovator-55-being-lean/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2013/02/19/paul-the-innovator-55-being-lean/</id>
    <updated>2013-02-19T01:45:00&#43;01:00</updated>
    <content type="html"><![CDATA[<p>I must admit I read The Lean Startup by Eric Ries and love it. It&rsquo;s well explained, full of examples and engaging.
Now what happens when you try to apply that to a traditional enterprise business? Mostly, that it&rsquo;s going to take quite a while&hellip;</p>
<p>(As usual, a reminder that you can <a href="https://www.facebook.com/gatilloscom">like the facebook page</a> to get updates)</p>
]]></content>
  </entry>
  <entry>
    <title>Paul the innovator (54): Best company to work for</title>
    <link href="https://gatillos.com/yay/2013/02/03/paul-the-innovator-54-best-company-to-work-for/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2013/02/03/paul-the-innovator-54-best-company-to-work-for/</id>
    <updated>2013-02-03T14:45:00&#43;01:00</updated>
    <content type="html"><![CDATA[<p>Just as is the case with the &ldquo;Fair Trade&rdquo; labels and similar, it&rsquo;s always worth taking a look at what exactly a label like &ldquo;best place to work&rdquo; means. A little bit of google will take you to an hilarious company that actually sells that label for workplaces, Great Place to Work.</p>
<p>(As usual, a reminder that you can <a href="https://www.facebook.com/gatilloscom">like the facebook page</a> to get updates)</p>
]]></content>
  </entry>
  <entry>
    <title>Paul the innovator (53): Scrum Master recycling</title>
    <link href="https://gatillos.com/yay/2013/01/27/paul-the-innovator-53-scrum-master-recycling/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2013/01/27/paul-the-innovator-53-scrum-master-recycling/</id>
    <updated>2013-01-27T13:45:00&#43;01:00</updated>
    <content type="html"><![CDATA[<p>I often criticize &ldquo;Agile&rdquo; but I&rsquo;m a big fan and will use most of it always. The problem from my point of view is taking a team that doesn&rsquo;t work and promoting the useless individuals so that they don&rsquo;t slow down the others. The most common and patent case is when someone&rsquo;s job is <em>just</em> &ldquo;Scrum Master&rdquo;. What does that mean? To add insult to injury, they are usually given a rise just because even though everybody is saying &ldquo;we are now agile&rdquo;, deep down they still love the concept of a boss and minions. So what is a scrum master, if not the boss of a bunch of developers that otherwise wouldn&rsquo;t be able to function properly? It&rsquo;s that kind of thinking I really dislike, and I find it associated to &ldquo;Agile&rdquo; and &ldquo;Lean&rdquo; too often.</p>
<p>(As usual, a reminder that you can <a href="https://www.facebook.com/gatilloscom">like the facebook page</a> to get updates)</p>
]]></content>
  </entry>
  <entry>
    <title>Paul the innovator (52): Privacy policy</title>
    <link href="https://gatillos.com/yay/2013/01/20/paul-the-innovator-52-privacy-policy/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2013/01/20/paul-the-innovator-52-privacy-policy/</id>
    <updated>2013-01-20T17:45:00&#43;01:00</updated>
    <content type="html"><![CDATA[<p>Every time I have to click &ldquo;Continue&rdquo; in one of the useless popups about
some site&rsquo;s &ldquo;cookie policy&rdquo;, I lose faith in any legislation ever producing
a positive result.</p>
<p>If you don&rsquo;t know, that whole thing originates in a severely wrong and uninformed
EU Regulation on cookies, without understanding that there is no way to
differentiate between &lsquo;good cookies&rsquo; and &lsquo;bad cookies&rsquo; and that either
you accept the modern web needs them to work or you re-engineer the whole
thing from scratch.</p>
<p>Of course, the final joke is that the ONLY way for a website to remember
that you accepted OR rejected the policy is to <em>set a cookie</em>. So if
anything, the new legislation made every site create a new cookie in your computer.</p>
<p>But I digress&hellip;</p>
<p>(As usual, a reminder that you can <a href="https://www.facebook.com/gatilloscom">like the facebook page</a> to get updates)</p>
]]></content>
  </entry>
  <entry>
    <title>Paul the innovator (51): Hardware upgrade</title>
    <link href="https://gatillos.com/yay/2013/01/13/paul-the-innovator-51-hardware-upgrade/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2013/01/13/paul-the-innovator-51-hardware-upgrade/</id>
    <updated>2013-01-13T12:15:00&#43;01:00</updated>
    <content type="html"><![CDATA[<p>If you want anything done, you&rsquo;ll soon learn it&rsquo;s always easier to beg for forgiveness than to ask for permission.</p>
<p>(As usual, a reminder that you can <a href="https://www.facebook.com/gatilloscom">like the facebook page</a> to get updates)</p>
]]></content>
  </entry>
  <entry>
    <title>Paul the innovator (50): Desktop sharing</title>
    <link href="https://gatillos.com/yay/2013/01/07/paul-the-innovator-50-desktop-sharing/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2013/01/07/paul-the-innovator-50-desktop-sharing/</id>
    <updated>2013-01-07T08:00:00&#43;01:00</updated>
    <content type="html"><![CDATA[<p>This is another of those strips in which I&rsquo;m merely narrating reality and didn&rsquo;t have to do much actual thinking. Apparently this all happened at some unnamed office where some unnamed friends work. I think everybody thought it was funnier because of the actual site the guy was going to.</p>
<p>What I think is actually more interesting is the kind of climate that office had for something like this to happen and have nobody go to the guy and tell him &ldquo;Dude, press STOP DESKTOP SHARING&rdquo;, instead letting him do that for the longest time.</p>
<p>By the way, have you tried to come up with a domain name for a dating site that is not already registered? It&rsquo;s insane. I was trying to put something that wasn&rsquo;t an actual web site and it took me quite a while&hellip; and I&rsquo;ve seen THINGS in the process.</p>
<p>(As usual, a reminder that you can <a href="https://www.facebook.com/gatilloscom">like the facebook page</a> to get updates)</p>
]]></content>
  </entry>
  <entry>
    <title>Paul the innovator (49): Another year</title>
    <link href="https://gatillos.com/yay/2012/12/24/paul-the-innovator-49-another-year/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2012/12/24/paul-the-innovator-49-another-year/</id>
    <updated>2012-12-24T17:20:00&#43;01:00</updated>
    <content type="html"><![CDATA[<p>If you think about it, isn&rsquo;t that the most profound and heartfelt wish of all?</p>
<p>Everything else you manage to screw up in 2013 you will be able to fix in 2014.</p>
<p>I&rsquo;m thinking the emo architect is, inside, a loving and well-meaning character. That loves Satan.</p>
<p>Note: The christmas tree in this comic is a modified version of the one by Mathew Callaghan that you can <a href="http://openclipart.org/user-detail/mathec">find in openclipart.org</a>.</p>
<p>(As usual, a reminder that you can <a href="https://www.facebook.com/gatilloscom">like the facebook page</a> to get updates)</p>
]]></content>
  </entry>
  <entry>
    <title>Paul the innovator (48): Innovation by committee</title>
    <link href="https://gatillos.com/yay/2012/12/18/paul-the-innovator-48-innovation-by-committee/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2012/12/18/paul-the-innovator-48-innovation-by-committee/</id>
    <updated>2012-12-18T19:30:00&#43;01:00</updated>
    <content type="html"><![CDATA[<p>The real Paul always warned us about the perils of the &ldquo;Innovation by Committee&rdquo;, which in essence means that any innovation initiative must be approved by a majority of stakeholders, which in most cases are heavily involved in other initiatives with short-term goals.
In essence, the more people you ask to, the more &ldquo;Noes&rdquo; you will get.</p>
<p>(As usual, a reminder that you can <a href="https://www.facebook.com/gatilloscom">like the facebook page</a> to get updates)</p>
]]></content>
  </entry>
  <entry>
    <title>Paul the innovator (47): Counseling</title>
    <link href="https://gatillos.com/yay/2012/12/08/paul-the-innovator-47-counseling/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2012/12/08/paul-the-innovator-47-counseling/</id>
    <updated>2012-12-08T17:30:00&#43;01:00</updated>
    <content type="html"><![CDATA[<p>This should be more common, we would all feel better.</p>
<p>(As usual, a reminder that you can <a href="https://www.facebook.com/gatilloscom">like the facebook page</a> to get updates)</p>
]]></content>
  </entry>
  <entry>
    <title>Paul the innovator (46): Coping with depression</title>
    <link href="https://gatillos.com/yay/2012/12/03/paul-the-innovator-46-coping-with-depression/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2012/12/03/paul-the-innovator-46-coping-with-depression/</id>
    <updated>2012-12-03T00:35:00&#43;01:00</updated>
    <content type="html"><![CDATA[<p>I recommend this to everybody. It&rsquo;s very relaxing. I can&rsquo;t guarantee it won&rsquo;t affect your annual evaluation, but at least you won&rsquo;t care.</p>
<p>(As usual, a reminder that you can <a href="https://www.facebook.com/gatilloscom">like the facebook page</a> to get updates)</p>
]]></content>
  </entry>
  <entry>
    <title>Paul the innovator (45): Marcus the depressed dog</title>
    <link href="https://gatillos.com/yay/2012/11/26/paul-the-innovator-45-marcus-the-depressed-dog/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2012/11/26/paul-the-innovator-45-marcus-the-depressed-dog/</id>
    <updated>2012-11-26T00:05:00&#43;01:00</updated>
    <content type="html"><![CDATA[<p>The problem with dogs is that they can sniff crap miles away.</p>
<p>That&rsquo;s the only reason they are not allowed in most offices.</p>
<p>(As usual, a reminder that you can <a href="https://www.facebook.com/gatilloscom">like the facebook page</a> to get updates)</p>
]]></content>
  </entry>
  <entry>
    <title>Paul the innovator (44): Sick days</title>
    <link href="https://gatillos.com/yay/2012/11/10/paul-the-innovator-44-sick-days/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2012/11/10/paul-the-innovator-44-sick-days/</id>
    <updated>2012-11-10T13:05:00&#43;01:00</updated>
    <content type="html"><![CDATA[<p>This is based on a true story that went around my office for a while. Initially I thought it was just some lazy bastard making stuff up to avoid coming to work but then after a while I started feeling for the poor dog. Of course it was probably all made up, but still&hellip; think about it, the
poor little beast there, waiting&hellip;</p>
<p>(Oh, yes, remember that you can <a href="https://www.facebook.com/gatilloscom">like the facebook page</a> to get updates)</p>
]]></content>
  </entry>
  <entry>
    <title>Paul the innovator (43): Design innovation</title>
    <link href="https://gatillos.com/yay/2012/10/14/paul-the-innovator-43-design-innovation/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2012/10/14/paul-the-innovator-43-design-innovation/</id>
    <updated>2012-10-14T18:45:00&#43;01:00</updated>
    <content type="html"><![CDATA[<p>This all comes from a misunderstanding of the Word of Steve. I fear for
the future.</p>
<p>(Oh, yes, remember that you can <a href="https://www.facebook.com/gatilloscom">like the facebook page</a> to get updates)</p>
]]></content>
  </entry>
  <entry>
    <title>Paul the innovator (42): Language lessons</title>
    <link href="https://gatillos.com/yay/2012/10/06/paul-the-innovator-42-language-lessons/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2012/10/06/paul-the-innovator-42-language-lessons/</id>
    <updated>2012-10-06T22:30:00&#43;01:00</updated>
    <content type="html"><![CDATA[<p>I must admit that it was someone that pointed me to the difference between a &lsquo;manager&rsquo; and a &lsquo;jefe&rsquo;, and then I realized that in Spain traditionally it&rsquo;s all been about &lsquo;begin a boss&rsquo;, more than actually managing or, you know, working. Since I can&rsquo;t for the life of me figure out who I heard it from, it will have to go unacknowledged.</p>
<p>But really, if your boss refers to him or herself as <strong>&lsquo;boss&rsquo;,</strong> you know
things are not right. That &lsquo;I HEART BOSS&rsquo; mug he bought himself isn&rsquo;t a
good indicator either.</p>
<p>Anyway, remember that you can
<a href="https://www.facebook.com/gatilloscom">like the facebook page</a> to get updates.</p>
]]></content>
  </entry>
  <entry>
    <title>Paul the innovator (41): The guidelines</title>
    <link href="https://gatillos.com/yay/2012/09/29/paul-the-innovator-41-the-guidelines/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2012/09/29/paul-the-innovator-41-the-guidelines/</id>
    <updated>2012-09-29T11:45:00&#43;01:00</updated>
    <content type="html"><![CDATA[<p>Wow it&rsquo;s been a month since last comic. I apologize&hellip; my list of comic
ideas is overflowing so the only problem here is my laziness (ok and
finishing a product that took forever). You could actually
<a href="https://www.facebook.com/gatilloscom">like the facebook page</a> to get updates.</p>
<p>Anyhow, there you have it. Every now and then I see this: good
programmers, good coders, designers, testers, they are all too busy to
sit down and define &lsquo;guidelines&rsquo;. They do manage to transmit them to
each other so the structure kind of works.</p>
<p>But that leaves out the most useless people in each of those teams. They
need to justify their jobs so what better way than to &lsquo;help&rsquo; the others
by defining some guidelines and common styles? Nothing wrong with that,
is it?</p>
]]></content>
  </entry>
  <entry>
    <title>Paul the innovator (40): Demoing products</title>
    <link href="https://gatillos.com/yay/2012/08/26/demoing-products/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2012/08/26/demoing-products/</id>
    <updated>2012-08-26T00:26:00&#43;01:00</updated>
    <content type="html"><![CDATA[<p>That nagging voice in the back of your mind that you so clearly can hear when your experts are giving a talk? Listen to it.</p>
]]></content>
  </entry>
  <entry>
    <title>Paul the innovator (39): Political Correctness</title>
    <link href="https://gatillos.com/yay/2012/08/07/paul-the-innovator-39-political-correctness/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2012/08/07/paul-the-innovator-39-political-correctness/</id>
    <updated>2012-08-07T22:01:00&#43;01:00</updated>
    <content type="html"><![CDATA[<p>I don&rsquo;t see anything wrong with this behaviour.</p>
]]></content>
  </entry>
  <entry>
    <title>Multilanguage, or SE HABLA ESPAÑOL</title>
    <link href="https://gatillos.com/yay/2012/08/05/multilanguage-or-se-habla-espanol/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2012/08/05/multilanguage-or-se-habla-espanol/</id>
    <updated>2012-08-05T15:48:32&#43;02:00</updated>
    <content type="html"><![CDATA[<p><span class="multilingual"><span class="en">Well, well, well&hellip; I finally used the multilanguage support I added long ago. In essence it detects the language you are using and displays images or text based on that. Today I translated the latest Paul the innovator comic to test this feature.</span></p>
<p><span class="multilingual"><span class="en">The trick is doing this all in one site without changing URLs so that the facebooks and googles of the world can see just one site. Hope it didn&rsquo;t break anything, let me know if it did.</span></span></p>
<p><span class="multilingual"><span class="es">Bueno, bueno, bueno&hellip; Por fin he empezado a usar el soporte multilenguage que añadí al sitio hace un tiempo. Básicamente detecta el lenguage que utilizas y cambio el texto y las imágenes. Hoy he traducido el último Paul the innovator para probarlo (por cierto, no tengo pensado traducir el título del cómic, creo que queda más cool en inglés, pero se aceptan quejas).</span></span></p>
<p><span class="multilingual"><span class="es">La gracia es hacerlo todo de manera que feisbuk, google y compañía vean sólo una página para no tener que liarla demasiado. Espero no haber roto nada, si no, decidmelo.</span></span></p>
<p>Comic: <a href="https://gatillos.com/yay/2012/08/02/paul-the-innovator-38-the-research-and-development-lab/">Paul the innovator 38</a></p>
]]></content>
  </entry>
  <entry>
    <title>Paul the innovator (38): The research and development lab</title>
    <link href="https://gatillos.com/yay/2012/08/02/paul-the-innovator-38-the-research-and-development-lab/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2012/08/02/paul-the-innovator-38-the-research-and-development-lab/</id>
    <updated>2012-08-02T21:01:00&#43;01:00</updated>
    <content type="html"><![CDATA[<span class="multilingual">
<span class="en">Look closer to your co-workers, they are probably at it. Right now. Some may be even staring at you.</span>
<span class="es">Mira a tus compañeros de trabajo, seguro que le están dando. Ahora mismo. Alguno de ellos lo estará haciendo mientras te mira fijamente.</span>
<span class="ca">Mira als teus companys de feina, segur que n'hi ha algun. Ara mateix. Algun d'ells ho estarà fent mentre et mira fixament.</span>
</span>]]></content>
  </entry>
  <entry>
    <title>Paul the innovator (37): The bonus pot</title>
    <link href="https://gatillos.com/yay/2012/07/14/paul-the-innovator-37-the-bonus-pot/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2012/07/14/paul-the-innovator-37-the-bonus-pot/</id>
    <updated>2012-07-14T15:01:00&#43;01:00</updated>
    <content type="html"><![CDATA[<p>I&rsquo;m scared to find out just how much of this is actually true.</p>
]]></content>
  </entry>
  <entry>
    <title>Facebook thumbnails</title>
    <link href="https://gatillos.com/yay/2012/06/24/facebook-thumbnails/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2012/06/24/facebook-thumbnails/</id>
    <updated>2012-06-24T18:45:32&#43;02:00</updated>
    <content type="html"><![CDATA[<p>A short post for the benefit of those struggling with this as I was: the little parser that Facebook uses when you share a link is insane, don&rsquo;t trust it.</p>
<p>That parser is what creates thumbnails for links shared in Facebook. It reads the contents of a page and allows you to choose an image. The problem is that more often than not, it can&rsquo;t find the images. It&rsquo;s got a lot of limitations: image size, image position in the document and it also has a tendency to just randomly stop working.</p>
<p>It&rsquo;s particularly bad when you start adding images as CSS backgrounds since those are completely ignored, even if you have fallbacks for crawlers like google etc. So today I once again found myself with this problem, Facebook refusing to use my images anymore. So any link to a comic would not show the actual thumbnail of the comic, which I find extremely annoying.</p>
<p>That meant I finally needed to cave in and use their extensions: I created a thumbnail for each post and added a few tags at the top of the page so that Facebook can find the right image.</p>
<p>To fix it, Create a thumbnail for your images and add the following to your HTML document (head section):</p>
<pre tabindex="0"><code>&lt;meta property=&#34;og:image&#34; content=&#34;http://address.of/your.image_thumb.png&#34;&gt;
&lt;meta property=&#34;og:title&#34; content=&#34;Optional text&#34;&gt;
</code></pre><p>That&rsquo;s it. Want to check if it works? Use the <a href="https://developers.facebook.com/tools/debug">Facebook URL debug page</a>. It will tell you whether the tags were interpreted or not.</p>
<p><em>Note: for creating a thumbnail you can use Imagemagick, for instance using &ldquo;convert -crop 300x300+0+0 image.png image_thumb.png&rdquo;.</em></p>
]]></content>
  </entry>
  <entry>
    <title>Paul the innovator (36): Art and design</title>
    <link href="https://gatillos.com/yay/2012/06/24/paul-the-innovator-36-art-and-design/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2012/06/24/paul-the-innovator-36-art-and-design/</id>
    <updated>2012-06-24T13:36:00&#43;01:00</updated>
    <content type="html"><![CDATA[<p>I think that &lsquo;Eagles don&rsquo;t flock&rsquo; is an example of hypocatastasis and not a metaphor. I thought I should mention it, because you were most probably thinking the same.</p>
<p>Also, all I know about art school life comes from <a href="http://en.wikipedia.org/wiki/Daniel_Clowes">Daniel Clowes</a> comics.</p>
]]></content>
  </entry>
  <entry>
    <title>Baby steps, retina displays and liking the universe</title>
    <link href="https://gatillos.com/yay/2012/06/17/baby-steps-retina-displays-and-liking-the-universe/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2012/06/17/baby-steps-retina-displays-and-liking-the-universe/</id>
    <updated>2012-06-17T22:25:32&#43;02:00</updated>
    <content type="html"><![CDATA[<p>Some changes to the site: links to the archives (yes up there near that little monkey) and horrid Facebook and Twitter <em>Like</em> buttons. <del>Upgraded the comment system and now every post shows as &lsquo;0 comments&rsquo; even if there are comments, but too tired to worry about that now&hellip;</del> <em>Fixed now.</em></p>
<p>But the most interesting bit is that I added hi-res comics in the Paul series and the header logos. This means that if you have a retina display (iPad or iPhone 4), you will see much crisper and detailed comics. All of that thanks to me using <a href="http://inkscape.org">Inkscape</a> from the start, which uses vector graphics.</p>
<p>Being a bit geeky as I am I created a small script to do this for all comics at once, using Inkscape and <a href="http://gimp.org">Gimp</a>. If you are interested the code is in <a href="https://gist.github.com/2945864">this github gist</a>.</p>
<p>So you are asking, what&rsquo;s the difference, well here&rsquo;s an example. I captured screenshots before and after enabling this, on an iPhone 4. The pixelation that the iPhone had done on the first one is obvious.</p>
<div class="post-image"><a href="https://gatillos.com/yay/2012/06/17/baby-steps-retina-displays-and-liking-the-universe/blog-2012-06-18-retina-comparison.png"><img class="" title="Retina power" src="https://gatillos.com/yay/2012/06/17/baby-steps-retina-displays-and-liking-the-universe/blog-2012-06-18-retina-comparison.png" alt=""></a></div>
<p>So what&rsquo;s next&hellip; well I have a huge pending thing in the form of translation. To Spanish, mostly. I&rsquo;ve promised to translate these comics a few times, and have some actually translated already so I guess at some point I&rsquo;ll have to put them online. Another biggie is making the website react to the device you are using, so to make it easier to navigate from a mobile.</p>
<p>Oh, and you know, <em>maybe</em> write some comics :).</p>
<p>Yes, I could do that.</p>
<p><em>Final note: I discovered there&rsquo;s a limitation in the actual size an image can have on an iPad&rsquo;s browser. That doesn&rsquo;t bode well for the super long images I used in LIFE/interior. For the time being I sliced the large pages into smaller ones but haven&rsquo;t yet added hi-res versions as they are still too big. More info in <a href="http://developer.apple.com/library/safari/#documentation/AppleApplications/Reference/SafariWebContent/CreatingContentforSafarioniPhone/CreatingContentforSafarioniPhone.html#//apple_ref/doc/uid/TP40006482-SW15">the official documentation</a>, found <a href="http://duncandavidson.com/blog/2012/03/webkit_retina_bug">here</a>.</em></p>
]]></content>
  </entry>
  <entry>
    <title>Paul the innovator (35): Business trip (cont)</title>
    <link href="https://gatillos.com/yay/2012/06/16/paul-the-innovator-35-business-trip-cont/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2012/06/16/paul-the-innovator-35-business-trip-cont/</id>
    <updated>2012-06-16T09:50:00&#43;01:00</updated>
    <content type="html"><![CDATA[<p>The funniest thing is that all those are words I hear almost every day. It all started with a cool idea that developers (that is, people that do programming), came up with a decade or so ago. At its root, it was a way to have managers understand that computer science had become anything but a science or even engineering. It had become clear by then that the current development practices, largely based on proper engineering, with detailed specifications and plans, were getting more and more cumbersome. So a new, leaner method was defined. Someone called it Extreme Programming, and all was good.</p>
<p>Then someone added some stuff and called the thing <em>Agile</em>. It was still good, but you could see something was changing.</p>
<p>Then people started specializing in &lsquo;Agile&rsquo;. And people that never actually programmed anything started giving talks. And then managers wanted something similar because programmers had started to be able to work <em>without</em> them, and they called it Scrum. And Scrum was not bad in itself, but people with too much time on their hands started theorizing about what development was. Developers ignored it for a while (big mistake) and then someday they found out that what they had been doing before was now Scrum and Agile and some other names. And suddenly they had the less useful member of the team be branded Scrum Master and get a pay raise. Then people started signing emails as &ldquo;Scrum Project Manager&rdquo;, and defining written methodologies for the monkeys to follow.</p>
<p>Anyway&hellip; I digress.</p>
]]></content>
  </entry>
  <entry>
    <title>Paul the innovator (34): Business trip</title>
    <link href="https://gatillos.com/yay/2012/06/10/paul-the-innovator-34-business-trip/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2012/06/10/paul-the-innovator-34-business-trip/</id>
    <updated>2012-06-10T12:50:00&#43;01:00</updated>
    <content type="html"><![CDATA[<p>I&rsquo;m thinking of doing A small mini-series dedicated to business travel. I&rsquo;ve heard some very interesting stories on the subject as of late, and I think it would be a total waste not to use them.</p>
<p>I&rsquo;d like to point out that any resemblance to real persons, living or dead, is purely coincidental (as usual).</p>
]]></content>
  </entry>
  <entry>
    <title>Paul the innovator (33): Nicknames</title>
    <link href="https://gatillos.com/yay/2012/06/04/paul-the-innovator-33-nicknames/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2012/06/04/paul-the-innovator-33-nicknames/</id>
    <updated>2012-06-04T21:05:00&#43;01:00</updated>
    <content type="html"><![CDATA[<p>Nicknaming people is a bad, bad thing to do. Kids, don&rsquo;t do it.</p>
<p>That said, one wonders what planet you have to be raised in for you to consider burping as a valid form of expression.</p>
<p>In an office.</p>
]]></content>
  </entry>
  <entry>
    <title>Paul the innovator (32): Deadlines</title>
    <link href="https://gatillos.com/yay/2012/05/07/paul-the-innovator-32-deadlines/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2012/05/07/paul-the-innovator-32-deadlines/</id>
    <updated>2012-05-07T16:05:00&#43;01:00</updated>
    <content type="html"><![CDATA[<p>True story. I find particularly common that thing of not knowing when Q2 and Q3 start and end. If only we had another, more specific way of measuring time!</p>
]]></content>
  </entry>
  <entry>
    <title>Paul the innovator (31): Angry designer</title>
    <link href="https://gatillos.com/yay/2012/04/22/paul-the-innovator-31-angry-designer/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2012/04/22/paul-the-innovator-31-angry-designer/</id>
    <updated>2012-04-22T17:05:00&#43;01:00</updated>
    <content type="html"><![CDATA[<p>To be fair, I&rsquo;m starting to think designers are permanently angry about the world. Must be all the imperfection surrounding us&hellip;</p>
<p>I should mention that what you see on the comic is not <em>exactly</em> Apple&rsquo;s iCloud icon, which caused quite a revolution among designers.  I drew my own version, just in case the evil Apple likes to crush cartoonists.</p>
<p>If you want to see the original icon and probably actually understand what I&rsquo;m talking about, <a href="http://alanvanroemburg.tumblr.com/post/6550997276/apple-icloud-icon-golden-ratio-alan-van-roemburg">take a look at this</a>.</p>
]]></content>
  </entry>
  <entry>
    <title>Paul the innovator (30): Startup mentality</title>
    <link href="https://gatillos.com/yay/2012/04/12/paul-the-innovator-30-startup-mentality/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2012/04/12/paul-the-innovator-30-startup-mentality/</id>
    <updated>2012-04-12T17:05:00&#43;01:00</updated>
    <content type="html"><![CDATA[<p>Well, size doesn&rsquo;t matter, does it?</p>
<p>Most of the script for this strip comes from my beloved Javier Gala, check his site at <a href="http://javiergala.com/">http://javiergala.com/</a></p>
]]></content>
  </entry>
  <entry>
    <title>Paul the innovator (29): Telco hiring</title>
    <link href="https://gatillos.com/yay/2012/04/09/paul-the-innovator-29-telco-hiring/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2012/04/09/paul-the-innovator-29-telco-hiring/</id>
    <updated>2012-04-09T16:05:00&#43;01:00</updated>
    <content type="html"><![CDATA[<p>I find it quite interesting that even though most of the population is suffering the effects of a severe downturn, there seems to be such a lack of &ldquo;internet-savvy&rdquo; IT staff that all that is needed to get a job is to have previously <em>had a job</em> in the same field. That&rsquo;s particularly true with big companies such as Yahoo or Google, often forgetting that those companies employ between 10,000 and 20,0000 people. I&rsquo;m no expert but my guess is that the chances of those companies having some people that are not the brightest is pretty high.</p>
<p>I see this in Telco more than anywhere else. Telco&rsquo;s need to evolve and become more &lsquo;internet&rsquo;, more &lsquo;Google&rsquo;, but more often than not there&rsquo;s a lack of staff that can actually check that a candidate is indeed anything more than a doughnut eating talking head. But hey, if you want a good doughnut, you&rsquo;ve come to the right place.</p>
<p>Anyway, you have to agree it&rsquo;s actually pretty funny.</p>
]]></content>
  </entry>
  <entry>
    <title>Paul the innovator (28): Economic downtimes</title>
    <link href="https://gatillos.com/yay/2012/04/01/paul-the-innovator-28-economic-downtimes/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2012/04/01/paul-the-innovator-28-economic-downtimes/</id>
    <updated>2012-04-01T16:05:00&#43;01:00</updated>
    <content type="html"><![CDATA[<p>They all seem to paint these things as necessary, but some times one has to wonder&hellip;</p>
]]></content>
  </entry>
  <entry>
    <title>Paul the innovator (27): Pair programming</title>
    <link href="https://gatillos.com/yay/2012/02/28/paul-the-innovator-27-pair-programming/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2012/02/28/paul-the-innovator-27-pair-programming/</id>
    <updated>2012-02-28T20:36:25&#43;01:00</updated>
    <content type="html"><![CDATA[<p>I linked this with pair programming, but I think it&rsquo;s a good analogy for many things. I can probably write a motivational book about the subject: <em>Are you a nut cracker or a nut eater?</em> Mmmm that doesn&rsquo;t sound right.</p>
]]></content>
  </entry>
  <entry>
    <title>Paul the innovator (26): Labor Law&#39;s side effect</title>
    <link href="https://gatillos.com/yay/2012/02/21/paul-the-innovator-26-labor-law-side-effects/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2012/02/21/paul-the-innovator-26-labor-law-side-effects/</id>
    <updated>2012-02-21T08:36:25&#43;01:00</updated>
    <content type="html"><![CDATA[<p>Somebody at work explained the recent changes in labor law that had been presented a few days before, and he described it in this very succinct analogy. I found there was a kind of justice on it all, albeit maybe it&rsquo;s perverted justice. Anyway, I thought it was worth a comic, for posterity.</p>
]]></content>
  </entry>
  <entry>
    <title>Paul the innovator (25): The technology plan</title>
    <link href="https://gatillos.com/yay/2012/02/11/paul-the-innovator-25-the-technology-plan/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2012/02/11/paul-the-innovator-25-the-technology-plan/</id>
    <updated>2012-02-11T12:36:25&#43;01:00</updated>
    <content type="html"><![CDATA[<p>The Elder Monkey is a character commonly found in many companies. My original idea was to make a play on 2001 A Space Odyssey&rsquo;s initial scene, during the &lsquo;dawn of man&rsquo;, where a man-ape discovers he can use a bone to crush the skull of other man-apes and hence starts, from my point of view, all technology.</p>
<p>I liked the idea of that man-ape not going much past that. <em>Yes, we get it, you know how to use a bone, now can we just eat?</em></p>
<p>Problem is, I overestimated the popularity of 2001 A Space Odyssey. Apparently most people <em>know</em> about it, but it&rsquo;s not that many that have actually watched the thing. Plus, this would be the second 2001 reference in this comic, maybe I need to renew my repertoire.</p>
]]></content>
  </entry>
  <entry>
    <title>New site design</title>
    <link href="https://gatillos.com/yay/2012/01/29/new-site-design/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2012/01/29/new-site-design/</id>
    <updated>2012-01-29T15:24:32&#43;02:00</updated>
    <content type="html"><![CDATA[<p>Well I finally decided to get rid of wordpress and regain control of the site. Expect a few more changes in the future.</p>
<p>Please let me know anything that is odd or any links that are not working. Hate mail is welcome too.</p>
<p>There are a few known issues:</p>
<ol>
<li>The feed in Google Reader will reset and display all posts and comics as new entries&hellip; sorry about that, you&rsquo;ll have to &lsquo;mark all as read&rsquo;. To be honest, I&rsquo;m not sure it works at all&hellip;</li>
<li>Comment counts on index page always display 0. <em>Working on it!</em></li>
<li>I need to add links to</li>
<li><a href="https://gatillos.com/yay/lifeinterior/">LIFE/interior archive</a></li>
<li><a href="https://gatillos.com/yay/paul/">Paul the innovator archive</a></li>
<li><a href="https://gatillos.com/yay/3panelcomic/">Other stuff archive</a></li>
</ol>
<p>The design is an evolution of a design that my friend Sergi made about two years ago as a draft thing I could start with. I&rsquo;d say that taking two years to implement a design doesn&rsquo;t qualify me as the greatest web developer in the world&hellip; but I get there, don&rsquo;t I?</p>
<p>The site uses a nice thing called Jekyll and the code is in github for you all to peruse. I&rsquo;ll probably post some other entries with small details about that, to help people that might be trying to do the same thing. The comments have been migrated to Disqus, but you shouldn&rsquo;t see much difference.</p>
]]></content>
  </entry>
  <entry>
    <title>Paul the innovator (24): Text to speech</title>
    <link href="https://gatillos.com/yay/2012/01/22/paul-the-innovator-24-text-to-speech/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2012/01/22/paul-the-innovator-24-text-to-speech/</id>
    <updated>2012-01-22T18:43:25&#43;01:00</updated>
    <content type="html"><![CDATA[<p>After the corporate invasion was averted, the adventures of Paul continue.</p>
<p>At least for a while :).</p>
]]></content>
  </entry>
  <entry>
    <title>Paul the innovator (23): Figuring it out</title>
    <link href="https://gatillos.com/yay/2011/12/22/paul-the-innovator-23-figuring-it-out/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2011/12/22/paul-the-innovator-23-figuring-it-out/</id>
    <updated>2011-12-22T15:13:50&#43;01:00</updated>
    <content type="html"><![CDATA[<p>I have this temptation to post the actual organization diagram we&rsquo;ve been having to deal with lately, as no matter how much I try to exaggerate it, it would never get any funnier than that one actually is.</p>
<p>But I won&rsquo;t&hellip; that would be mean.</p>
]]></content>
  </entry>
  <entry>
    <title>Paul the innovator (22): Time to leave</title>
    <link href="https://gatillos.com/yay/2011/12/17/paul-the-innovator-22-time-to-leave/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2011/12/17/paul-the-innovator-22-time-to-leave/</id>
    <updated>2011-12-17T15:12:02&#43;01:00</updated>
    <content type="html"><![CDATA[<p>True story. For monkey&rsquo;s worst enemy is themselves.</p>
]]></content>
  </entry>
  <entry>
    <title>Paul the innovator (21): IT Stampede</title>
    <link href="https://gatillos.com/yay/2011/12/04/paul-the-innovator-21-it-stampede/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2011/12/04/paul-the-innovator-21-it-stampede/</id>
    <updated>2011-12-04T15:00:26&#43;01:00</updated>
    <content type="html"><![CDATA[<p>Don&rsquo;t worry this kind of  humor and in-jokes will be over soon, I just find it very funny. It&rsquo;s just a silly play since we were recently invaded by corporate zombies ourselves. Well, to be honest I&rsquo;m pretty sure I&rsquo;m a corporate zombie too. I just try not to eat human brains, not unlike Vampires that choose not to drink blood. Maybe this will be like the 6th Sense where in the end I&rsquo;ll find out I&rsquo;m actually dead, and have always been. &lt;cue scary music&gt;</p>
<p>Anyway, this is to say that Paul&rsquo;s escape will soon reach a conclusion and we&rsquo;ll be back to more <em>normal</em> strips.</p>
<p>PS: I <em>had</em> to re-use the little monkey that tap-taps Paul on the back, I just <em>had</em>. I like it too much.</p>
<p>PPS: In hindsight, a monkey that touches himself with unusual frequency was not such a good idea for a character :).</p>
]]></content>
  </entry>
  <entry>
    <title>Paul the innovator (20): Fatal distractions</title>
    <link href="https://gatillos.com/yay/2011/12/01/paul-the-innovator-20-fatal-distractions/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2011/12/01/paul-the-innovator-20-fatal-distractions/</id>
    <updated>2011-12-01T19:16:46&#43;01:00</updated>
    <content type="html"><![CDATA[<p>Oh God this is too horrible to even describe. All hope is lost.</p>
<p>PS: No, I don&rsquo;t know who the m-monkey is supposed to be :).</p>
]]></content>
  </entry>
  <entry>
    <title>Paul the innovator (19): Flying monkeys with laser beams</title>
    <link href="https://gatillos.com/yay/2011/11/23/paul-the-innovator-19-flying-monkeys-with-laser-beams/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2011/11/23/paul-the-innovator-19-flying-monkeys-with-laser-beams/</id>
    <updated>2011-11-23T19:24:40&#43;01:00</updated>
    <content type="html"><![CDATA[<p>If not even the flying monkeys with laser beams survived, what hope is there for Paul and his little monkeys!</p>
<p> </p>
]]></content>
  </entry>
  <entry>
    <title>Paul the innovator (18): The escape continues</title>
    <link href="https://gatillos.com/yay/2011/11/18/paul-the-innovator-18-the-escape-continues/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2011/11/18/paul-the-innovator-18-the-escape-continues/</id>
    <updated>2011-11-18T13:29:47&#43;01:00</updated>
    <content type="html"><![CDATA[<p>This hasn&rsquo;t yet happened, but whenever there is a zombie invasion everybody fears the undead will wake up those projects long thought dead, yes the horrible mistakes! The horror!</p>
<p>Note: Please don&rsquo;t judge me by my ability (or lack of) to come up with onomatopoeia in English.</p>
]]></content>
  </entry>
  <entry>
    <title>Paul the innovator (17): The great escape</title>
    <link href="https://gatillos.com/yay/2011/11/13/paul-the-innovator-17-the-great-escape/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2011/11/13/paul-the-innovator-17-the-great-escape/</id>
    <updated>2011-11-13T00:30:28&#43;01:00</updated>
    <content type="html"><![CDATA[<p>Sorry for the delays, it&rsquo;s been busy over here. Watch poor Paul try to save his beloved monkeys from the Zombie invasion. Will he make it?</p>
<p>The corporate merge freed thousands of middle management brainless Zombies that are now desperate for brains, projects and heads&hellip; or headcount&hellip; ANYTHING.</p>
<p> </p>
]]></content>
  </entry>
  <entry>
    <title>Paul the innovator (16): Office party</title>
    <link href="https://gatillos.com/yay/2011/10/25/paul-the-innovator-16-office-party/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2011/10/25/paul-the-innovator-16-office-party/</id>
    <updated>2011-10-25T00:47:25&#43;02:00</updated>
    <content type="html"><![CDATA[<p>This is all <strong>true</strong>. Every. Single. Bit. Of. It.</p>
<p>Unfortunately the office ethics code prohibits recording in office parties. Otherwise I would have proof.</p>
<p>But, trust me on this ;).</p>
]]></content>
  </entry>
  <entry>
    <title>Paul the innovator (15): The terms and conditions</title>
    <link href="https://gatillos.com/yay/2011/10/18/paul-the-innovator-15-the-terms-and-conditions/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2011/10/18/paul-the-innovator-15-the-terms-and-conditions/</id>
    <updated>2011-10-18T20:44:42&#43;02:00</updated>
    <content type="html"><![CDATA[<p>Yes, this happened. Or very much. I do have an email as proof of the &lsquo;well it didn&rsquo;t work with this site, maybe just copy from this other site&rsquo;.</p>
<p>Luckily the only consequence was a very surprised corporate lawyer. I repeat, this is a fictional depiction, an hypothetical situation, no baby monkey was harm or sold.</p>
]]></content>
  </entry>
  <entry>
    <title>Paul the innovator (14): The network operations center</title>
    <link href="https://gatillos.com/yay/2011/10/10/paul-the-innovator-14-the-network-operations-center/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2011/10/10/paul-the-innovator-14-the-network-operations-center/</id>
    <updated>2011-10-10T01:09:56&#43;02:00</updated>
    <content type="html"><![CDATA[<p>You can find some of the toughest guys in charge of NOCs.</p>
]]></content>
  </entry>
  <entry>
    <title>Paul the innovator (13): Adding user experience</title>
    <link href="https://gatillos.com/yay/2011/10/02/paul-the-innovator-13-adding-user-experience/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2011/10/02/paul-the-innovator-13-adding-user-experience/</id>
    <updated>2011-10-02T15:59:42&#43;02:00</updated>
    <content type="html"><![CDATA[<p>This is all too common&hellip; you can blame the UX designer for agreeing to do crap in the first place or the manager for only adding it as an afterthought. I&rsquo;m going to just make fun of both :).</p>
<p>By the way, introducing <em>Xavier The UX Designer.</em> ;)</p>
]]></content>
  </entry>
  <entry>
    <title>Paul the innovator (12): The announcement speech</title>
    <link href="https://gatillos.com/yay/2011/09/29/paul-the-innovator-12-the-announcement-speech/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2011/09/29/paul-the-innovator-12-the-announcement-speech/</id>
    <updated>2011-09-29T19:05:42&#43;02:00</updated>
    <content type="html"><![CDATA[<p>Yes, you usually end up trying to put a more positive spin on it ;).</p>
<p><em>Update: made it a bit bigger (bigger is better, isn&rsquo;t it? I just hate that the Cradle of Filth T-Shirt is not that easy to spot!).</em></p>
]]></content>
  </entry>
  <entry>
    <title>Notes on creating scripts for comics</title>
    <link href="https://gatillos.com/yay/2011/09/25/notes-on-creating-scripts-for-comics/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2011/09/25/notes-on-creating-scripts-for-comics/</id>
    <updated>2011-09-25T20:24:32&#43;02:00</updated>
    <content type="html"><![CDATA[<p>In the eternal search for the Best Way To Do Things, I&rsquo;m trying to do the unthinkable: write a whole, complete script before actually starting to draw the comic.</p>
<p>I&rsquo;m not so sure this is actually a good idea, given that the process of creation for a comic seems to be intrinsically linked to drawing. It would seem more appropriate to do sketches and scripting at the same time, which is more or less what I&rsquo;ve been doing so far. I do have an idea and some draft scripting, but it&rsquo;s usually not that much and when I&rsquo;m actually drawing things change a lot.</p>
<p>So this is what&rsquo;s happening&hellip; I&rsquo;m writing a script, a short one. I&rsquo;ve explored a couple of ideas so far but none seem to what I&rsquo;d like to do next.</p>
<p>On the journey to scripting aside from, well, a notepad, what seems to be working very nicely for me is <a href="http://celtx.com" target="_blank">Celtx</a>. It&rsquo;s very fast and simple. It&rsquo;s supposed to be able to work with sketches and things like that, but I&rsquo;m using it as a task-oriented word processor. Typing is fast, you just press tab to iterate between the typical structures in the script of a comic, and that&rsquo;s about it. It does generate nice looking PDFs too, which makes you look more professional.</p>
<p> </p>
<p>PS: I try character drawing from time to time, but they all look more or less the same &ndash;I&rsquo;m going to take that as meaning I&rsquo;ve found &lsquo;my style&rsquo;.</p>
<p>and another PS: Oh, I started also translating LIFE/interior to Spanish, just because.</p>
]]></content>
  </entry>
  <entry>
    <title>Paul the innovator (11): Travel economics</title>
    <link href="https://gatillos.com/yay/2011/09/16/paul-the-innovator-11-travel-economics/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2011/09/16/paul-the-innovator-11-travel-economics/</id>
    <updated>2011-09-16T02:34:08&#43;02:00</updated>
    <content type="html"><![CDATA[<p>I love how admins in big companies follow Travel Policy as if it was some kind of new-found faith that finally gave meaning to their lives. We all know travel implies insurance and other costs, but no matter how you look at it, it&rsquo;s always overpriced. Best thing is that trying to change any of it looks to them like trying to change one of the 10 commandments.</p>
<p>Btw I decided to make the page a bit bigger. I was keeping it under 768 pixels for some weird reason but maybe it&rsquo;s time I get into the new century.</p>
]]></content>
  </entry>
  <entry>
    <title>Paul the innovator (10): The survey</title>
    <link href="https://gatillos.com/yay/2011/09/13/paul-the-innovator-10-the-survey/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2011/09/13/paul-the-innovator-10-the-survey/</id>
    <updated>2011-09-13T20:04:19&#43;02:00</updated>
    <content type="html"><![CDATA[<p>This is one of the most effective methods for handling criticism inside a company!</p>
<p>It&rsquo;s a kind of Pavlov conditioning.</p>
<ul>
<li>"How am I managing you?"</li>
	<li>"Well you could change the way you apply the <em>&lt;SHOCK&gt;</em>ouch!"</li>
	<li>"I repeat, how am I doing?"</li>
	<li>And after a while, you'll get an "You are doing excellent, sir!"</li>
</ul>
As a disclaimer, this is related to personal experiences but in my case I've been always lucky enough that my bosses actually listened if you talked to them. Funny thing is that somehow, they managed to explain it exactly as depicted here :D.
]]></content>
  </entry>
  <entry>
    <title>Paul the innovator (9): The reorganization</title>
    <link href="https://gatillos.com/yay/2011/09/09/paul-the-innovator-9-the-reorganization/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2011/09/09/paul-the-innovator-9-the-reorganization/</id>
    <updated>2011-09-09T20:37:00&#43;02:00</updated>
    <content type="html"><![CDATA[<p>This dictionary.com thing actually happened to us when someone was presenting the plan for one of the biggest projects I was involved in, back when we were younger and wild.</p>
<p> </p>
]]></content>
  </entry>
  <entry>
    <title>LIFE/interior: Miss you (10) / Epilogue - continued - 9</title>
    <link href="https://gatillos.com/yay/2011/08/30/lifeinterior-miss-you-10-epilogue-cont-9/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2011/08/30/lifeinterior-miss-you-10-epilogue-cont-9/</id>
    <updated>2011-08-30T01:11:56&#43;02:00</updated>
    <content type="html"><![CDATA[<p>Continued from previous.</p>
<p><em>Note: To my dismay I discovered that iPads reduce quality of big images, so had to split this comic in&hellip; ten pages. That means a new one will show up in RSS readers&hellip;</em></p>
]]></content>
  </entry>
  <entry>
    <title>LIFE/interior: Miss you (10) / Epilogue - continued - 8</title>
    <link href="https://gatillos.com/yay/2011/08/30/lifeinterior-miss-you-10-epilogue-cont-8/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2011/08/30/lifeinterior-miss-you-10-epilogue-cont-8/</id>
    <updated>2011-08-30T01:10:56&#43;02:00</updated>
    <content type="html"><![CDATA[<p>Continued from previous.</p>
<p><em>Note: To my dismay I discovered that iPads reduce quality of big images, so had to split this comic in&hellip; ten pages. That means a new one will show up in RSS readers&hellip;</em></p>
]]></content>
  </entry>
  <entry>
    <title>LIFE/interior: Miss you (10) / Epilogue - continued - 7</title>
    <link href="https://gatillos.com/yay/2011/08/30/lifeinterior-miss-you-10-epilogue-cont-7/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2011/08/30/lifeinterior-miss-you-10-epilogue-cont-7/</id>
    <updated>2011-08-30T01:09:56&#43;02:00</updated>
    <content type="html"><![CDATA[<p>Continued from previous.</p>
<p><em>Note: To my dismay I discovered that iPads reduce quality of big images, so had to split this comic in&hellip; ten pages. That means a new one will show up in RSS readers&hellip;</em></p>
]]></content>
  </entry>
  <entry>
    <title>LIFE/interior: Miss you (10) / Epilogue - continued - 6</title>
    <link href="https://gatillos.com/yay/2011/08/30/lifeinterior-miss-you-10-epilogue-cont-6/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2011/08/30/lifeinterior-miss-you-10-epilogue-cont-6/</id>
    <updated>2011-08-30T01:08:56&#43;02:00</updated>
    <content type="html"><![CDATA[<p>Continued from previous.</p>
<p><em>Note: To my dismay I discovered that iPads reduce quality of big images, so had to split this comic in&hellip; ten pages. That means a new one will show up in RSS readers&hellip;</em></p>
]]></content>
  </entry>
  <entry>
    <title>LIFE/interior: Miss you (10) / Epilogue - continued - 5</title>
    <link href="https://gatillos.com/yay/2011/08/30/lifeinterior-miss-you-10-epilogue-cont-5/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2011/08/30/lifeinterior-miss-you-10-epilogue-cont-5/</id>
    <updated>2011-08-30T01:07:56&#43;02:00</updated>
    <content type="html"><![CDATA[<p>Continued from previous.</p>
<p><em>Note: To my dismay I discovered that iPads reduce quality of big images, so had to split this comic in&hellip; ten pages. That means a new one will show up in RSS readers&hellip;</em></p>
]]></content>
  </entry>
  <entry>
    <title>LIFE/interior: Miss you (10) / Epilogue - continued - 4</title>
    <link href="https://gatillos.com/yay/2011/08/30/lifeinterior-miss-you-10-epilogue-cont-4/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2011/08/30/lifeinterior-miss-you-10-epilogue-cont-4/</id>
    <updated>2011-08-30T01:06:56&#43;02:00</updated>
    <content type="html"><![CDATA[<p>Continued from previous.</p>
<p><em>Note: To my dismay I discovered that iPads reduce quality of big images, so had to split this comic in&hellip; ten pages. That means a new one will show up in RSS readers&hellip;</em></p>
]]></content>
  </entry>
  <entry>
    <title>LIFE/interior: Miss you (10) / Epilogue - continued - 3</title>
    <link href="https://gatillos.com/yay/2011/08/30/lifeinterior-miss-you-10-epilogue-cont-3/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2011/08/30/lifeinterior-miss-you-10-epilogue-cont-3/</id>
    <updated>2011-08-30T01:05:56&#43;02:00</updated>
    <content type="html"><![CDATA[<p>Continued from previous.</p>
<p><em>Note: To my dismay I discovered that iPads reduce quality of big images, so had to split this comic in&hellip; ten pages. That means a new one will show up in RSS readers&hellip;</em></p>
]]></content>
  </entry>
  <entry>
    <title>LIFE/interior: Miss you (10) / Epilogue - continued - 2</title>
    <link href="https://gatillos.com/yay/2011/08/30/lifeinterior-miss-you-10-epilogue-cont-2/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2011/08/30/lifeinterior-miss-you-10-epilogue-cont-2/</id>
    <updated>2011-08-30T01:04:56&#43;02:00</updated>
    <content type="html"><![CDATA[<p>Continued from previous.</p>
<p><em>Note: To my dismay I discovered that iPads reduce quality of big images, so had to split this comic in&hellip; ten pages. That means a new one will show up in RSS readers&hellip;</em></p>
]]></content>
  </entry>
  <entry>
    <title>LIFE/interior: Miss you (10) / Epilogue - continued - 1</title>
    <link href="https://gatillos.com/yay/2011/08/30/lifeinterior-miss-you-10-epilogue-cont-1/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2011/08/30/lifeinterior-miss-you-10-epilogue-cont-1/</id>
    <updated>2011-08-30T01:03:56&#43;02:00</updated>
    <content type="html"><![CDATA[<p>Continued from previous.</p>
<p><em>Note: To my dismay I discovered that iPads reduce quality of big images, so had to split this comic in&hellip; ten pages. That means a new one will show up in RSS readers&hellip;</em></p>
]]></content>
  </entry>
  <entry>
    <title>LIFE/interior: Miss you (10) / Epilogue</title>
    <link href="https://gatillos.com/yay/2011/08/30/lifeinterior-miss-you-10-epilogue/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2011/08/30/lifeinterior-miss-you-10-epilogue/</id>
    <updated>2011-08-30T01:02:56&#43;02:00</updated>
    <content type="html"><![CDATA[<p>Well this is the end, my friend, the end.<em><span style="color: #888888;"> /Cue The Doors soundtrack/</span></em></p>
<p>This page was a long time in the making, I think it&rsquo;s roughly six or seven standard pages. That&rsquo;s one of the things I&rsquo;ve learned: I don&rsquo;t like the concept of &lsquo;page&rsquo;, it doesn&rsquo;t really work well for comics (<em>cough</em> graphic novel <em>cough</em>) like mine.</p>
<p>I&rsquo;m thinking of writing a blog post about my experiences but I want to thank everybody that supported me on this. Without you I would never have finished it.</p>
<p>Even when my drawings were crappy I always got support, sometimes in the form of harsh and cruel critiques ;) but support nonetheless &ndash;in all truth, all was always well deserved :).</p>
<p>It&rsquo;s been an amazing journey, from knowing zero about drawing and publishing a webcomic, and with that scary feeling you get when writing in a foreign (to me!) language, to a decent ability and a good overall feeling. Style has changed a lot in this comic, and it&rsquo;s not too coherent so I don&rsquo;t expect many people to ever read it. As they say, the goal is the journey itself.</p>
<p>Now that I know myself better and I have learned a bit about the medium, the plan is simple: keep working, keep growing. Make something, someday, that someone likes.</p>
<p>So here I hope you enjoyed it. Let me know what you think about the whole thing, you know I <em>die</em> for feedback.</p>
<p><em><span style="color: #888888;">Technicalities: Almost everything drawn by hand, shaded by hand using just a pencil and then scanned and tinted. The epilogue uses images from the beginning of the comic, which were drawn in vector mode using Inkscape, directly on screen. Oh, and the seashells were colored using watercolors. This page is a huge JPG file that might have some trouble rendering, if so please let me know and I&rsquo;ll see about splitting it up in pages.</span></em></p>
<p><em>Note: To my dismay I discovered that iPads reduce quality of big images, so had to split this comic in&hellip; ten pages. That means a new one will show up in RSS readers&hellip;</em></p>
]]></content>
  </entry>
  <entry>
    <title>Paul the innovator (8): The acquisition</title>
    <link href="https://gatillos.com/yay/2011/08/27/paul-the-innovator-8-the-acquisition/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2011/08/27/paul-the-innovator-8-the-acquisition/</id>
    <updated>2011-08-27T15:37:47&#43;02:00</updated>
    <content type="html"><![CDATA[<p>Don&rsquo;t judge the monkey.</p>
]]></content>
  </entry>
  <entry>
    <title>LIFE/interior: Miss you (9)</title>
    <link href="https://gatillos.com/yay/2011/08/24/lifeinterior-miss-you-9/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2011/08/24/lifeinterior-miss-you-9/</id>
    <updated>2011-08-24T02:16:08&#43;02:00</updated>
    <content type="html"><![CDATA[<p>New page&hellip; and countdown to the ending. What will happen? I can hear you &ldquo;OH GOD I CAN&rsquo;T WAIT? OH GOD OH GOD!&rdquo; but don&rsquo;t despair, there&rsquo;s quite a few pages already drawn, wheels are in motion ;).</p>
<p><em><span style="color: #888888;">Technicalities: Painted using a graphite pencil, then inked on top of it, then added some shading using the same pencil. Finally, added some tint using Inkscape and the lettering. Oh, and there&rsquo;s an effect in the &lsquo;Stop Villain!&rsquo; text but it&rsquo;s too silly to even mention ;).</span></em></p>
]]></content>
  </entry>
  <entry>
    <title>LIFE/interior: Miss you (8)</title>
    <link href="https://gatillos.com/yay/2011/08/13/lifeinterior-miss-you-8-bis/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2011/08/13/lifeinterior-miss-you-8-bis/</id>
    <updated>2011-08-13T15:49:48&#43;02:00</updated>
    <content type="html"><![CDATA[<p>Continued from previous.</p>
<p><em>Note: To my dismay I discovered that iPads reduce quality of big images, so had to split this comic in two. That means a new one will show up in RSS readers&hellip;</em></p>
]]></content>
  </entry>
  <entry>
    <title>LIFE/interior: Miss you (8)</title>
    <link href="https://gatillos.com/yay/2011/08/12/lifeinterior-miss-you-8/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2011/08/12/lifeinterior-miss-you-8/</id>
    <updated>2011-08-12T15:49:48&#43;02:00</updated>
    <content type="html"><![CDATA[<p>A double page today. Story continues and we are actually getting to the end. Think of this note as when you take a quick look at the watch in the cinema and you realize there&rsquo;s only about 10 minutes left. :)</p>
<p><em><span style="color: #888888;">Technicalities: For the last months I tried to keep myself under 2048 pixels of height. Not for really a good reason, just because bigger seemed to mess with quite a few things like the Facebook poster and some thumbnail generators. But I really feel some bits of the story need to be together and I could have published to pages simultaneously but decided for a big one. Also, this is a bit of a return to past techniques, but with the addition of some graphite shading. All drawings are scanned here, and only minor shading added.</span></em></p>
<p><em>Note: To my dismay I discovered that iPads reduce quality of big images, so had to split this comic in two. That means a new one will show up in RSS readers&hellip;</em></p>
]]></content>
  </entry>
  <entry>
    <title>On styles and color, again. Oh, and still drawing.</title>
    <link href="https://gatillos.com/yay/2011/08/09/on-styles-and-color-again-oh-and-still-drawing/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2011/08/09/on-styles-and-color-again-oh-and-still-drawing/</id>
    <updated>2011-08-09T21:29:00&#43;02:00</updated>
    <content type="html"><![CDATA[<p>Well it&rsquo;s been a few weeks without updates. I actually have a few pages almost finished, this time I just wanted to try to make sure they are a bit more coherent. Not sure if it will work, of course&hellip;</p>
<p>I&rsquo;m having a bit of a conundrum here, well I would if I knew what the word conundrum actually means. Thing is, I&rsquo;ve tried color with some very nice results but most of the time it doesn&rsquo;t feel right. I feel I really need to set on a small palette, maybe grays or shades of blue or something. For the time being I decided I&rsquo;m going a bit back and using shades applied in Inkscape and pencil shading.</p>
<p>I&rsquo;ll continue practicing with watercolors to see where I can apply them safely.</p>
<p>Take a look at this:</p>
<div class="post-image"><a href="https://gatillos.com/yay/2011/08/09/on-styles-and-color-again-oh-and-still-drawing/compo-20110809_a.png"><img class="" title="compo 20110809_a" src="https://gatillos.com/yay/2011/08/09/on-styles-and-color-again-oh-and-still-drawing/compo-20110809_a-150x300.png" alt="" width="150" height="300"></a></div>
<div class="post-image-caption">Above pencil, below after applying ink (manually) and converting to gray, click to zoom</div>
<p>Here, I had a lot of fun drawing it with the graphite pencil. Then I applied some ink as usual. After that I would normally just remove all pencil, either erasing or on the computer, but I figured I could try to take advantage of it and keep some shades of gray which give it a very nice look. Considering it&rsquo;s supposed to be part of a kind-of-gloomy scene, it feels right.</p>
<div class="post-image"><a href="https://gatillos.com/yay/2011/08/09/on-styles-and-color-again-oh-and-still-drawing/compo-20110809_c.png"><img class="" title="compo 20110809_c" src="https://gatillos.com/yay/2011/08/09/on-styles-and-color-again-oh-and-still-drawing/compo-20110809_c-75x300.png" alt="" width="75" height="300"></a></div>
<div class="post-image-caption">Processing an image. Click to zoom.</div>
<p>Above you can see the original pencil&amp;ink work, quite draft. I scanned it and then removed pencil via Levels (2nd image), then added a kind of sepia background and some shading for the final image. It still needs a bit more work, a bit more shading but you get the idea.</p>
<div class="post-image"><a href="https://gatillos.com/yay/2011/08/09/on-styles-and-color-again-oh-and-still-drawing/compo_20110809_d.png"><img class="" title="compo_20110809_d" src="https://gatillos.com/yay/2011/08/09/on-styles-and-color-again-oh-and-still-drawing/compo_20110809_d-300x232.png" alt="" width="300" height="232"></a></div>
<div class="post-image-caption">Ink and pencil plus some basic coloring. Click to zoom.</div>
<p>Finally, above you can see yet another twist on the style. It&rsquo;s a pencil image, which as I&rsquo;ve mentioned I enjoy drawing, to which I added a bit of ink (just a bit), and then scanned. On top of it I layered the basic sepia/brown colors you can see. It&rsquo;s simple and very fast, which is a bonus to lazy people like me.</p>
<p>Anyway, I&rsquo;m going to update the last comic page I posted in LIFE/interior because I didn&rsquo;t like the color. I&rsquo;ll just remove some color. It might show up in your Feed reader, sorry about that. The next page is coming shortly after that.</p>
<p>Oh, the meaningful conclusion is this: I want to do what I enjoy the most, and that seems to be more about pencil and real paper than computers and watercolor, so far. Both using the computer and watercolor have a big drawback: they need a &lsquo;setup&rsquo;, kind of a chair space, sitting in a specific place, etc., while drawing panels with a pencil can be done almost anywhere.</p>
]]></content>
  </entry>
  <entry>
    <title>Paul the innovator (7): The first version</title>
    <link href="https://gatillos.com/yay/2011/07/23/paul-the-innovator-7-the-first-version/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2011/07/23/paul-the-innovator-7-the-first-version/</id>
    <updated>2011-07-23T14:44:45&#43;02:00</updated>
    <content type="html"><![CDATA[<p>Of course, this is in no way related to my day job experiences, it&rsquo;s just speculation on how life must be for the poor souls that have to work in an environment where things like this could happen.</p>
<p>Honest.</p>
]]></content>
  </entry>
  <entry>
    <title>LIFE/interior: Miss you (7)</title>
    <link href="https://gatillos.com/yay/2011/07/09/lifeinterior-miss-you-7/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2011/07/09/lifeinterior-miss-you-7/</id>
    <updated>2011-07-09T16:55:07&#43;02:00</updated>
    <content type="html"><![CDATA[<p>New comic, finally. Summer is taking a toll, as you can see&hellip; but it goes on. Update: created a new page removing most of the color.</p>
<p><em><span style="color: #888888;">Technicalities: Mostly scanned, except for the two portraits I made just using the calligraphy tool in Inkscape. Colored using watercolor pencils, different types of paper, but none of them actually watercolor paper.</span></em>
<em></em></p>
]]></content>
  </entry>
  <entry>
    <title>LIFE/interior: Miss you (6)</title>
    <link href="https://gatillos.com/yay/2011/06/17/lifeinterior-miss-you-6/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2011/06/17/lifeinterior-miss-you-6/</id>
    <updated>2011-06-17T13:31:46&#43;02:00</updated>
    <content type="html"><![CDATA[<p>And another page&hellip; <em><strong></strong></em>you can&rsquo;t complain about me being late with this page because it&rsquo;s got <strong>kittens</strong>, come on, <em><strong>kittens! </strong></em></p>
<p><span style="color: #888888;"><em>Technicalities: I did strange things with this one. First panel is mostly just pen-brush going crazy, with some added watercolor just for the sake of it. Last one is mostly watercolor but I added some shade using pen in still damp paper, which gives an interesting effect.</em></span></p>
]]></content>
  </entry>
  <entry>
    <title>LIFE/interior: Miss you (5)</title>
    <link href="https://gatillos.com/yay/2011/06/03/lifeinterior-miss-you-5/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2011/06/03/lifeinterior-miss-you-5/</id>
    <updated>2011-06-03T00:39:12&#43;02:00</updated>
    <content type="html"><![CDATA[<p>A colorful one, because&hellip; why not? :)</p>
<p>I enjoy painting with watercolors. It takes me back to childhood memories. I think that it somehow looks better, notwithstanding the fact that I&rsquo;m not particularly good at picking colors.</p>
<p>And yes, we are getting closer to an ending. Oh!</p>
<p><em><span style="color: #888888;">Technicalities: This time all the drawings were drawn by hand, with the exception of  that little Ana at the bottom, which is actually copy&amp;pasted and  slightly retouched from another page. The scanned images had almost no modification, but an Auto levels adjustment in GIMP is a must. Some I adjusted manually, but basically if I don&rsquo;t do the levels everything looks faded. In particular, the ink seems to not like being watered. Also, the final size of the image was roughly 2 MB which is quite a lot, so I had to compress it a bit and make a jpg.</span></em></p>
]]></content>
  </entry>
  <entry>
    <title>I got a bit distracted</title>
    <link href="https://gatillos.com/yay/2011/05/30/i-got-a-bit-distracted/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2011/05/30/i-got-a-bit-distracted/</id>
    <updated>2011-05-30T23:36:42&#43;02:00</updated>
    <content type="html"><![CDATA[<p>I have an outline for the next page but somehow got distracted drawing with this graphite pencil. It&rsquo;s a lot of fun. Pencil doesn&rsquo;t really translate very well to the screen, so I did the trick with the auto levels of Mac OS X&rsquo;s preview and it looks better.</p>
<div class="post-image"><a href="https://gatillos.com/yay/2011/05/30/i-got-a-bit-distracted/scan-20110530-1-face-levels-mini.png"><img class="" title="Arty Ana portrait" src="https://gatillos.com/yay/2011/05/30/i-got-a-bit-distracted/scan-20110530-1-face-levels-mini.png" alt="" width="600" height="939"></a></div>
<div class="post-image-caption">Arty Ana portrait</div>
<p>The pen is a Cretacolor Monolith, which is particularly interesting because it&rsquo;s essentially all graphite, no wood, but still feels like a normal pencil.</p>
<p>I&rsquo;ve been doing some other sketches but maybe it&rsquo;s a bit too early to upload them, I&rsquo;m thinking of a new character for the 3-panel strips (or similar) format.</p>
]]></content>
  </entry>
  <entry>
    <title>LIFE/interior: Miss you (4)</title>
    <link href="https://gatillos.com/yay/2011/05/21/lifeinterior-miss-you-4/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2011/05/21/lifeinterior-miss-you-4/</id>
    <updated>2011-05-21T12:30:33&#43;02:00</updated>
    <content type="html"><![CDATA[<p>I know you want violence but there&rsquo;s still a little more talk to come, and kittens.</p>
<p><span style="color: #888888;"><em>Technicalities: There&rsquo;s three panels where I played again with the watercolours, guess which ones they are :). Maybe I should also mention that these past pages I have done them without an external monitor, meaning trusting the crappy screen of my old macbook for the colors. I need to check how these look in a nicer screen.</em></span></p>
]]></content>
  </entry>
  <entry>
    <title>LIFE/interior: Miss you (3)</title>
    <link href="https://gatillos.com/yay/2011/05/14/lifeinterior-miss-you-3/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2011/05/14/lifeinterior-miss-you-3/</id>
    <updated>2011-05-14T15:50:28&#43;02:00</updated>
    <content type="html"><![CDATA[<p>Well I think I skipped a week, bad Oscar, bad. I hope my huge audience will tolerate this, acknowledging busy life can sometimes mess with release plans.</p>
<p><span style="color: #888888;">Technicalities: there&rsquo;s a few panels in which I tried coloring a bit by hand, with watercolours. I had to enhance the color levels a bit because after scanning they tend to look quite dime. </span></p>
]]></content>
  </entry>
  <entry>
    <title>LIFE/interior: Miss you (2)</title>
    <link href="https://gatillos.com/yay/2011/05/02/lifeinterior-miss-you-2/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2011/05/02/lifeinterior-miss-you-2/</id>
    <updated>2011-05-02T01:42:10&#43;02:00</updated>
    <content type="html"><![CDATA[<p>A little more close to a re-encounter. Not that much artwork on this one, but you get the idea :).</p>
<p>Oh, guess who bought a set of watercolors :).</p>
<p> </p>
]]></content>
  </entry>
  <entry>
    <title>LIFE/interior: Miss you (1)</title>
    <link href="https://gatillos.com/yay/2011/04/23/lifeinterior-miss-you-1/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2011/04/23/lifeinterior-miss-you-1/</id>
    <updated>2011-04-23T00:26:00&#43;02:00</updated>
    <content type="html"><![CDATA[<p>I like drawing Ana, maybe I&rsquo;ll make a spinoff :). I like to draw Mr Mann too but I can&rsquo;t seem to draw him in a consistent way. So anyway, I think it&rsquo;s about time we put these two together, isn&rsquo;t it?</p>
<p><em><span style="color: #888888;">Technicalities: not much new here, all drawings are hand made but with different paper. Some of these panels are actually huge A4 size drawings, because I was trying what happens when you do that. Essentially it&rsquo;s ok but if you don&rsquo;t do it consistently (i.e. if you do it like me :)) the line weight looks too different between one panel and the other. The image is a big uncompressed png, maybe it&rsquo;ll take a while to load.</span></em></p>
]]></content>
  </entry>
  <entry>
    <title>LIFE/interior: The ghost of Ana (7)</title>
    <link href="https://gatillos.com/yay/2011/04/16/lifeinterior-the-ghost-of-ana-7/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2011/04/16/lifeinterior-the-ghost-of-ana-7/</id>
    <updated>2011-04-16T23:46:22&#43;02:00</updated>
    <content type="html"><![CDATA[<p>Well, what can I say, sorry for the delay. The story continues!</p>
]]></content>
  </entry>
  <entry>
    <title>Paul the innovator (6): The new hire</title>
    <link href="https://gatillos.com/yay/2011/04/15/paul-the-innovator-6-the-new-hire/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2011/04/15/paul-the-innovator-6-the-new-hire/</id>
    <updated>2011-04-15T14:39:55&#43;02:00</updated>
    <content type="html"><![CDATA[<p>You&rsquo;ve got to love team players :).</p>
]]></content>
  </entry>
  <entry>
    <title>Hold on...</title>
    <link href="https://gatillos.com/yay/2011/03/25/hold-on/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2011/03/25/hold-on/</id>
    <updated>2011-03-25T19:46:35&#43;01:00</updated>
    <content type="html"><![CDATA[<p>The author is a bit under the weather (imagine some kind of stormy weather that lasts for too long) and will need a bit of time to catch up. The LIFE/interior series will be continued shortly, shouldn&rsquo;t be more than a week.</p>
<p>Here&rsquo;s a <strong>cat</strong> for you.</p>
]]></content>
  </entry>
  <entry>
    <title>Paul the innovator (5): The collaborative site</title>
    <link href="https://gatillos.com/yay/2011/03/19/paul-the-innovator-5-the-collaborative-site/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2011/03/19/paul-the-innovator-5-the-collaborative-site/</id>
    <updated>2011-03-19T13:27:57&#43;01:00</updated>
    <content type="html"><![CDATA[<p>I&rsquo;m tempted to put screenshots here, to prove my point. I&rsquo;ll continue with the passive-aggressiveness, instead.</p>
]]></content>
  </entry>
  <entry>
    <title>LIFE/interior: The ghost of Ana (6)</title>
    <link href="https://gatillos.com/yay/2011/03/13/lifeinterior-the-ghost-of-ana-6/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2011/03/13/lifeinterior-the-ghost-of-ana-6/</id>
    <updated>2011-03-13T13:53:52&#43;01:00</updated>
    <content type="html"><![CDATA[<p>Well, a new page, leaving the gore aside for a while. This one is a bit rushed and rough, sorry about that. My excuse this time it&rsquo;s that I have a cold and it&rsquo;s hard to do straight lines while coughing. Also, I damped a draft drawing with spilled coffee :).</p>
<p><span style="color: #888888;"><em>Technicalities: This is an interesting one. I discovered one thing I was doing wrong: Inkscape&rsquo;s calligraphy tool is better used with <strong>no stroke set</strong>, just the fill color. I don&rsquo;t know why I didn&rsquo;t notice this before! Otherwise the lines are too thick and lack the natural brush-like endings. The first and last drawings are obviously hand drawn, the middle ones are all drawn directly on the screen. I used the Gouache texture filter on some panels. Oh, it&rsquo;s also a PNG, not sure if that makes any difference.</em></span></p>
]]></content>
  </entry>
  <entry>
    <title>LIFE/interior: The ghost of Ana (5)</title>
    <link href="https://gatillos.com/yay/2011/03/06/lifeinterior-the-ghost-of-ana-5/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2011/03/06/lifeinterior-the-ghost-of-ana-5/</id>
    <updated>2011-03-06T16:35:55&#43;01:00</updated>
    <content type="html"><![CDATA[<p>New page, I&rsquo;m getting a bit tired of the violence, so don&rsquo;t worry it will be over soon. I really don&rsquo;t like this page that much, it&rsquo;s too messy, but I&rsquo;m tired so this will have to do :). Let&rsquo;s go back to the happy times.</p>
<p><span style="color: #888888;"><em>Technicalities: Not much, all scanned images, some with the no-bleed paper, some with the regular one.</em></span></p>
]]></content>
  </entry>
  <entry>
    <title>LIFE/interior: The ghost of Ana (4)</title>
    <link href="https://gatillos.com/yay/2011/02/27/lifeinterior-the-ghost-of-ana-4/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2011/02/27/lifeinterior-the-ghost-of-ana-4/</id>
    <updated>2011-02-27T21:44:38&#43;01:00</updated>
    <content type="html"><![CDATA[<p>Well, a tiny flashback to explain who that guy was. I&rsquo;m almost finished with the gore, I <del>swear</del><em> kind of assure</em>. I&rsquo;m liking these drawings a bit more, it&rsquo;s all about paying attention to volume, as people keep saying and repeating. If only I would listen from time to time!</p>
<p>It&rsquo;s not that I do the whole sketch-with-models then draw thing, but I do try to outline the figure using stick figures, well actually stick 3D geometrical figures. Of course, whenever I&rsquo;m in a hurry I bypass all of that and just convince myself it doesn&rsquo;t look <em>that</em> bad. Still, drawing the same face and body in many different angles is a nightmare if it was not defined clearly. The only ones I can say were defined clearly are Ana&rsquo;s and kid Mr Mann&rsquo;s. You can tell those two are usually easier to identify than the others, no matter the angle you see them.</p>
<p>The gangster-like expressions in this page were reviewed and approved by linguists. Blame them.</p>
<p><span style="color: #888888;"><em>Technicalities: The close up of the hand pressing the button and the metal shutters opening are all done freehand on the tablet, using Inkscape&rsquo;s calligraphy tool. The rest were hand drawn on the &ldquo;bleed proof&rdquo; paper I got the other day. I&rsquo;m drawing the graphics a big bigger than usual, and shrinking them after scanning.</em></span></p>
]]></content>
  </entry>
  <entry>
    <title>LIFE/interior: The ghost of Ana (3)</title>
    <link href="https://gatillos.com/yay/2011/02/20/lifeinterior-the-ghost-of-ana-3/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2011/02/20/lifeinterior-the-ghost-of-ana-3/</id>
    <updated>2011-02-20T21:11:09&#43;01:00</updated>
    <content type="html"><![CDATA[<p>I&rsquo;m trying not to make it too gore, but the only way to tell this part of the story seems to do it like this, otherwise it lacks the necessary strength. For the record, I thought about Ana being named Alaska instead, but I don&rsquo;t know how many would have picked the reference (hint: <a href="http://www.youtube.com/watch?v=PwCXoAuV_zE">this</a>). Maybe that&rsquo;s already an obscure reference. <em>It&rsquo;s so cold in Alaska.</em></p>
<p>Anyway, can you see the script is heading somewhere? I know you all doubted it :).</p>
<p><span style="color: #888888;"><em>Technicalities: drawn using a different paper, one that says in big letters &ldquo;bleed proof&rdquo;. Somehow I&rsquo;m actually missing the ink bleeding of the sketch book. We&rsquo;ll see if I get back to that.</em></span></p>
]]></content>
  </entry>
  <entry>
    <title>LIFE/interior: The ghost of Ana (2)</title>
    <link href="https://gatillos.com/yay/2011/02/13/lifeinterior-the-ghost-of-ana-2/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2011/02/13/lifeinterior-the-ghost-of-ana-2/</id>
    <updated>2011-02-13T14:35:41&#43;01:00</updated>
    <content type="html"><![CDATA[<p>The ghost of Ana continues telling her story. I hope everything makes more and more sense for those reading this thing. It could very well be that it goes the opposite way, I never know ;).</p>
]]></content>
  </entry>
  <entry>
    <title>LIFE/interior: The ghost of Ana (1)</title>
    <link href="https://gatillos.com/yay/2011/02/04/lifeinterior-the-ghost-of-ana-1/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2011/02/04/lifeinterior-the-ghost-of-ana-1/</id>
    <updated>2011-02-04T22:52:44&#43;01:00</updated>
    <content type="html"><![CDATA[<p>Well let&rsquo;s change narrator for a while, to see if we can listen to something about the other side of the story. I have a scanner now, so hopefully quality will improve a bit. I had a lot of trouble with this page because essentially I kept writing a whole novel in it. It contained <em>way</em> too much text, but there were so many things I wanted to write about and that seemed <em>completely necessary</em> <em>for the story</em>&hellip; anyway, I&rsquo;ll scatter them through a few more pages. Now that I think about it, maybe that&rsquo;s where the whole concept of having pages originated. Amazing.</p>
<p><span style="color: #888888;"><em>Technically: same old, same old. Some of the shading was done using the &lsquo;splotchy&rsquo; pen in the calligraphy tool, which kind of mixes better with the rough ink. By the way, the ink looks rough because the paper I use is probably not the best for ink, I can see it spread through the pores in the paper when I draw. Of course, I&rsquo;m too cheap to get another sketch book.</em></span></p>
<p><span style="color: #888888;"><em>Update: fixed typo to appease the masses.
</em></span></p>
]]></content>
  </entry>
  <entry>
    <title>Paul the innovator (4): The resource manager</title>
    <link href="https://gatillos.com/yay/2011/02/04/paul-the-innovator-4/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2011/02/04/paul-the-innovator-4/</id>
    <updated>2011-02-04T14:50:53&#43;01:00</updated>
    <content type="html"><![CDATA[<p>The Resource Manager exists in many forms. The one depicted here is a close representation of one I have to work with (or against). It is interesting to note that the resource manager doesn&rsquo;t usually know anything in particular, but does earn more than any of its resources. If you see one, <em>run for your life!</em></p>
]]></content>
  </entry>
  <entry>
    <title>Paul the innovator (3): Paul finds the developers</title>
    <link href="https://gatillos.com/yay/2011/01/31/paul-the-innovator-3-paul-needs-developers/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2011/01/31/paul-the-innovator-3-paul-needs-developers/</id>
    <updated>2011-01-31T22:39:53&#43;01:00</updated>
    <content type="html"><![CDATA[<p>The developers, those filthy and smelly know-it-alls.</p>
]]></content>
  </entry>
  <entry>
    <title>LIFE/interior: In custody (12)</title>
    <link href="https://gatillos.com/yay/2011/01/30/lifeinterior-in-custody-12/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2011/01/30/lifeinterior-in-custody-12/</id>
    <updated>2011-01-30T22:29:34&#43;01:00</updated>
    <content type="html"><![CDATA[<p>New page, this time with actual scanned pages, although as usual it was finished a bit rushed. I should stop apologizing for every single page and just call it &lsquo;my style&rsquo; :).</p>
]]></content>
  </entry>
  <entry>
    <title>Paul the innovator (2)</title>
    <link href="https://gatillos.com/yay/2011/01/26/paul-the-innovator-2/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2011/01/26/paul-the-innovator-2/</id>
    <updated>2011-01-26T12:06:50&#43;01:00</updated>
    <content type="html"><![CDATA[<p>Just saying.</p>
]]></content>
  </entry>
  <entry>
    <title>Blog: Encounters of the third panel</title>
    <link href="https://gatillos.com/yay/2011/01/23/blog-encounters-of-the-third-panel/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2011/01/23/blog-encounters-of-the-third-panel/</id>
    <updated>2011-01-23T22:58:15&#43;01:00</updated>
    <content type="html"><![CDATA[<p>I like to now and then, draw one of those <a href="https://gatillos.com/yay/3-panel-comic-archives/">three panel comics</a>. It&rsquo;s really interesting how much you can say with only a few words. It&rsquo;s also fascinating how difficult it is to make it right.</p>
<p>Most of the time, the humor is so narrow that only a few people actually understand what&rsquo;s going on &ndash;and that doesn&rsquo;t mean they will all find it funny, which narrows the audience even a bit more.</p>
<p>Most of the 3-panel comics I follow have very well established characters, usually just two or three. What I wanted to write about is something that puzzles me: invariably, in the comics I like, you can identify the main characters easily and get to know their persona without needing to have them introduced first. It&rsquo;s as if they had always been there, always. Take <a href="http://robbieandbobby.blogspot.com/2011/01/sooth-sayer.html">Robby + Bobby</a> as an example, he&rsquo;s managed to create two great characters. You can just read a strip and immediately understand it, even if there is absolutely no context.</p>
<p>My latest attempt, Paul the innovator, is probably only going to be funny for me and a few coworkers, as usual.</p>
<p style="text-align: center;"><a href="https://gatillos.com/yay/archive/paul-the-innovator/"><img class="" title="Paul the innovator" src="https://gatillos.com/yay/2011/01/23/blog-encounters-of-the-third-panel/chap1_01-300x97.jpg" alt="" width="300" height="97"></a>Paul is a so-called innovator in a corporate world.
Still, I'd like it to be easily identifiable and funny for other people too, but the only way I can think of doing that is by writing a few strips to fully define the character. Which means, I'm not doing it right :).
]]></content>
  </entry>
  <entry>
    <title>LIFE/interior: In custody (11)</title>
    <link href="https://gatillos.com/yay/2011/01/23/lifeinterior-in-custody-11/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2011/01/23/lifeinterior-in-custody-11/</id>
    <updated>2011-01-23T22:34:56&#43;01:00</updated>
    <content type="html"><![CDATA[<p>Hope I&rsquo;m giving you some clues of the puzzle with every page. I&rsquo;m still having some trouble because of being scanner-less (yes, that&rsquo;s <em>totally </em>a condition). Hopefully that will be fixed soon.</p>
<p>That should explain why this one doesn&rsquo;t really have that many drawings :). <em>Shush! Don&rsquo;t tell anybody!</em></p>
<p>Update: Fixed a typo. Well, I actually invented the word <em>&ldquo;minuciously&rdquo;</em> and that was luckily pointed out by a nerdy reader. It looked like a word to me. It <em>should</em> be a word.<em>
</em></p>
]]></content>
  </entry>
  <entry>
    <title>Paul the innovator</title>
    <link href="https://gatillos.com/yay/2011/01/23/paul-the-innovator/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2011/01/23/paul-the-innovator/</id>
    <updated>2011-01-23T13:37:05&#43;01:00</updated>
    <content type="html"><![CDATA[<p>And now for something completely different&hellip;. This is a little silly comic, just for fun. I might do a few of these because there&rsquo;s plenty of stuff to write about on this subject.</p>
<p><em>Any resemblance to real people is purely coincidental.</em></p>
<p><em><span style="color: #888888;">Technicalities: This was drawn directly on screen with Inkscape. I used the calligraphy tool for everything but the face on 3rd panel.</span>
</em></p>
]]></content>
  </entry>
  <entry>
    <title>LIFE/interior: In custody (10)</title>
    <link href="https://gatillos.com/yay/2011/01/16/lifeinterior-in-custody-10/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2011/01/16/lifeinterior-in-custody-10/</id>
    <updated>2011-01-16T20:19:45&#43;01:00</updated>
    <content type="html"><![CDATA[<p>New page&hellip; I find myself again without a scanner so quite a few of these drawings were made directly on screen. Just read it without thinking too much about the drawing ;).</p>
]]></content>
  </entry>
  <entry>
    <title>LIFE/interior: In custody (9)</title>
    <link href="https://gatillos.com/yay/2011/01/09/lifeinterior-in-custody-9/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2011/01/09/lifeinterior-in-custody-9/</id>
    <updated>2011-01-09T14:06:30&#43;01:00</updated>
    <content type="html"><![CDATA[<p>Another page released. This took a while, mostly because of the layout. Also, I had even <em>more</em> text on the first versions. I still worry that it won&rsquo;t be understood, but explaining every little detail is not the best solution as it creates boring pages. Let me know if this makes (or makes no) sense.</p>
<p><span style="color: #888888;"><em>Technically not much to say this time, maybe only that mixing multiply and shading layers creates some very weird artifacts in Inkscape but I was too lazy to workaround them. Basically a rectangle around some areas goes bersherk and decides it wants to be a different shade. See if you can spot it.</em></span></p>
]]></content>
  </entry>
  <entry>
    <title>LIFE/interior: In custody (8)</title>
    <link href="https://gatillos.com/yay/2011/01/02/lifeinterior-in-custody-8/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2011/01/02/lifeinterior-in-custody-8/</id>
    <updated>2011-01-02T21:03:01&#43;01:00</updated>
    <content type="html"><![CDATA[<p>Another page, on schedule, even with years coming and going. It&rsquo;s amazing. Who would have known. I&rsquo;m not particularly proud of the shading in this one, as I didn&rsquo;t spend enough time doing it, so don&rsquo;t look at it :).</p>
<p><em><span style="color: #888888;">For the technically inclined: Every panel was drawn by hand, scanned, had the saturation reduced to 0 and then levels applied to make a smooth white background. Then I put all the panels into a &lsquo;multiply&rsquo; layer. I tend to draw individual panels on my sketch book, and do the composition with Inkscape. It&rsquo;s really fun to see how many options one has to tell the same story. I usually have a few versions of each page, changing layout, balloons, panel sizes. I don&rsquo;t think I could do comics in the classic style, i.e. drawing a whole page and scanning it.</span></em></p>
<p><em><span style="color: #888888;">Update: Fixed grammar typo, added a couple dialogue lines.
</span></em></p>
]]></content>
  </entry>
  <entry>
    <title>LIFE/interior: In custody (7)</title>
    <link href="https://gatillos.com/yay/2010/12/26/lifeinterior-in-custody-7/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2010/12/26/lifeinterior-in-custody-7/</id>
    <updated>2010-12-26T20:07:11&#43;01:00</updated>
    <content type="html"><![CDATA[<p>A little more on the background story, flashback and all. Don&rsquo;t worry, I promise it will make sense in the end. Kind of :).</p>
<p><span style="color: #888888;"><em>Technicalities: I discovered, thanks to some random stranger in the internets, that it&rsquo;s better to forget about extracting ink via transparent images the way I was doing it, and using Multiply plus level calibration to remove the paper texture and the pencils instead. It&rsquo;s worth mentioning that these days I don&rsquo;t even erase the pencil before scanning, it goes away magically, for such is the miracle of computing. So you just take a scanned image, alter the color levels to make a smooth white background and put the resulting image into its own layer on top of all other layers, with a filter of </em>Multiply<em>. It works wonderfully.</em></span></p>
]]></content>
  </entry>
  <entry>
    <title>Blog: Merry Xmas!</title>
    <link href="https://gatillos.com/yay/2010/12/23/blog-merry-xmas/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2010/12/23/blog-merry-xmas/</id>
    <updated>2010-12-23T18:03:04&#43;01:00</updated>
    <content type="html"><![CDATA[<p>Everybody approaches these holidays in a different way. I decided that, in order to avoid offending those with different religious sensitivities, I should choose a topic that everybody liked, no matter your origin and beliefs.</p>
<div class="post-image"><a href="https://gatillos.com/yay/2010/12/23/blog-merry-xmas/20101218-holiday-hiatus.png"><img class="" title="Feliz Navidad!" src="https://gatillos.com/yay/2010/12/23/blog-merry-xmas/20101218-holiday-hiatus.png" alt="" width="744" height="1052"></a></div>
<div class="post-image-caption">Dinosaurs! Kittens!</div>
<p>Hope you appreciate it. Next year will see the Spanish translation of my main webcomic, too, hence the bilingual message :).</p>
]]></content>
  </entry>
  <entry>
    <title>LIFE/interior: In custody (6)</title>
    <link href="https://gatillos.com/yay/2010/12/20/lifeinterior-in-custody-6/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2010/12/20/lifeinterior-in-custody-6/</id>
    <updated>2010-12-20T21:11:28&#43;01:00</updated>
    <content type="html"><![CDATA[<p>Hope this one is more or less understandable.</p>
]]></content>
  </entry>
  <entry>
    <title>LIFE/interior: In custody (5)</title>
    <link href="https://gatillos.com/yay/2010/12/12/lifeinterior-in-custody-5/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2010/12/12/lifeinterior-in-custody-5/</id>
    <updated>2010-12-12T23:37:23&#43;01:00</updated>
    <content type="html"><![CDATA[<p>Oh look, another page. Now, I know there are some things that will appear unclear. Well, let your imagination run free.</p>
]]></content>
  </entry>
  <entry>
    <title>LIFE/interior: In custody (4)</title>
    <link href="https://gatillos.com/yay/2010/12/08/lifeinterior-in-custody-4/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2010/12/08/lifeinterior-in-custody-4/</id>
    <updated>2010-12-08T20:48:19&#43;01:00</updated>
    <content type="html"><![CDATA[<p>Oooh delayed publishing! Not much happens in this page, but it&rsquo;s necessary for the next one, which by the way will be published this weekend, so as to keep the pace.</p>
<p>I&rsquo;m improving the ink extraction process, or I think I am. Let me know if you see any difference.</p>
]]></content>
  </entry>
  <entry>
    <title>LIFE/interior: In custody (3)</title>
    <link href="https://gatillos.com/yay/2010/11/28/lifeinterior-in-custody-3/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2010/11/28/lifeinterior-in-custody-3/</id>
    <updated>2010-11-28T23:12:01&#43;01:00</updated>
    <content type="html"><![CDATA[<p>Story goes on. Mystery unfolds slowly. Guesses welcome.</p>
<p>Technicalities: All panels drawn by hand, scanned, ink extracted. I didn&rsquo;t have too much time for shading, and I still think it looks a bit weird, but hey you are supposed to be reading, not focusing on the little details :P.</p>
]]></content>
  </entry>
  <entry>
    <title>LIFE/interior: In custody (2)</title>
    <link href="https://gatillos.com/yay/2010/11/21/lifeinterior-in-custody-2/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2010/11/21/lifeinterior-in-custody-2/</id>
    <updated>2010-11-21T18:28:36&#43;01:00</updated>
    <content type="html"><![CDATA[<p>The story continues&hellip; I have decided to end this story shorter than anticipated, otherwise it could go on forever. I&rsquo;d say I&rsquo;m halfway through so far. After finishing it I might continue with the same characters but focusing on a different story.</p>
<p><em>Technical: I&rsquo;m in the process of replacing the font used everywhere, I couldn&rsquo;t get a hold of a valid license for the previous one I was using. I&rsquo;m also using upper case for text.</em></p>
]]></content>
  </entry>
  <entry>
    <title>Blog: Updating the archive</title>
    <link href="https://gatillos.com/yay/2010/11/15/blog-updating-the-archive/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2010/11/15/blog-updating-the-archive/</id>
    <updated>2010-11-15T18:29:04&#43;01:00</updated>
    <content type="html"><![CDATA[<p>I&rsquo;ve been reorganizing the &lsquo;LIFE/interior&rsquo; comic. I&rsquo;m trying to bring more consistency to the story, essentially updating dialogues and adding a bit more context here and there. Most noticeable, I changed the font used for balloons. The font is now Blambot&rsquo;s Artists Alley, essentially because I can&rsquo;t &ndash;for the life of me&ndash; find a license for Yankshand, the font I was using before. Apparently the company that owns the rights went bankrupt so the font lies there in limbo, although many sites wrongly offer it and label it as free. I&rsquo;m using all capital letters for text now, and rearranging/updating some texts.</p>
<p>Some of the pages were too big and that poses quite a few logistics problems, so I&rsquo;m reducing all pages, trying to make them smaller than 2048 pixels height and 768 width, but without removing content or reducing text size. For some of the pages, the only option is to split them into two or three. When I do that, the <a href="https://gatillos.com/yay/feed/">RSS feed</a> gets updated and some feed readers like Google Reader get a bit confused and show new pages although they have an old date and should not be displayed. Just check them out if you want, but you can ignore them.</p>
<p>At some point <a href="https://gatillos.com/yay/lifeinterior-archives/">the archive</a> will be completely updated and I&rsquo;ll post about it.</p>
]]></content>
  </entry>
  <entry>
    <title>LIFE/interior: In custody (1)</title>
    <link href="https://gatillos.com/yay/2010/11/12/lifeinterior-in-custody-1/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2010/11/12/lifeinterior-in-custody-1/</id>
    <updated>2010-11-12T23:13:10&#43;01:00</updated>
    <content type="html"><![CDATA[<p>There we go, another page. I had a few technical difficulties this time, so it&rsquo;s back to drawing directly on screen, I didn&rsquo;t even really do a proper draft. I did some pencil work but then just drew everything using the trustworthy Wacom tablet (the cheapest one by the way). I&rsquo;d say the page is actually a bit of a &lsquo;filler&rsquo; but I kind of like it and hope you&rsquo;ll bear with me.</p>
<p><span style="color: #c0c0c0;"><em>Other technicalities: The &lsquo;Roughen&rsquo; script in Inkscape came up very helpful, and there&rsquo;s a &lsquo;Comics Cream&rsquo; filter applied to the background. Crosshatch was done manually though.</em></span></p>
<p><span style="color: #c0c0c0;"><em>Update: Changed font size, reduced stroke size.
</em></span></p>
]]></content>
  </entry>
  <entry>
    <title>LIFE/interior: Cat (7)</title>
    <link href="https://gatillos.com/yay/2010/11/07/lifeinterior-cat-7/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2010/11/07/lifeinterior-cat-7/</id>
    <updated>2010-11-07T22:51:57&#43;01:00</updated>
    <content type="html"><![CDATA[<p>Well this concludes this sequence. Stay tuned!</p>
<p><em>Update: Changed font.</em></p>
]]></content>
  </entry>
  <entry>
    <title>LIFE/interior: Cat (6)</title>
    <link href="https://gatillos.com/yay/2010/11/01/lifeinterior-cat-6/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2010/11/01/lifeinterior-cat-6/</id>
    <updated>2010-11-01T12:05:24&#43;01:00</updated>
    <content type="html"><![CDATA[<p>Well we are getting somewhere here.</p>
<p>Oh, and I solemnly promise to publish the next one in less than a week.</p>
<p><em>On the technical side of things, I think this is the first page where everything but the balloons and the shading was hand-drawn. It&rsquo;s an interesting experience. I draw the panels individually and then play with different layouts in Inkscape.</em></p>
<p><em>Update: Changed font, stretched the page a bit.
</em></p>
]]></content>
  </entry>
  <entry>
    <title>Blog: Extracting ink from scans</title>
    <link href="https://gatillos.com/yay/2010/10/31/blog-extracting-ink-from-scans/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2010/10/31/blog-extracting-ink-from-scans/</id>
    <updated>2010-10-31T15:40:56&#43;01:00</updated>
    <content type="html"><![CDATA[<p>I thought I would nicely document what I&rsquo;m doing right now in terms of transforming a regular scan of an inked comic into a <strong>transparent image</strong> that can be added to Inkscape (or Gimp) <strong>for coloring and shading</strong>.</p>
<p><span style="text-decoration: underline;"><strong>Step one, scan an image</strong></span>: I&rsquo;m doing it using Image Capture in Mac OS X just because it&rsquo;s dead simple. I stay far far away from software provided by Canon, it&rsquo;s simply not worth it for my needs. Here&rsquo;s a capture of the process:</p>
<div class="post-image"><a href="https://gatillos.com/yay/2010/10/31/blog-extracting-ink-from-scans/20101031-capture-of-scan.png"><img class="" title="20101031 capture of scan" src="https://gatillos.com/yay/2010/10/31/blog-extracting-ink-from-scans/20101031-capture-of-scan.png" alt="" width="549" height="320"></a></div>
<div class="post-image-caption">Image Capture in Mac OS X. The scanner is a cheap Canon LIDE 100.</div>
<p><span style="text-decoration: underline;"><strong>Step two, open image in GIMP and Color-Threshold it:</strong></span> It&rsquo;s a bit of an unfortunate name for such great software, &ldquo;Gimp&rdquo;, ahem, but let&rsquo;s put that aside for a minute. In my case I did first an <em>Image &ndash;&gt; Transform &ndash;&gt; Rotate</em> until I had it looking the right orientation. Then from the <em>Colors</em> menu I selected <em>Threshold</em>.</p>
<div class="post-image"><a href="https://gatillos.com/yay/2010/10/31/blog-extracting-ink-from-scans/20101031-capture-of-color-threshold.png"><img class="" title="20101031 capture of color threshold" src="https://gatillos.com/yay/2010/10/31/blog-extracting-ink-from-scans/20101031-capture-of-color-threshold.png" alt="" width="372" height="363"></a></div>
<div class="post-image-caption">The Color Threshold tool</div>
<p>From the manual:</p>
<blockquote><span style="color: #808080;"><em>The Threshold tool transforms the current layer or the selection into a     black and white image, where white pixels represent the pixels of the     image whose Value is in the threshold range, and black pixels represent     pixels with Value out of the threshold range.</em></span></blockquote>
So, the background is mostly slight variations around <strong>a shade of white</strong>, and ink is slight variations around <strong>shades of black</strong>. What we want is to end up with an almost pure white background.
<p><strong>Option 1: </strong>Use the &lsquo;Auto&rsquo; setting. This seems to work most of the time. In my case it gives 178 - 255 as values.
<strong>Option 2: </strong>Adjust manually, this can also be used to make it more restrictive and then apply filters to the resulting image to enhance the result.</p>
<p>The <em>max threshold</em> will most likely always be 255 (all white). I went for the <em>Auto</em> this time. Here is the resulting image, if you look at it in zoom you&rsquo;ll see some detail was lost, but not too much.</p>
<div class="post-image"><a href="https://gatillos.com/yay/2010/10/31/blog-extracting-ink-from-scans/20101031-image-after-threshold.png"><img class="" title="20101031 image after threshold" src="https://gatillos.com/yay/2010/10/31/blog-extracting-ink-from-scans/20101031-image-after-threshold-272x300.png" alt="" width="272" height="300"></a></div>
<div class="post-image-caption">Image after color threshold (click to zoom)</div>
<p><span style="text-decoration: underline;"><strong>Step Three make background transparent</strong>:</span> This is very straightforward when you know where everything is, but a bit daunting at the beginning.</p>
<ul>
<li>Add a transparency layer, by selecting <em>Layer --&gt; Transparency --&gt; Add Alpha Channel</em>.</li>
	<li>Now choose the <em>Select by Color</em> tool from the palette</li>
</ul>
<div class="post-image"><a href="https://gatillos.com/yay/2010/10/31/blog-extracting-ink-from-scans/20101031-capture-of-tools.png"><img class="" title="20101031 capture of tools" src="https://gatillos.com/yay/2010/10/31/blog-extracting-ink-from-scans/20101031-capture-of-tools.png" alt="" width="202" height="272"></a></div>
<div class="post-image-caption">The Select By Color tool</div>
<p>Once selected, just click somewhere in the background and it will select all the colors around the click pixel, <strong>within a range</strong> to accommodate slight differences (e.g. all shades of white). Since this is already a pure white background it&rsquo;s not going to do much, but you would need it for regular images as in those the background will never be completely made of pure white. The range is defined by a <em>Threshold</em> in the Toolbox.</p>
<p>After clicking, the whole background is selected. The selection is indicated by a set of moving lines lines that look like this (you won&rsquo;t see much in the thumbnail, click to see the selection):</p>
<div class="post-image"><a href="https://gatillos.com/yay/2010/10/31/blog-extracting-ink-from-scans/20101031-image-before-transparent.png"><img class="" title="20101031 image before transparent" src="https://gatillos.com/yay/2010/10/31/blog-extracting-ink-from-scans/20101031-image-before-transparent-300x202.png" alt="" width="300" height="202"></a></div>
<div class="post-image-caption">White background selected. (click to see the detail)</div>
<p>Now you just press  the Delete key or select Edit/Clear and the white background will be  removed.</p>
<div class="post-image"><a href="https://gatillos.com/yay/2010/10/31/blog-extracting-ink-from-scans/20101031-image-after-transparent.png"><img class="" title="20101031 image after transparent" src="https://gatillos.com/yay/2010/10/31/blog-extracting-ink-from-scans/20101031-image-after-transparent-300x202.png" alt="" width="300" height="202"></a></div>
<div class="post-image-caption">Background cleared, selection still active. (click to zoom)</div>
<p>The above is the image as displayed in Gimp with a transparent background  (Gimp uses a checkered gray background to indicate transparency). Now the final image looks like this:</p>
<div class="post-image"><a href="https://gatillos.com/yay/2010/10/31/blog-extracting-ink-from-scans/scan-20101031a-transparent-reduced.png"><img class="" title="scan-20101031a-transparent-reduced" src="https://gatillos.com/yay/2010/10/31/blog-extracting-ink-from-scans/scan-20101031a-transparent-reduced.png" alt="" width="752" height="828"></a></div>
<div class="post-image-caption">Final, transparent image</div>
<p><strong>Finally</strong> all you have to do now is take this image and insert it into a separate layer either in Photoshop/GIMP or Illustrator/Inkscape and add the rest of the elements and shading.</p>
<p>So, why all this trouble? what was the point? Well, <strong>color is much easily applied in a layer below the ink layer</strong>. If you try to apply color over an unmodified scan, well, it&rsquo;s not going to be easy. In order to do that, you <strong>need</strong> a transparent ink layer.</p>
<p>But we will leave that for a future post.</p>
<p><em>Update: You can see the final image <a href="https://gatillos.com/yay/archive/lifeinterior-cat-6/">in the this comic post</a>.</em></p>
]]></content>
  </entry>
  <entry>
    <title>LIFE/interior: Cat (5)</title>
    <link href="https://gatillos.com/yay/2010/10/25/lifeinterior-cat-5/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2010/10/25/lifeinterior-cat-5/</id>
    <updated>2010-10-25T20:33:35&#43;02:00</updated>
    <content type="html"><![CDATA[<p>Well there it is, the promised next page.</p>
<p>PS: Are my dialogues a bit cheesy, or is it just me&hellip;?</p>
<p>Update: Changed font.</p>
]]></content>
  </entry>
  <entry>
    <title>LIFE/interior: Cat (4)</title>
    <link href="https://gatillos.com/yay/2010/10/20/lifeinterior-cat-4/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2010/10/20/lifeinterior-cat-4/</id>
    <updated>2010-10-20T21:06:43&#43;02:00</updated>
    <content type="html"><![CDATA[<p style="text-align: left;">Most of this page, as it's obvious, was drawn by hand. It took me a while to figure out how to extract the ink from the scans, it's not perfect still, you can see the lines are a bit gray/black, need to tweak it a bit more.
This page introduces: CATVISION™. The next page will continue this scene, it's already drawn and scanned but I still need to lay it out and shade it nicely. It should be up in a couple of days.
<span style="color: #999999;"><em>
/ Ok, CATVISION it's not an actual trademark, but still... :)
</em></span>
<p style="text-align: left;"><span style="color: #999999;"><em>Update: Changed font, stretched a bit the layout.
</em></span>
]]></content>
  </entry>
  <entry>
    <title>3-Panel Comic: Isa the intern (4)</title>
    <link href="https://gatillos.com/yay/2010/10/18/3-panel-comic-isa-the-intern-4/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2010/10/18/3-panel-comic-isa-the-intern-4/</id>
    <updated>2010-10-18T21:28:17&#43;02:00</updated>
    <content type="html"><![CDATA[<p>And again, this is absolutely true. There is a certain boss that does this, and he makes his assistant aggregate the values by hand using a calculator <strong>just like that</strong>. <em>REALLY</em>.</p>
<p>She tried to convince him to use a simple sum on the Excel file and he thanked her but said she should <em>first</em> start to <strong>know the company</strong> and how they work, and <em>then</em> try to improve the processes, instead of changing everything so that only she would know how to do it.</p>
]]></content>
  </entry>
  <entry>
    <title>LIFE/interior: Cat (3)</title>
    <link href="https://gatillos.com/yay/2010/10/17/lifeinterior-cat-3/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2010/10/17/lifeinterior-cat-3/</id>
    <updated>2010-10-17T02:13:57&#43;02:00</updated>
    <content type="html"><![CDATA[<p>Mixing styles, maybe it&rsquo;s too easy to tell I like practicing :). I thought about adding dialogue to the background action happening there, but I think it can be understood without words, and that adds to the mystery.</p>
<p><em>Update: Changed font.</em></p>
]]></content>
  </entry>
  <entry>
    <title>3-Panel Comic: Isa the intern (3)</title>
    <link href="https://gatillos.com/yay/2010/10/16/3-panel-comic-isa-the-intern-3/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2010/10/16/3-panel-comic-isa-the-intern-3/</id>
    <updated>2010-10-16T16:25:31&#43;02:00</updated>
    <content type="html"><![CDATA[<p>I know these things are not <em>that</em> funny, these are kind of an in-joke at work because this is all based on TRUE stories from my workplace.</p>
]]></content>
  </entry>
  <entry>
    <title>Blog: Slightly different style for a panel</title>
    <link href="https://gatillos.com/yay/2010/10/14/blog-slightly-different-style-for-a-panel/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2010/10/14/blog-slightly-different-style-for-a-panel/</id>
    <updated>2010-10-14T13:13:46&#43;02:00</updated>
    <content type="html"><![CDATA[<p>Yesterday I was playing with the scan of a drawing I had previously inked by hand. I added some shadows using Inkscape and have yet to decide whether to use it or to redraw it using vector graphics. Maybe I&rsquo;ll just fix a bit the shapes inside the room and call it a panel :). I love drawings with this rough feeling, I only worry that maybe it&rsquo;s hard to recognize the actual contents of the panel.</p>
<p>What do you think? Can you tell what is going on without too much effort?</p>
<div class="post-image"><a href="https://gatillos.com/yay/2010/10/14/blog-slightly-different-style-for-a-panel/42_chap5_03_a1.png"><img class="" title="42_chap5_03_a1" src="https://gatillos.com/yay/2010/10/14/blog-slightly-different-style-for-a-panel/42_chap5_03_a1.png" alt="" width="443" height="465"></a></div>
<div class="post-image-caption">This should be the beginning of the next page</div>
]]></content>
  </entry>
  <entry>
    <title>LIFE/interior: Cat (2)</title>
    <link href="https://gatillos.com/yay/2010/10/04/lifeinterior-cat-2/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2010/10/04/lifeinterior-cat-2/</id>
    <updated>2010-10-04T23:47:00&#43;02:00</updated>
    <content type="html"><![CDATA[<p>I doubt whether to apply shades/color or not, to this one.</p>
<p>Sometimes, particularly when the drawings are intentionally rough, intended to read fast or when the focus should be in the narrative, I feel they look better with very little shading. In fact, as little as almost nothing.</p>
<p>I tried shading this a couple of times, and it didn&rsquo;t seem to feel as I&rsquo;d like it to. So I&rsquo;m leaving it as is, and see what people think of it. Also, yesterday&rsquo;s page didn&rsquo;t bring anything new narrative-wise, other than Mr Mann living with the cat, so this one might compensate for that.</p>
<p>Or not :).</p>
<p><em>Update: Changed font and line weight.</em></p>
]]></content>
  </entry>
  <entry>
    <title>LIFE/interior: Cat (1)</title>
    <link href="https://gatillos.com/yay/2010/10/04/lifeinterior-cat-1/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2010/10/04/lifeinterior-cat-1/</id>
    <updated>2010-10-04T02:16:00&#43;02:00</updated>
    <content type="html"><![CDATA[<p>Well this is a short one but it&rsquo;s getting late. I&rsquo;m experimenting a bit more. I&rsquo;m trying to make the childhood days more cartoonish and the older days slightly more &lsquo;serious&rsquo;, or at least have different looks. This time I combined hand-drawn drafts with a bit of direct inking with the calligraphy tool and playing with fills.</p>
<p>This starts a new episode, this is present day. I keep changing the face of Mr Mann so I tried to make it more obvious but&hellip; you tell me if I succeeded.</p>
<p><em>Note: the clever ones will notice that cats don&rsquo;t live 30 years. It should actually be the same cat so I have a problem here&hellip; maybe I should just make it 20 years later&hellip; or maybe I&rsquo;ll make it the son! or the grandson! We&rsquo;ll see.</em></p>
<p><em>Update: Changed font.
</em></p>
]]></content>
  </entry>
  <entry>
    <title>Blog: Pencils vs Pens vs Digital</title>
    <link href="https://gatillos.com/yay/2010/09/23/blog-pencils-vs-pens-vs-digital/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2010/09/23/blog-pencils-vs-pens-vs-digital/</id>
    <updated>2010-09-23T12:43:55&#43;02:00</updated>
    <content type="html"><![CDATA[<p>Let&rsquo;s sample some of the results of my experimentation&hellip;</p>
<p>Here are some scans:</p>
<div class="post-image"><a href="https://gatillos.com/yay/2010/09/23/blog-pencils-vs-pens-vs-digital/scan20100919b1.jpg"><img class="" title="scan20100919b1" src="https://gatillos.com/yay/2010/09/23/blog-pencils-vs-pens-vs-digital/scan20100919b1-1024x644.jpg" alt="" width="640" height="402"></a></div>
<div class="post-image-caption">rain rain, click for detail</div>
<div class="post-image"><a href="https://gatillos.com/yay/2010/09/23/blog-pencils-vs-pens-vs-digital/scan20100919c1.jpg"><img class="" title="scan20100919c1" src="https://gatillos.com/yay/2010/09/23/blog-pencils-vs-pens-vs-digital/scan20100919c1-1024x902.jpg" alt="" width="640" height="563"></a></div>
<div class="post-image-caption">Sleeping mother - click for detail</div>
<p>This is hand-drawn, first drafted with a regular pencil, then more-or-less-inked using pens. As you can see I don&rsquo;t really know what to do with the brush-like pen I bought so I tried using it to make some lines stronger but it didn&rsquo;t work too well.</p>
<div class="post-image"><a href="https://gatillos.com/yay/2010/09/23/blog-pencils-vs-pens-vs-digital/scan-20100919.jpeg"><img class="" title="scan-20100919" src="https://gatillos.com/yay/2010/09/23/blog-pencils-vs-pens-vs-digital/scan-20100919-1024x967.jpg" alt="" width="640" height="604"></a></div>
<div class="post-image-caption">click to see even more detail</div>
<p>I didn&rsquo;t erase the pencil, so you can actually see what I changed.</p>
<p>Then, I scanned this and put it on a layer in Inkscape (actually although the above is a scan, I used a photo because I didn&rsquo;t have the scanner at hand). After that I used mostly the pen tool to draw the lines, and the calligraphy tool for most of the shading, all inside Inkscape.</p>
<div class="post-image"><a href="https://gatillos.com/yay/2010/09/23/blog-pencils-vs-pens-vs-digital/35_chap4_06_extract.png"><img class="" title="35_chap4_06_extract" src="https://gatillos.com/yay/2010/09/23/blog-pencils-vs-pens-vs-digital/35_chap4_06_extract.png" alt="" width="548" height="311"></a></div>
<div class="post-image-caption">oh the beauty of straight lines</div>
<p>In fact, the above is one of my favorite panels so far.</p>
<p>Then, the following was drawn directly using Calligraphy tool, as a sketch:</p>
<div class="post-image"><a href="https://gatillos.com/yay/2010/09/23/blog-pencils-vs-pens-vs-digital/35_chap4_06_extract2.png"><img class="" title="35_chap4_06_extract2" src="https://gatillos.com/yay/2010/09/23/blog-pencils-vs-pens-vs-digital/35_chap4_06_extract2.png" alt="" width="412" height="719"></a></div>
<div class="post-image-caption">Calligraphy tool set to Dip pen</div>
<p>Finally, I took that same drawing directly and just added some shading and a bit of color here and there, and fixed some things (mostly when lines crossed each other).</p>
<div class="post-image"><a href="https://gatillos.com/yay/2010/09/23/blog-pencils-vs-pens-vs-digital/35_chap4_06_extract3.png"><img class="" title="35_chap4_06_extract3" src="https://gatillos.com/yay/2010/09/23/blog-pencils-vs-pens-vs-digital/35_chap4_06_extract3.png" alt="" width="631" height="651"></a></div>
<div class="post-image-caption">"You're so cuuuuute!"</div>
<p>I particularly prefer the second option, but just because the rest of the comic looks like that. I think I could do some story using just those pseudo-drafts, with minor tweaking for shading. This last one is also nice and has the advantage of being the fastest of all, as you work digitally during all the process.</p>
]]></content>
  </entry>
  <entry>
    <title>Blog: Crosshatching in Inkscape 0.48</title>
    <link href="https://gatillos.com/yay/2010/09/22/blog-crosshatching-in-inkscape-0-48/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2010/09/22/blog-crosshatching-in-inkscape-0-48/</id>
    <updated>2010-09-22T02:33:37&#43;02:00</updated>
    <content type="html"><![CDATA[<p>I upgraded to Inkscape 0.48 and so far it&rsquo;s not going too well, it crashes a lot but this time it usually saves your work correctly before dying. There are a few good things, though. One of them is the Spray Tool.</p>
<p>As I&rsquo;m trying different drawing styles, one thing that is very nice and quite easy to do by hand (albeit a bit tedious) is &lsquo;crosshatching&rsquo; to display shades. That is, using lots and lots of lines to represent shades, forming a pattern. My first surprise was that there is no standard crosshatch pattern for filling, which seems odd (it has stripes, sand and other strange ones). There must be a reason but in any case that type of crosshatching is always perfect and that is not what I wanted.</p>
<p>First I created a few lines, with the calligraphy tool set to Dip pen, width 1, Stroke size 0.1, in a 300% zoom. These numbers will vary wildly depending of what you do. I created a pattern like this:</p>
<div class="post-image"><a href="https://gatillos.com/yay/2010/09/22/blog-crosshatching-in-inkscape-0-48/39_crosshatch_spray4.png"><img class="" title="39_crosshatch_spray4" src="https://gatillos.com/yay/2010/09/22/blog-crosshatching-in-inkscape-0-48/39_crosshatch_spray4.png" alt="" width="18" height="11"></a></div>
<div class="post-image-caption">a mini crosshatch</div>
<p style="text-align: left;">Then I selected it, pressed the Spray Tool (new to Inkscape 0.48) and just sprayed with it to do the shading:
<p style="text-align: left;">
<div class="post-image"><a href="https://gatillos.com/yay/2010/09/22/blog-crosshatching-in-inkscape-0-48/39_crosshatch_spray2.png"><img class="" title="39_crosshatch_spray2" src="https://gatillos.com/yay/2010/09/22/blog-crosshatching-in-inkscape-0-48/39_crosshatch_spray2.png" alt="" width="89" height="165"></a></div>
<div class="post-image-caption">shading here took literally 2 seconds</div>
<p style="text-align: left;">You can also enable pressure use for the spray tool, play with the width and in seconds do shading. I didn't put any effort on the actual drawing here, it's just an example :).
<p style="text-align: left;">
<div class="post-image"><a href="https://gatillos.com/yay/2010/09/22/blog-crosshatching-in-inkscape-0-48/39_crosshatch_spray3.png"><img class="" title="39_crosshatch_spray3" src="https://gatillos.com/yay/2010/09/22/blog-crosshatching-in-inkscape-0-48/39_crosshatch_spray3.png" alt="" width="297" height="306"></a></div>
<div class="post-image-caption">try doing this line by line</div>
<p>If you put a little more effort on the actual pattern to be used by the Spray Tool and apply it more carefully than I did I&rsquo;m pretty sure the results will be quite good. I&rsquo;ll be trying it out soon!</p>
]]></content>
  </entry>
  <entry>
    <title>LIFE/interior: Ana (6)</title>
    <link href="https://gatillos.com/yay/2010/09/20/lifeinterior-ana-6/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2010/09/20/lifeinterior-ana-6/</id>
    <updated>2010-09-20T01:15:08&#43;02:00</updated>
    <content type="html"><![CDATA[<p>Well, another page. This one took quite a lot of time but at least this time I&rsquo;ve done some of the 3-panel comics to keep things moving and me practicing. I&rsquo;ve been trying out different drawing methods, as usual I&rsquo;m still learning a lot. This time I tried two things: actual drawing with a proper sketch pad and pens, and drawing directly on the screen. The sketched panels work quite well but I felt they would break too much the style of the comic so for now I only use them as a draft and &rsquo;re-ink&rsquo; them on screen. I&rsquo;ll post a blog entry with the actual sketches. Oh, and I need to find a way to crosshatch in Inkscape.</p>
<p>Let me know if what happens in this comic is more or less understandable. I&rsquo;m still struggling sometimes finding ways to transmit what is so clearly inside my head.</p>
<p><em>Update: Changed font.</em></p>
]]></content>
  </entry>
  <entry>
    <title>Blog: Calligraphy vs pencil tools in Inkscape</title>
    <link href="https://gatillos.com/yay/2010/09/12/blog-calligraphy-vs-pencil-tools-in-inkscape/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2010/09/12/blog-calligraphy-vs-pencil-tools-in-inkscape/</id>
    <updated>2010-09-12T21:55:11&#43;02:00</updated>
    <content type="html"><![CDATA[<p>I see lots of people praising the <a href="http://inkscape.org/doc/calligraphy/tutorial-calligraphy.html">calligraphy tool</a> in Inkscape, like <a href="http://www.youtube.com/watch?v=CR2UdknKJpE">these guys</a>. That tool is essentially the one that lets you draw as if you were holding some kind of pen or a brush. It&rsquo;s pressure-sensitive so it generates more or less realistic and &lsquo;alive&rsquo; strokes.</p>
<p>On the other hand, the pencil tool generates just plain bezier lines that you can bend and modify afterwards. It follows your trace and kind of approximates what you are trying to do. After drawing a stroke, you can modify it quite easily, whilst the calligraphy tool generates strokes that contain so many nodes that it&rsquo;s not worth trying to rearrange it, it&rsquo;s just better to redraw that particular stroke.</p>
<p>Right now most things you see in my comics are drawn using the pencil tool. That&rsquo;s why they have a clear-line look. I like how it looks, although it&rsquo;s quite a lot of work. I sometimes scan hand-drawn drafts but now I&rsquo;ve started doing those drafts on screen using the calligraphy tool and then creating the final version with the pencil tool. I should be brave and start using the calligraphy tool for the final result, but I somehow feel more comfortable with the pencil approach, right now. Incidentally, the calligraphy tool is very sensitive to zoom so if I zoom in the strokes become thinner. It&rsquo;s a bit weird there might be some way to avoid it but right now I can&rsquo;t seem to find it.</p>
<p>Here&rsquo;s a sample draft with the calligraphy tool. It just takes a minute to draw something like this:</p>
<p><a href="https://gatillos.com/yay/2010/09/12/blog-calligraphy-vs-pencil-tools-in-inkscape/35_chap4_06_a_x1.png"><img class="" title="35_chap4_06_a_x1" src="https://gatillos.com/yay/2010/09/12/blog-calligraphy-vs-pencil-tools-in-inkscape/35_chap4_06_a_x1.png" alt="" width="76" height="133"></a></p>
<p>I like the simple appearance. On the other hand, here&rsquo;s an image first drafted with calligraphy and then redrawn using the pencil tool:</p>
<p><a href="https://gatillos.com/yay/2010/09/12/blog-calligraphy-vs-pencil-tools-in-inkscape/35_chap4_06_a_x2.png"><img class="" title="35_chap4_06_a_x2" src="https://gatillos.com/yay/2010/09/12/blog-calligraphy-vs-pencil-tools-in-inkscape/35_chap4_06_a_x2.png" alt="" width="81" height="192"></a></p>
<p>The second drawing took a little longer to draw, but it&rsquo;s still only a few minutes. The difference lies in doing further modifications: I can now tweak, shade and otherwise work with this image in a way that is simply not possible with the calligraphy approach.</p>
<p>I think I&rsquo;ll continue using the pencil for a while but I&rsquo;m going to experiment on separate comics with the calligraphy tool.</p>
]]></content>
  </entry>
  <entry>
    <title>Dangling comments</title>
    <link href="https://gatillos.com/yay/2010/09/11/dangling-comments/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2010/09/11/dangling-comments/</id>
    <updated>2010-09-11T11:52:58&#43;02:00</updated>
    <content type="html"><![CDATA[<p>I&rsquo;m sorry to break this to you but, sir, being accepted as a friend on Facebook doesn&rsquo;t mean people actually like you.</p>
]]></content>
  </entry>
  <entry>
    <title>Tiny little tragedies</title>
    <link href="https://gatillos.com/yay/2010/09/04/tiny-little-tragedies/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2010/09/04/tiny-little-tragedies/</id>
    <updated>2010-09-04T18:05:45&#43;02:00</updated>
    <content type="html"><![CDATA[<p>Just wanted to picture those little stories that nobody hears about but can be spotted if you look hard enough, particularly in this technology world we live in. I thought about using &lsquo;All memories are traces of tears&rsquo; but that&rsquo;s too good a quote to waste here :).</p>
<p>I&rsquo;ll try a few representations of the same theme.</p>
]]></content>
  </entry>
  <entry>
    <title>LIFE/interior: Ana (5)</title>
    <link href="https://gatillos.com/yay/2010/08/22/lifeinterior-ana-5/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2010/08/22/lifeinterior-ana-5/</id>
    <updated>2010-08-22T12:00:16&#43;02:00</updated>
    <content type="html"><![CDATA[<p>Closing the cat incident :).</p>
<p>I drew a few versions of the last panel, and none of them convinced me that much. I think this one kind of works but it feels a bit at odds with the rest of the page. Anyway, there it is!</p>
<p>Credit: The &lsquo;prisoner cat&rsquo; resolution via escaping through the window idea and drafts were made by a Ninja that pops around here sometimes. Truth be told, that version included also scenes of happiness with a mouse that was not actually dead and instead a very good friend of the cat but I omitted those because I prefer evil.</p>
<p><em>Update: Changed font.</em></p>
]]></content>
  </entry>
  <entry>
    <title>3-Panel Comic: Isa the intern (2)</title>
    <link href="https://gatillos.com/yay/2010/08/21/3-panel-comic-isa-the-intern-2/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2010/08/21/3-panel-comic-isa-the-intern-2/</id>
    <updated>2010-08-21T01:08:32&#43;02:00</updated>
    <content type="html"><![CDATA[<p>Still based on a true story&hellip;</p>
]]></content>
  </entry>
  <entry>
    <title>LIFE/interior: Ana (4)</title>
    <link href="https://gatillos.com/yay/2010/08/18/lifeinterior-ana-4/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2010/08/18/lifeinterior-ana-4/</id>
    <updated>2010-08-18T02:51:07&#43;02:00</updated>
    <content type="html"><![CDATA[<p>Argh! Again the little story I wanted to tell in one page resulted way too long for a single page. I pondered a super long page but I&rsquo;m actually a bit tired so let&rsquo;s go with this. Next one features Ana again, don&rsquo;t forget we are getting to know her. I know it&rsquo;s a bit difficult to remember it, what with all the cat-icide attempts and the random violence :).</p>
<p>I was wondering if kidnapping a cat has a name. I thought&hellip; catnapping! But bummer it turns out it&rsquo;s an actual English word :).</p>
<p><em>Update: changed the font and compressed the page a bit.</em></p>
]]></content>
  </entry>
  <entry>
    <title>Blog: Time passes</title>
    <link href="https://gatillos.com/yay/2010/08/15/blog-time-passes/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2010/08/15/blog-time-passes/</id>
    <updated>2010-08-15T22:26:09&#43;02:00</updated>
    <content type="html"><![CDATA[<p>Well it&rsquo;s really taking me a while to draw the next page. All the drafts and dialogue are finished, it&rsquo;s just a matter of&hellip; well&hellip; drawing :).</p>
<p>Here&rsquo;s a sneak peek of what&rsquo;s to come. Oh the mystery.</p>
<p style="text-align: center;">
<div class="post-image"><a href="https://gatillos.com/yay/2010/08/15/blog-time-passes/cat-in-a-bag1.png"><img class="" title="cat-in-a-bag" src="https://gatillos.com/yay/2010/08/15/blog-time-passes/cat-in-a-bag1.png" alt="" width="434" height="441"></a></div>
<div class="post-image-caption">Oh my oh my</div>
]]></content>
  </entry>
  <entry>
    <title>First changes on the site</title>
    <link href="https://gatillos.com/yay/2010/08/03/blog-first-changes-on-the-site/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2010/08/03/blog-first-changes-on-the-site/</id>
    <updated>2010-08-03T02:42:45&#43;02:00</updated>
    <content type="html"><![CDATA[<p>I want to create two comics, one is LIFE/interior and the other is so far called &lsquo;3-panel comic&rsquo;. The first one should receive weekly updates, while the second will be more random.</p>
<p>In order to have two comics I thought the site needed some changes, or else I would have to have two sites. I&rsquo;ve never liked the navigation, but what I came up with is not that much better.</p>
<p>I uploaded the first set of changes, let&rsquo;s see how that works. The visible changes are:</p>
<ul>
<li>The homepage now shows two small thumbnail viewers, one per comic</li>
	<li>Comics are loaded on demand, which should speed up initial page loading</li>
	<li>Homepage no longer displays the latest comic, you have to click to see it</li>
</ul>
I still need to work on a better design. Well, at least I really need to change the arrows for left/right on the thumbnail viewers...
<p>Anyway, feedback welcome as usual. I expect to be adding and testing stuff now that I have a nice setup for testing it.</p>
]]></content>
  </entry>
  <entry>
    <title>LIFE/interior: Ana (3 bis)</title>
    <link href="https://gatillos.com/yay/2010/08/02/lifeinterior-ana-3-bis/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2010/08/02/lifeinterior-ana-3-bis/</id>
    <updated>2010-08-02T20:52:18&#43;02:00</updated>
    <content type="html"><![CDATA[<p>Update: original page split into two.</p>
<p>(ignore this page if you come from Google Reader&hellip; this is an old page)</p>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow: hidden;">LIFE/interior: Ana (3)Ne</div>
]]></content>
  </entry>
  <entry>
    <title>LIFE/interior: Ana (3)</title>
    <link href="https://gatillos.com/yay/2010/08/02/lifeinterior-ana-3/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2010/08/02/lifeinterior-ana-3/</id>
    <updated>2010-08-02T01:32:46&#43;02:00</updated>
    <content type="html"><![CDATA[<p>I see logic in his reasoning :).</p>
<p><em>UPDATE: Maybe I should mention that <strong>no kittens will be harmed in this comic</strong>.</em> <em>Ever.</em></p>
<p><em>Update: Changed font and split the page into two.
</em></p>
]]></content>
  </entry>
  <entry>
    <title>3-Panel Comic: Isa the intern</title>
    <link href="https://gatillos.com/yay/2010/07/31/3-panel-comic-isa-the-intern/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2010/07/31/3-panel-comic-isa-the-intern/</id>
    <updated>2010-07-31T00:54:20&#43;02:00</updated>
    <content type="html"><![CDATA[<p>Well I just wanted to have some fun.</p>
<p>This is based on a TRUE story.</p>
]]></content>
  </entry>
  <entry>
    <title>LIFE/interior: Ana (2 bis)</title>
    <link href="https://gatillos.com/yay/2010/07/29/lifeinterior-ana-2-bis/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2010/07/29/lifeinterior-ana-2-bis/</id>
    <updated>2010-07-29T02:29:02&#43;02:00</updated>
    <content type="html"><![CDATA[<p>New page, part 2 of the previous one, to make for easier navigation.</p>
]]></content>
  </entry>
  <entry>
    <title>LIFE/interior: Ana (2)</title>
    <link href="https://gatillos.com/yay/2010/07/28/lifeinterior-ana-2/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2010/07/28/lifeinterior-ana-2/</id>
    <updated>2010-07-28T03:46:07&#43;02:00</updated>
    <content type="html"><![CDATA[<p>Well, the continuation from the previous page. I think it took me more than one week. Well, what can I say&hellip; at least it&rsquo;s here :).</p>
<p>I&rsquo;m playing again with different things and techniques, but mainly in the way I create the graphics. I&rsquo;m trying not to reuse too many things in the hopes that by practicing at some point I&rsquo;ll learn to draw. It&rsquo;s too easy to take the same figure and copy it over and over, like they do in a lot of webcomics. There are some places where that makes sense (e.g. the boy&rsquo;s face looking straight to the reader, I use it quite a lot), but in other places it&rsquo;s just being lazy.</p>
<p>So here we go, this sequence takes two pages. I hesitated to publish this bit without the rest, because I&rsquo;m trying to make every page a small story, but it was probably going to be way too much for a page, which is a recurrent problem I have.</p>
<p><em>Edit: Split page into two, and changed font.</em></p>
]]></content>
  </entry>
  <entry>
    <title>Blog: Of panels and words</title>
    <link href="https://gatillos.com/yay/2010/07/27/blog-of-panels-and-words/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2010/07/27/blog-of-panels-and-words/</id>
    <updated>2010-07-27T23:47:06&#43;02:00</updated>
    <content type="html"><![CDATA[<p>When adding text that is narrated, I usually add a rectangular box and put it hanging around. It&rsquo;s not like a balloon but maybe I should do like everybody else and put the box on top of the panel when it&rsquo;s supposed to be read before whatever is happening in the panel.</p>
<p>Like in this example from the upcoming page:</p>
<div class="post-image"><a href="https://gatillos.com/yay/2010/07/27/blog-of-panels-and-words/29-chap4_02_a1.png"><img class="" title="29 chap4_02_a" src="https://gatillos.com/yay/2010/07/27/blog-of-panels-and-words/29-chap4_02_a1.png" alt="" width="300" height="398"></a></div>
<div class="post-image-caption">Text as part of the panels.</div>
<p>Also, I might reduce the size of the drawings, I tend to do them too big. I&rsquo;m hesitant though, because if you&rsquo;ve got a nice big monitor they look much better. Maybe I should play with different resolutions.</p>
]]></content>
  </entry>
  <entry>
    <title>Blog: Upgraded WordPress &amp; Webcomic</title>
    <link href="https://gatillos.com/yay/2010/07/26/blog-upgraded-wordpress-webcomic/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2010/07/26/blog-upgraded-wordpress-webcomic/</id>
    <updated>2010-07-26T23:08:13&#43;02:00</updated>
    <content type="html"><![CDATA[<p>Just a quick note to record how upgrading from Wordpress 2.x and Webcomic 2.x went for me. I waited quite a while until most people stopped complaining about upgrade problems before trying it.</p>
<p>First, I saved posts with the export tool (which doesn&rsquo;t give that much peace of mind because it doesn&rsquo;t include images). Then I did a full backup of the whole site and a dump of the mysql database. I do that regularly with a small script so that was easy.</p>
<p>After backing up everything I upgraded Wordpress. It had been asking for it for quite a while now, with a huge &lsquo;Upgrade to wordpress 3&rsquo; button always visible in the Admin console. Instead of clicking that, I decided to go through Dreamhost&rsquo;s panel because there are some things that need to be setup at Apache level that I know people at Dreamhost had taken care of, so it seemed the safe bet. I also figured I could get some support if I went that way (which I didn&rsquo;t need btw).</p>
<p>The upgrade to Wordpress 3 went flawlessly. Well, flawlessly meaning in this case breaking most everything and rendering the site apparently ok but horribly broken inside. First, all comics had disappeared, which is a bit scary when your site is supposed to be mostly about that. But that was expected because neither Webcomic nor Inkblot (the theme) were upgraded yet. I upgraded Webcomic directly from the plugin directory and downloaded the latest Inkblot theme from their site. I extracted the inkblot theme into the themes directory and copied inkblot-child outside of it so that it sits directly under &rsquo;themes&rsquo;, I then made sure inkblot-child was selected as the current theme.</p>
<p>Then, I went to Webcomic/Tools and upgraded the posts. This essentially recovers all the comic posts by migrating them to the new format. It was a relief to see them reappear, as every comic post had been lost until this step. The process is easy and consists on a small wizard-like dialog with a few steps, and one of them implies you manually moving your comic files to another directory. After that, a few of the posts weren&rsquo;t correctly bound to their comic images so I just bound them again.</p>
<p>All the tweaking on my inkblot-child theme was lost, which was not a real problem as I prefer the new structure. I just uploaded a banner for the header, tweaked font size and type and played a bit with the list format.</p>
<p>I tested the design that I commented sometime ago, with a blueish/magenta background, but it seems to clash with white images. I&rsquo;ll try it again at some point.</p>
<p>So, in summary:</p>
<ul>
<li>Upgrading wordpress to 3.0 is easy</li>
	<li>Webcomic doesn't upgrade too easily (I moved from the latest 2.x to 3.04). I really think most people will end up with a broken site. Good news is that there's lots of support from the Webcomic guys, and a nice video illustrating the process.</li>
	<li>Inkblot may upgrade nicely but I really didn't even try, just started from scratch with the new version.</li>
</ul>
]]></content>
  </entry>
  <entry>
    <title>LIFE/interior: Ana (1)</title>
    <link href="https://gatillos.com/yay/2010/07/14/lifeinterior-ana-1/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2010/07/14/lifeinterior-ana-1/</id>
    <updated>2010-07-14T02:20:47&#43;02:00</updated>
    <content type="html"><![CDATA[<p>Flashback time!</p>
<p>There we go, first part of this sequence. Let&rsquo;s get to know Ana as a little girl.</p>
<p>I kind of like the black and white characters over some basic colors. Maybe more than when I try to go for a more elaborate coloring.</p>
<p><em>Edit: Compacted the image a bit, and changed the font.</em></p>
]]></content>
  </entry>
  <entry>
    <title>Blog: Looking for Ana a bit more</title>
    <link href="https://gatillos.com/yay/2010/07/14/blog-looking-for-ana-a-bit-more/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2010/07/14/blog-looking-for-ana-a-bit-more/</id>
    <updated>2010-07-14T00:33:26&#43;02:00</updated>
    <content type="html"><![CDATA[<p>Well I have what could be considered a full page but since I&rsquo;m trying to make the comic easier to follow and read, I think I&rsquo;m going to finish the minisequence before publishing it.</p>
<p>In the meanwhile, how&rsquo;s that for little girl Ana:</p>
<p style="text-align: center;">
<div class="post-image"><a href="https://gatillos.com/yay/2010/07/14/blog-looking-for-ana-a-bit-more/29-chap3_01-littlegirl.png"><img class="" title="29 chap3_01-littlegirl" src="https://gatillos.com/yay/2010/07/14/blog-looking-for-ana-a-bit-more/29-chap3_01-littlegirl.png" alt="" width="546" height="405"></a></div>
<div class="post-image-caption">Little Ana</div>
<p style="text-align: left;">It feels much better to draw happy things :).
]]></content>
  </entry>
  <entry>
    <title>LIFE/interior: Therapy (9)</title>
    <link href="https://gatillos.com/yay/2010/07/06/lifeinterior-therapy-9/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2010/07/06/lifeinterior-therapy-9/</id>
    <updated>2010-07-06T01:07:01&#43;02:00</updated>
    <content type="html"><![CDATA[<p>New page.</p>
]]></content>
  </entry>
  <entry>
    <title>Blog: Looking for Ana</title>
    <link href="https://gatillos.com/yay/2010/07/06/blog-looking-for-ana/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2010/07/06/blog-looking-for-ana/</id>
    <updated>2010-07-06T00:36:40&#43;02:00</updated>
    <content type="html"><![CDATA[<p>Well the dreaded moment where I need to actually draw a recurring female character is finally here. Let&rsquo;s see if I&rsquo;m learning anything. From the male protagonist I&rsquo;ve learned that I need to have some very clear traits that I can easily reproduce otherwise drawing it in different angles becomes really cumbersome. Also, I like much more this style, a bit more like a cartoon.</p>
<p>So&hellip; how&rsquo;s this for a face? She should be kind of cute and very simply outlined&hellip;</p>
<div class="post-image"><a href="https://gatillos.com/yay/2010/07/06/blog-looking-for-ana/28-portfolio011.png"><img class="" title="28 portfolio01" src="https://gatillos.com/yay/2010/07/06/blog-looking-for-ana/28-portfolio011.png" alt="" width="140" height="149"></a></div>
<div class="post-image-caption">Mini Ana</div>
]]></content>
  </entry>
  <entry>
    <title>LIFE/interior: Therapy (8)</title>
    <link href="https://gatillos.com/yay/2010/07/04/lifeinterior-therapy-8/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2010/07/04/lifeinterior-therapy-8/</id>
    <updated>2010-07-04T23:52:54&#43;02:00</updated>
    <content type="html"><![CDATA[<p>Well, there we go. This is the end of the Therapy sequence. I hope everything makes a little more sense now, but I&rsquo;m never sure :). I&rsquo;m trying to combine the semi-weekly periodicity with a more short-story approach for each page so that they can be followed a little easier. I think this will always exist as some form of digital art so trying to do it just like a regular comic is not the way to go. Mr Mann looks horrible in these drawings but I can&rsquo;t be bothered changing it. I want to go back to the childhood years for a while. Drawing the little child is far more fun.</p>
<p>In case you missed it,<a href="https://gatillos.com/yay/2010/07/02/lifeinterior-therapy-7/"> I did another post a couple of days ago</a>. Together they should set a more reasonable starting point while hopefully keeping somethings unknown so to keep people interested.</p>
<p>PS: A side effect is that page size is increasing so probably load times will increase too. Let me know if it seems too slow for you. I&rsquo;m using dreamhost and it&rsquo;s usually quite slow, but at least it&rsquo;s cheap.</p>
<p><em>Edit: Reformatted, changed font and split the page in two.</em></p>
]]></content>
  </entry>
  <entry>
    <title>LIFE/interior: Therapy (7)</title>
    <link href="https://gatillos.com/yay/2010/07/02/lifeinterior-therapy-7/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2010/07/02/lifeinterior-therapy-7/</id>
    <updated>2010-07-02T03:12:36&#43;02:00</updated>
    <content type="html"><![CDATA[<p>After the past discussions regarding the storyline, I decided to add a couple of pages to this sequence, in order to further clarify everything. This one is a quick one, not that many new graphics where added. Next one is already drafted and should be up sometime this weekend.</p>
<p>Credits for naming the junkie &ldquo;Craig&rdquo; go to my private linguist. I like how &lsquo;Craig the junkie&rsquo; sounds.</p>
<p>Funny thing, I&rsquo;ve been re-reading my old comics and they do help the reader with little bubbles of information and more obvious sequences, even the more &lsquo;artsy&rsquo; of them. I&rsquo;ll try to remember, and copy, that.</p>
<p><em>Edit: Reformatted, changed font.</em></p>
<p style="text-align: right;">(*) The text in Spanish is an extract from <em>La luna y la muerte</em> by Lorca. I wouldn't dare translating it.
]]></content>
  </entry>
  <entry>
    <title>Blog: I will update</title>
    <link href="https://gatillos.com/yay/2010/07/01/blog-i-will-update/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2010/07/01/blog-i-will-update/</id>
    <updated>2010-07-01T01:15:10&#43;02:00</updated>
    <content type="html"><![CDATA[<p>Just some words, not even a drawing.</p>
<p>This <em>LIFE/interior</em> thing is far from dead, I know lack of updates seems to point strongly to a looming future &ndash;but that&rsquo;s not it! It&rsquo;s only the usual spiral of unwanted events that keep conspiring against it, diseases mix with happy moments and stress mixes with relief, and between all of that there seems to be no space for little things like a continuing story.</p>
<p>All is not lost! Many drafts took life from otherwise dead trees and graphite and script and new moments are already in the land of future. Their migration to the digital world is taking longer than I&rsquo;d like, and sometimes I think that this lonely tear of sweat on the side of my face doesn&rsquo;t only come from the hot summer but also from the guilty feeling of lousy comic parenting. Also, the unborn pages keep asking me to get my **** together and do some drawing, now (unborn pages talk like that, they are a bit foul-mouthed).</p>
<p>There&rsquo;s weekend hopes! Some nasty pieces of life will have taken care of themselves by then, and drawing will resume.</p>
<p>Promise.</p>
<p>It&rsquo;s on the Internet. It must be true.</p>
]]></content>
  </entry>
  <entry>
    <title>Blog: Understanding comics</title>
    <link href="https://gatillos.com/yay/2010/06/16/blog-understanding-comics/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2010/06/16/blog-understanding-comics/</id>
    <updated>2010-06-16T01:01:31&#43;02:00</updated>
    <content type="html"><![CDATA[<p>Well the title is intentionally a reference to Scott McCloud&rsquo;s &ldquo;Understanding Comics&rdquo;, which I&rsquo;m reading these days. The book is an essay (in comic form) about comics, but from a very uncommon point of view. He talks about sequence, about the cognitive process involved when reading a comic, the difference between painting, literature and comics and much more I haven&rsquo;t read yet. Everything there is wonderfully illustrated with examples as he explores the different approaches authors take and all the great opportunities that this kind of media has.</p>
<p>But today I discovered what a webcomic is really good for: feedback!</p>
<p>Let me explain. I have the rare opportunity of actually talking to real &lsquo;readers&rsquo; and ask them about the comic and I was interested about the last two pages, because a very important characteristic of the older Mr Mann is supposedly revealed there, and some key elements are introduced. But.. a suprisingly high percentage did not get the message I was trying to convey on those two pages. At all. It&rsquo;s not only the message, which can arguably be missed as it&rsquo;s only a couple of pages, but the actual sequence of events was unclear for almost everybody. That is, they didn&rsquo;t understand what happened.</p>
<p>The comics are <a href="https://gatillos.com/yay/2010/06/12/lifeinterior-therapy-5/">here</a> and <a href="https://gatillos.com/yay/2010/06/13/lifeinterior-therapy-6/">here</a>.</p>
<p>My original intent was to stop that sequence there and go to a flashback introducing the character &lsquo;Ana&rsquo;, but I&rsquo;ll add another page to the therapy sequence, trying to further explain it because it&rsquo;s kind of important.</p>
<p>I believe there&rsquo;s two main issues there: the main character is at times difficult to recognize as I still need to improve drawing, and more importantly, when I tried to display the contradiction between what Mr Mann is telling the psychiatrist and what he was actually doing (and what he is remembering), well, essentially I failed.</p>
<p>I think I should have added something more obvious, like some kind of cloud separating thoughts or memories and inserting more shots of Mr Mann&rsquo;s face while explaining it. For your knowledge: the idea here is that Mr Mann lies to the psychiatrist, pretends the whole event was a very simple thing, and hides the fact that after that &lsquo;flip out&rsquo; at the office he went and beat the crap out of that new character that appears (the junkie) in something which has to do with another character yet to appear (Ana).</p>
<p>So FAIL for me ;). I&rsquo;ll try to learn something from this. It&rsquo;s good to have this kind of feedback so early in this process, because I can react quickly.</p>
<p>And if by any chance you did understand it, do post. Maybe my user sample was biased :)</p>
]]></content>
  </entry>
  <entry>
    <title>LIFE/interior: Therapy (6)</title>
    <link href="https://gatillos.com/yay/2010/06/14/lifeinterior-therapy-6/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2010/06/14/lifeinterior-therapy-6/</id>
    <updated>2010-06-14T01:22:24&#43;02:00</updated>
    <content type="html"><![CDATA[<p>And just as promised, the continuation to the previous page.</p>
<p>I didn&rsquo;t want to make it too gory. This is the end of this sequence, not sure if I managed to transmit the intended effect, or any kind of effect for that matter. Does the gray at the end work at all?</p>
<p><em>UPDATE: Made last panel a little more easy to understand, and arguably uglier ;)</em></p>
<p><em>Edit: Reformatted, changed font.</em></p>
]]></content>
  </entry>
  <entry>
    <title>LIFE/interior: Therapy (5)</title>
    <link href="https://gatillos.com/yay/2010/06/12/lifeinterior-therapy-5/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2010/06/12/lifeinterior-therapy-5/</id>
    <updated>2010-06-12T23:41:27&#43;02:00</updated>
    <content type="html"><![CDATA[<p>This page makes more sense when read just before the next one, I&rsquo;ve been working on both together but as sometimes happens the resulting sequence was way too big for a single page.</p>
<p>I think I&rsquo;m improving a bit, the woman doesn&rsquo;t look like a guy nor a transvestite which is good I guess. I like also the darker tones as they match perfectly well with the storyline. Also, I changed the look of Mr Mann a bit to make more prominent that these are his &lsquo;old&rsquo; years.</p>
<p>The next drawing will hopefully be up in a couple of days. See the <a href="https://gatillos.com/yay/2010/06/11/blog-ripping-off-friends/">blog entry</a> below for the story of the semaphores :).</p>
<p>The junkie is almost a self-portrait :P.</p>
<p><em>Edit: Reformatted, changed font.</em></p>
]]></content>
  </entry>
  <entry>
    <title>Blog: Ripping off friends</title>
    <link href="https://gatillos.com/yay/2010/06/11/blog-ripping-off-friends/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2010/06/11/blog-ripping-off-friends/</id>
    <updated>2010-06-11T21:38:27&#43;02:00</updated>
    <content type="html"><![CDATA[<p>Creating a composition for a panel is a very nice exercise and lots of fun. I usually do some doodling then try it a few more times, then do something a bit more serious, then when it looks about ok I start all the rest.</p>
<p>There is another approach, which is basically ripping off from a friend that has a great sense of composition but works in another area, like, let&rsquo;s say, photography :). Today I decided to steal another photo from a friend, in this case the photo is not that great from a technical point of view, after all it was one of the very first ones he took as a learning exercise, but the composition was there and fits very nicely with the one I had in mind. What I did is very simple and not that difficult: 1) find a nice photo, 2) either sketch it maintaining the composition or as I did with this one, actually copy the main proportions, 3) forget about the photo, concentrate on the drawing itself.</p>
<p>I think it works. I like the lack of perfection on proportions and the slightly skewed perspective, although I might fix some of that too. This new thing I&rsquo;m doing with colors and shadows is also quite entertaining. The drawing should still get some more shades somewhere but I&rsquo;ll do those later.</p>
<p>Here is the process, in all it&rsquo;s glory:</p>
<div class="post-image"><a href="https://gatillos.com/yay/2010/06/11/blog-ripping-off-friends/24-ripping-off-photos-b.png"><img class="" title="24 ripping off photos-b" src="https://gatillos.com/yay/2010/06/11/blog-ripping-off-friends/24-ripping-off-photos-b.png" alt="" width="557" height="1186"></a></div>
<div class="post-image-caption">Which is better?</div>
<p>The <a href="https://www.flickr.com/photos/haripako/4330493821/in/set-72157623251916704/" target="_blank">original photo</a> is from <a href="http://www.flickr.com/photos/haripako/" target="_blank">Haripako</a> (shusssh don&rsquo;t tell him). This is the second time I rip one of his photos, more to go ;).</p>
]]></content>
  </entry>
  <entry>
    <title>LIFE/interior: Therapy (4)</title>
    <link href="https://gatillos.com/yay/2010/06/06/lifeinterior-therapy-4/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2010/06/06/lifeinterior-therapy-4/</id>
    <updated>2010-06-06T22:49:07&#43;02:00</updated>
    <content type="html"><![CDATA[<p>There we go, another piece of the puzzle :). I played for a while with different color approaches. I don&rsquo;t want to go &lsquo;full color&rsquo; because a) it&rsquo;s a lot of work and b) I don&rsquo;t know how to do it properly!</p>
<p>So here is my artistic approach to a bit more coloring and a new way to draw main shadows.</p>
<p>Right now I think it looks ok, although I finished it a bit hastily as usual. I&rsquo;m pretty sure in a few minutes I&rsquo;ll think a 3-year old would do it better. Let&rsquo;s press Publish quickly.</p>
<p><em>UPDATE: abide to the grammar nazis out there :)</em></p>
<p><em>Edit: Reformatted, changed font.</em></p>
]]></content>
  </entry>
  <entry>
    <title>Blog: a bit of color</title>
    <link href="https://gatillos.com/yay/2010/06/01/blog-a-bit-of-color/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2010/06/01/blog-a-bit-of-color/</id>
    <updated>2010-06-01T22:55:21&#43;02:00</updated>
    <content type="html"><![CDATA[<p>Today I decided to try and put a little more effort into coloring and shadows. Up to this point shadows are most of the time drawn on a separate layer on top of everything, with a filter of type &lsquo;darken&rsquo;. That works great for some shadows, but it doesn&rsquo;t play well with other objects, as it needs to be on top of everything. It&rsquo;s essentially like drawing with a brush over the finished drawings.</p>
<p>I decided to combine that with a different approach: create shadows as just basic shapes with color and put them in the same layer as the rest of the picture, as regular &lsquo;citizens&rsquo; in the drawing. That means I can draw the shadow of a table and then put a table on top of it, without having to spend too much time trying not to accidentally draw over the table while shading.</p>
<p>Mmmm. Maybe that doesn&rsquo;t really make sense, particularly if you&rsquo;ve never tried to draw with a vector program like Inkscape.</p>
<p>Anyhow, you can find the result below. First is the draft by hand, then I outline it, then adjust it and make it more round, and finally I play with color and layers:</p>
<div class="post-image"><a href="https://gatillos.com/yay/2010/06/01/blog-a-bit-of-color/22-a-bit-of-coloring1.png"><img class="" title="a bit of coloring" src="https://gatillos.com/yay/2010/06/01/blog-a-bit-of-color/22-a-bit-of-coloring1.png" alt="" width="500" height="1672"></a></div>
<div class="post-image-caption">Maybe a little more detail on the background...</div>
<p>I created the color palette displayed below the pictures using <a href="http://kuler.adobe.com">http://kuler.adobe.com</a> &ndash;I don&rsquo;t know much about color, but those just seem right. I&rsquo;ve been using the same palette since the beginning, although I sometimes play with transparency and grays.</p>
]]></content>
  </entry>
  <entry>
    <title>LIFE/interior: Therapy (3)</title>
    <link href="https://gatillos.com/yay/2010/05/27/lifeinterior-therapy-3/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2010/05/27/lifeinterior-therapy-3/</id>
    <updated>2010-05-27T21:28:29&#43;02:00</updated>
    <content type="html"><![CDATA[<p>As promised this comes earlier than usual. Let&rsquo;s see if I can get the next one in a week or so.</p>
<p><em>UPDATE: some spelling corrections :). And since I&rsquo;m mostly using American spelling, what previously was a lift now mutates to an elevator.</em></p>
]]></content>
  </entry>
  <entry>
    <title>LIFE/interior: Therapy (2)</title>
    <link href="https://gatillos.com/yay/2010/05/26/lifeinterior-therapy-2/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2010/05/26/lifeinterior-therapy-2/</id>
    <updated>2010-05-26T23:00:26&#43;02:00</updated>
    <content type="html"><![CDATA[<p>Well this took a while, what can I say. The next one is already finished, will publish tomorrow. I worked the two together, was about to post them as one but I think it&rsquo;s worth splitting them.</p>
<p><em>Edit: Reformatted, changed font.</em></p>
]]></content>
  </entry>
  <entry>
    <title>Blog: Sketch away</title>
    <link href="https://gatillos.com/yay/2010/05/24/blog-sketch-away/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2010/05/24/blog-sketch-away/</id>
    <updated>2010-05-24T12:32:58&#43;02:00</updated>
    <content type="html"><![CDATA[<p>Hiya. Well time continues to fly but my little webcomic hasn&rsquo;t received an update for about two weeks. Thing is, I&rsquo;m still working on it, it just takes time and it&rsquo;s hard to concentrate when there is this bright sun everywhere trying to drag you out to the streets.</p>
<p>I&rsquo;ll try to keep this a bit more interesting by posting again some drafts and then compare those to whatever they come out to be. Usually I redraw things so much they barely resemble the original sketch, so this makes for an interesting test.</p>
<div class="post-image"><a href="https://gatillos.com/yay/2010/05/24/blog-sketch-away/19-therapy-drafts.png"><img class="" title="some sketches" src="https://gatillos.com/yay/2010/05/24/blog-sketch-away/19-therapy-drafts.png" alt="" width="320" height="440"></a></div>
<div class="post-image-caption">Sketching of various panels</div>
<p>As you can see my drawing of females isn&rsquo;t improving that much, but I keep trying.</p>
]]></content>
  </entry>
  <entry>
    <title>LIFE/interior: Today</title>
    <link href="https://gatillos.com/yay/2010/05/16/today/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2010/05/16/today/</id>
    <updated>2010-05-16T00:19:20&#43;02:00</updated>
    <content type="html"><![CDATA[<p>So there&rsquo;s going to be a few flashbacks, hopefully obvious after a while. This is present day.</p>
<p>Edit: changed font and the text&rsquo;s layout.</p>
<p>Edit: reordered this page.</p>
<p><em>Edit: Reformatted, changed font.</em></p>
]]></content>
  </entry>
  <entry>
    <title>Blog: Aging</title>
    <link href="https://gatillos.com/yay/2010/05/15/blog-aging/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2010/05/15/blog-aging/</id>
    <updated>2010-05-15T17:28:28&#43;02:00</updated>
    <content type="html"><![CDATA[<p>I&rsquo;m starting to think my story is a bit too ambitious given my current abilities :), but foolishness can get you quite far. Thing is, the story I&rsquo;m trying to tell is supposed to go back and forth between three different ages of the main character. That means I need to be able to draw the character in three different stages of his life (as if it was not difficult enough to draw one character in more than one position!).</p>
<p>So currently I&rsquo;ve drawn mostly the childhood years and some snapshots from the young years (although I should revisit them and slightly change the look of the character a bit). Now I need to draw the character quite a few years later. It turns out it&rsquo;s quite difficult to actually <em>age</em> characters (but fun too!). I&rsquo;m starting to understand why most comic characters don&rsquo;t age at all. Take a look at this amazing guide <a href="http://www.cedarseed.com/fire/agingtut.html">at Cedarseed&rsquo;s site</a> or if you prefer, <a href="http://cedarseed.deviantart.com/art/Guide-to-Aging-Characters-123111570">at Deviantart</a>. Of course, as my style of drawing is quite different, not all of that applies to my particular case but it serves as a very nice starting point.</p>
<p>This is what a first approach to The Three Ages looks like in my world (not exactly like <a href="http://www.artchive.com/artchive/K/klimt/klimt_3ages_of_woman.jpg.html">these other Three Ages</a>):</p>
<div class="post-image"><a href="https://gatillos.com/yay/2010/05/15/blog-aging/17-the-three-ages1.png"><img class="" title="17 the three ages" src="https://gatillos.com/yay/2010/05/15/blog-aging/17-the-three-ages1-300x158.png" alt="" width="300" height="158"></a></div>
<div class="post-image-caption">The three ages</div>
<p>It was a very interesting effort. I chose the gray eye lids and the white hair as a guidelines for the three figures. The old age I&rsquo;m trying to draw is not supposed to be really very old but it&rsquo;s more a case of premature old age (more on that as the comic advances).</p>
<p>Another fundamental point about &lsquo;old age&rsquo; is that whenever I try to draw the character as a premature-old person I start drawing him with very unlikely clothes. I mean, old people in my mind always wear a slightly ragged, dark colored suit, maybe some kind of hat and of course a walking stick. Question is, how will old people look like 20 years from now? Will we see them in their &lsquo;vintage&rsquo; G-STAR RAW jackets and think they need to renew the wardrobe? Oh the difficulties of life.</p>
]]></content>
  </entry>
  <entry>
    <title>LIFE/interior: Therapy (1)</title>
    <link href="https://gatillos.com/yay/2010/05/08/lifeinterior-therapy-1/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2010/05/08/lifeinterior-therapy-1/</id>
    <updated>2010-05-08T18:01:07&#43;02:00</updated>
    <content type="html"><![CDATA[<p>Well I think I&rsquo;m starting to have a regular schedule. This one came out a bit too large I think &ndash;it&rsquo;s roughly twice the usual size&ndash; but splitting it into two made the resulting two pages too small, so anyway this is a webcomic so playing with the canvas size is ok, isn&rsquo;t it?</p>
<p>This page brings backs the main storyline and is linked to one from a few weeks earlier, remember that one with the taxi driver and the bikes? Yep, <a href="https://gatillos.com/yay/2010/03/27/today/" target="_self">that one</a>.</p>
<p>See? There is an actual plot here, it&rsquo;s not only me playing with Inkscape.</p>
<p>Update: Rearranged text, added references to time.</p>
<p><em>Edit: Reformatted, changed font.</em></p>
]]></content>
  </entry>
  <entry>
    <title>LIFE/interior: Childhood (4)</title>
    <link href="https://gatillos.com/yay/2010/05/03/lifeinterior-childhood-4/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2010/05/03/lifeinterior-childhood-4/</id>
    <updated>2010-05-03T23:29:03&#43;02:00</updated>
    <content type="html"><![CDATA[<p>Well this marks the end of this mini flashback. Next two pages will bring back a different part of the story and I hope that once you put it all together it starts to make sense.</p>
<p>I&rsquo;m publishing again without much time for polishing but I think it works the way it looks, and I need to keep moving the story forward. :)</p>
<p>Update: rearranged and changed text.</p>
]]></content>
  </entry>
  <entry>
    <title>Blog: Wait, what was that?</title>
    <link href="https://gatillos.com/yay/2010/04/27/blog-wait-what-was-that/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2010/04/27/blog-wait-what-was-that/</id>
    <updated>2010-04-27T20:59:38&#43;02:00</updated>
    <content type="html"><![CDATA[<p>I knew from the very beginning that creating a webcomic imposes some restrictions. One is the immutability of content. Once it&rsquo;s published, it shall not be changed. Thus spoke the Lord.</p>
<p>Now, add in the fact that you <em>need</em> to release periodically. Even more, you <strong>must</strong>. That&rsquo;s actually the key point, if I ever learn to draw it will be thanks to being forced to do it :):</p>
<p>Thing is, I didn&rsquo;t have enough time to review and check the last page I published. Then the next day, it felt completely out of tone with the idea of the comic. So I committed a sin and changed it and it&rsquo;s very interesting to see that some people noticed, but of course most didn&rsquo;t until I pointed them to the change (Facebook power).</p>
<p>The actual changes I made are not so evident so the new version seemed better than the previous one although it was unclear why. Let me illustrate you with a Before and After comparison:</p>
<div class="post-image"><a href="https://gatillos.com/yay/2010/04/27/blog-wait-what-was-that/14-chap1_03_mix.jpg"><img class="" title="14 chap1_03_mix" src="https://gatillos.com/yay/2010/04/27/blog-wait-what-was-that/14-chap1_03_mix-266x300.jpg" alt="" width="266" height="300"></a></div>
<div class="post-image-caption">7 differences (click to zoom)</div>
<p>The most important bit is the text, previously it was too verbose, I must learn to leave some things for the reader to infer.</p>
<p>On a side note, Google Reader doesn&rsquo;t care about updated items  &ndash;other feed readers will tell you there was an update, but someone at  Google decided they didn&rsquo;t care, although updates are displayed  correctly they are not marked as new content so it&rsquo;s easy to miss them.</p>
<p>BTW: I should change the stroke size for the characters at the bottom of the page, they look so horrible. Should I? Shouldn&rsquo;t? Where do I stop? HELP ME!</p>
]]></content>
  </entry>
  <entry>
    <title>LIFE/interior: Childhood (3)</title>
    <link href="https://gatillos.com/yay/2010/04/26/lifeinterior-childhood-3/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2010/04/26/lifeinterior-childhood-3/</id>
    <updated>2010-04-26T01:31:31&#43;02:00</updated>
    <content type="html"><![CDATA[<p>Well not so sure about this one, it could have used a bit more work, but I need to keep the story going or this will take forever.</p>
<p>I doubted about using &lsquo;mom&rsquo; or &lsquo;mum&rsquo;. The dictionary tells me that saying &lsquo;mum&rsquo; is über-british and mom seems more international, so I went for international.</p>
<p>On another topic, I&rsquo;m really wondering if I&rsquo;m making the panels too big&hellip;</p>
<p><em><strong>UPDATE:</strong> Changed quite a lot&hellip; removed all the silly text, changed the layout, reduced panels, added some background. I&rsquo;ll try not to do this too much, otherwise I&rsquo;ll keep changing all the drawings forever :).</em></p>
<p><em>Update: Rearranged text (again&hellip;).</em></p>
<p><em>Edit: Reformatted, changed font.</em></p>
]]></content>
  </entry>
  <entry>
    <title>Blog: Cherchez la femme</title>
    <link href="https://gatillos.com/yay/2010/04/21/blog-cherchez-la-femme/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2010/04/21/blog-cherchez-la-femme/</id>
    <updated>2010-04-21T01:26:39&#43;02:00</updated>
    <content type="html"><![CDATA[<p>So I have this problem. Let&rsquo;s come clean. I can&rsquo;t draw women. I like to draw women in an androgynous way, I&rsquo;m not too keen on drawing big voluptuous figures. Problem is, well, they are so androgynous that they are essentially indistinguishable from men.</p>
<div class="post-image"><a href="https://gatillos.com/yay/2010/04/21/blog-cherchez-la-femme/sketch-20100410c01.jpg"><img class="" title="sketch 20100410c0" src="https://gatillos.com/yay/2010/04/21/blog-cherchez-la-femme/sketch-20100410c01.jpg" alt="" width="100" height="251"></a></div>
<div class="post-image-caption">Femme.</div>
<p>So the solution is clear: add long hair, a ponytail or some earrings in order to provide clues, or combine it with a nice skirt. Women&rsquo;s Rights defenders will campaign against me soon. All that is good but limits my spectrum and sort of makes my drawings too stereotypical. Take this sketch as an example, that could easily come from a fairy tale. And I&rsquo;m not sure why I used the manga eyes on it, btw. Ok, I was in a plane so the pressure changes may have affected my brain.</p>
<p>I have no trouble drawing really muscular guys, with impressive chests which easily border the homoerotic. I figure that&rsquo;s ok as long as I don&rsquo;t salivate while drawing them. Must be because I remember reading Savage Sword of Conan when I was growing. The fact that I seemed to focus on the muscular types and not the gorgeous women Conan was constantly saving may be worth a visit to the therapist.</p>
<p>In any case, what constitutes a girl&rsquo;s figure is very interesting, I have a few books on the subject, but I still need to practice quite a lot before I can introduce a female character. It&rsquo;s still going to be all boys for a few weeks. One of the books actually describes in detail how to draw women&rsquo;s breasts, with a whole chapter dedicated to &lsquo;women holding their breasts together by pressing them with their arms&rsquo;. Let&rsquo;s hope it doesn&rsquo;t come to that.</p>
]]></content>
  </entry>
  <entry>
    <title>LIFE/interior: Childhood (2)</title>
    <link href="https://gatillos.com/yay/2010/04/18/lifeinterior-childhood-2/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2010/04/18/lifeinterior-childhood-2/</id>
    <updated>2010-04-18T18:11:48&#43;02:00</updated>
    <content type="html"><![CDATA[<p>I&rsquo;ll misread volcano signals and continue stubbornly with my efforts to create, somehow, a webcomic that somebody would want to read.</p>
<p>So here it is, a second page. Hopefully next one will be up earlier, as I already have some material for that.</p>
<p><em>(Update: fixed a typo in the word &lsquo;admittedly&rsquo;&hellip; I really need to configure the spellchecker for Inkscape)</em></p>
<p><em>(Update: fixed a bit the text layout)</em></p>
<p><em>Edit: Reformatted, changed font.</em></p>
]]></content>
  </entry>
  <entry>
    <title>Blog: On-the-go alternatives to scanners</title>
    <link href="https://gatillos.com/yay/2010/04/10/on-the-go-alternatives-to-scanners/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2010/04/10/on-the-go-alternatives-to-scanners/</id>
    <updated>2010-04-10T23:49:51&#43;02:00</updated>
    <content type="html"><![CDATA[<p>I&rsquo;ve tried a few things that can replace a scanner. Let&rsquo;s share.</p>
<p>Since I only use the scanner for sketches and basic character traits, I don&rsquo;t really need that much precision but I do need it to be focused and not distorted.</p>
<ol>
<li>
<p>iPhone photos. Crap. iPhone lacks a flash and is completely incapable of applying the right focus.</p>
</li>
<li>
<p>iSight camera from my rusty macbook. So-so, it has a pretend-flash and seems to be better at focusing, but it forces me to hold the paper at just the right distance.</p>
</li>
<li>
<p>Cheap Nikon Coolpix digital camera. Clear winner. Using the &lsquo;close-up&rsquo; mode it seems to be able to focus perfectly on the drawings.</p>
</li>
</ol>
<p>So 3 it is. All this effort is because it seems to be easier for me to outline a sketch using the ancient method of pencil and paper. See this example below, which had a threshold applied to make it black and white.</p>
<div class="post-image"><a href="https://gatillos.com/yay/2010/04/10/on-the-go-alternatives-to-scanners/sketch-gato-salta-20100609.jpg"><img class="" title="Jumping around" src="https://gatillos.com/yay/2010/04/10/on-the-go-alternatives-to-scanners/sketch-gato-salta-20100609.jpg" alt="" width="400" height="300"></a></div>
<div class="post-image-caption">OMG this image contains spoilers</div>
<p>And I even used a movement line (the curved line that goes from top to bottom) to define the shape of the cat. I&rsquo;m going pro.</p>
]]></content>
  </entry>
  <entry>
    <title>LIFE/interior: Childhood (1)</title>
    <link href="https://gatillos.com/yay/2010/04/04/lifeinterior-childhood-1/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2010/04/04/lifeinterior-childhood-1/</id>
    <updated>2010-04-04T20:47:07&#43;02:00</updated>
    <content type="html"><![CDATA[<p>So, me being an illiterate foreigner, I didn&rsquo;t know what to use as a sort of onomatopoeia for the sounds the mouse was supposed to make. I resorted to asking a knowledgeable friend and her response is funny enough that I&rsquo;ll write it here: &ldquo;Eek is typical of a scared mouse. Squeak is standard for all other mouse emotions or Hmm if it&rsquo;s a wondering mouse&rdquo; (smiley faces omitted). English is such a wonderful language when it comes to sounds.</p>
<p>I changed my mind regarding the font used for the lettering, it doesn&rsquo;t seem to suit this script. Now it&rsquo;s YanksHand 18pt, 100% space, for the geeks out there. I&rsquo;m also learning a bit more about Inkscape and starting to figure out just the right layer layout. Shading is now in a layer on top of the inking, using the magic &lsquo;Darken&rsquo; blend mode. That little change allowed me to create shapes with a solid background which makes creating the figures easier sometimes.</p>
<p>Anyway, as promised, story starts to unfold and it follows an actual script. Yay!</p>
<p><em>Edit: Reformatted, changed font.</em></p>
]]></content>
  </entry>
  <entry>
    <title>Blog: playing with proportions</title>
    <link href="https://gatillos.com/yay/2010/04/01/blog-playing-with-proportions/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2010/04/01/blog-playing-with-proportions/</id>
    <updated>2010-04-01T18:14:42&#43;02:00</updated>
    <content type="html"><![CDATA[<p>So I had a hard time choosing the right proportions for the character when he&rsquo;s older. The child is supposed to be funnier and intentionally disproportionated but the adult, even if it should also look like a cartoon character, should be a bit more proportional. So I started googling and found various techniques, the one applied here is based on the size of the head, essentially using it as a ruler. See the progress from sketch to draft below. Essentially, the body is 7 &lsquo;heads&rsquo; long. Trick is that whenever there&rsquo;s a joint, these &lsquo;heads&rsquo; may overlap as in the knees below. Well, that&rsquo;s what I think&hellip;</p>
<div class="post-image"><a href="https://gatillos.com/yay/2010/04/01/blog-playing-with-proportions/08-childhood1_mix.png"><img class="" title="08 childhood1_mix" src="https://gatillos.com/yay/2010/04/01/blog-playing-with-proportions/08-childhood1_mix.png" alt="" width="400" height="1815"></a></div>
<div class="post-image-caption">Playing with proportions.</div>
<p>Not so bad. I kind of like the style, pending adding detail, probably changing the pencil width, etc.</p>
]]></content>
  </entry>
  <entry>
    <title>Blog: Now I&#39;m really missing the scanner</title>
    <link href="https://gatillos.com/yay/2010/03/31/blog-now-im-really-missing-the-scanner/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2010/03/31/blog-now-im-really-missing-the-scanner/</id>
    <updated>2010-03-31T12:52:41&#43;02:00</updated>
    <content type="html"><![CDATA[<p>This is what I did yesterday. I tried doodling directly with the tablet, bypassing the usual pencil drawing and then scanning, because I don&rsquo;t have a scanner here. I did some basic hand drawing for inspiration, but changed it a bit when drawing on screen. The conclusion: I do need the scanner or drawing with a bigger zoom or something, because the results are quite disappointing:</p>
<div class="post-image"><a href="https://gatillos.com/yay/2010/03/31/blog-now-im-really-missing-the-scanner/08-childhood1_b.png"><img class="" title="08 childhood1_b" src="https://gatillos.com/yay/2010/03/31/blog-now-im-really-missing-the-scanner/08-childhood1_b.png" alt="" width="300" height="444"></a></div>
<div class="post-image-caption">Lame.</div>
<p>The thing is that unless you are a the correct zoom level, most of the traces you draw with the table are not actually represented in the drawing, so when I quickly did the traces for the head of a mouse (that&rsquo;s what the child is supposed to be holding), all the detail disappeared. I&rsquo;m posting it nonetheless, so that the world can see how that evolves to something :).</p>
<p>And I did draw the small child looking to the left, had to play a bit with guides in Inkscape to make it proportional, but it looks fine enough. Not sure about the hands, maybe I can make the character wear prosthetic hands because that is what they look like&hellip;</p>
<div class="post-image"><a href="https://gatillos.com/yay/2010/03/31/blog-now-im-really-missing-the-scanner/08-childhood1_a2.png"><img class="" title="08 childhood1_a2" src="https://gatillos.com/yay/2010/03/31/blog-now-im-really-missing-the-scanner/08-childhood1_a2.png" alt="" width="184" height="388"></a></div>
<div class="post-image-caption">I can walk.</div>
<p>I like the expression it has. It&rsquo;s missing some shadows (one under the eye), but it&rsquo;s still a bit of a draft.</p>
]]></content>
  </entry>
  <entry>
    <title>Blog: Drawing children</title>
    <link href="https://gatillos.com/yay/2010/03/29/blog-drawing-children/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2010/03/29/blog-drawing-children/</id>
    <updated>2010-03-29T14:46:57&#43;02:00</updated>
    <content type="html"><![CDATA[<p>Well the next pages that hopefully will be coming during the following weeks are actually scripted, yes, like in a real comic! They describe our narrator&rsquo;s recollections from his childhood. I wanted to use a slightly different style for the &lsquo;childhood&rsquo; era. I included the actual drawing process this time. Since I don&rsquo;t have my scanner here I didn&rsquo;t use the pencil draft, although I did create one. So process goes: I outlined the figure with straight lines, then smoothed them using Inkscape, then tweaked them, then continued tweaking and defining detail (while trying not to put too much detail in).</p>
<p>So yep, this is what I do on a weekend:</p>
<div class="post-image"><a href="https://gatillos.com/yay/2010/03/29/blog-drawing-children/08-childhood1_a2.jpg"><img class="" title="Drawing children - click to zoom" src="https://gatillos.com/yay/2010/03/29/blog-drawing-children/08-childhood1_a2-663x1024.jpg" alt="" width="663" height="1024"></a></div>
<div class="post-image-caption">Childhood is never easy</div>
<p>Actual main character is supposed to be the last white haired one, the black haired one is just me playing to see how tweaking distances in the figure can completely change the look of a character. My initial thought was that the child version of the main character should have a different hairstyle, because usually when you are a child it&rsquo;s your <em>mom</em> that decides how you look, but I think using the same hairstyle makes him easier to identify. I did want it to have distinct, more comic-like, eyes.</p>
<p>Tricky bit is now doing the same character in various positions&hellip;</p>
]]></content>
  </entry>
  <entry>
    <title>Blog: New site layout drafts, UK Webcomix Thing</title>
    <link href="https://gatillos.com/yay/2010/03/28/blog-new-site-layout-drafts-uk-webcomic-thing/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2010/03/28/blog-new-site-layout-drafts-uk-webcomic-thing/</id>
    <updated>2010-03-28T00:57:42&#43;01:00</updated>
    <content type="html"><![CDATA[<p>Well my friend Sergi was kind enough to draft a design for this site. His approach is usually quite different to mine so that&rsquo;s always welcome.</p>
<p>Here&rsquo;s what it looks like:</p>
<div class="post-image"><a href="https://gatillos.com/yay/2010/03/28/blog-new-site-layout-drafts-uk-webcomic-thing/07-webdesign-sergi-1.jpg"><img class="" title="Draft web design - click to zoom" src="https://gatillos.com/yay/2010/03/28/blog-new-site-layout-drafts-uk-webcomic-thing/07-webdesign-sergi-1-220x300.jpg" alt="" width="220" height="300"></a></div>
<div class="post-image-caption">First draft for the site's design - click to zoom</div>
<p>By the way, I enjoyed the <a href="http://www.ukwebcomixthing.co.uk" target="_blank">UK Webcomix Thing 2010</a> today. Lots of talent there, I talked with quite a lot of people which were quite nice and I hope someday I myself will have something to show there too :). Lots of different styles, but I seem to prefer the somewhat cute ones, like <a href="http://www.timothywinchester.com" target="_blank">Timothy Winchester</a>, if only because of the business cards he was giving:</p>
<div class="post-image"><a href="https://gatillos.com/yay/2010/03/28/blog-new-site-layout-drafts-uk-webcomic-thing/07-uk-webcomix-timothy.jpg"><img class="" title="www.timothywinchester.com" src="https://gatillos.com/yay/2010/03/28/blog-new-site-layout-drafts-uk-webcomic-thing/07-uk-webcomix-timothy-300x179.jpg" alt="" width="300" height="179"></a></div>
<div class="post-image-caption">Now that's a business card...</div>
]]></content>
  </entry>
  <entry>
    <title>Site redesign...</title>
    <link href="https://gatillos.com/yay/2010/03/25/site-redesign/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2010/03/25/site-redesign/</id>
    <updated>2010-03-25T22:37:10&#43;01:00</updated>
    <content type="html"><![CDATA[<div class="post-image"><a href="https://gatillos.com/yay/2010/03/25/site-redesign/06-memories_b2_bulldog.png"><img class="" title="bonus bulldog" src="https://gatillos.com/yay/2010/03/25/site-redesign/06-memories_b2_bulldog.png" alt="" width="106" height="163"></a></div>
<div class="post-image-caption">Drawing      a bulldog in 10 seconds.</div>
<p>Well since I have some difficulties finding the right spot to draw, I&rsquo;ll update the site putting it closer to the webcomic layout. I&rsquo;m using a wordpress plugin called webcomic and the inkblot theme, no customizations yet.</p>
<p>I&rsquo;ve been doing quite a lot of traveling lately (Dublin, London, Barcelona) and that&rsquo;s seriously getting in the way, but <strong>I shall prevail</strong>!</p>
<p>Have defined the story and will start posting pages in an orderly manner, while also continuing with the blog. It&rsquo;s part of the magic of the webcomic plugin.</p>
<p style="text-align: left;"><em>In this post, a bonus bulldog drawing :9. Inkscape instructions: create a circle, draw some straight lines, select, convert  nodes to curves, then  tweak a little the nodes. tada!</em>
]]></content>
  </entry>
  <entry>
    <title>More background story</title>
    <link href="https://gatillos.com/yay/2010/03/21/more-background-story/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2010/03/21/more-background-story/</id>
    <updated>2010-03-21T15:39:46&#43;01:00</updated>
    <content type="html"><![CDATA[<p style="text-align: center;">
<div class="post-image"><a href="https://gatillos.com/yay/2010/03/21/more-background-story/06-memories_b2.jpg"><img class="" title="click to zoom" src="https://gatillos.com/yay/2010/03/21/more-background-story/06-memories_b2-611x1024.jpg" alt="" width="556" height="932"></a></div>
<div class="post-image-caption">Scenes from the past</div>
<p>So I&rsquo;m continuing with what could be thought of as the introduction. The narrator continues to present a bit of himself as a prelude to the story.</p>
<p>First panel is actually a rendition from a photograph from my friend Haripako (check it at <a href="https://www.flickr.com/photos/haripako/4414622343/" target="_blank">his flickr page</a> and take a look at the wonderful photographs he takes as part of his ongoing 365-day photo project, used here under permission :)). The rest are based on old photos I had around and some googling for inspiration.</p>
<p>Need to finish the remaining panels and apply some shades. The overall tone should be dictated by the first panel&rsquo;s color.</p>
<p><em>Update:</em> defined faces a bit more.</p>
]]></content>
  </entry>
  <entry>
    <title>First page for LIFE/interior</title>
    <link href="https://gatillos.com/yay/2010/03/19/first-page-for-lifeinterior/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2010/03/19/first-page-for-lifeinterior/</id>
    <updated>2010-03-19T00:43:11&#43;01:00</updated>
    <content type="html"><![CDATA[<p>This is a slightly more polished version of the previous draft. I realigned the balloons to make it easier to follow and added panel lines.</p>
<p style="text-align: center;">
<div class="post-image"><a href="https://gatillos.com/yay/2010/03/19/first-page-for-lifeinterior/04-life-interior1.jpg"><img class="" title="04 life interior" src="https://gatillos.com/yay/2010/03/19/first-page-for-lifeinterior/04-life-interior1-733x1024.jpg" alt="" width="527" height="737"></a></div>
<div class="post-image-caption">LIFE/interior, introductory page. Click to zoom.</div>
]]></content>
  </entry>
  <entry>
    <title>So, is this a webcomic?</title>
    <link href="https://gatillos.com/yay/2010/03/15/so-is-this-a-webcomic/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2010/03/15/so-is-this-a-webcomic/</id>
    <updated>2010-03-15T00:08:33&#43;01:00</updated>
    <content type="html"><![CDATA[<p>Well, I&rsquo;ve been analyzing the &lsquo;webcomic&rsquo; concept in itself. As I see it, it puts the following constraints:</p>
<ul>
<li>You need to create pages within a reasonable time</li>
	<li>Once a page is up you can update it, but most people will miss those updates</li>
	<li>Most importantly: you <strong>can't</strong> rearrange the order of pages</li>
	<li>The layout of the site should focus on the webcomic, one page at a time</li>
</ul>
I like the second point, being somewhat forced to update on a regular basis is definitely something I want --I'm lazy. But the third one is the actual key point, as this is intended to be a live and ongoing process, something that ideally would be followed via regular visits (perhaps through an RSS reader), you don't have the liberty to rethink what you did.
<p>I think I&rsquo;m ok with this, I think as long as you understand it, the end result can be great. One approach would be to define the story completely before drawing anything else. The other would be letting it evolve and &lsquo;define itself&rsquo;. I think the story will definitely benefit if the major plot points are well define beforehand, but I also like to have the ability to tweak it along the way&hellip;</p>
<p>On the subject of the site itself, I&rsquo;ll be updating it shortly to display the comic in a more &lsquo;webcomic-like&rsquo; layout. I think I&rsquo;ll keep the blog as it is and create a new page for the webcomic itself, with a separate RSS feed. I like also the idea of creating an iPhone-specific version as was suggested to me by a friend.</p>
<p>Anyway, I&rsquo;ve been drawing some faces to train myself and also looking for the face of the main character. The more realistic ones were drawn based on photographs, and as such are probably not really suitable for main characters.</p>
<p style="text-align: center;">
<div class="post-image"><a href="https://gatillos.com/yay/2010/03/15/so-is-this-a-webcomic/05-face.jpg"><img class="" title="05 face" src="https://gatillos.com/yay/2010/03/15/so-is-this-a-webcomic/05-face.jpg" alt="" width="446" height="592"></a></div>
<div class="post-image-caption">Some faces. Everything was drawn using Inkscape and a couple of layers. I left the guiding marks so you can see the references I took. The last face would be me, btw :).</div>
]]></content>
  </entry>
  <entry>
    <title>Let&#39;s move on to the story</title>
    <link href="https://gatillos.com/yay/2010/03/12/lets-move-on-to-the-story/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2010/03/12/lets-move-on-to-the-story/</id>
    <updated>2010-03-12T23:42:40&#43;01:00</updated>
    <content type="html"><![CDATA[<p>So here&rsquo;s a page two and a title I like. &ldquo;LIFE/interior&rdquo;. It&rsquo;s a pity the domain is already taken, because I think I&rsquo;m going to go with it.</p>
<div class="post-image"><a href="https://gatillos.com/yay/2010/03/12/lets-move-on-to-the-story/04-life-interior.jpg"><img class="" title="04 life interior" src="https://gatillos.com/yay/2010/03/12/lets-move-on-to-the-story/04-life-interior.jpg" alt="" width="523" height="788"></a></div>
<div class="post-image-caption">A draft for page two.</div>
<p>Will probably design some title or play with different fonts. I&rsquo;m feeling again this need to just add some very basic shades to this draft and call it a page. Strange that my artistic feelings tend to align with whatever is easier.</p>
]]></content>
  </entry>
  <entry>
    <title>Well, still with the same page...</title>
    <link href="https://gatillos.com/yay/2010/03/12/well-still-with-the-same-page/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2010/03/12/well-still-with-the-same-page/</id>
    <updated>2010-03-12T00:51:50&#43;01:00</updated>
    <content type="html"><![CDATA[<p>Today I went out of my way with the shading. Maybe I ended up being too artsy. I really like drawings that have that sketchy or somewhat careless shading, but I assume that <em>too</em> requires some practice&hellip;</p>
<p>Anyway, lo and behold, the new version, with panel 2 included and what could pass for dialog.</p>
<div class="post-image"><a href="https://gatillos.com/yay/2010/03/12/well-still-with-the-same-page/03-page_d.jpg"><img class="" title="03 page_d" src="https://gatillos.com/yay/2010/03/12/well-still-with-the-same-page/03-page_d-713x1024.jpg" alt="" width="570" height="819"></a></div>
<div class="post-image-caption">First page, script I feel more or less comfortable with (English proofreading pending), and some shading...</div>
<p>I also got tired of the previous Blog theme (&ldquo;Bold Life&rdquo;)<span style="text-decoration: line-through;">, so I&rsquo;m back to this plain one that allows for more space to be used for content</span> (update: changed my mind!)</p>
]]></content>
  </entry>
  <entry>
    <title>Could this be my first panel?</title>
    <link href="https://gatillos.com/yay/2010/03/11/could-this-be-my-first-panel/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2010/03/11/could-this-be-my-first-panel/</id>
    <updated>2010-03-11T00:45:33&#43;01:00</updated>
    <content type="html"><![CDATA[<p>Well this page was intended to have just two panels, with a bit of dialogue. So, it seems I managed to finish panel one. I&rsquo;m hesitating a lot about the amount of detail I want to put into it. For once, hands of the bikers fly but I wonder if it&rsquo;s actually worth doing the rest of the bike. The idea is that the reader should just read the balloons and essentially go quickly through the whole page. It looks maybe too schematic but I kind of like it&hellip; You can tell that this is my first panel with Inkscape. Will think and gather some input.</p>
<p>I came to the realization that I need to draw more accurate drafts by hand, because it&rsquo;s quite difficult to define shapes on-the-fly, I like the old man approach of &lsquo;inking&rsquo; over an scan.</p>
<p style="text-align: center;">
<div class="post-image"><a href="https://gatillos.com/yay/2010/03/11/could-this-be-my-first-panel/03-page_c.jpg"><img class="" title="03 page_c" src="https://gatillos.com/yay/2010/03/11/could-this-be-my-first-panel/03-page_c.jpg" alt="" width="518" height="577"></a></div>
<div class="post-image-caption">First panel that is actually close to final - I played with jitter effects for the balloons (added nodes 5px to a circle, jitter with 4/8 spacing), and the wheel is actually a simplified gear (200). Click on it for a zoom.</div>
<p>Oh, by popular request, girl-on-a-bike received a new hairdo and some more detail.</p>
<p>Fonts on balloons were changed too, but I kept the font for the narrator.</p>
]]></content>
  </entry>
  <entry>
    <title>Getting there, slowly</title>
    <link href="https://gatillos.com/yay/2010/03/08/getting-there-slowly/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2010/03/08/getting-there-slowly/</id>
    <updated>2010-03-08T20:08:12&#43;01:00</updated>
    <content type="html"><![CDATA[<p>Well it takes a while to draw, but I think I&rsquo;m starting to learn. I kind of finished the two bikes, handlebar pending, and I&rsquo;m now playing with drawing what should pass for a wheel and something that should resemble a windshield effect. Let&rsquo;s see how that will go.</p>
<p>I&rsquo;m posting my progress just for the fun of checking how it evolved later.</p>
<div class="post-image"><a href="https://gatillos.com/yay/2010/03/08/getting-there-slowly/03-page_b.jpg"><img class="" title="Outlining a wheel" src="https://gatillos.com/yay/2010/03/08/getting-there-slowly/03-page_b-724x1024.jpg" alt="" width="507" height="717"></a></div>
<div class="post-image-caption">It would be lovely to be able to represent somekind of focus on this. Not sure how at this stage...</div>
]]></content>
  </entry>
  <entry>
    <title>What&#39;s a good style...?</title>
    <link href="https://gatillos.com/yay/2010/03/06/whats-a-good-style/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2010/03/06/whats-a-good-style/</id>
    <updated>2010-03-06T23:49:08&#43;01:00</updated>
    <content type="html"><![CDATA[<p>Well I seem to have a clear idea of what I want to draw, and most importantly of what I want the story to tell and how it should look like. Problem is getting there is not as easy as one would want!</p>
<p>One thing I don&rsquo;t really like is, well, <em>color</em>. That&rsquo;s a pretty bold statement, I know.</p>
<p>The thing is I like some color, but just very basic lines, traces of it. That may or may not be linked to the fact that applying color is a real pain too, and that I lack any kind of talent to handle color.</p>
<p>So let&rsquo;s take my previous canvas, now with a bit more of inking and some test shades. I also added some color to the background. Something simple as this would work for me, I&rsquo;m not a fan of details&hellip; I&rsquo;d like to focus on the story (yeah, maybe I should be writing a book!). Anyway, I&rsquo;ll gather opinions.</p>
<div class="post-image"><a href="https://gatillos.com/yay/2010/03/06/whats-a-good-style/03-page.jpg"><img class="" title="03 page" src="https://gatillos.com/yay/2010/03/06/whats-a-good-style/03-page.jpg" alt="" width="638" height="703"></a></div>
<div class="post-image-caption">A bit of shading and some color. Trying to find 'the style'</div>
<p>By the way, I followed the best advice you can get when working with Inkscape: save often, save with different names, activate autosaving. It&rsquo;s fairly stable, but it still has a tendency to crash with certain operations and, worst, leave your file in a corrupt state.</p>
]]></content>
  </entry>
  <entry>
    <title>A word on fonts</title>
    <link href="https://gatillos.com/yay/2010/03/05/a-word-on-fonts/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2010/03/05/a-word-on-fonts/</id>
    <updated>2010-03-05T23:00:57&#43;01:00</updated>
    <content type="html"><![CDATA[<p>Well typography is its own beast.</p>
<p>You may have noticed the fonts I used on one of my previous uploads. Somehow, those fonts seem too simple.</p>
<p>Of course, having yet to decide colors and overall the general look that the comic will have, it&rsquo;s probably too early to worry about fonts. But it&rsquo;s fun to play with them.</p>
<p>I tried a few (recommended to me by a <em>real</em> designer). From top to bottom, the fonts are: AlexsHand 36 points; Flood Std 36 points; Freestyle Script 48 points; YoungsHand 36 points. All 100% spacing.</p>
<div class="post-image"><a href="https://gatillos.com/yay/2010/03/05/a-word-on-fonts/03-page-playing-with-fonts.png"><img class="" title="Playing with fonts" src="https://gatillos.com/yay/2010/03/05/a-word-on-fonts/03-page-playing-with-fonts-724x1024.png" alt="" width="579" height="819"></a></div>
<div class="post-image-caption">Playing with fonts and a bit of ink applied to the previous scan.</div>
<p>At this stage I seem to prefer the first one, although I&rsquo;ll try all of them again when drawing the final page. By the way, it takes ages to ink&hellip;</p>
]]></content>
  </entry>
  <entry>
    <title>The story</title>
    <link href="https://gatillos.com/yay/2010/03/04/the-story/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2010/03/04/the-story/</id>
    <updated>2010-03-04T22:11:27&#43;01:00</updated>
    <content type="html"><![CDATA[<p>Well, of course, drawing a comic without a story does not make that much sense. But, you see, I <em>do</em> have story. I won&rsquo;t post it yet because a) it&rsquo;s bound to change and b) it&rsquo;s not that good of a story.</p>
<p>So today&rsquo;s panel is part of the story. Problem is, my English will need some proofreading. I very much prefer not to type in any actual words unless it&rsquo;s within Inkscape, so that I can change them quickly and easily. Somehow, in this case I did write something on the panels, as a guide. Maybe I should just remove it before posting. But it&rsquo;s part of the fun, seeing where this will evolve, mutate.</p>
<div class="post-image"><a href="https://gatillos.com/yay/2010/03/04/the-story/03-taxi-bikes-reduced.png"><img class="" title="03 taxi bikes reduced" src="https://gatillos.com/yay/2010/03/04/the-story/03-taxi-bikes-reduced-703x1024.png" alt="" width="562" height="819"></a></div>
<div class="post-image-caption">First page of one of the stories. Last panel should dispay the driver more to the left, I'll change that when inking.</div>
]]></content>
  </entry>
  <entry>
    <title>Trying out the scanner</title>
    <link href="https://gatillos.com/yay/2010/02/22/trying-out-the-scanner/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2010/02/22/trying-out-the-scanner/</id>
    <updated>2010-02-22T21:58:18&#43;01:00</updated>
    <content type="html"><![CDATA[<p><em>Or&hellip;</em> I can just doodle something on a piece of paper, scan it, then apply some ink on top of it, and see if that looks as a draft. Then, over that draft, I should create the final ink and add layers for shading.</p>
<div class="post-image"><a href="https://gatillos.com/yay/2010/02/22/trying-out-the-scanner/01-page-b.jpg"><img class="" title="01 page-b" src="https://gatillos.com/yay/2010/02/22/trying-out-the-scanner/01-page-b-212x300.jpg" alt="" width="212" height="300"></a></div>
<div class="post-image-caption">Some pencil drawing, then drafting a general layout with wacom and Inkscape.</div>
<div class="post-image"><a href="https://gatillos.com/yay/2010/02/22/trying-out-the-scanner/02-page_0.jpg"><img class="" title="02 page_0" src="https://gatillos.com/yay/2010/02/22/trying-out-the-scanner/02-page_0-212x300.jpg" alt="" width="212" height="300"></a></div>
<div class="post-image-caption">Just testing possible layouts.</div>
]]></content>
  </entry>
  <entry>
    <title>Doodling with Inkscape</title>
    <link href="https://gatillos.com/yay/2010/02/21/doodling-with-inkscape/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2010/02/21/doodling-with-inkscape/</id>
    <updated>2010-02-21T20:26:32&#43;01:00</updated>
    <content type="html"><![CDATA[<p>Well I think I&rsquo;m going to go with Inkscape. I don&rsquo;t have enough cash to afford paying for Adobe Illustrator right now, and I also love that it works both on Linux and Mac. I keep changing between the two, so it&rsquo;s nice to know I&rsquo;ll always be able to edit my images even if one of them died.</p>
<p>So learning Inkscape is quite a steep learning curve compared to Illustrator. This is from a complete novice, I only know the very basics of Illustrator but it took me no time to create some random drawings. With Inkscape it takes a bit longer. It was nice to see it recognizing my wacom with just minor tweaking (well, not even tweaking, just activating it).</p>
<p>Anyway, here are some silly pictures drawn user Inkscape.</p>
<div class="post-image"><a href="https://gatillos.com/yay/2010/02/21/doodling-with-inkscape/sketches.png"><img class="" title="Some sketches with Inkscape" src="https://gatillos.com/yay/2010/02/21/doodling-with-inkscape/sketches.png" alt="" width="319" height="274"></a></div>
<div class="post-image-caption">As you can see, there's great potential here. As long as characters don't require a body, I'll be fine.</div>
<div class="post-image"><a href="https://gatillos.com/yay/2010/02/21/doodling-with-inkscape/testing-inkscape.png"><img class="" title="Testing basic figures with Inkscape" src="https://gatillos.com/yay/2010/02/21/doodling-with-inkscape/testing-inkscape-212x300.png" alt="" width="212" height="300"></a></div>
<div class="post-image-caption">Ok, I don't even know what this is supposed to be.</div>
<p>Oh, did I mention that Inkscape is <em>free</em>?</p>
]]></content>
  </entry>
  <entry>
    <title>Trying out Adobe Illustrator</title>
    <link href="https://gatillos.com/yay/2010/02/15/trying-out-adobe-illustrator/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2010/02/15/trying-out-adobe-illustrator/</id>
    <updated>2010-02-15T20:18:54&#43;01:00</updated>
    <content type="html"><![CDATA[<p>The thing with Adobe Illustrator is that it&rsquo;s a great tool. It loves Mac OS X and plays nicely in that environment.</p>
<p>This is drawn directly on screen, so maybe I can actually draw on screen if I try enough&hellip;</p>
<div class="post-image"><a href="https://gatillos.com/yay/2010/02/15/trying-out-adobe-illustrator/testing-ai.png"><img class="" title="Testing Adobe Illustrator" src="https://gatillos.com/yay/2010/02/15/trying-out-adobe-illustrator/testing-ai.png" alt="" width="541" height="853"></a></div>
<div class="post-image-caption">Playing with Adobe Illustrator</div>
]]></content>
  </entry>
  <entry>
    <title>Hello gatillos</title>
    <link href="https://gatillos.com/yay/2010/02/01/hello-gatillos/" rel="alternate" type="text/html" />
    <id>https://gatillos.com/yay/2010/02/01/hello-gatillos/</id>
    <updated>2010-02-01T21:31:28&#43;01:00</updated>
    <content type="html"><![CDATA[<p>Well, nothing much to say. Yet another blog being created. Hopefully this will someday in the future show my evolution as an amateur webcomic author. Most likely it will serve as proof that I tried, and failed miserably.</p>
<p>I&rsquo;m trying to figure out what would be the best way to approach this&hellip; most blogs I see are from people that already now <em>a lot</em> about drawing&hellip;</p>
<p>I can&rsquo;t draw directly on the screen. I can&rsquo;t draw directly on paper.</p>
<p>Maybe I can&rsquo;t draw at all, maybe I should accept and <em>embrace</em> that.</p>
<p>Never!</p>
]]></content>
  </entry>
  
</feed>
