<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	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/"
	>

<channel>
	<title>blog.elsdoerfer.name</title>
	<atom:link href="http://blog.elsdoerfer.name/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.elsdoerfer.name</link>
	<description>Contributing back to the Google Index.</description>
	<lastBuildDate>Wed, 11 Aug 2010 17:14:20 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Python argparse: Combine nargs=* with subparsers</title>
		<link>http://blog.elsdoerfer.name/2010/08/08/python-argparse-combine-nargs-with-subparsers/</link>
		<comments>http://blog.elsdoerfer.name/2010/08/08/python-argparse-combine-nargs-with-subparsers/#comments</comments>
		<pubDate>Sun, 08 Aug 2010 14:02:36 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://blog.elsdoerfer.name/?p=290</guid>
		<description><![CDATA[Say you set up argparse with a nargs='*' or nargs='+' argument first, followed by a subparser to handle a command:

parser = argparse.ArgumentParser()
parser.add_argument('--items', nargs='+', default=[])
subparsers = parser.add_subparsers()
subparser.add_parser('foo')
subparser.add_parser('bar')

The usage would look like this:
usage: script.py [--items ITEM [ITEM ...]] {foo,bar}
This is actually somewhat problematic. If you were to parse the arguments "--items one two foo", argparse will assume [...]]]></description>
			<content:encoded><![CDATA[<p>Say you set up <a href="http://docs.python.org/dev/library/argparse.html">argparse</a> with a <em>nargs='*'</em> or <em>nargs='+'</em> argument first, followed by a subparser to handle a command:</p>
<pre name="code" class="python">
parser = argparse.ArgumentParser()
parser.add_argument('--items', nargs='+', default=[])
subparsers = parser.add_subparsers()
subparser.add_parser('foo')
subparser.add_parser('bar')
</pre>
<p>The usage would look like this:</p>
<p><code>usage: script.py [--items ITEM [ITEM ...]] {foo,bar}</code></p>
<p>This is actually somewhat problematic. If you were to parse the arguments <em>"--items one two foo"</em>, argparse will assume that <em>foo</em> is an item, and complain about the lack of a command (<em>error: too few arguments</em>).</p>
<p>A workaround is letting the user break out of the nargs-based argument by given a single <em>"-"</em> character. This can easily be done with:</p>
<pre name="code" class="python">
parser.add_argument('-', dest='__dummy',
    action="store_true", help=argparse.SUPPRESS)
</pre>
<p>Now, the following will work: <em>"--items one two - foo"</em>. </p>
<p>I think that two dashes (<em>"--"</em>) are more common for this purpose (with a single dash usually referring to stdin/stdout), but unfortunately, argparse doesn't seem to support using two.</p>
<p><em>Edit</em>: I'm a dummy. argparse already has support for <em>"--"</em> to break nargs built in. It's not 100% the same, as it will force everything that follows to be considered a positional argument (whereas argparse in theory would support multiple sets of positional arguments, I think), but for most cases, relying on the builtin <em>"--"</em> is the right choice.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.elsdoerfer.name/2010/08/08/python-argparse-combine-nargs-with-subparsers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Reconstruct VM if VirtualBox.xml, $vm.xml is lost</title>
		<link>http://blog.elsdoerfer.name/2010/07/03/reconstruct-vm-if-virtualbox-xml-vm-xml-is-lost/</link>
		<comments>http://blog.elsdoerfer.name/2010/07/03/reconstruct-vm-if-virtualbox-xml-vm-xml-is-lost/#comments</comments>
		<pubDate>Sat, 03 Jul 2010 18:17:30 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.elsdoerfer.name/?p=288</guid>
		<description><![CDATA[If you are using snapshots, this isn't an easy feat. You need to reconstruct the snapshot tree, with only a bunch of UUIDs to go on. Fortunately, each (differential) VDI file stores the UUID of it's parent VDI. The following Python script parses a set of VDI files and tries to rebuild the tree:
http://github.com/miracle2k/linuxutils/blob/master/reconstruct-vdi-tree.py
It can [...]]]></description>
			<content:encoded><![CDATA[<p>If you are using snapshots, this isn't an easy feat. You need to reconstruct the snapshot tree, with only a bunch of UUIDs to go on. Fortunately, each (differential) VDI file stores the UUID of it's parent VDI. The following Python script parses a set of VDI files and tries to rebuild the tree:</p>
<p><a href="http://github.com/miracle2k/linuxutils/blob/master/reconstruct-vdi-tree.py">http://github.com/miracle2k/linuxutils/blob/master/reconstruct-vdi-tree.py</a></p>
<p>It can output the XML code that goes into <em>VirtualBox.xml</em> directly. If your VM's configuration file is also gone, the easiest way to go about seems to be:</p>
<ul>
<li>Create a new machine with your base VDI.</li>
<li>Create snapshots matching the tree given by this script.</li>
<li>Edit the VM-specific XML file, and <em>VirtualBox.xml</em>, changing the UUIDs of the dummy snapshots with the UUIDs given to you by this script.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.elsdoerfer.name/2010/07/03/reconstruct-vm-if-virtualbox-xml-vm-xml-is-lost/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Merkur Bank HBCI in Hibiscus</title>
		<link>http://blog.elsdoerfer.name/2010/06/09/merkur-bank-hbci-in-hibiscus/</link>
		<comments>http://blog.elsdoerfer.name/2010/06/09/merkur-bank-hbci-in-hibiscus/#comments</comments>
		<pubDate>Wed, 09 Jun 2010 22:50:58 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.elsdoerfer.name/?p=285</guid>
		<description><![CDATA[Als Benutzerkennung muss der ursprüngliche numerische Online-Key verwenden werden, nicht der selbst konfigurierte Alias. Die HBCI-Version muss explicit auf FinTS 3.0 gestellt werden, via automatischer Erkennung  scheint es nicht zu funktionieren. Die HBCI URL ist hbci11.fiducia.de/cgi-bin/hbciservlet.
]]></description>
			<content:encoded><![CDATA[<p>Als Benutzerkennung muss der ursprüngliche numerische Online-Key verwenden werden, nicht der selbst konfigurierte Alias. Die HBCI-Version muss explicit auf FinTS 3.0 gestellt werden, via automatischer Erkennung  scheint es nicht zu funktionieren. Die HBCI URL ist <em>hbci11.fiducia.de/cgi-bin/hbciservlet</em>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.elsdoerfer.name/2010/06/09/merkur-bank-hbci-in-hibiscus/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Booting Ubuntu Karmic and Windows 7 from a GPT partition using BIOS</title>
		<link>http://blog.elsdoerfer.name/2010/05/21/booting-ubuntu-karmic-and-windows-7-from-a-gpt-partition-using-bios/</link>
		<comments>http://blog.elsdoerfer.name/2010/05/21/booting-ubuntu-karmic-and-windows-7-from-a-gpt-partition-using-bios/#comments</comments>
		<pubDate>Fri, 21 May 2010 20:38:29 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.elsdoerfer.name/?p=151</guid>
		<description><![CDATA[Those are some notes taken while trying to get this setup running. I've actually been running this for a long time, and so the post has have been in draft status far too long. I needed to finish it up before my memory would fail me.
The roadblocks here are mainly related to weak support for [...]]]></description>
			<content:encoded><![CDATA[<p><em>Those are some notes taken while trying to get this setup running. I've actually been running this for a long time, and so the post has have been in draft status far too long. I needed to finish it up before my memory would fail me.</em></p>
<p>The roadblocks here are mainly related to weak support for GPT. Windows up to at least version 7 can only boot from GPT <a href="http://en.wikipedia.org/wiki/GUID_Partition_Table#OS_support_of_GPT">when </a><a href="http://en.wikipedia.org/wiki/Extensible_Firmware_Interface">EFI</a> is also used, and some of the Linux tools also have the one or other quirk when dealing with GPT (note that I was using Karmic; Lucid may not have some of the problems).</p>
<ul>
<li>Create your GPT based partitions using <em>gparted</em> from an Ubuntu Live CD.
<ul>
<li>Make sure your Windows partition is first, or at least one of the first three.</li>
<li>Create a 1MB partition with the <em>bios_grub</em> flag. This is what the guided Ubuntu installer would do, and it's <a href="http://grub.enbug.org/BIOS_Boot_Partition">required by grub to boot from GPT</a>. <em>gparted</em> apparently enforces a minimum partition size of 8 megabytes, which should be find too, if wholly unnecessary, but I used <em>parted</em> to get to just one megabyte. I choose ext2 as the filesystem type, but I don't think it matters.</li>
</ul>
</li>
<li>In case you want to encrypt your root-filesystem: Make sure you have <em>/boot</em> on a separate, unencrypted partition.</li>
<li>Use <em>gptsync</em> to write out a <a href="http://www.rodsbooks.com/gdisk/hybrid.html">Hybrid-MBR</a> based on your GPT. This is required to make Windows boot. This is also why Windows needs to be one of the first three partitions. Further GPT partitions will not fit into the MBR. Note that for all I can tell, once Windows is booted, you can access your full GPT disc just fine.
<ul>
<li>If gptsync has problems with "unknown" partitions, try with a newer .deb from the Debian repositories.</li>
<li><strong>Important:</strong> At this point, don't touch your GPT partition table except with tools that can properly deal with Hybrid-MBRs. Unfortunately, that doesn't include <em>gparted</em>, which will clear out the Hybrid-MBR. In this case, you have to run gptsync again.</li>
</ul>
</li>
<li>Use <em>fdisk</em> to change partition type id of your Windows 7 partition to <em>HPFS/NTFS</em> (hex 7). If it hasn't the proper id, Windows setup will refuse to install on it. When  I tried to fix that by recreating the partition through the Windows installer, it ended up with slightly different LBA bounds than before (i.e. resulting in mismatch to the GPT table). So, do this now.</li>
<li>Install Windows.</li>
<li>Install Karmic. grub2 should pick up the Windows installation automatically (this is done by checking for a <em>Boot/BCD</em> file. If your Windows install isn't found, you might want to look at <em>/usr/lib/os-probes/</em> to find out why).</li>
</ul>
<p>If you ever need to rewrite grub2, maybe cause you reinstalled Windows, you can boot into an Ubuntu Live CD and do:</p>
<pre name="code" class="bash">
# If you are using encryption, open the root partition
$ cryptsetup ...
# If you are using LVM, it might be necessary to make the partition available
$ lvchange ...

# Setup a chroot
$ mount $ROOT_PARTITION /mnt
$ mount $BOOT_PARTITION /mnt/boot
$ mount -o bind /dev /mnt/dev
$ mount -t proc proc /mnt/proc
$ mount -t sysfs sys /mnt/sys
$ chroot /mnt

# Update grub2's data (runs the os-prober, for example)
$ update-grub2
# Install the actual boot loader code
$ grub2-install /your/disk
</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.elsdoerfer.name/2010/05/21/booting-ubuntu-karmic-and-windows-7-from-a-gpt-partition-using-bios/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Android: Build multiple versions of a project</title>
		<link>http://blog.elsdoerfer.name/2010/04/29/android-build-multiple-versions-of-a-project/</link>
		<comments>http://blog.elsdoerfer.name/2010/04/29/android-build-multiple-versions-of-a-project/#comments</comments>
		<pubDate>Thu, 29 Apr 2010 11:19:38 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.elsdoerfer.name/?p=233</guid>
		<description><![CDATA[This is a question that comes up once in a while. 
For example, say you'd like to offer a full and a demo version, which isn't really uncommon. Now, the Android Market enforces that each application package needs to use a unique package name, so you can't just recompile your .apk with a DEMO=true variable [...]]]></description>
			<content:encoded><![CDATA[<p>This is a question that comes up <a href="http://groups.google.com/group/android-developers/browse_thread/thread/d7fc4045ef9bf7bc">once</a> in a <a href="http://groups.google.com/group/android-developers/browse_thread/thread/270cbc77091e5bfd/">while</a>. </p>
<p>For example, say you'd like to offer a full and a demo version, which isn't really uncommon. Now, the Android Market enforces that each application package needs to use a unique package name, so you can't just recompile your .apk with a <em>DEMO=true</em> variable set. That probably sounds easier than it is.</p>
<p>The package name is specified inside your <em>AndroidManifest.xml</em> file, but if you change it, you'll probably notice two things:</p>
<ol>
<li>The activities etc. you declared in your manifest are flagged as not found, because you specified them in relative form (<em>.MainActivity</em>); those references are now based on the new package name, but the namespace of your Java classes hasn't changed. That's easy enough to fix, just reference all components with their full name.</li>
<li>The <em>R.java</em> class that Android generates for you will be generated using the application namespace. Since that has no changed, so has the location of the <em>R</em> class. The imports all across your app still reference the old name though. This is the main stumble block.</li>
</ol>
<p>What I used to do is have two git branches, developing the normal (full) version on the master branch, and having a second <em>demo-packaging</em> branch with the adjustments necessary to build the demo version, including the updated imports. That branch would be rebased against master whenever I release was in order.</p>
<p>However, I now got tired dealing with the merge conflicts that would inevitably occur whenever I had to change the import sections during developing the master branch, which was basically every time.</p>
<p>So I decided to try my luck with using Android's ant-based build system, and if necessary, automate everything with search&#038;replace. Fortunately, it turns out that this isn't really necessary, for the most part: <em>aapt</em>, which is used to generate the <em>R.java</em>, takes a <em>--custom-package</em> option. Using that, you can compile your demo version in <em>org.example.myapp.demo</em>, and still have the R class generated into <em>org.example.myapp.R</em>, where all your imports point to.</p>
<p>Unfortunately, the option is pretty new - it only seems available in API Level 7, i.e. the 2.1 SDK, so you'll need to build against that (of course, you're app can still work on older versions).</p>
<p>Here's a short step to step description of what I did:</p>
<ol>
<li>Start with the default Android <em>build.xml</em> file. If you don't have one yet because you created your project through Eclipse, you can just run <em>android create project</em> with the appropriate options in a temporary directory, and copy the <em>build.xml</em> and <em>build.properties</em> files.</li>
<li>As per the comments in this file, add <em>import=false</em> to the <em>&lt;setup&gt;</em> tag in this file, and copy the contents of <em>{SDK_DIR}/platforms/android-2.1/templates/android_rules.xml</em> below it. Unfortunately, there doesn't seem to be a good way to customize this more granular fashion. Actually, copying only individual targets that you'd like to modify does work, but now you're depending on implementation details of the rules file, which probably isn't the better option.</li>
<li>Look for the <em>-resource-src</em> target and add two new arguments to the <em>exec</em> call:
<pre name="code" class="xml">
            &lt;arg value="--custom-package" /&gt;
            &lt;arg value="${application.namespace}" /&gt;</pre>
<p>Define <em>application.namesace</em> in your <em>build.properties</em> file. Set it to the namespace that is shared across all different versions, and that you use in your code when referencing your <em>R class</em>.
</li>
<li>You should now be able to build different versions of your app by simply changing the namespace declared in the manifest. Still, that can be automated. Personally, I have removed <em>AndroidManifest.xml</em> itself from version control, and am generating a copy with the appropriate namespace based on a template, with ant asking me about what version I want to build:
<pre name="code" class="xml">
&lt;target name="-query-build-type"&gt;
    &lt;input
        message="What version should I build?"
        validargs="default,donate"
        addproperty="opt.version" /&gt;
    &lt;condition property="opt.package" value="${application.namespace}.d" else="${application.namespace}"&gt;
            &lt;equals arg1="${opt.version}" arg2="donate" /&gt;
    &lt;/condition&gt;
&lt;/target&gt;

&lt;target name="copy-templates"&gt;
    &lt;filter token="__PACKAGE_NAME__" value="${opt.package}" /&gt;
    &lt;delete file="AndroidManifest.xml" quiet="true" /&gt;
        &lt;copy file="AndroidManifest.xml.template" tofile="AndroidManifest.xml" filtering="true" /&gt;
&lt;/target&gt;
</pre>
<p>I've added <em>-query-build-type</em> as the first dependency to the <em>compile</em> target, and <em>copy-templates</em> as a dependency before the <em>-resource-src</em> target.
</li>
<p>In closing, I do need to complain about who utterly inappropriate XML is as a language for build files that humans are going to write by hand. I don't get why people <a href="http://en.wikipedia.org/wiki/MSBuild">keep using that approach</a>.</ol>
]]></content:encoded>
			<wfw:commentRss>http://blog.elsdoerfer.name/2010/04/29/android-build-multiple-versions-of-a-project/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>UserVoice alternatives which aren&#039;t crazy expensive</title>
		<link>http://blog.elsdoerfer.name/2010/04/29/uservoice-alternatives-which-arent-crazy-expensive/</link>
		<comments>http://blog.elsdoerfer.name/2010/04/29/uservoice-alternatives-which-arent-crazy-expensive/#comments</comments>
		<pubDate>Thu, 29 Apr 2010 09:56:43 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.elsdoerfer.name/?p=257</guid>
		<description><![CDATA[I really like UserVoice - unfortunately, the pricing is totally off. I don't even think I'm asking for that much. All I would like to do is use it as part of a mobile Android app. Which means, there would either need to be a mobile version (there isn't), or an API that would allow [...]]]></description>
			<content:encoded><![CDATA[<p>I really like <a href="https://uservoice.com/">UserVoice</a> - unfortunately, the pricing is totally off. I don't even think I'm asking for that much. All I would like to do is use it as part of a mobile Android app. Which means, there would either need to be a mobile version (<a href="http://feedback.uservoice.com/forums/1-product-feedback/suggestions/143027-develop-a-mobile-version">there isn't</a>), or an API that would allow me to build a mobile client (Commercial API access starts at $289/month). </p>
<p>Of course, there are a few other essential features which you need to pay for, like the ability to export your data, starting at $19. Which I would happily do, except if I wanted to use it for five different projects, I have to pay that amount for five different accounts.</p>
<p>The obvious alternative is <a href="http://getsatisfaction.com/">GetSatisfaction</a>. While they also don't seem to have a mobile version, and they also claim that "Commercial API Access" is available in the $289  plan only, you do have the ability to <a href="http://getsatisfaction.com/people/michael_elsd_rfer/extensions">register apps for an API Key</a> in their account management, and projects like <a href="http://code.google.com/p/satisfactionremotecomponent/">Satisfaction Remote Component</a> make me hopeful that there is some kind of API available for less.</p>
<p>Unfortunately, I can't really stand the service in general. There's too many features I don't care for  complicating the UI, and it requires registration from users before they can vote. Even the registration is confusing: Instead of simply letting me create a channel, I'm being told something about employee verification, needing to wait four business days and stuff I need to do with my website.</p>
<p>Two decent alternatives seem to be <a href="http://crowdsound.com/">crowdsound</a> and <a href="http://userecho.com/ ">UserEcho</a>, but again, no mobile site or API, though crowdsound <a href="http://crowdsound.com/hosted_site/show_suggestion?aid=1&#038;suggestion_id=1277">seems to be working</a> on one.</p>
<p>On the open source side, I've found <a href="http://github.com/robneville73/OpenEcho/">OpenEcho</a>, which seems dead though, and of course there's the option of using an <a href="http://github.com/cnprog/CNPROG/network">StackOverflow-clone</a> - which would still require to build a mobile version myself.</p>
<p>For now, I think I'm going to sit out another round and see if things look better in a couple months.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.elsdoerfer.name/2010/04/29/uservoice-alternatives-which-arent-crazy-expensive/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Distributed bug tracking</title>
		<link>http://blog.elsdoerfer.name/2010/04/24/distributed-bug-tracking/</link>
		<comments>http://blog.elsdoerfer.name/2010/04/24/distributed-bug-tracking/#comments</comments>
		<pubDate>Sat, 24 Apr 2010 06:11:52 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.elsdoerfer.name/?p=249</guid>
		<description><![CDATA[Rather than bothering with setting up and maintaining external tools, I usually prefer to simply have a TODO file in my repository where I collect issues and ideas. However, I'm starting to want more of an ability to maybe attach certain metadata, categorize issues etc.
There is ciss-tracker, which is basically a command line interface on [...]]]></description>
			<content:encoded><![CDATA[<p>Rather than bothering with setting up and maintaining external tools, I usually prefer to simply have a TODO file in my repository where I collect issues and ideas. However, I'm starting to want more of an ability to maybe attach certain metadata, categorize issues etc.</p>
<p>There is <a href="http://code.google.com/p/ciss-tracker/">ciss-tracker</a>, which is basically a command line interface on top of a plaintext file like I'm already using, and I'm currently playing around with it. </p>
<p>Then there are these "distributed bug trackers", an idea I find quite interesting. Unfortunately, it doesn't seem to have a lot of traction. Most tools aren't actively developed.</p>
<p>Most trackers store their issue database in the repository itself, in a hidden directory or file. Some git-specific tools use a separate branch. I much prefer the latter approach. I think if you were to add native support for bug tracking to a DVCS, you'd want to use a separate storage area. git's branches allow you to simulate this somewhat. </p>
<p>Benefits: </p>
<ul>
<li>I'm not cluttering my source's history with the bug data. The two seem like distinct things. You can get a log for only the bug changes.</li>
<li>Merging the bugs would be separate from merging the source tree, making it easier to implement a custom merge code specifically for the bug tracking part. Different from source code, conflicts could be resolved by a command line tool asking the right questions.</li>
<li>You also have only a single bug database for the repository - something like github could easily base their web bug tracker UI on the repository storage. And you could still have the ability to link bugs to individual branches. </li>
</ul>
<p>So far, I've only found <a href="http://github.com/jwiegley/git-issues">git-issues</a> and <a href="http://github.com/schacon/ticgit">ticgit</a>. Both don't seem to be worked on though, and I did have my problems with them.</p>
<p><em>Update</em>: There's also <a href="http://syncwith.us/sd/">Simple Defects</a>, which has a unique approach: Instead of trying to build on a DVCS, it's a completely self-contained system, though there is at least some basic git-integration.</p>
<p>Interesting posts on the subject:</p>
<ul>
<li><a href="http://www.ericsink.com/entries/dbts_fossil.html">http://www.ericsink.com/entries/dbts_fossil.html</a></li>
<li><a href="http://erlangish.blogspot.com/2007/06/distributed-bug-tracking-again.html">http://erlangish.blogspot.com/2007/06/distributed-bug-tracking-again.html</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.elsdoerfer.name/2010/04/24/distributed-bug-tracking/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>init.d script for smuxi-server</title>
		<link>http://blog.elsdoerfer.name/2010/04/23/init-d-script-for-smuxi-server/</link>
		<comments>http://blog.elsdoerfer.name/2010/04/23/init-d-script-for-smuxi-server/#comments</comments>
		<pubDate>Fri, 23 Apr 2010 19:03:14 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.elsdoerfer.name/?p=243</guid>
		<description><![CDATA[Quick&#038;Dirty:

#!/bin/bash

USER=michael
GROUP=michael
PIDFILE=/var/run/smuxi.pid

case "${1:-''}" in
  'start')
           start-stop-daemon -S -c $USER -g $GROUP --make-pidfile --pidfile $PIDFILE --background --startas /usr/bin/smuxi-server -v
        ;;
  'stop')
           start-stop-daemon -K --pidfile $PIDFILE -v
   [...]]]></description>
			<content:encoded><![CDATA[<p>Quick&#038;Dirty:</p>
<pre name="code"  class="sh">
#!/bin/bash

USER=michael
GROUP=michael
PIDFILE=/var/run/smuxi.pid

case "${1:-''}" in
  'start')
           start-stop-daemon -S -c $USER -g $GROUP --make-pidfile --pidfile $PIDFILE --background --startas /usr/bin/smuxi-server -v
        ;;
  'stop')
           start-stop-daemon -K --pidfile $PIDFILE -v
        ;;
  *)
        echo "Usage: $SELF start|stop"
        exit 1
        ;;
esac
</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.elsdoerfer.name/2010/04/23/init-d-script-for-smuxi-server/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Upgrading an OpenVZ VE to Jaunty</title>
		<link>http://blog.elsdoerfer.name/2010/04/23/upgrading-an-openvz-ve-to-jaunty/</link>
		<comments>http://blog.elsdoerfer.name/2010/04/23/upgrading-an-openvz-ve-to-jaunty/#comments</comments>
		<pubDate>Fri, 23 Apr 2010 18:10:05 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.elsdoerfer.name/?p=238</guid>
		<description><![CDATA[After upgrading a VE to Jaunty through do-release-upgrade, the network stop working.
A post in the OpenVZ forum suggests a fix that works for me:

On the host:

vzctl set XXX --features "sysfs:on" --save

In the container:

vi /etc/init.d/networking

After the comments at the top, add the line:

mkdir -p /var/run/network


Note the post suggested the directory var/run/networking, my init script wanted /var/run/network [...]]]></description>
			<content:encoded><![CDATA[<p>After upgrading a VE to Jaunty through <em>do-release-upgrade</em>, the network stop working.</p>
<p>A post in the OpenVZ forum <a href="http://forum.openvz.org/index.php?t=msg&#038;goto=35823">suggests a fix</a> that works for me:</p>
<blockquote><p>
On the host:</p>
<pre>
vzctl set XXX --features "sysfs:on" --save
</pre>
<p>In the container:</p>
<pre>
vi /etc/init.d/networking
</pre>
<p>After the comments at the top, add the line:</p>
<pre>
mkdir -p /var/run/network
</pre>
</blockquote>
<p>Note the post suggested the directory <em>var/run/networking</em>, my init script wanted <em>/var/run/network</em> for some reason. I also added -p to <em>mkdir</em>. </p>
<p>Presumably, there's a smoother solution creating the directory through the OpenVZ init scripts.</p>
<p>Update: Here's a <a href="http://www.fs3.ph/article/ubuntu-904-in-an-openvz-ve">more detailed explanation</a> of what's going on.</p>
<p>Another problem I had was <em>klogd</em> hanging and preventing the boot process from finishing. The only solution seems to be to remove klogd from autostart (<em>update-rc.d -f remove klogd</em>) [<a href="http://wiki.openvz.org/Ubuntu_without_templates">1</a>] [<a href="http://forum.openvz.org/index.php?t=msg&#038;goto=35606&#038;">2</a>].</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.elsdoerfer.name/2010/04/23/upgrading-an-openvz-ve-to-jaunty/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Online Translation Services</title>
		<link>http://blog.elsdoerfer.name/2010/04/21/online-translation-services/</link>
		<comments>http://blog.elsdoerfer.name/2010/04/21/online-translation-services/#comments</comments>
		<pubDate>Tue, 20 Apr 2010 23:12:38 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.elsdoerfer.name/?p=234</guid>
		<description><![CDATA[All of these allow editing translations through a webinterface.
Transifex: hosted, .po files, Open Source projects only.
Crowdin: hosted, many formats, free for Open Source, eventually pay for closed-source software.
Pootle: install on your own server; .po and xliff support, not all that great an UI unfortunately.
]]></description>
			<content:encoded><![CDATA[<p>All of these allow editing translations through a webinterface.</p>
<p><a href="http://www.transifex.net/">Transifex</a>: hosted, .po files, Open Source projects only.<br />
<a href="http://crowdin.net/">Crowdin</a>: hosted, many formats, free for Open Source, eventually pay for closed-source software.<br />
<a href="http://translate.sourceforge.net/wiki/pootle/index">Pootle</a>: install on your own server; .po and xliff support, not all that great an UI unfortunately.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.elsdoerfer.name/2010/04/21/online-translation-services/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
