<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Software and Opinions » Default</title>
	
	<link>http://ianloic.com</link>
	<description>from Ian McKellar</description>
	<lastBuildDate>Wed, 07 Sep 2011 21:48:48 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
	
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/ianloic" /><feedburner:info uri="ianloic" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://ianloic.com/?pushpress=hub" /><creativeCommons:license>http://creativecommons.org/licenses/by-sa/3.0/</creativeCommons:license><item>
		<title>LXC on Ubuntu 11.04 Server</title>
		<link>http://feedproxy.google.com/~r/ianloic/~3/JONE7uSGyV0/</link>
		<comments>http://ianloic.com/2011/07/22/lxc-on-ubuntu-11-04-server/#comments</comments>
		<pubDate>Fri, 22 Jul 2011 18:08:43 +0000</pubDate>
		<dc:creator>Ian McKellar</dc:creator>
				<category><![CDATA[Default]]></category>

		<guid isPermaLink="false">http://ianloic.com/?p=395</guid>
		<description><![CDATA[For a while I&#8217;ve been interested in Linux Containers (LXC), new way of providing Linux virtual machines on Linux hosts. Unlike machine virtualization systems like Xen, VMWare, KVM and VirtualBox, LXC is an OS-level virtualization system. Instead of booting a &#8230; <a href="http://ianloic.com/2011/07/22/lxc-on-ubuntu-11-04-server/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>For a while I&#8217;ve been interested in <a href="http://lxc.sourceforge.net/">Linux Containers</a> (LXC), new way of providing Linux virtual machines on Linux hosts. Unlike machine virtualization systems like <a href="http://www.xen.org">Xen</a>, <a href="http://www.vmware.com/">VMWare</a>, <a href="http://www.linux-kvm.org/">KVM</a> and <a href="http://www.virtualbox.org/">VirtualBox</a>, LXC is an <a href="http://en.wikipedia.org/wiki/Operating_system-level_virtualization">OS-level virtualization</a> system. Instead of booting a complete disk image Linux Containers share the same kernel as the host and typically use a filesystem that is a sub-tree of the host&#8217;s. I&#8217;d previously tried to get this running on a machine that was connected by WiFi, but basically that doesn&#8217;t work. Bridged network interfaces don&#8217;t play nicely with wireless network interfaces. I just set up a machine on wired ethernet, found a <a href="http://www.stgraber.org/2011/05/04/state-of-lxc-in-ubuntu-natty/">great introductory article</a>, and I&#8217;m up and running.</p>
<p><a href="http://www.stgraber.org/about-me/">Stéphane Graber</a>&#8216;s article is great, but it hides a bunch of the details away in a <a href="http://www.stgraber.org/download/lxc-demo.sh">script</a> he wrote. Here I&#8217;m going to explain how I got LXC up and running on my Ubuntu 10.04 system as simply as possible.</p>
<p><strong>Install the required packages</strong><br />
Everything you need to set up and run LXC is part of Ubuntu these days, but it&#8217;s not all installed by default. Specifically you need the LXC tools, debootstrap (which can create new Ubuntu / Debian instances) and the Linux bridge utilities.</p>
<pre>apt-get install lxc debootstrap bridge-utils</pre>
<p><strong>Set up the network</strong><br />
To put the containers on the network we use a bridge. This is a virtual ethernet network in the kernel that passes ethernet frames back and forth between the containers and the physical network. Once we&#8217;ve set this up our current primary network interface (<code>eth0</code>) becomes just a conduit for the bridge (<code>br0</code>) so the bridge should be used as the new primary interface.</p>
<p>Add the bridge in <code>/etc/networking/interfaces</code>:</p>
<pre># LXC bridge
auto br0
iface br0 inet dhcp
    bridge_ports eth0
    bridge_stp off
    bridge_fd 0
    bridge_maxwait 0</pre>
<p>And change <code>eth0</code> to be manually configured, ie: it doesn&#8217;t DHCP:</p>
<pre>auto eth0
iface eth0 inet manual</pre>
<p>Now bring up the interface:</p>
<pre>ifup br0</pre>
<p><strong>Set up Control Groups</strong><br />
<a href="http://en.wikipedia.org/wiki/Cgroups"> Control Groups</a> are a fairly new Linux mechanism for isolating groups of processes as well as managing the resources allocated to them. The feature is exposed to userland via a filesystem that must be mounted, so put this in your <code>/etc/fstab</code>:</p>
<pre>cgroup          /cgroup         cgroup</pre>
<p>Create the mount point, and mount it:</p>
<pre>mkdir /cgroup
mount /cgroup</pre>
<p><strong>Now we&#8217;re ready to create containers</strong><br />
An LXC container is a directory under <code>/var/lib/lxc</code>. That directory contains a configuration file named <code>config</code>, a filesystem table called <code>fstab</code> and a root filesystem called <code>rootfs</code>. The easiest way to do that is to use the <code>lxc-create</code> script. First we create a configuration file that describes the networking configuration, let&#8217;s call it <code>network.conf</code>:</p>
<pre>lxc.network.type = veth
lxc.network.flags = up
lxc.network.link = br0</pre>
<p>and then run <code>lxc-create</code> to build the container:</p>
<pre>lxc-create -n mycontainer -t natty -f network.conf</pre>
<p>Note, <code>-n</code> let&#8217;s you specify the container name (ie: the directory under <code>/var/lib/lxc</code>), <code>-f</code> lets you specify a base configuration file and <code>-t</code> lets you indicate which template to use.</p>
<p>Container templates are implemented as scripts under <code>/usr/lib/lxc/templates</code>. Given a destination path they will install a base Linux system customized to run in LXC. There are template scripts to install Fedora, Debian and recent Ubuntus as well as minimal containers with just busybox or an sshd. Template scripts cache completed root filesystems under <code>/var/cache/lxc</code>. I&#8217;ve found the container template scripts to be interesting and quite readable.</p>
<p><strong>Starting a container</strong><br />
Starting the container is as simple as:</p>
<pre>lxc-start --name mycontainer --daemon</pre>
<p>If you leave off the <code>--daemon</code> then you&#8217;ll be presented with the container&#8217;s console. Getting a console is as simple as:</p>
<pre>lxc-console --name mycontainer</pre>
<p><strong>Keeping containers straight</strong><br />
Each time a container is started it will be allocated a random MAC (ethernet) address. This means that it&#8217;ll be seen by your network as a different machine each time it&#8217;s started and it&#8217;ll be DHCPed a new address each time. That&#8217;s probably not what you want. When it requests an address from the DHCP server your container will pass along its hostname (eg: <code>mycontainer</code>). If your DHCP server can be configured to allocate addresses based on hostname then you can use that. Mine doesn&#8217;t so I assign static ethernet addresses to my containers. There&#8217;s a class of ethernet addresses that are <i>&#8220;locally administered addresses&#8221;</i>. These have a most-significant byte of <code>xxxxxxxx10</code>, ie: <code>x2</code>, <code>x6</code>, <code>xA</code><br />
or <code>xE</code>. These addresses will never be programmed into a network card. I chose an arbitrary MAC address block and started allocating addresses to containers. They&#8217;re allocated by adding the following line after the network configuration in the <code>/var/lib/lxc/mycontainer/config</code> file:</p>
<pre>lxc.network.hwaddr = 66:5c:a1:ab:1e:01</pre>
<p><strong>Managing your containers</strong><br />
There are a few handy tools for container management, beyond the <code>lxc-start</code> and <code>lxc-console</code> mentioned before.</p>
<p><code>lxc-stop --name mycontainer</code> does what you&#8217;d probably expect.</p>
<p><code>lxc-ls</code> lists available containers on one line and running containers on the next. It&#8217;s a shell script so you can read it and work out how to find which containers are running in your own scripts.</p>
<p><code>lxc-ps --lxc</code> lists all process across all containers.</p>
<p>There are more like <code>lxc-checkpoint</code>, <code>lxc-freeze</code> and <code>lxc-unfreeze</code> that look pretty exciting but I haven&#8217;t had a chance to play with them. There are also a set of tools for restricting a container&#8217;s access to resources so that you can prioritize some above others. That&#8217;s a story for another day.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/ianloic?a=JONE7uSGyV0:tl6TL4B9u3k:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/ianloic?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ianloic?a=JONE7uSGyV0:tl6TL4B9u3k:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/ianloic?i=JONE7uSGyV0:tl6TL4B9u3k:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ianloic?a=JONE7uSGyV0:tl6TL4B9u3k:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/ianloic?i=JONE7uSGyV0:tl6TL4B9u3k:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ianloic?a=JONE7uSGyV0:tl6TL4B9u3k:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/ianloic?d=dnMXMwOfBR0" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/ianloic/~4/JONE7uSGyV0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://ianloic.com/2011/07/22/lxc-on-ubuntu-11-04-server/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://ianloic.com/2011/07/22/lxc-on-ubuntu-11-04-server/</feedburner:origLink></item>
		<item>
		<title>We already have information, why do we need more data?</title>
		<link>http://feedproxy.google.com/~r/ianloic/~3/dYwlCbq2LOU/</link>
		<comments>http://ianloic.com/2011/07/15/we-already-have-information-why-do-we-need-more-data/#comments</comments>
		<pubDate>Fri, 15 Jul 2011 17:33:25 +0000</pubDate>
		<dc:creator>Ian McKellar</dc:creator>
				<category><![CDATA[Default]]></category>
		<category><![CDATA[gadgets]]></category>
		<category><![CDATA[health]]></category>

		<guid isPermaLink="false">http://ianloic.com/?p=388</guid>
		<description><![CDATA[I love gadgets and metrics and pretty graphs. I&#8217;ve been using Endomondo to track my cycling, primarily my commute. I know it&#8217;s about 6.5km an I ride it in between 22 and 26 minutes. I can even share or embed &#8230; <a href="http://ianloic.com/2011/07/15/we-already-have-information-why-do-we-need-more-data/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><img src="http://ianloic.com/wp-content/uploads/2011/07/jawboneup.jpg" alt="Jawbone Up" title="Jawbone Up" width="600" height="300" class="alignnone size-full wp-image-393" /><br />
I love gadgets and metrics and pretty graphs. I&#8217;ve been using Endomondo to track my cycling, primarily my commute. I know it&#8217;s about 6.5km an I ride it in between 22 and 26 minutes. I can even <a href="http://www.endomondo.com/workouts/kK77uTOvdOM">share or embed my workout here</a>. I love that shit. When I get to work in 21 minutes I feel awesome. What it <i>doesn&#8217;t</i> tell me is that riding to work is good for my health. I don&#8217;t need a fancy app on my $500 mobile phone to tell me that.</p>
<p>Fancy pedometers like the <a href="http://www.fitbit.com/product">Fitbit</a> or Jawbone&#8217;s newly announced <a href="http://up.jawbone.com/up/preview">Up</a> are neat gadgets, but are they really going to help anyone become healthier? More importantly are they going to help stem the slide of <a href="http://en.wikipedia.org/wiki/Obesity_in_Australia">some</a> <a href="http://en.wikipedia.org/wiki/Obesity_in_the_United_States">countries</a> into unhealthy patterns like obesity?</p>
<p>The target market for these devices is affluent and health conscious. They already know that they should be eating less fat, more fiber and exercising more. They can afford a good bicycle, a personal trainer or <a href="http://www.vibramfivefingers.com/">fancy running shoes</a>. Anyone who is forking over a hundred dollars for a pedometer already knows more about the impact of their lifestyle on their health than these gadgets will give them.</p>
<p>These gadgets aren&#8217;t doing anything to educate less health literate Americans about living healthier lifestyles. They aren&#8217;t doing anything to address childhood nutrition here or around the world. They&#8217;re a distraction from the real problems we face.</p>
<p>I still kind of want one.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/ianloic?a=dYwlCbq2LOU:BKmroYVtNbM:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/ianloic?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ianloic?a=dYwlCbq2LOU:BKmroYVtNbM:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/ianloic?i=dYwlCbq2LOU:BKmroYVtNbM:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ianloic?a=dYwlCbq2LOU:BKmroYVtNbM:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/ianloic?i=dYwlCbq2LOU:BKmroYVtNbM:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ianloic?a=dYwlCbq2LOU:BKmroYVtNbM:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/ianloic?d=dnMXMwOfBR0" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/ianloic/~4/dYwlCbq2LOU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://ianloic.com/2011/07/15/we-already-have-information-why-do-we-need-more-data/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://ianloic.com/2011/07/15/we-already-have-information-why-do-we-need-more-data/</feedburner:origLink></item>
		<item>
		<title>The full Bradley Manning / Adrian Lamo logs</title>
		<link>http://feedproxy.google.com/~r/ianloic/~3/s5KAFLFwQZQ/</link>
		<comments>http://ianloic.com/2011/07/13/the-full-bradley-manning-adrian-lamo-logs/#comments</comments>
		<pubDate>Wed, 13 Jul 2011 21:43:07 +0000</pubDate>
		<dc:creator>Ian McKellar</dc:creator>
				<category><![CDATA[Default]]></category>
		<category><![CDATA[lgbt]]></category>
		<category><![CDATA[politics]]></category>

		<guid isPermaLink="false">http://ianloic.com/?p=383</guid>
		<description><![CDATA[(06:08:53 PM) info@adrianlamo.com: What’s your greatest fear? (06:09:24 PM) bradass87: dying without ever truly living via Manning-Lamo Chat Logs Revealed &#124; Threat Level &#124; Wired.com. Everyone should read (apparently) this full chat log. In it Manning, a 22 year old &#8230; <a href="http://ianloic.com/2011/07/13/the-full-bradley-manning-adrian-lamo-logs/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><strong>(06:08:53 PM) info@adrianlamo.com:</strong> <em>What’s your greatest fear?</em><br />
<strong>(06:09:24 PM) bradass87:</strong> <em>dying without ever truly living</em><br />
via <a href="http://www.wired.com/threatlevel/2011/07/manning-lamo-logs">Manning-Lamo Chat Logs Revealed | Threat Level | Wired.com</a>.</p>
<p>Everyone should read (apparently) this <a href="http://www.wired.com/threatlevel/2011/07/manning-lamo-logs">full chat log</a>. In it Manning, a 22 year old depressed man, questioning his gender reached out to Lamo for someone to talk to. While Manning poured out his story of growing up with abusive, alcoholic parents Lamo repeatedly assured him that he was safe to talk to. Manning denied having a &#8220;doctrine&#8221;, but he did have a clear sense of morality:<br />
<strong>(1:11:54 PM) bradass87:</strong> <em>and… its important that it gets out… i feel, for some bizarre reason</em><br />
<strong>(1:12:02 PM) bradass87:</strong> <em>it might actually change something</em><br />
<strong>(1:13:10 PM) bradass87:</strong> <em>i just… dont wish to be a part of it… at least not now… im not ready… i wouldn’t mind going to prison for the rest of my life, or being executed so much, if it wasn’t for the possibility of having pictures of me… plastered all over the world press… as a boy…<br />
</em><em></em></p>
<p style="color: inherit; font: normal normal normal 15px/normal 'Helvetica Neue', Helvetica, Arial, sans-serif; font-style: inherit; font-weight: 300; line-height: 1.625; margin-bottom: 1.625em; display: inline !important;">via <a style="color: #1b8be0; font: normal normal normal 15px/normal 'Helvetica Neue', Helvetica, Arial, sans-serif; font-style: inherit; font-weight: inherit; line-height: 1.625; text-decoration: none;" href="http://www.wired.com/threatlevel/2011/07/manning-lamo-logs">Manning-Lamo Chat Logs Revealed | Threat Level | Wired.com</a>.</p>
<p>When Lamo was chatting to him, Manning had been demoted and had lost his access to classified networks. Any good or ill he had done by leaking to WikiLeaks was over. He was going to be discharged. He&#8217;d started to set up his <a title="Breanna Manning" href="https://twitter.com/#!/bmanningfm">identity</a> as a woman. He was just 22, trying to serve his country, serve humanity and work out who he was.<a href="http://ianloic.com/wp-content/uploads/2011/07/manning-newsom.jpg"><img class="alignright size-full wp-image-385" title="manning-newsom" src="http://ianloic.com/wp-content/uploads/2011/07/manning-newsom.jpg" alt="" width="604" height="434" /></a></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/ianloic?a=s5KAFLFwQZQ:WgNzHTNXEy8:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/ianloic?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ianloic?a=s5KAFLFwQZQ:WgNzHTNXEy8:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/ianloic?i=s5KAFLFwQZQ:WgNzHTNXEy8:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ianloic?a=s5KAFLFwQZQ:WgNzHTNXEy8:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/ianloic?i=s5KAFLFwQZQ:WgNzHTNXEy8:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ianloic?a=s5KAFLFwQZQ:WgNzHTNXEy8:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/ianloic?d=dnMXMwOfBR0" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/ianloic/~4/s5KAFLFwQZQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://ianloic.com/2011/07/13/the-full-bradley-manning-adrian-lamo-logs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://ianloic.com/2011/07/13/the-full-bradley-manning-adrian-lamo-logs/</feedburner:origLink></item>
		<item>
		<title>In the future, Gizmodo will have their own war correspondents</title>
		<link>http://feedproxy.google.com/~r/ianloic/~3/NSLu3QkRcoo/</link>
		<comments>http://ianloic.com/2011/07/12/in-the-future-gizmodo-will-have-their-own-war-correspondents/#comments</comments>
		<pubDate>Wed, 13 Jul 2011 01:04:17 +0000</pubDate>
		<dc:creator>Ian McKellar</dc:creator>
				<category><![CDATA[Default]]></category>

		<guid isPermaLink="false">http://ianloic.com/?p=378</guid>
		<description><![CDATA[In the future, Gizmodo will have their own war correspondents Oh wait. We&#8217;re already in the future.]]></description>
			<content:encoded><![CDATA[<p><a href="http://gizmodo.com/5819801/this-is-war-watch-the-libyan-revolution-explode-through-the-lens-of-a-helmet-cam--part-i">In the future, Gizmodo will have their own war correspondents</a></p>
<p>Oh wait. We&#8217;re already in the future.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/ianloic?a=NSLu3QkRcoo:_2PWpJ0Py_8:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/ianloic?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ianloic?a=NSLu3QkRcoo:_2PWpJ0Py_8:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/ianloic?i=NSLu3QkRcoo:_2PWpJ0Py_8:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ianloic?a=NSLu3QkRcoo:_2PWpJ0Py_8:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/ianloic?i=NSLu3QkRcoo:_2PWpJ0Py_8:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ianloic?a=NSLu3QkRcoo:_2PWpJ0Py_8:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/ianloic?d=dnMXMwOfBR0" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/ianloic/~4/NSLu3QkRcoo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://ianloic.com/2011/07/12/in-the-future-gizmodo-will-have-their-own-war-correspondents/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://ianloic.com/2011/07/12/in-the-future-gizmodo-will-have-their-own-war-correspondents/</feedburner:origLink></item>
		<item>
		<title>The Current State of OAuth 2 from @aaronpk</title>
		<link>http://feedproxy.google.com/~r/ianloic/~3/_ZQn86e5VfU/</link>
		<comments>http://ianloic.com/2011/07/11/the-current-state-of-oauth-2-from-aaronpk/#comments</comments>
		<pubDate>Mon, 11 Jul 2011 20:28:39 +0000</pubDate>
		<dc:creator>Ian McKellar</dc:creator>
				<category><![CDATA[Default]]></category>
		<category><![CDATA[oauth]]></category>

		<guid isPermaLink="false">http://ianloic.com/?p=375</guid>
		<description><![CDATA[The Current State of OAuth 2 View more presentations from Aaron Parecki A pretty good summary of the current state (as of June 2011) of OAuth 2. I wish I&#8217;d been able to see the talk or find a video &#8230; <a href="http://ianloic.com/2011/07/11/the-current-state-of-oauth-2-from-aaronpk/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div style="width:425px" id="__ss_8391407"> <strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/aaronpk/the-current-state-of-oauth-2" title="The Current State of OAuth 2" target="_blank">The Current State of OAuth 2</a></strong> <iframe src="http://www.slideshare.net/slideshow/embed_code/8391407" width="425" height="355" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>
<div style="padding:5px 0 12px"> View more <a href="http://www.slideshare.net/" target="_blank">presentations</a> from <a href="http://www.slideshare.net/aaronpk" target="_blank">Aaron Parecki</a> </div>
</p></div>
<p>A pretty good summary of the current state (as of June 2011) of OAuth 2. I wish I&#8217;d been able to see the talk or find a video online.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/ianloic?a=_ZQn86e5VfU:yCFq8oCabtk:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/ianloic?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ianloic?a=_ZQn86e5VfU:yCFq8oCabtk:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/ianloic?i=_ZQn86e5VfU:yCFq8oCabtk:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ianloic?a=_ZQn86e5VfU:yCFq8oCabtk:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/ianloic?i=_ZQn86e5VfU:yCFq8oCabtk:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ianloic?a=_ZQn86e5VfU:yCFq8oCabtk:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/ianloic?d=dnMXMwOfBR0" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/ianloic/~4/_ZQn86e5VfU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://ianloic.com/2011/07/11/the-current-state-of-oauth-2-from-aaronpk/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://ianloic.com/2011/07/11/the-current-state-of-oauth-2-from-aaronpk/</feedburner:origLink></item>
		<item>
		<title>Emissions taxing and trading in Australia</title>
		<link>http://feedproxy.google.com/~r/ianloic/~3/yhbQ2B2GK3Q/</link>
		<comments>http://ianloic.com/2011/07/10/emissions-taxing-and-trading-in-australia/#comments</comments>
		<pubDate>Mon, 11 Jul 2011 00:34:11 +0000</pubDate>
		<dc:creator>Ian McKellar</dc:creator>
				<category><![CDATA[Default]]></category>
		<category><![CDATA[australia]]></category>
		<category><![CDATA[environment]]></category>
		<category><![CDATA[politics]]></category>

		<guid isPermaLink="false">http://ianloic.com/?p=367</guid>
		<description><![CDATA[After many years of proposals, counter-proposals, coups and general disappointment the Australian Government has announced its scheme to allow the economic impact of carbon pollution to be managed by the free market. I&#8217;m really really proud that as a country we&#8217;ve reached &#8230; <a href="http://ianloic.com/2011/07/10/emissions-taxing-and-trading-in-australia/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><img style="float:right;border:1px solid black;" src="http://farm3.static.flickr.com/2124/2078482176_7c15afe35f_m.jpg" width="179" height="240" alt="POLLUTION"/> After many years of <a href="http://www.abc.net.au/news/stories/2007/07/17/1980126.htm">proposals</a>, <a href="http://en.wikipedia.org/wiki/Carbon_Pollution_Reduction_Scheme">counter-proposals</a>, <a href="http://en.wikipedia.org/wiki/Kevin_Rudd#Leadership_challenge_and_resignation">coups</a> and general disappointment the Australian Government has announced its <a href="http://www.cleanenergyfuture.gov.au/">scheme</a> to allow the economic impact of carbon pollution to be managed by the free market.</p>
<p>I&#8217;m really really proud that as a country we&#8217;ve reached the point where there&#8217;s a plan in place. It&#8217;s taken longer than it should have. In 2007 it was a policy of both major parties yet for a while more recently it had been a policy of neither. We&#8217;re one of the first countries in the world to pull this off.</p>
<p>The plan announced by Julia Gillard sets an initial price of AUD $23 per ton of CO<sub>2</sub> produced, along with subsidies for many industries and <a href="http://www.cleanenergyfuture.gov.au/household-assistance%E2%80%94tax-reform/">tax cuts to low and middle income</a> Australians. A few heavily polluting industries will take a hit, but that&#8217;s the idea. Businesses that aren&#8217;t pollution-centric seem to <a href="http://www.abc.net.au/news/stories/2011/07/06/3262109.htm?site=news">largely support the scheme</a>.</p>
<p>There will be a <a href="http://www.abc.net.au/news/stories/2011/06/30/3257906.htm?site=news">transition in 2015</a> to a free market emission trading scheme. Amusingly Tony Abbot. leader of the conservative, supposedly free market <a href="http://www.liberal.org.au/">Liberal Party</a> <a href="http://www.abc.net.au/news/stories/2011/07/01/3258962.htm?site=news">opposes the idea of allowing markets to determine prices</a>. There&#8217;s been some shrill, populist freak-out over new taxes, but the impact is likely to be small enough peoples&#8217; lives that it won&#8217;t be an issue at the next election. I&#8217;m expecting the bursting housing bubble will be more of a worry.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/ianloic?a=yhbQ2B2GK3Q:A-RfRgpZwhE:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/ianloic?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ianloic?a=yhbQ2B2GK3Q:A-RfRgpZwhE:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/ianloic?i=yhbQ2B2GK3Q:A-RfRgpZwhE:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ianloic?a=yhbQ2B2GK3Q:A-RfRgpZwhE:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/ianloic?i=yhbQ2B2GK3Q:A-RfRgpZwhE:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ianloic?a=yhbQ2B2GK3Q:A-RfRgpZwhE:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/ianloic?d=dnMXMwOfBR0" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/ianloic/~4/yhbQ2B2GK3Q" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://ianloic.com/2011/07/10/emissions-taxing-and-trading-in-australia/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://ianloic.com/2011/07/10/emissions-taxing-and-trading-in-australia/</feedburner:origLink></item>
		<item>
		<title>Breaking into a debugger in Python</title>
		<link>http://feedproxy.google.com/~r/ianloic/~3/j8HEqnGffVY/</link>
		<comments>http://ianloic.com/2011/06/20/breaking-into-a-debugger-in-python/#comments</comments>
		<pubDate>Mon, 20 Jun 2011 22:43:55 +0000</pubDate>
		<dc:creator>Ian McKellar</dc:creator>
				<category><![CDATA[Default]]></category>
		<category><![CDATA[debugging]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://ianloic.com/?p=349</guid>
		<description><![CDATA[This is probably old news to most folks, but I only found out about this recently, more than twelve years into being a Python programmer. The pdb (Python Debugger) module has a few useful functions. For years I&#8217;ve been using &#8230; <a href="http://ianloic.com/2011/06/20/breaking-into-a-debugger-in-python/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>This is probably old news to most folks, but I only found out about this recently, more than twelve years into being a Python programmer.</p>
<p>The <code class="prettyprint">pdb</code> (Python Debugger) module has a few useful functions. For years I&#8217;ve been using <a href="http://docs.python.org/library/pdb.html#pdb.pm"><code class="prettyprint">pdb.pm()</code></a>, the postmortem debugger. It can be run from the Python shell to invoke a debugger after an exception. Traditionally I&#8217;ve done:</p>
<pre class="prettyprint">
% python -i myscript.py
(some exception occurs)
>>> import pdb
>>> pdb.pm()
(Pdb)
</pre>
<p>But for this to work you need to be able to pass arguments to the interpreter (-i) and the code needs to throw an exception that isn&#8217;t caught.</p>
<p>Enter <a href="http://docs.python.org/library/pdb.html#pdb.set_trace"><code class="prettyprint">pdb.set_trace()</code></a>. It begins the same interactive debugger that <code class="prettyprint">pdb.pm()</code> provides upon request, from code. So in the middle of a function that&#8217;s confusing me I add:</p>
<pre class="prettyprint">from pdb import set_trace;set_trace()</pre>
<p>and my code will stop, ready for me to tear apart its runtime state. I just wish it had a more descriptive name so that I&#8217;d have found it earlier.</p>
<p><b>Bonus:</b> printing stack traces<br />
Python&#8217;s stack traces in exceptions are pretty useful. It used to be difficult to get the current stack in Python, involving raising and catching an exception. Now the <code class="prettyprint">traceback</code> module has <a href="http://docs.python.org/library/traceback.html#traceback.print_stack"><code class="prettyprint">traceback.print_stack()</code></a> and <a href="http://docs.python.org/library/traceback.html#traceback.extract_stack"><code class="prettyprint">traceback.extract_stack()</code></a> methods.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/ianloic?a=j8HEqnGffVY:iuNtJM3z9cw:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/ianloic?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ianloic?a=j8HEqnGffVY:iuNtJM3z9cw:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/ianloic?i=j8HEqnGffVY:iuNtJM3z9cw:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ianloic?a=j8HEqnGffVY:iuNtJM3z9cw:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/ianloic?i=j8HEqnGffVY:iuNtJM3z9cw:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ianloic?a=j8HEqnGffVY:iuNtJM3z9cw:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/ianloic?d=dnMXMwOfBR0" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/ianloic/~4/j8HEqnGffVY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://ianloic.com/2011/06/20/breaking-into-a-debugger-in-python/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://ianloic.com/2011/06/20/breaking-into-a-debugger-in-python/</feedburner:origLink></item>
		<item>
		<title>Python’s collections.defaultdict</title>
		<link>http://feedproxy.google.com/~r/ianloic/~3/D5_Gh30P9Kc/</link>
		<comments>http://ianloic.com/2011/06/16/pythons-collections-defaultdict/#comments</comments>
		<pubDate>Thu, 16 Jun 2011 23:40:35 +0000</pubDate>
		<dc:creator>Ian McKellar</dc:creator>
				<category><![CDATA[Default]]></category>

		<guid isPermaLink="false">http://ianloic.com/?p=322</guid>
		<description><![CDATA[Today I again came across code that I was able to make simpler, clearer and safer using collections.defaultdict. I keep coming across experienced Python programmers that don&#8217;t know about it. Perhaps it&#8217;s time to spread the good word. The defaultdict &#8230; <a href="http://ianloic.com/2011/06/16/pythons-collections-defaultdict/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Today I again came across code that I was able to make simpler, clearer and safer using <a href="http://docs.python.org/library/collections.html#collections.defaultdict"><code class="prettyprint">collections.defaultdict</code></a>. I keep coming across experienced Python programmers that don&#8217;t know about it. Perhaps it&#8217;s time to spread the good word.</p>
<p>The <code class="prettyprint">defaultdict</code> type is a dict subclass that takes a factory function to supply default values for keys that haven&#8217;t been set yet. For example</p>
<pre class="prettyprint">
from collections import defaultdict
frequency = defaultdict(lambda:0)
for c in 'the quick brown fox jumps over the lazy dog':
  frequency[c] = frequency[c] + 1
</pre>
<p>Will count the frequency of characters in a string.</p>
<p>I often use <code class="prettyprint">defaultdict</code> for dicts of dicts (<code class="prettyprint">defaultdict(dict)</code>) and dicts of lists (<code>defaultdict(list)</code>).</p>
<p><code class="prettyprint">defaultdict</code> replaces some pretty simple code, for example the above code could be written:</p>
<pre class="prettyprint">
frequency = dict()
for c in 'the quick brown fox jumps over the lazy dog':
  if c in dict:
    frequency[c] = frequency[c] + 1
  else:
    frequency[c] = 1
</pre>
<p>but I find using <code class="prettyprint">defaultdict</code> is not just shorter but also much clearer.</p>
<p>The other classes in the <a href="http://docs.python.org/library/collections.html"><code class="prettyprint">collections</code></a> class, especially <code class="prettyprint">OrderedDict</code> and <code class="prettyprint">Counter</code> (which is an implementation of the pattern I just implemented here on top of <code class="prettyprint">defaultdict</code>) seem useful, but I&#8217;ve never found myself actually using them, whereas <code class="prettyprint">defaultdict</code> is a common part of my repertoire these days.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/ianloic?a=D5_Gh30P9Kc:lFXCQ5OREAY:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/ianloic?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ianloic?a=D5_Gh30P9Kc:lFXCQ5OREAY:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/ianloic?i=D5_Gh30P9Kc:lFXCQ5OREAY:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ianloic?a=D5_Gh30P9Kc:lFXCQ5OREAY:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/ianloic?i=D5_Gh30P9Kc:lFXCQ5OREAY:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ianloic?a=D5_Gh30P9Kc:lFXCQ5OREAY:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/ianloic?d=dnMXMwOfBR0" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/ianloic/~4/D5_Gh30P9Kc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://ianloic.com/2011/06/16/pythons-collections-defaultdict/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://ianloic.com/2011/06/16/pythons-collections-defaultdict/</feedburner:origLink></item>
		<item>
		<title>Updating software on your Mac in ten easy steps…</title>
		<link>http://feedproxy.google.com/~r/ianloic/~3/dfQVx_0eHWw/</link>
		<comments>http://ianloic.com/2011/06/15/updating-software-on-your-mac-in-ten-easy-steps/#comments</comments>
		<pubDate>Thu, 16 Jun 2011 00:30:48 +0000</pubDate>
		<dc:creator>Ian McKellar</dc:creator>
				<category><![CDATA[Default]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[rant]]></category>
		<category><![CDATA[usability]]></category>

		<guid isPermaLink="false">http://ianloic.com/?p=324</guid>
		<description><![CDATA[Launch your application, oh look, an update! Clicking &#8220;Update&#8221; takes you to the Mac App Store web site. Click &#8220;View in Mac App Store&#8221; since apparently I&#8217;m not doing that yet, but wait! Tell my browser that it&#8217;s okay to &#8230; <a href="http://ianloic.com/2011/06/15/updating-software-on-your-mac-in-ten-easy-steps/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Launch your application, oh look, an update! Clicking <i>&#8220;Update&#8221;</i> takes you to the Mac App Store web site.<br />
<img src="http://ianloic.com/wp-content/uploads/2011/06/1.png" alt="" title="update" width="500" height="200" class="alignnone size-full wp-image-325" style="border:1px solid black"/></p>
<p>Click <i>&#8220;View in Mac App Store&#8221;</i> since apparently I&#8217;m not doing that yet, but wait!<br />
<img src="http://ianloic.com/wp-content/uploads/2011/06/2.png" alt="" title="update" width="500" height="200" class="alignnone size-full wp-image-325" style="border:1px solid black" /></p>
<p>Tell my browser that it&#8217;s okay to do what I just told it to do.<br />
<img src="http://ianloic.com/wp-content/uploads/2011/06/3.png" alt="" title="update" width="500" height="200" class="alignnone size-full wp-image-325"  style="border:1px solid black"/></p>
<p>We&#8217;re launched into the Mac App Store app, so we need to click the grey on grey <i>&#8220;Updates&#8221;</i> button / tab / thing&#8230;<br />
<img src="http://ianloic.com/wp-content/uploads/2011/06/4.png" alt="" title="update" width="500" height="200" class="alignnone size-full wp-image-325"  style="border:1px solid black"/></p>
<p>And click <i>&#8220;Update all&#8221;</i> or just <i>&#8220;Update&#8221;</i>.<br />
<img src="http://ianloic.com/wp-content/uploads/2011/06/5.png" alt="" title="update" width="500" height="200" class="alignnone size-full wp-image-325"  style="border:1px solid black"/></p>
<p>Sign into my Apple account for some reason.<br />
<img src="http://ianloic.com/wp-content/uploads/2011/06/6.png" alt="" title="update" width="500" height="200" class="alignnone size-full wp-image-325"  style="border:1px solid black"/></p>
<p>Oh we need to quit the app. Command-Tab&#8230;<br />
<img src="http://ianloic.com/wp-content/uploads/2011/06/7.png" alt="" title="update" width="500" height="200" class="alignnone size-full wp-image-325"  style="border:1px solid black"/></p>
<p>Quit the app.<br />
<img src="http://ianloic.com/wp-content/uploads/2011/06/8.png" alt="" title="update" width="500" height="200" class="alignnone size-full wp-image-325"  style="border:1px solid black"/></p>
<p>Back to the Mac App Store app again.<br />
<img src="http://ianloic.com/wp-content/uploads/2011/06/7.png" alt="" title="update" width="500" height="200" class="alignnone size-full wp-image-325"  style="border:1px solid black"/></p>
<p>It&#8217;s updated and I can launch it again.<br />
<img src="http://ianloic.com/wp-content/uploads/2011/06/9.png" alt="" title="update" width="500" height="200" class="alignnone size-full wp-image-325"  style="border:1px solid black"/></p>
<p>Ten only marginally confusing steps!</p>
<p>At least they got the gradients, drop shadows, rounded corners and noisy backgrounds right.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/ianloic?a=dfQVx_0eHWw:0rJm9Y0wn_w:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/ianloic?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ianloic?a=dfQVx_0eHWw:0rJm9Y0wn_w:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/ianloic?i=dfQVx_0eHWw:0rJm9Y0wn_w:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ianloic?a=dfQVx_0eHWw:0rJm9Y0wn_w:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/ianloic?i=dfQVx_0eHWw:0rJm9Y0wn_w:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ianloic?a=dfQVx_0eHWw:0rJm9Y0wn_w:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/ianloic?d=dnMXMwOfBR0" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/ianloic/~4/dfQVx_0eHWw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://ianloic.com/2011/06/15/updating-software-on-your-mac-in-ten-easy-steps/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://ianloic.com/2011/06/15/updating-software-on-your-mac-in-ten-easy-steps/</feedburner:origLink></item>
		<item>
		<title>DIY DDNS</title>
		<link>http://feedproxy.google.com/~r/ianloic/~3/WG6Bq-tiua4/</link>
		<comments>http://ianloic.com/2011/04/27/dreamhost-ddns/#comments</comments>
		<pubDate>Thu, 28 Apr 2011 07:12:22 +0000</pubDate>
		<dc:creator>Ian McKellar</dc:creator>
				<category><![CDATA[Default]]></category>
		<category><![CDATA[dns]]></category>
		<category><![CDATA[dreamhost]]></category>

		<guid isPermaLink="false">http://ianloic.com/?p=315</guid>
		<description><![CDATA[For those of us on cable or DSL who are slightly too cheap to pay for a static IP, dynamic DNS services are really useful. My DD-WRT based router knows how to talk to dynamic DNS providers, so setting it &#8230; <a href="http://ianloic.com/2011/04/27/dreamhost-ddns/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>For those of us on cable or DSL who are slightly too cheap to pay for a static IP, dynamic DNS services are really useful. My <a href="https://www.amazon.com/dp/B0028ACYEK/ref=as_li_ss_til?tag=httpianmckell-20&amp;camp=213381&amp;creative=390973&amp;linkCode=as4&amp;creativeASIN=B0028ACYEK&amp;adid=0V4M3G8BWQCAE4SVVANG&amp;">DD-WRT based router</a> knows how to talk to dynamic DNS providers, so setting it up is really easy.</p>
<p>I&#8217;ve tried both <a href="http://www.dyndns.com/">DynDNS</a> and <a href="http://www.no-ip.com/">No-IP</a>, and while they work quite well they&#8217;re kind of annoying. They really want me to sign up for a premium service, after all that&#8217;s how they make money. As a result I need to periodically visit web pages to confirm that I&#8217;m using an address or pay a fee. It&#8217;s not a big fee, but I&#8217;m already paying someone, <a href="http://www.dreamhost.com/r.cgi?235928">DreamHost</a> to host DNS for me, and they&#8217;ve got an <a href="http://wiki.dreamhost.com/API/Dns_commands">API</a>&#8230;</p>
<p>So I threw together a little script that implements the DynDNS API and modifies your own DNS zones using the DreamHost API. You can get it from here:<br />
<a href="https://github.com/ianloic/dreamhost-ddns">https://github.com/ianloic/dreamhost-ddns</a></p>
<p>The setup instructions are included in the README. Hopefully they&#8217;re pretty self-evident, but they are written from the perspective of someone who ran their own DNS servers (primary and secondary) for ten years.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/ianloic?a=WG6Bq-tiua4:YQ0iO3Xj9eM:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/ianloic?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ianloic?a=WG6Bq-tiua4:YQ0iO3Xj9eM:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/ianloic?i=WG6Bq-tiua4:YQ0iO3Xj9eM:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ianloic?a=WG6Bq-tiua4:YQ0iO3Xj9eM:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/ianloic?i=WG6Bq-tiua4:YQ0iO3Xj9eM:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ianloic?a=WG6Bq-tiua4:YQ0iO3Xj9eM:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/ianloic?d=dnMXMwOfBR0" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/ianloic/~4/WG6Bq-tiua4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://ianloic.com/2011/04/27/dreamhost-ddns/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://ianloic.com/2011/04/27/dreamhost-ddns/</feedburner:origLink></item>
	</channel>
</rss>

