<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
  <title>Ian Lewis | English Blog</title>
  <description>Ian Lewis is an engineer based in Tokyo, Japan. His current interests are in Container Native Security, Supply Chain Security, Containers, and Kubernetes.</description>
  <link>https://www.ianlewis.org/en/</link>
  <lastBuildDate>Sat, 11 Apr 2026 09:12:31 +0000</lastBuildDate>
  <pubDate>Sat, 11 Apr 2026 09:12:31 +0000</pubDate>
  <ttl>1800</ttl>

  
  <item>
    <title>2026 New Year Reflections</title>
    
    <description>&lt;p&gt;As many others have done, I’m going to write a blog post reflecting on the last
year and looking forward to the new year. While I’ve been really concerned with
where the world is headed, 2025 was a better year for me personally in terms of
my mental health and overall balance.This year I hope to build on that and be a
lot more intentional about how I plan for the future.&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/2026-new-year-reflections</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/2026-new-year-reflections</guid>
    <pubDate>Thu, 08 Jan 2026 00:00:00 +0000</pubDate>
  </item>
  
  <item>
    <title>Bash is the best tool for the job</title>
    
    <description>&lt;p&gt;Bash is the black sheep of programming languages and yet every backend or DevOps
engineer needs to deal with it throughout their career. It is hard to avoid.
It’s always available on Linux servers and it’s often the best tool for the job.&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/bash-is-the-best-tool-for-the-job</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/bash-is-the-best-tool-for-the-job</guid>
    <pubDate>Sun, 26 Oct 2025 23:00:00 +0000</pubDate>
  </item>
  
  <item>
    <title>Do we need AI IDEs?</title>
    
    <description>&lt;p&gt;AI integrated development environments (IDEs) are all the rage.
&lt;a href=&quot;https://cursor.com/&quot;&gt;Cursor&lt;/a&gt; was one of the first AI-focused IDEs and emerged
as a fork of VSCode. &lt;a href=&quot;https://kiro.dev/&quot;&gt;Kiro&lt;/a&gt;, another VSCode fork, was just
released by AWS. Windsurf, yet another VSCode fork, recently had their &lt;a href=&quot;https://www.cnbc.com/2025/07/14/cognition-to-buy-ai-startup-windsurf-days-after-google-poached-ceo.html&quot;&gt;top
talent poached and sold the
rest&lt;/a&gt;.
Clearly, a lot of folks at AI companies thought striking it out on their own was
a good idea.&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/do-we-need-ai-ides</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/do-we-need-ai-ides</guid>
    <pubDate>Fri, 29 Aug 2025 00:00:00 +0000</pubDate>
  </item>
  
  <item>
    <title>Why I Left Twitter</title>
    
    <description>&lt;p&gt;It’s safe to say that Twitter has changed a lot from when I first started using
it. When I first started using Twitter in 2008 it felt like an amazing tool for
connecting with new people. Twitter made it easy to discover and connect with
other tech folks and I found a new job through connections I made on Twitter
fairly quickly after I started using it.&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/why-i-left-twitter</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/why-i-left-twitter</guid>
    <pubDate>Wed, 16 Jul 2025 00:00:00 +0000</pubDate>
  </item>
  
  <item>
    <title>A New Blue Check Mark, Just Like the Old One</title>
    
    <description>&lt;p&gt;Bluesky continued their trend of replicating X/Twitter’s features in a slightly
different way and just released their new &lt;a href=&quot;https://bsky.social/about/blog/04-21-2025-verification&quot;&gt;account verification
feature&lt;/a&gt;. This seems
like a pretty big milestone in the social network’s growth and a lot of the
prolific members are talking about it. Folks are reacting to being some of the
first people to receive one.&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/a-new-blue-check-mark-just-like-the-old-one</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/a-new-blue-check-mark-just-like-the-old-one</guid>
    <pubDate>Tue, 22 Apr 2025 00:00:00 +0000</pubDate>
  </item>
  
  <item>
    <title>Zero Copy Readers in Go</title>
    
    <description>&lt;p&gt;The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;io.Reader&lt;/code&gt; interface is a small interface that defines a single &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Read&lt;/code&gt;
method. Callers to a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Reader&lt;/code&gt; implementation pass a byte slice which is then
filled with bytes from the underlying source. This source could be a file, a
network socket, etc.&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/zero-copy-readers-in-go</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/zero-copy-readers-in-go</guid>
    <pubDate>Mon, 31 Mar 2025 00:00:00 +0000</pubDate>
  </item>
  
  <item>
    <title>Building APIs with Static Files</title>
    
    <description>&lt;p&gt;APIs are really useful for pulling in data from different sources for analysis
in tools like &lt;a href=&quot;https://datasette.io/&quot;&gt;Datasette&lt;/a&gt; or spreadsheets. However, APIs
are often hard to build and often require writing specialized servers which then
need to be deployed and maintained. What if this could be as easy as deploying a
static website?&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/building-apis-with-static-files</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/building-apis-with-static-files</guid>
    <pubDate>Mon, 17 Mar 2025 00:00:00 +0000</pubDate>
  </item>
  
  <item>
    <title>Rust First Impressions: Error Handling</title>
    
    <description>&lt;p&gt;&lt;img src=&quot;/assets/images/2025-02-03-rust-first-impressions-error-handling/Gemini_Generated_Image_61aptz61aptz61ap.png&quot; alt=&quot;A cartoon image of a crab that was alerted to some danger, showing an exclamation point above the crab&apos;s head&quot; class=&quot;align-center&quot; /&gt;&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/rust-first-impressions-error-handling</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/rust-first-impressions-error-handling</guid>
    <pubDate>Mon, 03 Feb 2025 00:00:00 +0000</pubDate>
  </item>
  
  <item>
    <title>Python Servers in the Year of the Snake: 2025</title>
    
    <description>&lt;p&gt;&lt;img src=&quot;/assets/images/2025-01-20-python-servers-in-the-year-of-the-snake/python_snake.png&quot; alt=&quot;An image of a Python curled around the Python programming language logo&quot; class=&quot;align-center&quot; /&gt;&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/python-servers-in-the-year-of-the-snake</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/python-servers-in-the-year-of-the-snake</guid>
    <pubDate>Mon, 20 Jan 2025 00:00:00 +0000</pubDate>
  </item>
  
  <item>
    <title>2025 New Year’s Resolutions</title>
    
    <description>&lt;p&gt;&lt;img src=&quot;/assets/images/2025-01-06-2025-new-years-resolutions/resolutions.jpg&quot; alt=&quot;Where on earth are my last year&apos;s resolutions?&quot; title=&quot;Where on earth are my last year&apos;s resolutions?&quot; style=&quot;width: 70%; display:block; margin-left:auto; margin-right:auto&quot; /&gt;
&lt;em&gt;Berryman Political Cartoon Collection, &lt;a href=&quot;https://nara.getarchive.net/media/the-new-years-eve-2465d0&quot;&gt;Public Domain&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/2025-new-years-resolutions</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/2025-new-years-resolutions</guid>
    <pubDate>Mon, 06 Jan 2025 00:00:00 +0000</pubDate>
  </item>
  
  <item>
    <title>Leaving Google</title>
    
    <description>&lt;p&gt;Today is my last day as a Google employee. After nearly 10 years working on the
Google Cloud Developer Relations team, I’ve decided to step away and pursue
other challenges.&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/leaving-google</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/leaving-google</guid>
    <pubDate>Fri, 15 Nov 2024 00:00:00 +0000</pubDate>
  </item>
  
  <item>
    <title>Understanding GitHub Artifact Attestations</title>
    
    <description>&lt;p&gt;GitHub recently introduced &lt;a href=&quot;https://github.blog/2024-05-02-introducing-artifact-attestations-now-in-public-beta/&quot;&gt;Artifact
Attestations&lt;/a&gt;,
a beta feature that enhances the security of Open Source software supply
chains. By linking artifacts to their source code repositories and GitHub
Actions, it ensures that artifacts are not built with malicious or unknown code
or on potentially compromised devices.&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/understanding-github-artifact-attestations</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/understanding-github-artifact-attestations</guid>
    <pubDate>Thu, 30 May 2024 00:00:00 +0000</pubDate>
  </item>
  
  <item>
    <title>Code Signing is not Enough</title>
    
    <description>&lt;p&gt;Code signing is often used as a method for ensuring that software artifacts
like binaries, drivers, and software packages haven’t been modified by a third
party before they are used. Many folks may be familiar with packages that were
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gpg&lt;/code&gt; signed and distributed with an Armored ASCII (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.asc&lt;/code&gt;) file. Code signing
is a great step towards securing the software supply chain above simply
providing software as-is, but has a number of downsides that can be addressed
with other methods like software provenance.&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/code-signing-is-not-enough</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/code-signing-is-not-enough</guid>
    <pubDate>Thu, 01 Feb 2024 00:00:00 +0000</pubDate>
  </item>
  
  <item>
    <title>Four Tips for Writing Better Go APIs</title>
    
    <description>&lt;p&gt;Go is a really powerful programming language that allows you to write concurrent code that is still easy to understand. But designing APIs can be hard, even for seasoned Go programmers. When designing APIs for libraries and applications in Go it’s important to keep in mind the strengths of the language to make your APIs easier to use and avoid pitfalls like goroutine leaks. With that in mind, here are a few common issues I see often with Go APIs and some tips for how to make them better.&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/four-tips-for-writing-better-go-apis</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/four-tips-for-writing-better-go-apis</guid>
    <pubDate>Mon, 24 Jan 2022 00:00:00 +0000</pubDate>
  </item>
  
  <item>
    <title>Container Runtimes Part 4: Kubernetes Container Runtimes &amp; CRI</title>
    
    <description>&lt;p&gt;&lt;em&gt;This is the fourth and last part in a four part series on container runtimes.
It’s been a while since
&lt;a href=&quot;https://www.ianlewis.org/en/container-runtimes-part-1-introduction-container-r&quot;&gt;part 1&lt;/a&gt;,
but in that post I gave an overview of container runtimes and discussed the
differences between low-level and high-level runtimes. In
&lt;a href=&quot;https://www.ianlewis.org/en/container-runtimes-part-2-anatomy-low-level-contai&quot;&gt;part 2&lt;/a&gt;
I went into detail on low-level container runtimes and built a simple low-level
runtime. In
&lt;a href=&quot;https://www.ianlewis.org/en/container-runtimes-part-3-high-level-runtimes&quot;&gt;part 3&lt;/a&gt;
I went up the stack and wrote about high-level container runtimes.&lt;/em&gt;&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/container-runtimes-part-4-kubernetes-container-run</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/container-runtimes-part-4-kubernetes-container-run</guid>
    <pubDate>Sat, 26 Jan 2019 12:00:00 +0000</pubDate>
  </item>
  
  <item>
    <title>Container Runtimes Part 3: High-Level Runtimes</title>
    
    <description>&lt;blockquote&gt;
  &lt;p&gt;&lt;em&gt;This is the third part in a four-part series on container runtimes. It’s been
a while since
&lt;a href=&quot;https://www.ianlewis.org/en/container-runtimes-part-1-introduction-container-r&quot;&gt;part 1&lt;/a&gt;,
but in that post I gave an overview of container runtimes and discussed the
differences between low-level and high-level runtimes. In
&lt;a href=&quot;https://www.ianlewis.org/en/container-runtimes-part-2-anatomy-low-level-contai&quot;&gt;part 2&lt;/a&gt;
I went into detail on low-level container runtimes and built a simple
low-level runtime.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
</description>
    
    <link>https://www.ianlewis.org/en/container-runtimes-part-3-high-level-runtimes</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/container-runtimes-part-3-high-level-runtimes</guid>
    <pubDate>Tue, 30 Oct 2018 14:30:00 +0000</pubDate>
  </item>
  
  <item>
    <title>Container Runtimes Part 2: Anatomy of a Low-Level Container Runtime</title>
    
    <description>&lt;p&gt;This is the second in a four-part series on container runtimes. In &lt;a href=&quot;https://www.ianlewis.org/en/container-runtimes-part-1-introduction-container-r&quot;&gt;part
1&lt;/a&gt;,
I gave an overview of container runtimes and discussed the differences between
low-level and high-level runtimes. In this post I will go into detail on
low-level container runtimes.&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/container-runtimes-part-2-anatomy-low-level-contai</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/container-runtimes-part-2-anatomy-low-level-contai</guid>
    <pubDate>Mon, 26 Feb 2018 11:00:00 +0000</pubDate>
  </item>
  
  <item>
    <title>Container Runtimes Part 1: An Introduction to Container Runtimes</title>
    
    <description>&lt;p&gt;One of the terms you hear a lot when dealing with containers is “container
runtime”. “Container runtime” can have different meanings to different people so
it’s no wonder that it’s such a confusing and vaguely understood term, even
within the container community.&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/container-runtimes-part-1-introduction-container-r</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/container-runtimes-part-1-introduction-container-r</guid>
    <pubDate>Wed, 06 Dec 2017 18:30:00 +0000</pubDate>
  </item>
  
  <item>
    <title>The Almighty Pause Container</title>
    
    <description>&lt;p&gt;When checking out the nodes of your Kubernetes cluster, you may have noticed some containers called “pause” running when you do a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker ps&lt;/code&gt; on the node.&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/almighty-pause-container</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/almighty-pause-container</guid>
    <pubDate>Tue, 10 Oct 2017 11:40:00 +0000</pubDate>
  </item>
  
  <item>
    <title>Blue/Green Deployments on Kubernetes</title>
    
    <description>&lt;blockquote&gt;
  &lt;p&gt;For those that want to dive right in, I have put up a tutorial and some sample
manifests on GitHub. Check it out at
&lt;a href=&quot;https://github.com/IanLewis/kubernetes-bluegreen-deployment-tutorial&quot;&gt;https://github.com/IanLewis/kubernetes-bluegreen-deployment-tutorial&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
</description>
    
    <link>https://www.ianlewis.org/en/bluegreen-deployments-kubernetes</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/bluegreen-deployments-kubernetes</guid>
    <pubDate>Fri, 15 Sep 2017 19:00:00 +0000</pubDate>
  </item>
  
  <item>
    <title>What are Kubernetes Pods Anyway?</title>
    
    <description>&lt;p&gt;Recently I saw a tweet from the awesome Amy Codes (I really hope that’s her real
name) about Kubernetes Pods:&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/what-are-kubernetes-pods-anyway</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/what-are-kubernetes-pods-anyway</guid>
    <pubDate>Fri, 25 Aug 2017 15:20:00 +0000</pubDate>
  </item>
  
  <item>
    <title>Building Go Applications with Google Container Builder</title>
    
    <description>&lt;p&gt;&lt;img src=&quot;/assets/images/764/container-builder-go.png&quot; alt=&quot;A Gopher on a ship with containers&quot; class=&quot;align-center&quot; /&gt;&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/building-go-applications-google-container-builder</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/building-go-applications-google-container-builder</guid>
    <pubDate>Fri, 14 Jul 2017 10:15:00 +0000</pubDate>
  </item>
  
  <item>
    <title>Creating Smaller Docker Images Part #4: Static Binaries</title>
    
    <description>&lt;p&gt;This is the fourth post in a series on making smaller Docker images: static
binaries. In the &lt;a href=&quot;/en/creating-smaller-docker-images&quot;&gt;first post&lt;/a&gt; I talked about
how to create smaller images by writing better Dockerfiles. In the
&lt;a href=&quot;/en/creating-smaller-docker-images-part2&quot;&gt;second post&lt;/a&gt; I talked about how to
squash layers using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker-squash&lt;/code&gt; to make smaller images. In the
&lt;a href=&quot;/en/creating-smaller-docker-images-part-3-alpine-linux&quot;&gt;third post&lt;/a&gt; I wrote
about how to use Alpine Linux as a smaller base image.&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/creating-smaller-docker-images-static-binaries</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/creating-smaller-docker-images-static-binaries</guid>
    <pubDate>Tue, 11 Jul 2017 16:25:00 +0000</pubDate>
  </item>
  
  <item>
    <title>Creating Smaller Docker Images Part #3: Alpine Linux</title>
    
    <description>&lt;p&gt;&lt;img alt=&quot;alpine linux&quot; title=&quot;alpine linux&quot; class=&quot;align-center&quot; src=&quot;/assets/images/761/alpinelinux-logo.png&quot; /&gt;&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/creating-smaller-docker-images-part-3-alpine-linux</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/creating-smaller-docker-images-part-3-alpine-linux</guid>
    <pubDate>Wed, 31 May 2017 16:25:00 +0000</pubDate>
  </item>
  
  <item>
    <title>Kubernetes Health Checks in Django</title>
    
    <description>&lt;p&gt;&lt;img alt=&quot;Kubernetes + Django&quot; title=&quot;Kubernetes + Django&quot; class=&quot;align-center&quot; src=&quot;/assets/images/752/kube-django.png&quot; /&gt;&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/kubernetes-health-checks-django</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/kubernetes-health-checks-django</guid>
    <pubDate>Mon, 15 May 2017 16:07:14 +0000</pubDate>
  </item>
  
  <item>
    <title>A Quick Look at the Kubernetes Python Client</title>
    
    <description>&lt;p&gt;For those of you that don’t know there is a new Python API client in the kubernetes-incubator project: &lt;a href=&quot;https://github.com/kubernetes-incubator/client-python&quot;&gt;client-python&lt;/a&gt;. There has been some high quality Python clients like &lt;a href=&quot;https://github.com/kelproject/pykube&quot;&gt;pykube&lt;/a&gt;, but client-python can serve as the official Python client.&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/quick-look-kubernetes-python-client</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/quick-look-kubernetes-python-client</guid>
    <pubDate>Tue, 06 Dec 2016 23:30:00 +0000</pubDate>
  </item>
  
  <item>
    <title>How kubeadm Initializes Your Kubernetes Master</title>
    
    <description>&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;kubeadm&lt;/code&gt; is a new tool that is part of the Kubernetes distribution as of 1.4.0 which helps you to install and set up a Kubernetes cluster. One of the most frequent criticisms of Kubernetes is that it’s hard to install. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;kubeadm&lt;/code&gt; really makes this easier so I suggest you give it a try.&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/how-kubeadm-initializes-your-kubernetes-master</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/how-kubeadm-initializes-your-kubernetes-master</guid>
    <pubDate>Wed, 12 Oct 2016 18:00:00 +0000</pubDate>
  </item>
  
  <item>
    <title>Performing Maintenance on Pods</title>
    
    <description>&lt;p&gt;Kubernetes includes a feature called
&lt;a href=&quot;http://kubernetes.io/docs/user-guide/services/&quot;&gt;services&lt;/a&gt; which serve as a kind
of load balancer for pods. When pods misbehave or otherwise stop working,
sometimes you’ll want to remove the pod from the service without killing the
pod.&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/performing-maintenance-pods</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/performing-maintenance-pods</guid>
    <pubDate>Tue, 13 Sep 2016 12:20:00 +0000</pubDate>
  </item>
  
  <item>
    <title>Using Kubernetes Health Checks</title>
    
    <description>&lt;p&gt;I’ve seen a lot of questions about Kubernetes health checks recently and how
they should be used. I’ll do my best to explain them and the difference between
the types of health checks and how each will affect your application.&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/using-kubernetes-health-checks</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/using-kubernetes-health-checks</guid>
    <pubDate>Tue, 24 May 2016 17:50:00 +0000</pubDate>
  </item>
  
  <item>
    <title>Google Cloud Platform HTTP Load Balancers Explained via the CLI</title>
    
    <description>&lt;p&gt;The Google Cloud Platform Load Balancers are based off of technology that
Google developed for our applications. There are two types of load balancers,
the Network (L3) Load Balancer and the HTTP (L7) Load Balancer. The HTTP Load
Balancer is global so the same IP can be used everywhere in the world, but
still supports very high scalability with no warmup.&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/google-cloud-platform-http-load-balancers-explaine</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/google-cloud-platform-http-load-balancers-explaine</guid>
    <pubDate>Mon, 18 Apr 2016 11:30:00 +0000</pubDate>
  </item>
  
  <item>
    <title>Creating Smaller Docker Images: Part #2</title>
    
    <description>&lt;p&gt;This is the second post in a series on making smaller Docker images. In my
&lt;a href=&quot;https://www.ianlewis.org/en/creating-smaller-docker-images&quot;&gt;previous blog post&lt;/a&gt;
I talked about how to create smaller Docker images but there were limits to how
small we could make the images. I outlined a way in which you can make the
layers you add to your Docker image smaller, but there may be times where it
just isn’t possible. Perhaps you need to run some steps in a particular order.&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/creating-smaller-docker-images-part2</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/creating-smaller-docker-images-part2</guid>
    <pubDate>Wed, 17 Feb 2016 22:00:00 +0000</pubDate>
  </item>
  
  <item>
    <title>Creating Smaller Docker Images</title>
    
    <description>&lt;p&gt;&lt;img src=&quot;/assets/images/docker/large_v-trans.png&quot; alt=&quot;The Docker logo of a whale with containers on its back&quot; class=&quot;align-center&quot; /&gt;&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/creating-smaller-docker-images</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/creating-smaller-docker-images</guid>
    <pubDate>Mon, 25 Jan 2016 22:00:00 +0000</pubDate>
  </item>
  
  <item>
    <title>Looking Back At My First Year at Google</title>
    
    <description>&lt;p&gt;I joined Google one year ago today. It’s been a really busy year and I can’t
believe it’s over so fast. I still feel like I just joined and there’s so much
that I’m still getting used to. Google has been at the same time the easiest
and the hardest, the most fun and the least fun company I’ve worked at so far.
I’ll try to explain a bit what I mean. But first I want to take a look back at my first year.&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/looking-back-my-first-year-google</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/looking-back-my-first-year-google</guid>
    <pubDate>Tue, 19 Jan 2016 17:00:00 +0000</pubDate>
  </item>
  
  <item>
    <title>HTTP/2 and Go</title>
    
    <description>&lt;blockquote&gt;
  &lt;p&gt;&lt;strong&gt;UPDATE (2015/10/15):&lt;/strong&gt; HTTP/2 is now enabled by default for http servers in tip and will
be released as part of Go 1.6. That means that you
will be able to create HTTP/2 servers without even
calling &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ConfigureServer()&lt;/code&gt;.&lt;/p&gt;

  &lt;!-- textlint-disable spelling --&gt;

  &lt;p&gt;&lt;a href=&quot;https://twitter.com/bradfitz/status/654437821382455296&quot;&gt;&lt;img src=&quot;/assets/images/2015-10-08-http2-and-go/2025-01-01_16.52.44.png&quot; alt=&quot;At #golang tip @HTTP_2 server now enabled by default.&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

  &lt;!-- textlint-enable spelling --&gt;
&lt;/blockquote&gt;
</description>
    
    <link>https://www.ianlewis.org/en/http2-and-go</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/http2-and-go</guid>
    <pubDate>Thu, 08 Oct 2015 14:30:00 +0000</pubDate>
  </item>
  
  <item>
    <title>Cross-Region HTTP Services on Container Engine</title>
    
    <description>&lt;p&gt;&amp;lt;!–
Conversion notes (using libgdc version 59):&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/cross-region-http-services-container-engine</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/cross-region-http-services-container-engine</guid>
    <pubDate>Thu, 06 Aug 2015 02:00:00 +0000</pubDate>
  </item>
  
  <item>
    <title>Testing Django Views Without Using the Test Client</title>
    
    <description>&lt;p&gt;The normal way to test Django views is via the &lt;a href=&quot;https://docs.djangoproject.com/en/1.8/topics/testing/tools/&quot;&gt;test
client&lt;/a&gt;. The test
client fakes being a WSGI server and actually makes an HTTP request through all
of Django’s request routing machinery. There are a number of reasons why this
isn’t an ideal approach.&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/testing-django-views-without-using-test-client</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/testing-django-views-without-using-test-client</guid>
    <pubDate>Tue, 21 Jul 2015 16:00:00 +0000</pubDate>
  </item>
  
  <item>
    <title>Using Kubernetes Namespaces to Manage Environments</title>
    
    <description>&lt;p&gt;One of the advantages that Kubernetes provides is the ability to manage various environments easier and better than you have been doing. For most nontrivial applications, you have test, staging, and production environments. You can spin up a separate cluster of resources, such as VMs, with the same configuration in staging and production, but that can be costly and managing the differences between the environments can be difficult.&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/using-kubernetes-namespaces-manage-environments</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/using-kubernetes-namespaces-manage-environments</guid>
    <pubDate>Wed, 15 Jul 2015 16:00:00 +0000</pubDate>
  </item>
  
  <item>
    <title>Deploying Go Servers with Kubernetes on Container Engine</title>
    
    <description>&lt;blockquote&gt;
  &lt;p&gt;Cross posted on &lt;a href=&quot;https://medium.com/@IanMLewis/deploying-go-servers-with-kubernetes-on-container-engine-3fee717a7e2a&quot;&gt;medium&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
</description>
    
    <link>https://www.ianlewis.org/en/deploying-go-servers-kubernetes</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/deploying-go-servers-kubernetes</guid>
    <pubDate>Thu, 07 May 2015 02:00:00 +0000</pubDate>
  </item>
  
  <item>
    <title>Why I Joined Google</title>
    
    <description>&lt;p&gt;As some of you may or may not know, I joined Google as a Developer Advocate on
the Google Cloud Platform Team in January. I just completed my first 3 months
and, like &lt;a href=&quot;http://paul.kinlan.me/my-first-year-in-google/&quot;&gt;many others&lt;/a&gt;, it’s
been a whirlwind experience. The sheer amount you need to learn and get used to
is overwhelming. Google has been doing a lot since it started almost 20 years
ago and it shows. There is a huge amount of built-up experience and know-how at
the company.&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/why-i-joined-google</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/why-i-joined-google</guid>
    <pubDate>Tue, 28 Apr 2015 02:30:00 +0000</pubDate>
  </item>
  
  <item>
    <title>Orchestration with Fabric  #1</title>
    
    <description>&lt;p&gt;When figuring out how I wanted to deploy my website I had a few things that I
knew I wanted. I wanted to be able to create my server(s), provision them, and
deploy the app all from one tool. This will be the first in a series of posts
about how I used Fabric to achieve that.&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/orchestration-fabric</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/orchestration-fabric</guid>
    <pubDate>Mon, 09 Mar 2015 15:30:00 +0000</pubDate>
  </item>
  
  <item>
    <title>Javascript Templating Languages</title>
    
    <description>&lt;p&gt;I have been looking at JavaScript templating libraries recently for a personal
project and I’d like to write about my thoughts here.&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/javascript-templating-languages</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/javascript-templating-languages</guid>
    <pubDate>Mon, 22 Dec 2014 00:00:00 +0000</pubDate>
  </item>
  
  <item>
    <title>Pickling Objects with Cached Properties</title>
    
    <description>&lt;p&gt;Python descriptors allow you to create properties on python objects
that are the result of executing some code. One of the simplest ways of doing
that is using the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;@property&lt;/code&gt; decorator. Here, accessing the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;myprop&lt;/code&gt; will
call the method and return the resulting &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&quot;data&quot;&lt;/code&gt;.&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/pickling-objects-cached-properties</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/pickling-objects-cached-properties</guid>
    <pubDate>Fri, 12 Dec 2014 12:00:00 +0000</pubDate>
  </item>
  
  <item>
    <title>Some General Trends in Programming Languages</title>
    
    <description>&lt;!-- TODO(#339): Add alt text to images. --&gt;
&lt;!-- markdownlint-disable MD045 --&gt;
</description>
    
    <link>https://www.ianlewis.org/en/some-general-trends-programming-languages</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/some-general-trends-programming-languages</guid>
    <pubDate>Tue, 01 Apr 2014 03:00:00 +0000</pubDate>
  </item>
  
  <item>
    <title>New Year’s Python Meme 2014</title>
    
    <description>&lt;p&gt;Since
&lt;a href=&quot;http://blog.hirokiky.org/2013/12/31/new_years_python_meme_2013.html&quot;&gt;everyone&lt;/a&gt;
&lt;a href=&quot;http://pelican.aodag.jp/new-years-python-meme-2014.html&quot;&gt;else&lt;/a&gt; was doing it, I
thought I’d write one up too.&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/new-years-python-meme-2014</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/new-years-python-meme-2014</guid>
    <pubDate>Wed, 01 Jan 2014 15:30:00 +0000</pubDate>
  </item>
  
  <item>
    <title>App Engine Pull Queues and kombu</title>
    
    <description>&lt;p&gt;App Engine provides a &lt;a href=&quot;https://developers.google.com/appengine/docs/python/taskqueue/overview-pull&quot;&gt;pull queue API&lt;/a&gt;
for accessing, leasing, and processing tasks outside of App Engine. You might
do this to perform long running tasks that aren’t suited to App Engine’s
infrastructure. Or you might want to use a library or system that isn’t
available on App Engine. However, the way you would interact with pull queue is
via a REST API. There isn’t much in the way of APIs for actually polling the
API, processing the task, and acknowledging to the API that the task is
finished.&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/app-engine-pull-queues-and-kombu</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/app-engine-pull-queues-and-kombu</guid>
    <pubDate>Tue, 05 Nov 2013 02:00:00 +0000</pubDate>
  </item>
  
  <item>
    <title>PyCon APAC 2013</title>
    
    <description>&lt;p&gt;&lt;a href=&quot;http://apac-2013.pycon.jp/&quot;&gt;PyCon APAC 2013&lt;/a&gt; is over! I want to thank everyone
who helped make the conference a great success. Staff, speakers, attendees alike
all contributed to making PyCon APAC 2013 the best PyCon in Japan ever.&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/pycon-apac-2013</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/pycon-apac-2013</guid>
    <pubDate>Tue, 17 Sep 2013 09:30:00 +0000</pubDate>
  </item>
  
  <item>
    <title>Using jQuery deferreds with Backbone.js</title>
    
    <description>&lt;p&gt;&lt;a href=&quot;http://backbonejs.org/&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Backbone.js&lt;/code&gt;&lt;/a&gt; is a neat little JavaScript model
framework. It gives you nice way of making Models and allows you to fetch and
save them to the server easily using a REST API. One of the nice things about
Backbone is that for a while it has returned the result of calling the AJAX
function back to the application, which if you are using jQuery is a
&lt;a href=&quot;http://api.jquery.com/category/deferred-object/&quot;&gt;jQuery deferred&lt;/a&gt;. This allows
you to do cool things like doing work in parallel and then running a callback
when all the work is done.&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/using-jquery-deferreds-backbonejs</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/using-jquery-deferreds-backbonejs</guid>
    <pubDate>Mon, 22 Jul 2013 15:00:00 +0000</pubDate>
  </item>
  
  <item>
    <title>Learning a Language as Muscle Memory</title>
    
    <description>&lt;p&gt;&lt;img src=&quot;/assets/images/707/0-utrb8piu3ltmh9d7_big.jpeg&quot; alt=&quot;A table of Japanese characters&quot; class=&quot;align-center&quot; /&gt;&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/learning-language-muscle-memory</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/learning-language-muscle-memory</guid>
    <pubDate>Sat, 08 Jun 2013 10:00:00 +0000</pubDate>
  </item>
  
  <item>
    <title>Google App Engine 1.7.7 pre-release</title>
    
    <description>&lt;blockquote&gt;
  &lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; App Engine 1.7.7 final has been released and is available here:
&lt;a href=&quot;https://developers.google.com/appengine/downloads&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;https://developers.google.com/appengine/downloads&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
</description>
    
    <link>https://www.ianlewis.org/en/google-appengine-177-pre-release</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/google-appengine-177-pre-release</guid>
    <pubDate>Tue, 09 Apr 2013 07:00:00 +0000</pubDate>
  </item>
  
  <item>
    <title>Twitter Archive</title>
    
    <description>&lt;!-- TODO(#339): Add alt text to images. --&gt;
&lt;!-- markdownlint-disable MD045 --&gt;
</description>
    
    <link>https://www.ianlewis.org/en/twitter-archive</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/twitter-archive</guid>
    <pubDate>Tue, 02 Apr 2013 22:00:00 +0000</pubDate>
  </item>
  
  <item>
    <title>Administer WordPress using Django&apos;s Admin</title>
    
    <description>&lt;!-- TODO(#339): Add alt text to images. --&gt;
&lt;!-- markdownlint-disable MD045 --&gt;
</description>
    
    <link>https://www.ianlewis.org/en/administer-wordpress-django-admin</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/administer-wordpress-django-admin</guid>
    <pubDate>Mon, 11 Feb 2013 06:00:00 +0000</pubDate>
  </item>
  
  <item>
    <title>Mixins and Python</title>
    
    <description>&lt;p&gt;Python supports a simple type of multiple inheritance which allows the
creation of Mixins. Mixins are a sort of class that is used to “mix in”
extra properties and methods into a class. This allows you to create
classes in a compositional style.&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/mixins-and-python</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/mixins-and-python</guid>
    <pubDate>Tue, 15 Jan 2013 14:00:00 +0000</pubDate>
  </item>
  
  <item>
    <title>A Japanese Python Community Who&apos;s Who</title>
    
    <description>&lt;p&gt;There is a small but growing Python community in Japan. Many people, even some
of those Python enthusiasts who living in Japan, are unaware of this and don’t
know who any of these people are. There are a lot of reasons for this but the
number one reason is probably the large language barrier between Japanese
speakers and non-Japanese speakers. Currently it can be kind of hard to know
who’s interested in what, or who the go-to person is for a particular topic. I
think that’s a shame and that there should be more communication going on with
the community in Japan and the wider Python community, and a lot of the Japanese
community leaders don’t get the kind of credit or publicity they deserve outside
of Asia. I hope to help solve that problem with this blog post by providing a
kind of who’s who of Japanese Python community members.&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/japanese-python-community-whos-who</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/japanese-python-community-whos-who</guid>
    <pubDate>Mon, 14 Jan 2013 10:00:00 +0000</pubDate>
  </item>
  
  <item>
    <title>Phantom QUnit Test Runner</title>
    
    <description>&lt;p&gt;&lt;img src=&quot;/assets/images/690/phantomjs+qunit.png&quot; alt=&quot;image&quot; /&gt;&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/phantom-qunit-test-runner</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/phantom-qunit-test-runner</guid>
    <pubDate>Wed, 26 Dec 2012 15:00:00 +0000</pubDate>
  </item>
  
  <item>
    <title>Blog Access Data</title>
    
    <description>&lt;p&gt;I’m the kind of guy that likes to be open about data and such I thought it might be interesting to share what kind of access pattern my humble little bi-lingual blog gets. I really don’t get that many visits, so it’s not really useful to do any kind of deep analysis so, in terms of demographics, there are only a few metrics that are really useful to look at. Because this is a blog and because it’s bilingual the things I look at are what content people are looking at (particularly the language of the content), what the user’s language is, and where they are accessing from and that’s basically it:&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/blog-access-data</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/blog-access-data</guid>
    <pubDate>Mon, 17 Dec 2012 14:00:00 +0000</pubDate>
  </item>
  
  <item>
    <title>Homepage Redesign</title>
    
    <description>&lt;p&gt;I recently redesigned my homepage to streamline it and give it a different look and feel. Here’s what the old site looked like since I converted it to &lt;a href=&quot;https://www.djangoproject.com/&quot;&gt;Django&lt;/a&gt; back &lt;a href=&quot;http://www.ianlewis.org/en/new-django-homepage&quot;&gt;3 or so years ago&lt;/a&gt;:&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/homepage-redesign</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/homepage-redesign</guid>
    <pubDate>Sun, 09 Dec 2012 23:51:42 +0000</pubDate>
  </item>
  
  <item>
    <title>My Love-Hate Relationship with JavaScript</title>
    
    <description>&lt;!-- TODO(#339): Add alt text to images. --&gt;
&lt;!-- markdownlint-disable MD045 --&gt;
</description>
    
    <link>https://www.ianlewis.org/en/my-love-hate-relationship-javascript</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/my-love-hate-relationship-javascript</guid>
    <pubDate>Tue, 01 May 2012 09:01:09 +0000</pubDate>
  </item>
  
  <item>
    <title>Google IO: Input/Output</title>
    
    <description>&lt;p&gt;This year’s &lt;a href=&quot;https://developers.google.com/events/io/&quot;&gt;Google IO page&lt;/a&gt;
has a nifty little game that allows you to build a machine that guides a
ball from an input chute to an output chute. I noticed right away that
the tools you can use seem to have odd shapes as if designed for a
purpose. You could also choose the primary colors that Google uses
often. I figured that they were originally designed so that you could
easily make a machine that was in the shape of the familiar Google logo
so I went about trying to figure out how. I think I got something that’s
represents the Google logo pretty well. What do you think? ;-)&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/google-io-inputoutput</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/google-io-inputoutput</guid>
    <pubDate>Thu, 29 Mar 2012 21:33:30 +0000</pubDate>
  </item>
  
  <item>
    <title>Django&apos;s contrib.auth and django-newauth</title>
    
    <description>&lt;p&gt;Recently there have been a lot of conversations on the Django mailing list about
fixing the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;auth&lt;/code&gt; module. Here are some of the recent mailing list threads:&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/djangos-contribauth-and-django-newauth</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/djangos-contribauth-and-django-newauth</guid>
    <pubDate>Sun, 25 Mar 2012 12:06:56 +0000</pubDate>
  </item>
  
  <item>
    <title>Decentralized groups and Stand Alone Complex</title>
    
    <description>&lt;p&gt;The other day I watched the talk “The coming war on general computation” by
&lt;a href=&quot;http://boingboing.net/&quot;&gt;Boing Boing&lt;/a&gt; editor &lt;a href=&quot;http://boingboing.net/about#cory&quot;&gt;Cory
Doctorow&lt;/a&gt;.&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/decentralized-groups-and-stand-alone-complex</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/decentralized-groups-and-stand-alone-complex</guid>
    <pubDate>Sat, 25 Feb 2012 15:10:09 +0000</pubDate>
  </item>
  
  <item>
    <title>Working overtime makes you stupid?</title>
    
    <description>&lt;p&gt;There was a recent article I read online about how working working over 40 hours a week makes you less productive.&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/working-overtime-makes-you-stupid</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/working-overtime-makes-you-stupid</guid>
    <pubDate>Sat, 18 Feb 2012 12:39:54 +0000</pubDate>
  </item>
  
  <item>
    <title>Python Sets</title>
    
    <description>&lt;p&gt;I had an application with two lists of unique items that I wanted to
take the intersection of. I had figured that using a python set would be
faster but I didn’t realize that it would be faster than the simple list
comprehension by this much.&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/python-sets</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/python-sets</guid>
    <pubDate>Mon, 12 Sep 2011 20:00:00 +0000</pubDate>
  </item>
  
  <item>
    <title>PyCon JP 2011 was Awesome!</title>
    
    <description>&lt;p&gt;&lt;img src=&quot;/assets/images/661/logo_small.png&quot; alt=&quot;PyCon JP 2011 logo&quot; /&gt;&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/pycon-jp-2011-en</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/pycon-jp-2011-en</guid>
    <pubDate>Thu, 01 Sep 2011 20:22:39 +0000</pubDate>
  </item>
  
  <item>
    <title>PyCon JP 2011</title>
    
    <description>&lt;!-- TODO(#339): Add alt text to images. --&gt;
&lt;!-- markdownlint-disable MD045 --&gt;
</description>
    
    <link>https://www.ianlewis.org/en/pycon-jp-2011</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/pycon-jp-2011</guid>
    <pubDate>Tue, 02 Aug 2011 09:24:12 +0000</pubDate>
  </item>
  
  <item>
    <title>Kay 1.1 Released!</title>
    
    <description>&lt;!-- TODO(#339): Add alt text to images. --&gt;
&lt;!-- markdownlint-disable MD045 --&gt;
</description>
    
    <link>https://www.ianlewis.org/en/kay-11-released</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/kay-11-released</guid>
    <pubDate>Mon, 07 Mar 2011 15:41:01 +0000</pubDate>
  </item>
  
  <item>
    <title>An introduction to the Tipfy Framework for App Engine</title>
    
    <description>&lt;p&gt;&lt;em&gt;(This post is the English translation of the Dec. 24th edition of the&lt;/em&gt; &lt;a href=&quot;http://atnd.org/events/10465&quot;&gt;Python
Web Framework Advent Calendar 2010&lt;/a&gt;. &lt;em&gt;Other posts
can be found on that page, though they will be in Japanese)&lt;/em&gt;&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/introduction-tipfy-framework-appengine</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/introduction-tipfy-framework-appengine</guid>
    <pubDate>Wed, 29 Dec 2010 10:31:34 +0000</pubDate>
  </item>
  
  <item>
    <title>Syncing music on Ubuntu</title>
    
    <description>&lt;p&gt;I recently played around with and figured out how to get syncing working with my
iPhone 3GS and Ubuntu Lucid. Syncing is supported out of the box so not hard,
but you do have to know what packages to install to get the support you need.
This should work for iPods as well.&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/syncing-music-ubuntu</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/syncing-music-ubuntu</guid>
    <pubDate>Sun, 12 Dec 2010 12:33:57 +0000</pubDate>
  </item>
  
  <item>
    <title>Google App Engine 1.4.0 Released!!</title>
    
    <description>&lt;p&gt;&lt;a href=&quot;http://code.google.com/appengine/&quot;&gt;Google App Engine&lt;/a&gt; 1.4.0 was just released
and has lots of interesting new features. Channel API, “Always On” (reserved
instances), Improvements to background processing, Warm up requests, and
Metadata queries just to name the big ones.&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/google-appengine-140-released</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/google-appengine-140-released</guid>
    <pubDate>Fri, 03 Dec 2010 09:19:38 +0000</pubDate>
  </item>
  
  <item>
    <title>New Google App Engine API Expert </title>
    
    <description>&lt;!-- TODO(#339): Add alt text to images. --&gt;
&lt;!-- markdownlint-disable MD045 --&gt;
</description>
    
    <link>https://www.ianlewis.org/en/new-google-appengine-api-expert</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/new-google-appengine-api-expert</guid>
    <pubDate>Tue, 23 Nov 2010 12:31:13 +0000</pubDate>
  </item>
  
  <item>
    <title>bpssl - The Django SSL Support Application</title>
    
    <description>&lt;p&gt;The other day I released &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;bpssl&lt;/code&gt; which is a Django application that helps you
support HTTPS on your website. The main functionality is performing redirection
for HTTPS only URLs and views. For instance, if a request for your login view
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/login&lt;/code&gt; is received over HTTP, the provided middleware can redirect the user to
the equivalent HTTPS page.&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/bpssl-django-ssl-support-application</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/bpssl-django-ssl-support-application</guid>
    <pubDate>Mon, 15 Nov 2010 18:31:13 +0000</pubDate>
  </item>
  
  <item>
    <title>Cron only decorator for App Engine</title>
    
    <description>&lt;p&gt;For a recent project I recently I have been using App Engine’s cron
feature to aggregate data and perform maintenance tasks. However, since
cron is a simple web request, if a user accesses that url then the cron
job will run. In order to prevent normal users from being able to run
cron jobs I created a decorator that specifies a view as cron only.&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/cron-only-decorator-appengine</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/cron-only-decorator-appengine</guid>
    <pubDate>Tue, 19 Oct 2010 10:54:14 +0000</pubDate>
  </item>
  
  <item>
    <title>Dynamically Adding a Method to Classes or Class Instances in Python</title>
    
    <description>&lt;p&gt;In Python you sometimes want to dynamically add methods to classes or
class instances (objects). In Python code, the most obvious way to
accomplish this might be something like the following but it has one
caveat,&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/dynamically-adding-method-classes-or-class-instanc</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/dynamically-adding-method-classes-or-class-instanc</guid>
    <pubDate>Sun, 03 Oct 2010 21:42:26 +0000</pubDate>
  </item>
  
  <item>
    <title>Data and instinct driven decision making</title>
    
    <description>&lt;p&gt;I just read a piece called &lt;a href=&quot;http://www.wired.com/wiredscience/2010/08/we-are-all-talk-radio-hosts/&quot;&gt;We Are All Talk Radio
Hosts&lt;/a&gt;
which mentions some studies saying that the more we humans think about
things, the more we make bad decisions. The rationale is that we try to
come up with reasons why we like or dislike something rather than simply
choosing it based on our experience. It extends to almost all of our
choices from jams, to cars, to apartments.&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/data-and-instinct-driven-decision-making</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/data-and-instinct-driven-decision-making</guid>
    <pubDate>Fri, 06 Aug 2010 16:52:39 +0000</pubDate>
  </item>
  
  <item>
    <title>Key Value Storage Systems ... and Beyond ... with Python</title>
    
    <description>&lt;p&gt;Google docs wouldn’t let me share the presentation publicly with people outside
our company’s domain and it gave me an error when I tried to download it as a
PowerPoint file or PDF so I was forced to recreate my presentation locally.
Anyway, I placed the slides to my talk at &lt;a href=&quot;http://pycon.sit.rp.sg/&quot;&gt;PyCon Asia&lt;/a&gt;
online please check it out on Slideshare.&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/key-value-storage-systems-and-beyond-python</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/key-value-storage-systems-and-beyond-python</guid>
    <pubDate>Tue, 15 Jun 2010 16:33:38 +0000</pubDate>
  </item>
  
  <item>
    <title>Google Chrome Background Connections</title>
    
    <description>&lt;p&gt;Today I found that Google Chrome was making lots of background connections to
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;1e100.net&lt;/code&gt;. I was a little worried at first but this seems to be a google owned
domain and these connections are used for their anti-phishing/malware feature.&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/google-chrome-background-connections</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/google-chrome-background-connections</guid>
    <pubDate>Sat, 01 May 2010 11:21:30 +0000</pubDate>
  </item>
  
  <item>
    <title>Shady Harvard Puzzle Facebook App Disassembled</title>
    
    <description>&lt;p&gt;Today I got an email from a friend on Facebook that suggested that I try
out this application called “&lt;a href=&quot;http://www.facebook.com/pages/Only-4-of-harvard-grads-can-solve-this-riddle/112049325499228?v=wall&quot;&gt;Only 4% of harvard grads can solve this
riddle..&lt;/a&gt;”.
Being curious I took a look at it.&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/shady-harvard-puzzle-facebook-app-disassembled</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/shady-harvard-puzzle-facebook-app-disassembled</guid>
    <pubDate>Mon, 26 Apr 2010 22:32:33 +0000</pubDate>
  </item>
  
  <item>
    <title>Caching Permanent Redirects</title>
    
    <description>&lt;p&gt;Since I’ve started using Chrome as my main browser for surfing I have
noticed that some web applications seem to redirect to 404 pages. After
some investigation it seems that the browser caches 301 responses (they
are permanent after all) and when going to that URL again automatically
redirects you.&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/caching-permanent-redirects</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/caching-permanent-redirects</guid>
    <pubDate>Tue, 13 Apr 2010 14:47:03 +0000</pubDate>
  </item>
  
  <item>
    <title>python-openvcdiff and Cython</title>
    
    <description>&lt;p&gt;I started a project today to implement an interface for the
&lt;a href=&quot;http://code.google.com/p/open-vcdiff/&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;open-vcdiff&lt;/code&gt;&lt;/a&gt; using
&lt;a href=&quot;http://www.cython.org/&quot;&gt;Cython&lt;/a&gt;. I’m not a C++ master and the Python C
libraries are pretty new to me but I managed to expose and implement a few
methods of the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;VCDiffEncoder&lt;/code&gt; class. The hardest part so far has been trying to
figure out how to use the C++ standard library types like std::string. I’m also
not sure how I can interface with python in such a way as to allow fast
processing of potentially large binary data. Normally I would use a file-like
object in Python to create a kind of string but &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;open-vcdiff&lt;/code&gt; being C++ has a
slightly different interface for dealing with binary blobs.&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/python-openvcdiff-and-cython</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/python-openvcdiff-and-cython</guid>
    <pubDate>Sun, 21 Mar 2010 18:26:15 +0000</pubDate>
  </item>
  
  <item>
    <title>Modipyd with Growl Notifications and Test Driven Development</title>
    
    <description>&lt;p&gt;Recently at work my coworker &lt;a href=&quot;http://d.hatena.ne.jp/nullpobug/&quot;&gt;Shinya
Okano&lt;/a&gt; came across
&lt;a href=&quot;http://www.metareal.org/p/modipyd/&quot;&gt;Modipyd&lt;/a&gt; written by &lt;a href=&quot;http://twitter.com/takanori_is&quot;&gt;Takanori
Ishikawa&lt;/a&gt;. Modipyd is a module
dependency monitoring framework which can build module dependency trees
and monitor when modules have been changed. But most interesting feature
it provides is the pyautotest tool.&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/modipyd-growl-test-driven-development</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/modipyd-growl-test-driven-development</guid>
    <pubDate>Sun, 07 Mar 2010 15:54:09 +0000</pubDate>
  </item>
  
  <item>
    <title>&apos;self&apos; ForeignKeys always result in a JOIN</title>
    
    <description>&lt;p&gt;I came across a little annoyance in Django today. I found that a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ForeignKey&lt;/code&gt;
that reference &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;self&lt;/code&gt;, i.e. points to the same table, always results in a join
in a filter.&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/self-foreignkeys-always-result-join</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/self-foreignkeys-always-result-join</guid>
    <pubDate>Tue, 02 Mar 2010 12:21:13 +0000</pubDate>
  </item>
  
  <item>
    <title>Django template2pdf</title>
    
    <description>&lt;p&gt;This is cool Django application from &lt;a href=&quot;http://twitter.com/whosaysni&quot;&gt;Yasushi
Masuda&lt;/a&gt; which allows you to render data to
a pdf using &lt;a href=&quot;http://pypi.python.org/pypi/trml2pdf&quot;&gt;trml2pdf&lt;/a&gt;.&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/django-template2pdf</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/django-template2pdf</guid>
    <pubDate>Mon, 01 Mar 2010 18:21:14 +0000</pubDate>
  </item>
  
  <item>
    <title>How to be a 10x programmer</title>
    
    <description>&lt;p&gt;I recently read a blog post that is a satirical look at how to gain a
reputation as a guru programmer by converting code to your own code and
making it hard for other programmers to get their work done. It’s called
&lt;a href=&quot;http://coderoom.wordpress.com/2010/01/28/3-simple-rules-that-will-make-you-a-superstar-developer/&quot;&gt;3 Simple Rules That Will Make You a ‘Superstar’
Developer&lt;/a&gt;
and it’s very tongue in cheek.&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/how-be-10x-programmer</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/how-be-10x-programmer</guid>
    <pubDate>Thu, 18 Feb 2010 12:35:50 +0000</pubDate>
  </item>
  
  <item>
    <title>Walled Gardens Suck</title>
    
    <description>&lt;p&gt;I recently read a couple of posts on the openness of the iPad and the
effect it will have on tinkering and computer hacking. One was a
&lt;a href=&quot;http://al3x.net/2010/01/28/ipad.html&quot;&gt;post&lt;/a&gt; by &lt;a href=&quot;http://al3x.net/&quot;&gt;al3x&lt;/a&gt;
of twitter fame and one was a
&lt;a href=&quot;http://www.rinich.com/post/358597818/i-love-walled-gardens&quot;&gt;response&lt;/a&gt;,
perhaps not directly to al3x, by &lt;a href=&quot;http://www.rinich.com/&quot;&gt;Rory Marinich&lt;/a&gt;
called &lt;a href=&quot;http://www.rinich.com/post/358597818/i-love-walled-gardens&quot;&gt;I Love Walled
Gardens&lt;/a&gt;.&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/walled-gardens-suck</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/walled-gardens-suck</guid>
    <pubDate>Fri, 29 Jan 2010 09:52:45 +0000</pubDate>
  </item>
  
  <item>
    <title>Writing Schema migrations for App Engine using the Mapper Class and the deferred Library</title>
    
    <description>&lt;p&gt;One thing that many people using App Engine know is that writing schema
migrations is hard. Improving performance on App Engine often revolves around
getting objects by key or key name rather than using filters, however altering
the makeup of an object’s key requires pulling all the objects and saving them in
the Datastore anew. This also requires modifying the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ReferenceProperties&lt;/code&gt; of
any objects pointing to your changed object. On top of that, schema migrations
generally require modifying lots of data and you have limits on the number of
objects returned by a filter, and request timeouts to worry about.&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/writing-schema-migrations-appengine-using-mapper-c</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/writing-schema-migrations-appengine-using-mapper-c</guid>
    <pubDate>Sun, 27 Dec 2009 13:59:03 +0000</pubDate>
  </item>
  
  <item>
    <title>Running django with daemontools</title>
    
    <description>&lt;p&gt;Running Django FastCGI with daemontools is rather easy but getting it to run in
the foreground with the proper user takes a bit of knowledge about how Bash
works and the tools in daemontools.&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/running-django-with-daemontools</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/running-django-with-daemontools</guid>
    <pubDate>Sun, 13 Dec 2009 21:38:59 +0000</pubDate>
  </item>
  
  <item>
    <title>How to Hide Inactive Branches by Default with Mercurial</title>
    
    <description>&lt;p&gt;mercurial usually shows inactive branches when running “hg branches” but
that’s kind of annoying if you have lots of old inactive branches. So I
recently set up my personal .hgrc to hide inactive branches by creating
an alias.&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/how-hide-inactive-branches-default-mercurial</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/how-hide-inactive-branches-default-mercurial</guid>
    <pubDate>Thu, 26 Nov 2009 16:53:44 +0000</pubDate>
  </item>
  
  <item>
    <title>Testing HTTPS with Django&apos;s Development Server</title>
    
    <description>&lt;p&gt;Django’s development server doesn’t normally support HTTPS so it’s hard
to test applications with HTTPS without deploying the application to a
real web server that supports HTTPS. The secret is to use two
development server instances, one for http and one for https, and to use
a tool called &lt;a href=&quot;http://www.stunnel.org/&quot;&gt;stunnel&lt;/a&gt; to can create an ssl
tunnel to the development server to support HTTPS.&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/testing-https-djangos-development-server</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/testing-https-djangos-development-server</guid>
    <pubDate>Wed, 18 Nov 2009 21:36:14 +0000</pubDate>
  </item>
  
  <item>
    <title>Importing an svn repository into mercurial</title>
    
    <description>&lt;p&gt;Recently I’ve been forking Subversion (SVN) repositories by converting them to
mercurial repositories and uploading them to
&lt;a href=&quot;http://www.bitbucket.org/&quot;&gt;Bitbucket&lt;/a&gt;. It’s fairly easy with the
&lt;a href=&quot;http://mercurial.selenic.com/wiki/ConvertExtension&quot;&gt;Mercurial convert
extension&lt;/a&gt;. Convert
is distributed with Mercurial so if you have a recent version all you
should have to do is put the following in your &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;hgrc&lt;/code&gt;.&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/importing-svn-repository-mercurial</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/importing-svn-repository-mercurial</guid>
    <pubDate>Sat, 24 Oct 2009 11:09:58 +0000</pubDate>
  </item>
  
  <item>
    <title>Minimum cost for warming-up various frameworks(and more)</title>
    
    <description>&lt;p&gt;My good friend &lt;a href=&quot;http://takashi-matsuo.blogspot.com/&quot;&gt;Takashi Matsuo&lt;/a&gt; wrote an
interesting
&lt;a href=&quot;http://takashi-matsuo.blogspot.com/2009/10/minimum-cost-of-various-frameworks-cold.html&quot;&gt;blog post&lt;/a&gt;
about start-up times of various frameworks on App Engine. Because App Engine
kills your server process it often needs to load your application into memory
from scratch. This can take a lot of time if a lot of modules are loaded.&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/minimum-cost-warming-various-frameworksand-more</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/minimum-cost-warming-various-frameworksand-more</guid>
    <pubDate>Wed, 21 Oct 2009 13:16:31 +0000</pubDate>
  </item>
  
  <item>
    <title>Testing using a mocked HTTP server</title>
    
    <description>&lt;p&gt;Recently I got some tests working for my
&lt;a href=&quot;http://bitbucket.org/IanLewis/django-lifestream/&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;django-lifestream&lt;/code&gt;&lt;/a&gt;
project. The lifestream imports data from RSS/Atom feeds so there isn’t
a good way to run tests without creating a test HTTP server to serve up
your RSS/Atom.&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/testing-using-mocked-server</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/testing-using-mocked-server</guid>
    <pubDate>Thu, 15 Oct 2009 09:50:18 +0000</pubDate>
  </item>
  
  <item>
    <title>Using Daemontools</title>
    
    <description>&lt;h2 id=&quot;introduction&quot;&gt;Introduction&lt;/h2&gt;
</description>
    
    <link>https://www.ianlewis.org/en/using-daemontools</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/using-daemontools</guid>
    <pubDate>Tue, 06 Oct 2009 11:15:29 +0000</pubDate>
  </item>
  
  <item>
    <title>Parsing email with attachments in python</title>
    
    <description>&lt;p&gt;Recently I needed to be able to parse out attachments and body from
multipart emails and use the resulting data to post to a service. So I
wrote the code below to parse out text and html portions of the email
and also parse out attachments.&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/parsing-email-attachments-python</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/parsing-email-attachments-python</guid>
    <pubDate>Mon, 21 Sep 2009 11:33:31 +0000</pubDate>
  </item>
  
  <item>
    <title>Annoying things about Django</title>
    
    <description>&lt;p&gt;Since I’ve been using it for a while now I’ve gotten a good idea about what is
good and what is annoying about development with django. This might seem a
little trite at parts since some of these gripes are with features that don’t
exist in other frameworks but in the spirit of perhaps making django more
flexable without ruining it’s ease of use I’ve come up with some annoying spots
and possible ideas for fixing them.&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/annoying-things-about-django</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/annoying-things-about-django</guid>
    <pubDate>Sun, 30 Aug 2009 13:08:00 +0000</pubDate>
  </item>
  
  <item>
    <title>Custom Admin Views and Reversing Django Admin URLs</title>
    
    <description>&lt;p&gt;I recently used the new feature in Django 1.1 for &lt;a href=&quot;http://docs.djangoproject.com/en/dev/ref/contrib/admin/#reversing-admin-urls&quot;&gt;reversing django
admin
URLs&lt;/a&gt;
and &lt;a href=&quot;http://docs.djangoproject.com/en/dev/ref/contrib/admin/#adding-views-to-admin-sites&quot;&gt;specifying custom admin
views&lt;/a&gt;
in my project
&lt;a href=&quot;http://code.google.com/p/django-lifestream-2/&quot;&gt;django-lifestream&lt;/a&gt;.&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/reversing-django-admin-urls</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/reversing-django-admin-urls</guid>
    <pubDate>Wed, 26 Aug 2009 18:08:29 +0000</pubDate>
  </item>
  
  <item>
    <title>Recent EC2 Problems</title>
    
    <description>&lt;p&gt;Over the weekend we had some problems with EC2 in which some
instances could not be connected to via a network. This happened to us
for a Nginx load balancing server on Friday and a database master on
Saturday for two different web services. Several posts in the forums
also indicated
&lt;a href=&quot;http://developer.amazonwebservices.com/connect/thread.jspa?threadID=35468&amp;amp;tstart=30&quot;&gt;similar&lt;/a&gt;
&lt;a href=&quot;http://developer.amazonwebservices.com/connect/thread.jspa?threadID=35466&amp;amp;tstart=30&quot;&gt;problems&lt;/a&gt;
though rebooting the instance did not work for us.
&lt;a href=&quot;http://www.bitbucket.org&quot;&gt;Bitbucket&lt;/a&gt; also went down on Saturday which I
assume is related. I figured I would document what happened as Amazon
didn’t release any information about it over the weekend and it wasn’t
immediately clear what we should do but it turned out to be fastest for
us to replace the offending instance.&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/recent-ec2-problems</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/recent-ec2-problems</guid>
    <pubDate>Mon, 24 Aug 2009 15:33:36 +0000</pubDate>
  </item>
  
  <item>
    <title>Using Mercurial MQ</title>
    
    <description>&lt;p&gt;I recently started using mercurial’s &lt;a href=&quot;http://mercurial.selenic.com/wiki/MqExtension&quot;&gt;mq
extension&lt;/a&gt; at work as I
found myself switching between changes a lot. I often had to set changes
I was currently working on aside to do a merge or fix something that was
more urgent. The mq extension makes that possible by managing patches
and allowing you to put away changes into the patch queue.&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/using-mercurial-mq</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/using-mercurial-mq</guid>
    <pubDate>Tue, 18 Aug 2009 10:04:44 +0000</pubDate>
  </item>
  
  <item>
    <title>Django and nginx settings</title>
    
    <description>&lt;p&gt;One problem I keep encountering with setting up fastcgi with Django is
that the default nginx fastcgi parameters cause django to load the top
url no matter what url you try to go to. This is because the default
nginx fastcgi parameters pass the SCRIPT_NAME parameter to the django
instance which Django interprets incorrectly. In order to fix this you
need to rename the SCRIPT_NAME parameter to PATH_INFO.&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/django-nginx</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/django-nginx</guid>
    <pubDate>Fri, 03 Jul 2009 17:00:13 +0000</pubDate>
  </item>
  
  <item>
    <title>Smipple</title>
    
    <description>&lt;p&gt;Yesterday I released a pet project I had been working on called
&lt;a href=&quot;http://www.smipple.net/&quot;&gt;Smipple&lt;/a&gt;. Smipple is a service for saving,
organizing, and sharing snippets of code. I originally decided to create
it because I was a user of &lt;a href=&quot;http://www.snipplr.com/&quot;&gt;Snipplr&lt;/a&gt; but I was
frustrated because it was slow and hard to use and the XML-RPC API was
buggy. There didn’t seem to be much response from the author or changes
to the website either.&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/smipple</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/smipple</guid>
    <pubDate>Tue, 30 Jun 2009 12:20:06 +0000</pubDate>
  </item>
  
  <item>
    <title>Relaxing weekend</title>
    
    <description>&lt;p&gt;Reiko and her dog Lala came over and we had a pretty relaxing weekend.
On Saturday we went to Kita no maru park which is very close to the
Emporer’s palace in Tokyo. I like Kita no Maru because it’s fairly open
and generally doesn’t have a lot of people around.&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/relaxing-weekend</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/relaxing-weekend</guid>
    <pubDate>Mon, 22 Jun 2009 16:29:04 +0000</pubDate>
  </item>
  
  <item>
    <title>Google App Engine SDK 1.2.3</title>
    
    <description>&lt;p&gt;The &lt;a href=&quot;http://code.google.com/p/googleappengine/wiki/SdkReleaseNotes#Version_1.2.3_-_June_18,_2009&quot;&gt;Google App Engine
SDK 1.2.3&lt;/a&gt;
was just released and contains some often asked for goodies such as
Django 1.0 support and support for a &lt;a href=&quot;http://googleappengine.blogspot.com/2009/06/new-task-queue-api-on-google-app-engine.html&quot;&gt;task queue
API&lt;/a&gt;.&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/google-appengine-sdk-123</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/google-appengine-sdk-123</guid>
    <pubDate>Fri, 19 Jun 2009 10:04:46 +0000</pubDate>
  </item>
  
  <item>
    <title>Tokyo Hackerspace Meeting</title>
    
    <description>&lt;p&gt;Yesterday I attended the second &lt;a href=&quot;http://www.tokyohackerspace.com/&quot;&gt;Tokyo
Hackerspace&lt;/a&gt; meeting. It was the first
time I attended such the meetings which are being held weekly now. I
have a feeling that more was talked about and decided last week but it
was good to get an update on how things were going and what people were
interested in with the hackerspace. I was told that more artists and
creative folks attended the first meeting but this meeting seemed to
have mostly web and hardware folks who were interested in joining the
two worlds.&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/tokyohackerspace-meeting</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/tokyohackerspace-meeting</guid>
    <pubDate>Wed, 17 Jun 2009 10:54:16 +0000</pubDate>
  </item>
  
  <item>
    <title>Tokyo Hackerspace</title>
    
    <description>&lt;p&gt;&lt;img src=&quot;http://tokyohackerspace.googlegroups.com/web/hslogo.jpg?gda=lrpJgTwAAAAr1fkzGz16Q9NepM6i3AZKvUhMeHQNJoDQllpma_3XyBXBwF2IhAbToEmJoSVY1kj9Wm-ajmzVoAFUlE7c_fAt&quot; alt=&quot;Tokyo Hackerspace Logo&quot; /&gt;&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/tokyohackerspace</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/tokyohackerspace</guid>
    <pubDate>Fri, 12 Jun 2009 17:03:15 +0000</pubDate>
  </item>
  
  <item>
    <title>Preview blog posts within the django admin.</title>
    
    <description>&lt;p&gt;I
&lt;a href=&quot;http://bitbucket.org/IanLewis/homepage/changeset/a7f07d233910/&quot;&gt;implemented&lt;/a&gt;
blog post previews for my blog using the technique described here:
&lt;a href=&quot;http://latherrinserepeat.org/2008/7/28/stupid-simple-django-admin-previews/&quot;&gt;http://latherrinserepeat.org/2008/7/28/stupid-simple-django-admin-previews/&lt;/a&gt;&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/admin-preview</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/admin-preview</guid>
    <pubDate>Thu, 11 Jun 2009 23:12:48 +0000</pubDate>
  </item>
  
  <item>
    <title>Google I/O Day 1</title>
    
    <description>&lt;p&gt;I’m about 2 weeks late getting around to writing about Google I/O and
most people already know what went on but I’ll share a bit more. The
keynote was given by &lt;a href=&quot;http://www.google.com/search?q=Vic+Gundotra&quot;&gt;Vic
Gundotra&lt;/a&gt;. Vic announced
that Google would be pushing
&lt;a href=&quot;http://en.wikipedia.org/wiki/HTML_5&quot;&gt;HTML 5.0&lt;/a&gt; in order to speed up
acceptance of the web as a platform. He included 5 things that Google is
excited about. These include,&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/google-io-day1</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/google-io-day1</guid>
    <pubDate>Thu, 11 Jun 2009 21:59:04 +0000</pubDate>
  </item>
  
  <item>
    <title>New Django-based Homepage</title>
    
    <description>&lt;p&gt;I finally got around to finishing up my
&lt;a href=&quot;http://www.djangoproject.com/&quot;&gt;Django&lt;/a&gt; based website. It’s pretty
inexcusable for a Django developer to have a PHP based blog website. I’m
happy that it seems to be snappier and I haven’t don’t anything
particular to try to make it fast so that means I can probably make it
even speedier by optimizing delivery of static content, and some caching
since the blog and some other content doesn’t change that often.&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/new-django-homepage</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/new-django-homepage</guid>
    <pubDate>Sun, 07 Jun 2009 00:06:01 +0000</pubDate>
  </item>
  
  <item>
    <title>Google Wave BOF</title>
    
    <description>&lt;p&gt;I attended the &lt;a href=&quot;http://d.hatena.ne.jp/a2c/20090602/1243954329&quot;&gt;Google Wave BOF&lt;/a&gt;
(Birds of a Feather). It was a good time for folks with
&lt;a href=&quot;http://wave.google.com/&quot;&gt;Google Wave&lt;/a&gt; accounts to show it off to folks who
can’t sign into it yet. It originally was going to be about 25 people but due to
popular demand the location had to be moved, and it went up to about 40 people.
Lots of folks were interested in hearing about Google Wave as a new
collaborative platform.&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/wave-bof</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/wave-bof</guid>
    <pubDate>Wed, 03 Jun 2009 10:08:24 +0000</pubDate>
  </item>
  
  <item>
    <title>Google IO 2009</title>
    
    <description>&lt;p&gt;This year I attended &lt;a href=&quot;http://code.google.com/events/io/&quot;&gt;Google IO&lt;/a&gt; and had so
much fun that I think I’ll have to break it up into several blog posts. &lt;a href=&quot;http://code.google.com/events/io/&quot;&gt;Google
IO&lt;/a&gt; is held in San Francisco and is the #1
&lt;a href=&quot;http://www.google.com/&quot; title=&quot;Google&quot;&gt;Google&lt;/a&gt; event of the year. About 4000 or so
developers attended the event which was held in the &lt;a href=&quot;http://maps.google.co.jp/maps?q=Moscone+West+Convention+Center+San+Francisco&quot;&gt;Moscone West Convention
Center&lt;/a&gt;.
In this post I’ll kind of give the history of the events leading up to the event
and some context.&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/google-io-2009</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/google-io-2009</guid>
    <pubDate>Mon, 01 Jun 2009 15:57:11 +0000</pubDate>
  </item>
  
  <item>
    <title>Tokyo Barcamp 2009</title>
    
    <description>&lt;p&gt;Today I participated in &lt;a href=&quot;http://barcamp.org/BarCamp-Tokyo2009&quot;&gt;Tokyo BarCamp
2009&lt;/a&gt;. From the Tokyo BarCamp website:&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/tokyo-barcamp-2009</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/tokyo-barcamp-2009</guid>
    <pubDate>Sat, 16 May 2009 23:18:05 +0000</pubDate>
  </item>
  
  <item>
    <title>Connecting Sortables in jQuery UI</title>
    
    <description>&lt;p&gt;&lt;a href=&quot;http://jquery.com/&quot;&gt;jQuery&lt;/a&gt; has a UI framework called
&lt;a href=&quot;http://jqueryui.com/&quot;&gt;jQueryUI&lt;/a&gt; which provides a number of UI controls and
widgets that you can use to create cool user interfaces. I’ve been using
jQueryUI a fair bit for work recently and wanted to share a pretty cool feature
that jQueryUI has.&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/connecting-sortables-in-jquery-ui</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/connecting-sortables-in-jquery-ui</guid>
    <pubDate>Wed, 22 Apr 2009 11:26:41 +0000</pubDate>
  </item>
  
  <item>
    <title>Unreadable</title>
    
    <description>&lt;p&gt;What is it about some C programmers that makes them write code that looks like this:&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/title-2</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/title-2</guid>
    <pubDate>Wed, 01 Apr 2009 15:07:48 +0000</pubDate>
  </item>
  
  <item>
    <title>Transactions on App Engine</title>
    
    <description>&lt;p&gt;The way to store data on &lt;a href=&quot;http://code.google.com/appengine/&quot;&gt;App Engine&lt;/a&gt; is with
Google’s &lt;a href=&quot;http://code.google.com/appengine/docs/python/datastore/&quot;&gt;Datastore&lt;/a&gt;
which has support for transactions. However, the transactions are quite limited
in that,&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/transactions-on-appengine</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/transactions-on-appengine</guid>
    <pubDate>Thu, 19 Mar 2009 01:44:52 +0000</pubDate>
  </item>
  
  <item>
    <title>Jaiku on App Engine</title>
    
    <description>&lt;!-- TODO(#339): Add alt text to images. --&gt;
&lt;!-- markdownlint-disable MD045 --&gt;
</description>
    
    <link>https://www.ianlewis.org/en/jaiku-on-appengine-1</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/jaiku-on-appengine-1</guid>
    <pubDate>Mon, 16 Mar 2009 00:52:31 +0000</pubDate>
  </item>
  
  <item>
    <title>Werkzeug and reverse urls</title>
    
    <description>&lt;p&gt;I wanted to impove a &lt;a href=&quot;http://code.google.com/appengine&quot;&gt;Google App Engine&lt;/a&gt;
application that a friend of mine created
(&lt;a href=&quot;http://twisted-mind.appspot.com/&quot;&gt;ほぼ汎用イベント管理ツール&lt;/a&gt;(jp)) and noticed
that he was &lt;a href=&quot;http://bitbucket.org/voluntas/twisted-mind/src/tip/views.py#cl-132&quot;&gt;redirecting directly to
urls&lt;/a&gt;. He is
using &lt;a href=&quot;http://werkzeug.pocoo.org/&quot;&gt;Werkzeug&lt;/a&gt; to handle url routing so I wondered
if there was a method for generating urls from a name like you can in
&lt;a href=&quot;http://www.djangoproject.com/&quot;&gt;Django&lt;/a&gt;.&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/werkzeug-and-reverse-urls</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/werkzeug-and-reverse-urls</guid>
    <pubDate>Sat, 14 Mar 2009 11:57:52 +0000</pubDate>
  </item>
  
  <item>
    <title>QueryDict and update()</title>
    
    <description>&lt;p&gt;Yesterday I ran into an interesting quirk with Django’s QueryDict object and
the normal dictionary update() method. Normally the update method will allow
you to merge two dictionary or dictionary like objects but because the
QueryDict internally holds it’s values as lists you get some unexpected
behavior.&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/querydict-and-update</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/querydict-and-update</guid>
    <pubDate>Fri, 20 Feb 2009 09:29:46 +0000</pubDate>
  </item>
  
  <item>
    <title>IE, JSON, and the script tag</title>
    
    <description>&lt;p&gt;My coworker recently introduced me to one of the most blatantly bad behaviors
in web browser history. He introduced it thus:&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/ie-json-and-the-lscriptg-tagl-scriptg</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/ie-json-and-the-lscriptg-tagl-scriptg</guid>
    <pubDate>Sat, 14 Feb 2009 13:34:57 +0000</pubDate>
  </item>
  
  <item>
    <title>Field/column Queries in Django</title>
    
    <description>&lt;p&gt;One of the neat things making it’s way into Django 1.1 is &lt;a href=&quot;http://docs.djangoproject.com/en/dev/topics/db/queries/#filters-can-reference-fields-on-the-model&quot;&gt;F object
queries&lt;/a&gt;.
The F object is kind of like the Q object as it can be used it queries but it
represents a database field on the right hand side of an equality/inequality.&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/f-ield-column-queries-in-django</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/f-ield-column-queries-in-django</guid>
    <pubDate>Wed, 04 Feb 2009 23:24:38 +0000</pubDate>
  </item>
  
  <item>
    <title>jQuery Multi-Pageslide</title>
    
    <description>&lt;p&gt;Earlier this week I came across the
&lt;a href=&quot;http://halobrite.com/blog/jquery-pageslide/&quot;&gt;jQuery Pageslide&lt;/a&gt; plugin via
&lt;a href=&quot;http://www.ajaxian.com/&quot;&gt;Ajaxian&lt;/a&gt; and was impressed with the design. I set
about using it to display help messages to the user for a site I am working on.&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/jquery-multi-pageslide-1</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/jquery-multi-pageslide-1</guid>
    <pubDate>Fri, 23 Jan 2009 00:15:08 +0000</pubDate>
  </item>
  
  <item>
    <title>Python date range iterator</title>
    
    <description>&lt;p&gt;I couldn’t find something that gave me quite what I wanted so I created
a simple &lt;a href=&quot;http://www.python.org/&quot;&gt;Python&lt;/a&gt; generator to give me the dates
between two &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;datetime&lt;/code&gt; objects.&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/python-date-range-iterator</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/python-date-range-iterator</guid>
    <pubDate>Fri, 19 Dec 2008 15:27:30 +0000</pubDate>
  </item>
  
  <item>
    <title>Introduction to Algorithms</title>
    
    <description>&lt;!-- TODO(#339): Add alt text to images. --&gt;
&lt;!-- markdownlint-disable MD045 --&gt;
</description>
    
    <link>https://www.ianlewis.org/en/introduction_to_algorithms</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/introduction_to_algorithms</guid>
    <pubDate>Mon, 15 Dec 2008 18:10:37 +0000</pubDate>
  </item>
  
  <item>
    <title>Make Firefox look like Chrome</title>
    
    <description>&lt;!-- TODO(#339): Add alt text to images. --&gt;
&lt;!-- markdownlint-disable MD045 --&gt;
</description>
    
    <link>https://www.ianlewis.org/en/make-firefox-look-like-chrome</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/make-firefox-look-like-chrome</guid>
    <pubDate>Thu, 27 Nov 2008 14:02:52 +0000</pubDate>
  </item>
  
  <item>
    <title>UTF-8 with guile</title>
    
    <description>&lt;p&gt;Getting UTF-8 to work with guile is a bit of a stretch as guile doesn’t have
any real encoding or UTF-8 support to speak of, but I was able to get at least
some basic stuff working by using the &lt;a href=&quot;http://www.gnu.org/software/guile-gnome/docs/glib/html/Unicode-Manipulation.html#Unicode-Manipulation&quot;&gt;Unicode
Manipulation&lt;/a&gt;
routines which are part of the
&lt;a href=&quot;http://www.gnu.org/software/guile-gnome/docs/glib/html/index.html&quot;&gt;Guile-Glib&lt;/a&gt;
module.&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/utf-8-with-guile</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/utf-8-with-guile</guid>
    <pubDate>Wed, 19 Nov 2008 23:03:47 +0000</pubDate>
  </item>
  
  <item>
    <title>Django Sitemap Framework</title>
    
    <description>&lt;p&gt;Using the Django &lt;a href=&quot;http://docs.djangoproject.com/en/dev/ref/contrib/sitemaps/&quot;&gt;sitemap
framework&lt;/a&gt; is so
easy it’s almost no work at all. Just make a sitemap object and add it to the
sitemap in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;urls.py&lt;/code&gt;. The sitemap framework calls &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;items()&lt;/code&gt; in your Sitemap to
get the list of objects to put in the sitemap and then calls
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;get_absolute_url()&lt;/code&gt; on each object.&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/django-sitemap-framework</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/django-sitemap-framework</guid>
    <pubDate>Tue, 18 Nov 2008 21:22:06 +0000</pubDate>
  </item>
  
  <item>
    <title>Django admin inline forms</title>
    
    <description>&lt;p&gt;For my new project &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;dlife&lt;/code&gt; (&lt;strong&gt;Update:&lt;/strong&gt; Now
&lt;a href=&quot;http://bitbucket.org/IanLewis/django-lifestream/&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;django-lifestream&lt;/code&gt;&lt;/a&gt;), I went
about implementing a simple comments interface that would allow users to make
comments on imported feed items. I wanted to support this in the admin in the
typical manner such that when you click on an item in the admin, you can see all
the comments and edit them from the item’s page.&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/django-admin-inline-forms</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/django-admin-inline-forms</guid>
    <pubDate>Sun, 09 Nov 2008 01:09:55 +0000</pubDate>
  </item>
  
  <item>
    <title>Feedparser and Django</title>
    
    <description>&lt;p&gt;Over the weekend at Python Onsen I worked on a lifestream web application using
Django and &lt;a href=&quot;http://www.feedparser.org/&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;feedparser&lt;/code&gt;&lt;/a&gt;. I was really impressed
with how simple &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;feedparser&lt;/code&gt; is to use and how easy it is to get unified results
from atom or RSS feeds. You simply import &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;feedparser&lt;/code&gt; and call
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;feedparser.parse&lt;/code&gt; to parse a feed from a URL.&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/feedparser-and-django</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/feedparser-and-django</guid>
    <pubDate>Thu, 30 Oct 2008 19:13:52 +0000</pubDate>
  </item>
  
  <item>
    <title>Python Onsen Oct. 2008</title>
    
    <description>&lt;p&gt;Last weekend I went to my second Python Onsen organized by
Nakai-san(&lt;a href=&quot;https://x.com/voluntas&quot;&gt;id:voluntas&lt;/a&gt;). I talked about Python Onsen in
&lt;a href=&quot;/en/python-onsen&quot;&gt;my first blog post&lt;/a&gt;. Python Onsen is a 3 day event (Fri, Sat,
Sun) but as before I only participated on Saturday and Sunday. This time I opted
to work on creating a lifestream web app using
&lt;a href=&quot;http://www.feedparser.org/&quot;&gt;feedparser&lt;/a&gt; and
&lt;a href=&quot;http://www.djangoproject.com/&quot;&gt;Django&lt;/a&gt;. feedparser is a snappy little parser
for reading RSS and Atom feeds. The result was &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;dlife&lt;/code&gt; which so far can parse a
set of feeds and show them on a user’s lifestream though it’s not in any way
user friendly yet (you have to update the feeds in the Django shell).&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/python_onsen_10-2009</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/python_onsen_10-2009</guid>
    <pubDate>Wed, 29 Oct 2008 17:12:18 +0000</pubDate>
  </item>
  
  <item>
    <title>Disqus Plugin</title>
    
    <description>&lt;p&gt;The first version of the &lt;a href=&quot;http://manual.b2evolution.net/Plugins/disqus_plugin&quot;&gt;Disqus plugin&lt;/a&gt; has been released!&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/title-1</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/title-1</guid>
    <pubDate>Wed, 29 Oct 2008 15:03:20 +0000</pubDate>
  </item>
  
  <item>
    <title>Ok/Cancel buttons with jqModal</title>
    
    <description>&lt;p&gt;I recently quit using &lt;a href=&quot;http://code.google.com/webtoolkit/&quot;&gt;Google Web Toolkit&lt;/a&gt;
and started using jQuery for a personal project of mine and I wanted to be able
to show some modal dialog boxes using jQuery. As it turns out there is an easy
to use plugin that does exactly this called
&lt;a href=&quot;http://dev.iceburg.net/jquery/jqModal/&quot;&gt;jqModal&lt;/a&gt;. jqModal makes it simple to
create a modal dialog by simply setting a CSS class on the tag you want to open
the dialog and on the tag in the dialog that you want to close it.&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/ok-cancel-buttons-with-jqmodal</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/ok-cancel-buttons-with-jqmodal</guid>
    <pubDate>Mon, 22 Sep 2008 00:12:22 +0000</pubDate>
  </item>
  
  <item>
    <title>jsonschema 0.2 alpha</title>
    
    <description>&lt;p&gt;I just released a new version of jsonschema 0.2 alpha over at &lt;a href=&quot;http://code.google.com/p/jsonschema&quot;&gt;http://code.google.com/p/jsonschema&lt;/a&gt;&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/jsonschema-0-2-alpha</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/jsonschema-0-2-alpha</guid>
    <pubDate>Sat, 06 Sep 2008 20:04:08 +0000</pubDate>
  </item>
  
  <item>
    <title>New Sweetcron Homepage</title>
    
    <description>&lt;p&gt;&lt;img src=&quot;/system/application/views/themes/boxy_but_good/images/credits.gif&quot; alt=&quot;Sweetcron&quot; /&gt;&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/new-sweetcron-homepage</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/new-sweetcron-homepage</guid>
    <pubDate>Wed, 03 Sep 2008 22:02:39 +0000</pubDate>
  </item>
  
  <item>
    <title>Twitter reply updates via e-mail</title>
    
    <description>&lt;p&gt;I just set up &lt;a href=&quot;http://www.plagger.org/&quot;&gt;Plagger&lt;/a&gt; to send me e-mails to my
cellphone and Gmail when there are updates to my replies rss feed on twitter.
This took way longer than anticipated because of how long it took to install and
configure &lt;a href=&quot;http://www.plagger.org/&quot;&gt;Plagger&lt;/a&gt; properly.&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/twitter-reply-updates-via-e-mail</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/twitter-reply-updates-via-e-mail</guid>
    <pubDate>Sat, 09 Aug 2008 19:10:52 +0000</pubDate>
  </item>
  
  <item>
    <title>Graphviz</title>
    
    <description>&lt;p&gt;Just played a bit with &lt;a href=&quot;http://www.graphviz.org/&quot;&gt;Graphviz&lt;/a&gt; and made some
simple graphs. Graphviz is an open source suite of programs for generating
graph diagrams from a number of text formats, the simplest of which is the dot
format.&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/graphviz</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/graphviz</guid>
    <pubDate>Sat, 09 Aug 2008 02:00:16 +0000</pubDate>
  </item>
  
  <item>
    <title>Bob&apos;s Talk on Erlang</title>
    
    <description>&lt;blockquote&gt;
  &lt;p&gt;&lt;em&gt;Update (2023-10-02): The video is no longer available.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
</description>
    
    <link>https://www.ianlewis.org/en/bob-s-talk-on-erlang</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/bob-s-talk-on-erlang</guid>
    <pubDate>Mon, 04 Aug 2008 20:20:37 +0000</pubDate>
  </item>
  
  <item>
    <title>Wanted: Dictionary program for Windows/Linux</title>
    
    <description>&lt;p&gt;I have wanted a good dictionary application that supports a number of
dictionaries/dictionary formats for studying Japanese but I’ve been sort of
frustrated that there is no single application that does what I would like. I
have looked mostly at &lt;a href=&quot;http://stardict.sourceforge.net/&quot;&gt;StarDict&lt;/a&gt; and
&lt;a href=&quot;http://epwing.sourceforge.net/&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;epwing&lt;/code&gt;&lt;/a&gt; because they are closest to the type of
dictionary I want. Specifically I have the following requirements:&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/wanted-dictionary-program-for-windows-li</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/wanted-dictionary-program-for-windows-li</guid>
    <pubDate>Sun, 03 Aug 2008 18:21:00 +0000</pubDate>
  </item>
  
  <item>
    <title>jsonschema mentioned on json.com</title>
    
    <description>&lt;p&gt;Kris Zyp (the author of the &lt;a href=&quot;http://tinyurl.com/32qd4v&quot;&gt;JSONSchema&lt;/a&gt; proposal)
mentioned
&lt;a href=&quot;http://hg.monologista.jp/json-schema/raw-file/41132f2b2b57/docs/jsonschema.html&quot;&gt;jsonschema&lt;/a&gt;
on his &lt;a href=&quot;http://www.json.com/2008/07/30/json-schema-for-python/&quot;&gt;blog&lt;/a&gt; at
json.com. Thanks Kris!!&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/jsonschema-mentioned-on-json-com</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/jsonschema-mentioned-on-json-com</guid>
    <pubDate>Thu, 31 Jul 2008 14:47:10 +0000</pubDate>
  </item>
  
  <item>
    <title>JSON Schema Validator 0.1a for Python</title>
    
    <description>&lt;blockquote&gt;
  &lt;p&gt;&lt;strong&gt;Update (2025-01-27):&lt;/strong&gt; Many of the links no longer work.&lt;/p&gt;
&lt;/blockquote&gt;
</description>
    
    <link>https://www.ianlewis.org/en/json-schema-validator-0-1a-for-python</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/json-schema-validator-0-1a-for-python</guid>
    <pubDate>Thu, 31 Jul 2008 01:01:32 +0000</pubDate>
  </item>
  
  <item>
    <title>Django Views</title>
    
    <description>&lt;p&gt;I was thinking about using &lt;a href=&quot;http://www.djangoproject.com&quot;&gt;Django&lt;/a&gt; for one of my
projects on &lt;a href=&quot;https://cloud.google.com/appengine&quot;&gt;App Engine&lt;/a&gt; because it seems like a
popular project and somewhat easy to use, but I’m not quite understanding yet
why it’s better to have helper functions rather than controller/handler classes
like &lt;a href=&quot;http://pylonshq.com/&quot;&gt;Pylons&lt;/a&gt; or GAE’s normal WSGI handling has. With
handler classes my controller might look like:&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/django_views</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/django_views</guid>
    <pubDate>Mon, 28 Jul 2008 01:15:30 +0000</pubDate>
  </item>
  
  <item>
    <title>Protocol Buffers</title>
    
    <description>&lt;p&gt;A few days ago &lt;a href=&quot;https://protobuf.dev/&quot;&gt;Protocol Buffers&lt;/a&gt; was released by Google
as an open source project. Protocol Buffers is a way to generate code for
objects that can be serialized to and deserialized from the Protocol Buffers
binary format. An implementation of the Protocol Buffers compiler which reads a
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.proto&lt;/code&gt; file and can output Java, Python, and C++ code. Because the format is a
binary format and the compiler can output in several languages, this would allow
for fast message passing between applications that may or may not be implemented
in the same language.&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/protocol-buffers</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/protocol-buffers</guid>
    <pubDate>Sat, 12 Jul 2008 20:22:09 +0000</pubDate>
  </item>
  
  <item>
    <title>Javascript Interpreter</title>
    
    <description>&lt;p&gt;I wanted a convenient way to test out some javascript by running it in a
browser and being able to play with it via an interpreter like python has. As
it turns out the almighty &lt;a href=&quot;http://bob.pythonmac.org/&quot;&gt;Bob&lt;/a&gt; created a nice
interpreter for playing around with &lt;a href=&quot;http://mochikit.com/&quot;&gt;Mochikit&lt;/a&gt;
but I wanted something a bit more generic that would allow me to import any
kind of javascript and play with it. It turns out this is really easy so I
added one simple function to the
&lt;a href=&quot;/assets/demos/files/view-source/view-source.html#interpreter/interpreter.js&quot;&gt;interpreter.js&lt;/a&gt;
file called importjs.&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/javascript-interpreter</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/javascript-interpreter</guid>
    <pubDate>Tue, 08 Jul 2008 19:45:46 +0000</pubDate>
  </item>
  
  <item>
    <title>Python Onsen</title>
    
    <description>&lt;p&gt;&lt;img src=&quot;/assets/images/gallery/dcf_0207_big.jpg&quot; alt=&quot;Table of Japanese food&quot; /&gt;&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/python-onsen</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/python-onsen</guid>
    <pubDate>Sun, 29 Jun 2008 10:36:21 +0000</pubDate>
  </item>
  
  <item>
    <title>Twitter Page Code</title>
    
    <description>&lt;p&gt;&lt;img src=&quot;/assets/images/gallery/twitter.png&quot; alt=&quot;Twitter&quot; /&gt;&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/twitter-page-code</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/twitter-page-code</guid>
    <pubDate>Thu, 19 Jun 2008 19:14:11 +0000</pubDate>
  </item>
  
  <item>
    <title>Ohloh</title>
    
    <description>&lt;p&gt;Just found out about &lt;a href=&quot;http://www.ohloh.net/&quot;&gt;Ohloh&lt;/a&gt;, which is an open-source
community website that allows users to give each other “kudos”, and the number
of kudos that you give and receive affects your standing within the open source
community.&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/ohloh</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/ohloh</guid>
    <pubDate>Thu, 19 Jun 2008 14:34:43 +0000</pubDate>
  </item>
  
  <item>
    <title>Google Developer Day 2008</title>
    
    <description>&lt;p&gt;I went to Google Developer Day 2008 in Yokohama Japan yesterday. The keynote
speech was pretty much the exact same info as was given at the
&lt;a href=&quot;http://jp.youtube.com/watch?v=vk1HvP7NO5w&quot;&gt;keynote&lt;/a&gt; at &lt;a href=&quot;http://code.google.com/events/io/&quot;&gt;Google
I/O&lt;/a&gt; where Google announced their direction,
moving forward the web as a platform.&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/google-developer-day-2009</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/google-developer-day-2009</guid>
    <pubDate>Wed, 11 Jun 2008 22:04:08 +0000</pubDate>
  </item>
  
  <item>
    <title>Gallery 2 plugin with TinyMCE</title>
    
    <description>&lt;p&gt;I made some changes to the &lt;a href=&quot;http://manual.b2evolution.net/Plugins/tinymce_plugin&quot;&gt;TinyMCE
plugin&lt;/a&gt; for
&lt;a href=&quot;http://www.b2evolution.net/&quot;&gt;b2evolution&lt;/a&gt; to support some callbacks which will
allow other b2evolution plugins to register TinyMCE plugins automatically. This
is especially useful for the &lt;a href=&quot;http://manual.b2evolution.net/Plugins/gallery2_plugin&quot;&gt;Gallery 2
plugin&lt;/a&gt; because it will
allow me to add a button that allows users to add photos from Gallery 2 to their
blog posts to TinyMCE automatically when the Gallery 2 plugin is installed.
Currently &lt;a href=&quot;http://manual.b2evolution.net/Plugins/gallery2_plugin#Using_the_Gallery2_Plugin_with_the_TinyMCE_Plugin&quot;&gt;it’s a pain to get it to
work&lt;/a&gt;
because the standard Gallery 2 image chooser button doesn’t work with TinyMCE
and installing it requires you to copy the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;g2image&lt;/code&gt; directory to another
location.&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/gallery2-plugin-with-tinymce</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/gallery2-plugin-with-tinymce</guid>
    <pubDate>Wed, 04 Jun 2008 18:18:21 +0000</pubDate>
  </item>
  
  <item>
    <title>Health related Japanese Vocab</title>
    
    <description>&lt;p&gt;Since I went to the doctor today I thought I would post some Japanese words that
are relatively new to me. Some I learned today and some I had learned before but
they all relate to illness or infirmity. Forgive the somewhat advanced and
somewhat gross nature of some of the words but I hope they could be useful to
someone looking to go to the Japanese Doctor.&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/health-related-japanese-vocab</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/health-related-japanese-vocab</guid>
    <pubDate>Sat, 31 May 2008 19:37:25 +0000</pubDate>
  </item>
  
  <item>
    <title>Google Developer Day 2008</title>
    
    <description>&lt;p&gt;&lt;a href=&quot;http://code.google.com/intl/ja/events/developerday/2008/home.html&quot;&gt;Google Developer Day Japan
2008&lt;/a&gt; is
being held on June 10th at Google’s offices in Shibuya and I’ve registered to
attend this year. There were a number of sessions that people could take part
in but I decided to register for a
&lt;a href=&quot;http://code.google.com/appengine/&quot;&gt;Google App Engine&lt;/a&gt; hackathon. I’m pretty
curious about App Engine since I’ve been working at becoming more familiar with
really newly evolving technologies and not necessarily ones that have been
around a while. Newly evolving technologies is something I’ve always felt I’ve
had to catch up on since starting programming in high school. Going to high
school with folks like Bob Ippolito (&lt;a href=&quot;http://www.mochikit.com&quot;&gt;Mochikit&lt;/a&gt;,
&lt;a href=&quot;http://undefined.org/python/#simplejson&quot;&gt;simplejson&lt;/a&gt;) and
&lt;a href=&quot;http://www.facebook.com/profile.php?id=5317298&quot;&gt;Konrad Rokicki&lt;/a&gt; who started
coding stuff when they were in early middle school didn’t help my self esteem.&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/limg-src-http-code-google-com-intl-ja-ev</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/limg-src-http-code-google-com-intl-ja-ev</guid>
    <pubDate>Thu, 29 May 2008 20:39:03 +0000</pubDate>
  </item>
  
  <item>
    <title>Google Analytics for Mobile Sites</title>
    
    <description>&lt;p&gt;I implemented tracking using &lt;a href=&quot;http://www.google.com/analytics/&quot;&gt;Google Analytics&lt;/a&gt; for my company’s mobile sites using a technique described by Peter van der Graff on &lt;a href=&quot;http://www.vdgraaf.info/google-analytics-without-javascript.html&quot;&gt;his site&lt;/a&gt;. The technique involves performing a GET to to an image on Google’s server and passing it a bunch of options. Incidentally this is because JavaScript can perform gets of images but not gets for any other kinds of content (as an aside, this kind of protection seems usless since the server could return any kind of content in wants to the JavaScript even though the GET has an image in the url. Maybe someone could enlighten me).&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/google-analytics-for-mobile-sites</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/google-analytics-for-mobile-sites</guid>
    <pubDate>Fri, 23 May 2008 20:13:41 +0000</pubDate>
  </item>
  
  <item>
    <title>Choosing Kanji</title>
    
    <description>&lt;p&gt;One of the things that makes Japanese hard is the writing system. Written
Japanese consists of essentially four alphabets, Kanji (borrowed chinese
characters (1,000 needed for literacy, 2000 base characters, about 5,000, give
or take a thousand, in active use)), Hiragana (Used for Japanese words (46
characters)), Katakana (Used for foreign words (46 characters)), and Roman
characters (foreign words, English (26 lowercase, 26 uppercase)).&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/choosing-kanji</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/choosing-kanji</guid>
    <pubDate>Sun, 20 Apr 2008 19:32:20 +0000</pubDate>
  </item>
  
  <item>
    <title>Gallery 2 for WordPress</title>
    
    <description>&lt;p&gt;I took a look at the &lt;a href=&quot;http://wpg2.galleryembedded.com/&quot;&gt;Gallery 2 plugin for
WordPress&lt;/a&gt; by &lt;a href=&quot;http://www.ozgreg.com/&quot;&gt;ozgreg&lt;/a&gt;
to get some ideas on how they had integrated Gallery 2 with the WordPress blog
engine and how I might be able to bring those features to
&lt;a href=&quot;http://www.b2evolution.net/&quot; title=&quot;b2evolution&quot;&gt;b2evolution&lt;/a&gt;. I felt somewhat bad
looking at it as I’ve worked on by own &lt;a href=&quot;http://manual.b2evolution.net/Plugins/gallery2_plugin&quot;&gt;Gallery 2 integration plugin for
b2evolution&lt;/a&gt; for about a
year and haven’t really taken more than a cursory look at the WordPress
counterpart. I felt even worse when I realized how slick it is compared to my,
comparatively, rather simple integration.&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/gallery2-for-wordpress</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/gallery2-for-wordpress</guid>
    <pubDate>Fri, 18 Apr 2008 11:51:03 +0000</pubDate>
  </item>
  
  <item>
    <title>Using less and grep with logs</title>
    
    <description>&lt;p&gt;Recently I’ve been doing a decent amount of debugging a database conversion
process and looking at log files on the Red Hat servers at work. This has meant
looking at some rather big (10 or so megabytes) log files. Normally I just fire
up vim when looking at text files but opening a text file in a text editor that
is a number of megabytes is a no-no since pretty much any text editor will load
the whole file.&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/using-less-and-grep-with-logs</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/using-less-and-grep-with-logs</guid>
    <pubDate>Thu, 17 Apr 2008 17:34:43 +0000</pubDate>
  </item>
  
  <item>
    <title>apt pinning</title>
    
    <description>&lt;p&gt;Many people who are new to &lt;a href=&quot;http://www.debian.org/&quot;&gt;Debian&lt;/a&gt; might be thinking
that Debian stable releases are slow. You are right. Many do look at this and
turn to &lt;a href=&quot;http://www.ubuntu.com/&quot;&gt;Ubuntu&lt;/a&gt; because of their relatively quick
releases. It’s true that Ubuntu does release “stable” versions more often but I
would encourage people to sit back down and give Debian another try. Especially
with the cool feature of Debian’s packaging system,
&lt;a href=&quot;http://en.wikipedia.org/wiki/Advanced_Packaging_Tool&quot;&gt;apt&lt;/a&gt;, called &lt;a href=&quot;http://wiki.debian.org/AptPinning&quot;&gt;apt
pinning&lt;/a&gt;.&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/apt_pinning</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/apt_pinning</guid>
    <pubDate>Tue, 15 Apr 2008 00:00:48 +0000</pubDate>
  </item>
  
  <item>
    <title>Using mercurial on windows with cygwin</title>
    
    <description>&lt;p&gt;So for the longest time, well, about 5 months, I have used the mercurial package
in Cygwin as my mercurial at work where I run windows on my desktop. I use
Cygwin as my terminal on windows because it’s Unix-like and the window command
line isn’t very good. No sane command/path completion nothing. Scripting is a
nightmare etc. Anyway, the reason I used it was because I was under the false
impression that all other mercurial installations wouldn’t play nice with Unix
paths.&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/using-mercurial-on-windows-with-cygwin</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/using-mercurial-on-windows-with-cygwin</guid>
    <pubDate>Fri, 04 Apr 2008 18:40:54 +0000</pubDate>
  </item>
  
  <item>
    <title>Mobile phones are not Desktops</title>
    
    <description>&lt;p&gt;While John C. Dvorak generally writes flamebait that you shouldn’t pay attention
to, there is usually a nugget of truth in his writing. This time Mr. Dvorak
points out that &lt;a href=&quot;http://www.pcmag.com/article2/0,2817,2278808,00.asp&quot;&gt;iPhones are not
desktops&lt;/a&gt;. He says iPhones
but he really means all mobile devices of various shapes and sizes from mobile
phones to laptops. The idea that mobiles are not desktops might seem obvious.&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/mobile-phones-are-not-desktops</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/mobile-phones-are-not-desktops</guid>
    <pubDate>Mon, 31 Mar 2008 23:28:33 +0000</pubDate>
  </item>
  
  <item>
    <title>Website Update</title>
    
    <description>&lt;p&gt;Today I finally updated my website and gave it a new look. I hope everyone likes
it. The theme is a customized version of the “Simple Zen” theme by &lt;a href=&quot;http://www.blog.hemminga.net/&quot;&gt;Foppe
Hemminga&lt;/a&gt;. I thought it would work well since I
wanted a theme that where the header would expand no matter what resolution you
view it at and wasn’t a fixed pixel size. The fact that’s it’s a zen theme and I
live in Japan just makes it all the better. There are still some rough edges to
work out but they should be fixed within the week.&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/b2evo20update</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/b2evo20update</guid>
    <pubDate>Mon, 31 Mar 2008 01:32:46 +0000</pubDate>
  </item>
  
  <item>
    <title>BBC Open Source</title>
    
    <description>&lt;p&gt;I took a look at the &lt;a href=&quot;http://www.google.com/&quot; title=&quot;Google&quot;&gt;Google&lt;/a&gt; summer of code &lt;a href=&quot;http://code.google.com/soc/2008&quot;&gt;mentoring organizations for 2008&lt;/a&gt; and was surprised to see BBC research listed. They were probably previous participants but it seems that BBC maintains a number of open source projects on their &lt;a href=&quot;http://www.bbc.co.uk/opensource/&quot;&gt;open source page&lt;/a&gt;. The most notable ones seem to be the ones that they are going to use the interns for, &lt;a href=&quot;http://www.bbc.co.uk/opensource/projects/kamaelia/&quot;&gt;Kamaelia&lt;/a&gt;, which is apparently a test system for large scale media distribution, and &lt;a href=&quot;http://www.bbc.co.uk/opensource/projects/dirac/&quot;&gt;Dirac&lt;/a&gt;, an open source video codec. All in all, some pretty cool stuff.&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/bbc_open_source</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/bbc_open_source</guid>
    <pubDate>Tue, 18 Mar 2008 12:09:20 +0000</pubDate>
  </item>
  
  <item>
    <title>Mercurial and named branches and hgweb</title>
    
    <description>&lt;p&gt;&lt;a href=&quot;http://www.selenic.com/mercurial/&quot;&gt;Mercurial&lt;/a&gt; is a nice distributed SCM system
written in Python which I have been using at work and at on OSS projects for a
little while now. &lt;a href=&quot;http://www.selenic.com/mercurial/&quot;&gt;Mercurial&lt;/a&gt; allows three
types of branching, cloning, named branches, and local branches. Each of these
has it’s uses but I have only really used cloning and named branches in my own
development.&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/hg_and_named_branches_in_hgweb</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/hg_and_named_branches_in_hgweb</guid>
    <pubDate>Wed, 20 Feb 2008 12:19:59 +0000</pubDate>
  </item>
  
  <item>
    <title>hg email and gmail</title>
    
    <description>&lt;p&gt;I just set up my e-mail settings with
&lt;a href=&quot;http://www.selenic.com/mercurial/&quot;&gt;Mercurial&lt;/a&gt; so that I can e-mail patches via
my &lt;a href=&quot;http://www.google.com/mail/&quot;&gt;Gmail&lt;/a&gt; account. I have
&lt;a href=&quot;http://www.debian.org/&quot;&gt;Debian&lt;/a&gt; installed on my machine which has
&lt;a href=&quot;http://www.exim.org/&quot;&gt;exim&lt;/a&gt; installed by default so it was pretty easy to set
up. I’m not terribly versed at setting up mailing agents so I basically
followed &lt;a href=&quot;http://wiki.debian.org/GmailAndExim4&quot;&gt;these instructions&lt;/a&gt; on the
&lt;a href=&quot;http://wiki.debian.org/&quot;&gt;Debian Wiki&lt;/a&gt;. After getting that set up it’s easy to
set up Mercurial to use exim4 since it’s a drop in replacement for
&lt;a href=&quot;http://www.sendmail.org/&quot;&gt;sendmail&lt;/a&gt;.&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/hg_email_and_gmail</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/hg_email_and_gmail</guid>
    <pubDate>Tue, 19 Feb 2008 00:41:16 +0000</pubDate>
  </item>
  
  <item>
    <title>Backup with rsync</title>
    
    <description>&lt;p&gt;I wanted to have a simple incremental backup system I could use on my machine to
back up to an external drive so I came across &lt;a href=&quot;http://benno.id.au/blog/2007/05/30/rsync-backup&quot;&gt;this
post&lt;/a&gt; on &lt;a href=&quot;http://benno.id.au/blog/&quot;&gt;Benno’s
blog&lt;/a&gt;. Basically it involves using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;rsync&lt;/code&gt; with the
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--link-dest&lt;/code&gt; option to compare files you are backing up against a previous
backup and only create new copies when the files have been modified since the
previous backup. The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;rsync&lt;/code&gt; command would look something like the following:&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/backup_with_rsync</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/backup_with_rsync</guid>
    <pubDate>Fri, 15 Feb 2008 14:18:00 +0000</pubDate>
  </item>
  
  <item>
    <title>MochiKit does makes java suck less</title>
    
    <description>&lt;p&gt;So the last few days I’ve been playing around with
&lt;a href=&quot;http://www.mochikit.com/&quot;&gt;MochiKit&lt;/a&gt; and working with Javascript. Until now I
have done some JavaScript here and there but not too much. MochiKit seems to
make it a lot easier by providing you with lots of useful functions for things
you do often. In fact it’s so popular that I have a hard time explaining to
myself why I hadn’t tried to use it up until now. I’m certainly not on the
bleeding edge here.&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/javascript_and_the_this_reference</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/javascript_and_the_this_reference</guid>
    <pubDate>Fri, 21 Dec 2007 22:58:44 +0000</pubDate>
  </item>
  
  <item>
    <title>Bob Ippolito</title>
    
    <description>&lt;p&gt;I found out today that the principle author of a popular
Javascript/&lt;a href=&quot;http://en.wikipedia.org/wiki/AJAX&quot;&gt;AJAX&lt;/a&gt; library
&lt;a href=&quot;http://www.mochikit.com/&quot;&gt;Mochikit&lt;/a&gt; is my former highschool classmate
&lt;a href=&quot;http://bob.pythonmac.org/&quot;&gt;Bob Ippolito&lt;/a&gt;. I remember him being pretty smart. I
supposed he would make a name for himself in some CS circles and it looks like
he has. He is also apparently a co-founder of
&lt;a href=&quot;http://mochimedia.com/&quot;&gt;Mochi Media&lt;/a&gt;, a company that makes products for content
creators. &lt;a href=&quot;http://www.mochibot.com/&quot;&gt;Mochibot&lt;/a&gt; can be used to track usage of
&lt;a href=&quot;http://www.adobe.com/products/flash/&quot;&gt;Adobe Flash&lt;/a&gt; content. It looks like they
are moving into some advertising space by creating an advertising system for
casual online games.&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/bob_ippolito</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/bob_ippolito</guid>
    <pubDate>Mon, 17 Dec 2007 14:49:21 +0000</pubDate>
  </item>
  
  <item>
    <title>cp interactive copy</title>
    
    <description>&lt;p&gt;Is it just me or has the behavior of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cp&lt;/code&gt; in Linux distributions changed
recently? &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cp&lt;/code&gt; is non-interactive by default so a lot of people, myself
included, set an alias to include the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-i&lt;/code&gt; flag so that &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cp&lt;/code&gt; was interactive by
default.&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/cp_interactive_copy</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/cp_interactive_copy</guid>
    <pubDate>Sat, 24 Nov 2007 18:50:40 +0000</pubDate>
  </item>
  
  <item>
    <title>Setting output of a program to a variable in Windows Batch</title>
    
    <description>&lt;p&gt;I recently had to do this to get
&lt;a href=&quot;http://tortoisesvn.tigris.org/TortoiseMerge.html&quot;&gt;TortoiseMerge&lt;/a&gt; working with
&lt;a href=&quot;http://www.selenic.com/mercurial/&quot;&gt;Mercurial&lt;/a&gt; within
&lt;a href=&quot;http://www.cygwin.com/&quot;&gt;Cygwin&lt;/a&gt;. It turned out to be pretty easy and I
couldn’t believe that a
&lt;a href=&quot;http://www.infionline.net/~wtnewton/batch/batchfaq.html#9&quot;&gt;lot&lt;/a&gt;
&lt;a href=&quot;http://www.student.northpark.edu/pemente/sed/bat_env.htm#sed&quot;&gt;of&lt;/a&gt;
&lt;a href=&quot;http://www.tomshardware.com/forum/230090-45-windows-batch-file-output-program-variable&quot;&gt;people&lt;/a&gt;
were saying that you had to route the output to a temporary file and then read
it back into your program or some such garbage. Anyway, behold!!&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/setting_output_of_a_program_to_a_variabl</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/setting_output_of_a_program_to_a_variabl</guid>
    <pubDate>Wed, 07 Nov 2007 18:03:39 +0000</pubDate>
  </item>
  
  <item>
    <title>Learning GTK2.0</title>
    
    <description>&lt;p&gt;Today I’ve been playing around with writing programs in
&lt;a href=&quot;http://www.gtk.org/&quot;&gt;GTK 2.0&lt;/a&gt;. This has been on my TODO list for a really long
time, almost since college, but I’ve never got around to it. I’ve revived my old
project &lt;a href=&quot;http://gorbital.sourceforge.net/&quot;&gt;gorbital&lt;/a&gt; and decided to rewrite it
using GTK 2.0. I originally wrote it in C++ using &lt;a href=&quot;http://www.gtkmm.org/&quot;&gt;gtkmm&lt;/a&gt;
for GTK 1.0. But GTK 1.0 is long since dead. Even my beloved
&lt;a href=&quot;http://www.gnucash.org/&quot;&gt;GnuCash&lt;/a&gt; has finally made it to the world of GTK 2.0
making it the last application I use that has made the switch
(&lt;a href=&quot;http://www.pidgin.im/&quot;&gt;Gaim&lt;/a&gt; being the first).&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/learning_gtk2_0</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/learning_gtk2_0</guid>
    <pubDate>Sun, 21 Oct 2007 13:25:24 +0000</pubDate>
  </item>
  
  <item>
    <title>Internet Explorer is CRAP!!</title>
    
    <description>&lt;p&gt;Basically the title says it all. Since I started doing web development I’ve lost count of the number of bugs that I’ve found in Internet Explorer but I want to highlight a couple that were especially annoying to me.&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/internet_explorer_is_crap</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/internet_explorer_is_crap</guid>
    <pubDate>Tue, 11 Sep 2007 18:29:20 +0000</pubDate>
  </item>
  
  <item>
    <title>Returning Arrays in WSDL</title>
    
    <description>&lt;p&gt;This week I’ve been working on setting up several web service for a project I’m
working on for work. Because we are creating these web services from scratch we
had to start by creating a &lt;a href=&quot;http://en.wikipedia.org/wiki/WSDL&quot;&gt;WSDL&lt;/a&gt; file to
describe the web service and it’s functions.&lt;/p&gt;
</description>
    
    <link>https://www.ianlewis.org/en/returning_arrays_in_wsdl</link>
    <guid isPermaLink="true">https://www.ianlewis.org/en/returning_arrays_in_wsdl</guid>
    <pubDate>Tue, 24 Jul 2007 18:41:28 +0000</pubDate>
  </item>
  
</channel>
</rss>
