<?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>Lukas&#039; Weblog &#187; software &amp; technology</title>
	<atom:link href="http://lukas-prokop.at/blog/category/software-technology/feed/" rel="self" type="application/rss+xml" />
	<link>http://lukas-prokop.at/blog</link>
	<description>tail -f /var/log/web</description>
	<lastBuildDate>Wed, 01 Feb 2012 10:44:36 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>How FLOSS does not work</title>
		<link>http://lukas-prokop.at/blog/2011/12/how-floss-does-not-work/</link>
		<comments>http://lukas-prokop.at/blog/2011/12/how-floss-does-not-work/#comments</comments>
		<pubDate>Mon, 12 Dec 2011 18:28:14 +0000</pubDate>
		<dc:creator>meisterluk</dc:creator>
				<category><![CDATA[software & technology]]></category>

		<guid isPermaLink="false">http://lukas-prokop.at/blog/?p=2037</guid>
		<description><![CDATA[<a href="http://lukas-prokop.at/blog/2011/12/how-floss-does-not-work/" title="How FLOSS does not work"></a>Pythonists are working on a stackoverflow alternative publicly available in the pypi ([pypi] [website] [github]). At the same time a company is working on a stackoverflow alternative privately for a customer. Please repeat yourself and reinvent the wheel. This is &#8230;<p class="read-more"><a href="http://lukas-prokop.at/blog/2011/12/how-floss-does-not-work/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<a href="http://lukas-prokop.at/blog/2011/12/how-floss-does-not-work/" title="How FLOSS does not work"></a><p>Pythonists are working on a stackoverflow alternative publicly available in the pypi (<a href="http://pypi.python.org/pypi/askbot/0.7.20">[pypi]</a> <a href="http://askbot.org/">[website]</a> <a href="https://github.com/ASKBOT/askbot-devel/">[github]</a>). At the same time a company is working on a stackoverflow alternative privately for a customer.</p>
<p>Please repeat yourself and reinvent the wheel. This is where the software industry is going nowadays. The boundaries between company contexts and voluntary projects are too broad to be crossed in a copyright-driven society.</p>
]]></content:encoded>
			<wfw:commentRss>http://lukas-prokop.at/blog/2011/12/how-floss-does-not-work/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Inkscape PDF Export stopped working</title>
		<link>http://lukas-prokop.at/blog/2011/11/inkscape-pdf-export-stopped-working/</link>
		<comments>http://lukas-prokop.at/blog/2011/11/inkscape-pdf-export-stopped-working/#comments</comments>
		<pubDate>Tue, 01 Nov 2011 12:29:29 +0000</pubDate>
		<dc:creator>meisterluk</dc:creator>
				<category><![CDATA[software & technology]]></category>

		<guid isPermaLink="false">http://lukas-prokop.at/blog/?p=2181</guid>
		<description><![CDATA[<a href="http://lukas-prokop.at/blog/2011/11/inkscape-pdf-export-stopped-working/" title="Inkscape PDF Export stopped working"></a>Save As Copy with extension pdf worked very well for almost a year. Suddenly it stopped working. PDF export resulted in File {FILENAME}.pdf could not be saved. Very uncomfortable for me as far as I am using SVGs on a &#8230;<p class="read-more"><a href="http://lukas-prokop.at/blog/2011/11/inkscape-pdf-export-stopped-working/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<a href="http://lukas-prokop.at/blog/2011/11/inkscape-pdf-export-stopped-working/" title="Inkscape PDF Export stopped working"></a><p><q>Save As Copy</q> with extension pdf worked very well for almost a year. Suddenly it stopped working. PDF export resulted in <q>File {FILENAME}.pdf could not be saved</q>. Very uncomfortable for me as far as I am using SVGs on a regular basis.</p>
<p>The internet is filled up the bug reports&#8230; some are having specific plugin problems, some only get blank PDF pages. Well&#8230; <a href="https://answers.launchpad.net/inkscape/+question/99089">this Inkscape 0.47 bug report</a> got the solution for me. Remove the preferences.xml file (for me ~/.config/inkscape/preferences.xml) and Inkscape will create a new one when starting up.</p>
<p>What is the reason? I think some important package got upgraded and Inkscape is holding some old, conflicting information about this package.</p>
<p><strong>Tags:</strong> Inkscape 0.47 pdf export SVG could not be saved preferences cairo</p>
]]></content:encoded>
			<wfw:commentRss>http://lukas-prokop.at/blog/2011/11/inkscape-pdf-export-stopped-working/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>switch/case in assembly</title>
		<link>http://lukas-prokop.at/blog/2011/10/switchcase-in-assembly/</link>
		<comments>http://lukas-prokop.at/blog/2011/10/switchcase-in-assembly/#comments</comments>
		<pubDate>Mon, 31 Oct 2011 00:16:46 +0000</pubDate>
		<dc:creator>meisterluk</dc:creator>
				<category><![CDATA[software & technology]]></category>

		<guid isPermaLink="false">http://lukas-prokop.at/blog/?p=2178</guid>
		<description><![CDATA[<a href="http://lukas-prokop.at/blog/2011/10/switchcase-in-assembly/" title="switch/case in assembly"></a>Because of a discussion with my brother I got curious about the internal handling of switch/case statements in assembly. So I compiled the stuff and studied it. Furthermore I wrote an article about it. I thought an external document is &#8230;<p class="read-more"><a href="http://lukas-prokop.at/blog/2011/10/switchcase-in-assembly/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<a href="http://lukas-prokop.at/blog/2011/10/switchcase-in-assembly/" title="switch/case in assembly"></a><p>Because of a discussion with my brother I got curious about the internal handling of switch/case statements in assembly. So I compiled the stuff and studied it. Furthermore I wrote an article about it. I thought an external document is a better approach:</p>
<p><a href="http://lukas-prokop.at/proj/documents/hashtable.html">&#8220;switch in amd64 assembly&#8221;</a> [HTML]</p>
]]></content:encoded>
			<wfw:commentRss>http://lukas-prokop.at/blog/2011/10/switchcase-in-assembly/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Twiki and 8 character passwords</title>
		<link>http://lukas-prokop.at/blog/2011/10/twiki-and-8-character-passwords/</link>
		<comments>http://lukas-prokop.at/blog/2011/10/twiki-and-8-character-passwords/#comments</comments>
		<pubDate>Wed, 19 Oct 2011 23:55:23 +0000</pubDate>
		<dc:creator>meisterluk</dc:creator>
				<category><![CDATA[software & technology]]></category>

		<guid isPermaLink="false">http://lukas-prokop.at/blog/?p=2150</guid>
		<description><![CDATA[<a href="http://lukas-prokop.at/blog/2011/10/twiki-and-8-character-passwords/" title="Twiki and 8 character passwords"></a>At university, TWiki is a pretty common software. At least at the second Google search results page (for &#8220;twiki&#8221; as search term) I can see some twiki running at our university&#8217;s webserver. TWiki is written in perl and I will &#8230;<p class="read-more"><a href="http://lukas-prokop.at/blog/2011/10/twiki-and-8-character-passwords/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<a href="http://lukas-prokop.at/blog/2011/10/twiki-and-8-character-passwords/" title="Twiki and 8 character passwords"></a><p>At university, <a href="http://twiki.org/">TWiki</a> is a pretty common software. At least at the second Google search results page (for &#8220;twiki&#8221; as search term) I can see some twiki running at our university&#8217;s webserver. TWiki is written in perl and I will refer to the deprecated 4.1.x version which was my test system. I got annoyed by limited security for passwords. Passwords are limited to 8 characters.</p>
<h4>Login Managers</h4>
<p>During installation you will face a select field like this (in the &#8220;Security Setup&#8221; section):</p>
<p style="text-align:center"><a href="http://lukas-prokop.at/blog/wp-content/uploads/2011/10/twiki_loginmanager.png"><img src="http://lukas-prokop.at/blog/wp-content/uploads/2011/10/twiki_loginmanager-300x148.png" alt="Twiki Loginmanager in Installation" title="twiki_loginmanager" width="300" height="148" /></a></p>
<p>All those selections refer to different password management backends. <code>Twiki::Client::ApacheLogin</code> is implemented by <code>/twiki/lib/TWiki/Users/ApacheHtPasswdUser.pm</code> and <code>Twiki::Client::TemplateLogin</code> is implemented by <code>/twiki/lib/TWiki/Users/HtpasswdUser.pm</code>. In <code>/twiki/lib/TWiki/Users/Password.pm</code> the <a href="http://twiki.org/cgi-bin/view/TWiki04/TWikiUsersPasswordDotPm">interface</a> is defined. You can check out funny source code sequences like this:</p>
<div class="syntax perl"> 86 <span class="cm">&#8212;++ ObjectMethod checkPassword( $user, $passwordU ) -&gt; $boolean</span><br />
 87<br />
 88 <span class="cm">Finds if the password is valid for the given login.</span><br />
 89<br />
 90 <span class="cm">Returns 1 on success, undef on failure.</span><br />
 91<br />
 92 <span class="cm">=cut</span><br />
 93<br />
 94 <span class="k">sub </span><span class="nf">checkPassword</span> <span class="p">{</span><br />
 95    <span class="k" style="margin-left:30px">return</span> <span class="mi">1</span><span class="p">;</span><br />
 96 <span class="p">}</span></div>
<p>Well&#8230; this is our interface. Let&#8217;s have deeper look into the implementation.</p>
<h4>Twiki::Client::ApacheLogin</h4>
<p><a href="http://www.france-vo.org/twiki/bin/view/TWiki/TWikiUserAuthentication#Apache_Login_select_TWiki_Client">ApacheLogin</a> uses the Apache interface to send <a href="http://en.wikipedia.org/wiki/Http_status_codes#4xx_Client_Error">401 HTTP Status codes</a>. If the client receives one of those status codes, a Username and Password Dialog pops up.</p>
<p style="text-align:center"><a href="http://lukas-prokop.at/blog/wp-content/uploads/2011/10/401_password_dialog.png"><img src="http://lukas-prokop.at/blog/wp-content/uploads/2011/10/401_password_dialog.png" alt="Password Dialog for 401 Status Codes" title="401_password_dialog" width="387" height="247" /></a></p>
<p>Using this dialog, the login information will be sent to the server. Using a loop in perl, we can print out what the server receives as CGI variables (the ones defined by the server and given to the perl interpreter). I have put the following source code into <code>/twiki/lib/Twiki/Users/HtPasswdUser.pm</code> subroutine <code>new</code> (don&#8217;t forget to <a href="http://twiki.org/cgi-bin/view/Codev/TWikiDebugging">include Data::Dumper</a>).</p>
<div class="syntax perl">    <span class="k">my</span> <span class="nv">$key</span><span class="p">;</span><br />
    <span class="k">foreach</span> <span class="nv">$key</span> <span class="p">(</span><span class="nb">sort</span><span class="p">(</span><span class="nb">keys</span> <span class="nv">%ENV</span><span class="p">))</span> <span class="p">{</span><br />
        <span class="k">print</span> <span class="bp">STDERR</span> <span class="nn">Data::</span><span class="n">Dumper</span><span class="o">-&gt;</span><span class="n">Dump</span><span class="p">([</span> <span class="nv">$ENV</span><span class="p">{</span><span class="nv">$key</span><span class="p">}</span> <span class="p">]</span><span class="o">,</span> <span class="p">[</span><span class="nv">$key</span><span class="p">]</span>);<br />
    <span class="p">}</span></div>
<p>From the Apache log, we will get the following information.</p>
<pre>[...]
HTTP_COOKIE = 'TWIKISID=d00fe404e65832f9d95658d6d9112bec';, referer: /twiki/bin/logon/TWiki/TWikiRegistration
[...]
REDIRECT_REMOTE_USER = 'LukasProkop';, referer: /twiki/bin/logon/TWiki/TWikiRegistration
[...]
REDIRECT_STATUS = '401';, referer: /twiki/bin/logon/TWiki/TWikiRegistration
[...]
</pre>
<p>Actually I was looking for REMOTE_USER, which is a CGI variable only defined when Authorization was done. The cookie is not really interesting, but REDIRECT_STATUS approves that auth was done. REDIRECT_REMOTE_USER seems to be REMOTE_USER I am looking for&#8230; in some way. Alright&#8230; so what do we have here? Well&#8230; password and username associations are tested automatically by the Apache server and perl will not receive the password itself. Perl can assume that auth was done successfully and does not recognize it any further. Alright. So we have to determine where the passwords are stored.</p>
<p>Passwords for <a href="http://httpd.apache.org/docs/2.0/mod/mod_auth.html">mod_auth</a> are stored in <code>.htpasswd</code> files. A small UNIX <code>find</code> will return <code>/twiki/data/.htpasswd</code>. This file is updated for each change by the perl script.</p>
<pre>LukasProkop:11/Yysc0Op9D2:unixuser@localhost</pre>
<p>So the password is stored as a hash associated with the Login name and the local user name. Now let&#8217;s come to our real topic: Passwords with more than 8 characters. Let us create some additional accounts.</p>
<table style="width:100%">
<thead>
<tr>
<td>Username</td>
<td>Password</td>
</tr>
</thead>
<tbody>
<tr>
<td>KarlOrff</td>
<td>1234567</td>
</tr>
<tr>
<td>CamrinaBurana</td>
<td>123456789</td>
</tr>
<tr>
<td>DiesIrae</td>
<td>123456789123456789</td>
</tr>
<tr>
<td>SixteAjoutee</td>
<td>123456768912345678<strong>0</strong></td>
</tr>
</tbody>
</table>
<p>Well&#8230; our <code>.htpasswd</code> says:</p>
<pre>CarminaBurana:UXjIprwRygc1.:unixuser@localhost
DiesIrae:UtCp6NoUsQdaQ:unixuser@localhost
KarlOrff:7kQC9KJ/39yA.:unixuser@localhost
LukasProkop:11/Yysc0Op9D2:unixuser@localhost
SixteAjoutee:R07ipKyeiYlho:unixuser@localhost</pre>
<p>Now let&#8217;s log in with various accounts. As far as Twiki does not support a Logout button, the most comfortable way is to delete the cookie (see above) and refresh the page. Now we can see our problem: SixteAjoutee and DiesIrae can log in with each other ones password. The strange thing is, that their hashes are different. Our source code journey goes on&#8230;</p>
<h4>Violation of second-preimage resistance?</h4>
<pre>$TWiki::cfg{Htpasswd}{Encoding} = 'crypt';</pre>
<p>Our configuration file at <code>/twiki/lib/LocalSite.cfg</code> defines a variable for the various encoding algorithms. Of course such a variable is a perfect name to search for. The <code>configure</code> uses this variable, but HtPasswdUser.pm is the only other file.</p>
<p>The file encrypting the password is <code>HtPasswdUser.pm</code> at line 134. This file will apply the <a href="http://osix.net/modules/article/?id=571">crypt function</a> with a random salt to the password. The salt is 2 characters in length and stored at the front of the <strong>actually stored password</strong>. A small test script reveals the truth:</p>
<div class="syntax perl"><span class="k">print</span> <span class="nb">crypt</span><span class="p">(</span><span class="s">&quot;123456789123456789&quot;</span><span class="p">,</span> <span class="s">&quot;Ut&quot;</span><span class="p">)</span> <span class="ow">eq</span> <span class="s">&quot;UtCp6NoUsQdaQ&quot;</span><span class="p">;</span><br />
<span class="k">print</span> <span class="nb">crypt</span><span class="p">(</span><span class="s">&quot;123456789123456780&quot;</span><span class="p">,</span> <span class="s">&quot;R0&quot;</span><span class="p">)</span> <span class="ow">eq</span> <span class="s">&quot;R07ipKyeiYlho&quot;</span><span class="p">;</span></div>
<p>So there we have our problem. crypt uses the DES algorithm from the operating system and is limited to an input of 8 characters.</p>
<div class="syntax perl"><span class="k">print</span> <span class="nb">crypt</span><span class="p">(</span><span class="s">&quot;12345678B&quot;</span><span class="p">,</span> <span class="s">&quot;Ut&quot;</span><span class="p">)</span> <span class="ow">eq</span> <span class="s">&quot;UtCp6NoUsQdaQ&quot;</span><span class="p">;</span><br />
<span class="k">print</span> <span class="nb">crypt</span><span class="p">(</span><span class="s">&quot;12345678A&quot;</span><span class="p">,</span> <span class="s">&quot;R0&quot;</span><span class="p">)</span> <span class="ow">eq</span> <span class="s">&quot;R07ipKyeiYlho&quot;</span><span class="p">;</span></div>
<h4>The collision-free solution</h4>
<p>Of course the algorithm is the problem and a selection of another algorithm like sha1 (nope, <strong>no</strong> MD5!) would solve the problem. We do <em>not</em> rely on the <a href="http://google.at/search?q=unix+8+characters+password">operating system</a> or missing implementations of other crypto algorithms.</p>
<div class="syntax perl"><span class="c1">#!/usr/bin/perl -wT</span></p>
<p><span class="nb">require</span> <span class="nn">MIME::</span><span class="n">Base64</span><span class="p">;</span><br />
<span class="nb">import</span> <span class="nn">MIME::</span><span class="n">Base64</span> <span class="sx">qw( encode_base64 )</span><span class="p">;</span><br />
<span class="nb">require</span> <span class="nn">Digest::</span><span class="n">SHA1</span><span class="p">;</span><br />
<span class="nb">import</span> <span class="nn">Digest::</span><span class="n">SHA1</span> <span class="sx">qw( sha1 )</span><span class="p">;</span></p>
<p><span class="k">sub </span><span class="nf">get</span><br />
<span class="p">{</span><br />
    <span class="k">my</span><span class="p">(</span> <span class="nv">$passwd</span> <span class="p">)</span> <span class="o">=</span> <span class="nv">@_</span><span class="p">;</span></p>
<p>    <span class="k">my</span> <span class="nv">$encodedPassword</span> <span class="o">=</span> <span class="s">&#39;{SHA}&#39;</span><span class="o">.</span><br />
    <span class="nn">MIME::Base64::</span><span class="n">encode_base64</span><span class="p">(</span> <span class="nn">Digest::SHA1::</span><span class="n">sha1</span><span class="p">(</span> <span class="nv">$passwd</span> <span class="p">)</span> <span class="p">);</span><br />
    <span class="nv">$encodedPassword</span> <span class="o">=~</span> <span class="sr">s/\s+$//</span><span class="p">;</span><br />
    <span class="k">return</span> <span class="nv">$encodedPassword</span><span class="p">;</span><br />
<span class="p">}</span></p>
<p><span class="k">print</span> <span class="n">get</span><span class="p">(</span><span class="s">&quot;1234568B&quot;</span><span class="p">),</span> <span class="s">&quot;\n&quot;</span><span class="p">;</span><br />
<span class="k">print</span> <span class="n">get</span><span class="p">(</span><span class="s">&quot;1234568A&quot;</span><span class="p">),</span> <span class="s">&quot;\n&quot;</span><span class="p">;</span></div>
<p>This program returns two <strong>different</strong> hashes:</p>
<pre>{SHA}sgDumzcRNpPJL8tCgM18JIR1ayc=
{SHA}RsUxZFkQgYAeTdsPmIixTYEdFgg=</pre>
<h4>Migration</h4>
<p>How can thousands of user accounts be migrated to another algorithm? As far as the hash is stored as a one-way encrypted string, the encryption of the real password with another algorithm is almost impossible. I have written a small crypt() <a href="http://paste.pocoo.org/show/495254/">cracking program</a> in python (sorry, Perl <img src='http://lukas-prokop.at/blog/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  ), but of course it is way too slow; even for a single password. So the only solution is to reset all passwords of all users. First call the /twiki/bin/configure script and change the algorithm setting (&#8220;{Htpasswd}{Encoding}&#8221; in the &#8220;Security Setup&#8221; section) [0] and secondly, <a href="http://www.twiki.org/cgi-bin/view/Wiki/BulkResetPassword">BulkResetPassword</a> will help you reset the passwords for all users. It takes some effort and time, but in the end you will gain a higher level of security <img src='http://lukas-prokop.at/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />      </p>
<p>[0] It is also possible to directly modify the <code>$TWiki::cfg{Htpasswd}{Encoding}</code> line in <code>/twiki/lib/LocalSite.cfg</code></p>
]]></content:encoded>
			<wfw:commentRss>http://lukas-prokop.at/blog/2011/10/twiki-and-8-character-passwords/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HowTo: Bugfix file too large for wordpress importer</title>
		<link>http://lukas-prokop.at/blog/2011/09/howto-bugfix-file-too-large-for-wordpress-importer/</link>
		<comments>http://lukas-prokop.at/blog/2011/09/howto-bugfix-file-too-large-for-wordpress-importer/#comments</comments>
		<pubDate>Tue, 27 Sep 2011 21:30:55 +0000</pubDate>
		<dc:creator>meisterluk</dc:creator>
				<category><![CDATA[software & technology]]></category>

		<guid isPermaLink="false">http://lukas-prokop.at/blog/?p=2106</guid>
		<description><![CDATA[<a href="http://lukas-prokop.at/blog/2011/09/howto-bugfix-file-too-large-for-wordpress-importer/" title="HowTo: Bugfix file too large for wordpress importer"></a>During the update to WordPress 3.2, I encountered (like many other people) the problem with limitation of the filesize for file uploads. Per default PHP will set it to 2MB whereas my wordpress export backup file (XML) has already 4MB. &#8230;<p class="read-more"><a href="http://lukas-prokop.at/blog/2011/09/howto-bugfix-file-too-large-for-wordpress-importer/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<a href="http://lukas-prokop.at/blog/2011/09/howto-bugfix-file-too-large-for-wordpress-importer/" title="HowTo: Bugfix file too large for wordpress importer"></a><p>During the update to WordPress 3.2, I encountered (like many other people) the problem with limitation of the filesize for file uploads. Per default PHP will set it to 2MB whereas my wordpress export backup file (XML) has already 4MB. No, reconfiguring PHP&#8217;s <code>upload_max_filesize</code> was no option for me as far as the backup was already stored as a dump at the server. So my only thing to do was to replace the uploaded file with the already existing at the harddisk and make WordPress recognizing it. And this was not that difficult if you know where to look for. So here is my patch to get the wordpress-importer import a file already stored at the server hard disk. The wordpress export file to load has to be stored at <code>wp-content/uploads/wordpress.import.xml</code>.</p>
<div class="syntax">
<pre class="diff"><span class="gh">diff --git a/wp-content/plugins/wordpress-importer/wordpress-importer.php b/wp-content/plugins/wordpress-importer/wordpress-importer.php</span>
<span class="gh">index 5e38484..e0cace0 100644</span>
<span class="gd">--- a/wp-content/plugins/wordpress-importer/wordpress-importer.php</span>
<span class="gi">+++ b/wp-content/plugins/wordpress-importer/wordpress-importer.php</span>
<span class="gu">@@ -102,6 +102,7 @@ class WP_Import extends WP_Importer {</span>
         * @param string $file Path to the WXR file for importing
         */
        function import( $file ) {
<span class="gi">+               $file = ABSPATH . &#39;wp-content/uploads/wordpress.import.xml&#39;; #wp_import_handle_upload();</span>
                add_filter( &#39;import_post_meta_key&#39;, array( $this, &#39;is_valid_meta_key&#39; ) );
                add_filter( &#39;http_request_timeout&#39;, array( &amp;$this, &#39;bump_request_timeout&#39; ) );

<span class="gu">@@ -132,7 +133,7 @@ class WP_Import extends WP_Importer {</span>
        function import_start( $file ) {
                if ( ! is_file($file) ) {
                        echo &#39;&lt;p&gt;&lt;strong&gt;&#39; . __( &#39;Sorry, there has been an error.&#39;, &#39;wordpress-importer&#39; ) . &#39;&lt;/strong&gt;&lt;br /&gt;&#39;;
<span class="gd">-                       echo __( &#39;The file does not exist, please try again.&#39;, &#39;wordpress-importer&#39; ) . &#39;&lt;/p&gt;&#39;;</span>
<span class="gi">+                       echo __( &#39;The file &#39;.htmlspecialchars($file).&#39; does not exist, please try again.&#39;, &#39;wordpress-importer&#39; ) . &#39;&lt;/p&gt;&#39;;</span>
                        $this-&gt;footer();
                        die();
                }
<span class="gu">@@ -188,7 +189,7 @@ class WP_Import extends WP_Importer {</span>
         * @return bool False if error uploading or invalid file, true otherwise
         */
        function handle_upload() {
<span class="gd">-               $file = wp_import_handle_upload();</span>
<span class="gi">+               $file = array(&#39;id&#39; =&gt; 4869, &#39;file&#39; =&gt; ABSPATH . &#39;wp-content/uploads/wordpress.import.xml&#39;); #wp_import_handle_upload();</span>

                if ( isset( $file[&#39;error&#39;] ) ) {
                        echo &#39;&lt;p&gt;&lt;strong&gt;&#39; . __( &#39;Sorry, there has been an error.&#39;, &#39;wordpress-importer&#39; ) . &#39;&lt;/strong&gt;&lt;br /&gt;&#39;;
</pre>
</div>
<p>I did not put any further (compatibility) research into that issue. Worked for me™ with WordPress Version 3.2 and PHP Version 5.3.</p>
<p><a href="http://codex.wordpress.org/FAQ_Working_with_WordPress#Importing_and_Exporting">WordPress FAQ: Import and Export</a></p>
]]></content:encoded>
			<wfw:commentRss>http://lukas-prokop.at/blog/2011/09/howto-bugfix-file-too-large-for-wordpress-importer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Python wants to become one-based?</title>
		<link>http://lukas-prokop.at/blog/2011/09/python-wants-to-become-one-based/</link>
		<comments>http://lukas-prokop.at/blog/2011/09/python-wants-to-become-one-based/#comments</comments>
		<pubDate>Sat, 10 Sep 2011 08:41:55 +0000</pubDate>
		<dc:creator>meisterluk</dc:creator>
				<category><![CDATA[software & technology]]></category>

		<guid isPermaLink="false">http://lukas-prokop.at/blog/?p=2054</guid>
		<description><![CDATA[<a href="http://lukas-prokop.at/blog/2011/09/python-wants-to-become-one-based/" title="Python wants to become one-based?"></a>Yesterday (or today in my timezone) Guido wrote a reply, which indicated that he wants python to become one-based. I have written recently about my WTF-situation when I realized that SQL is one-based (and also Lua which comes up in &#8230;<p class="read-more"><a href="http://lukas-prokop.at/blog/2011/09/python-wants-to-become-one-based/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<a href="http://lukas-prokop.at/blog/2011/09/python-wants-to-become-one-based/" title="Python wants to become one-based?"></a><p>Yesterday (or today in my timezone) <a href="http://mail.python.org/pipermail/python-ideas/2011-September/011448.html">Guido wrote a reply</a>, which indicated that he wants python to become one-based. I have <a href="/blog/2011/08/when-mysql-substr-does-not-work/">written recently</a> about my WTF-situation when I realized that SQL is one-based (and also Lua which comes up in the python&#8217;s mailing list discussion). Personally speaking I think that python is that damn <a href="http://lucumr.pocoo.org/2011/7/9/python-and-pola/">intuitive</a> because it&#8217;s based on mathematical principles (which Guido as mathematician is aware of). But math is not that consistent and beautiful that it solves all problems.</p>
<p>A sequence of numbers is a range of numbers from x to y with <code>x</code> included but <code>y</code> excluded. To get all indizes of a list, you can use <code>range(0, len(seq))</code>. This is damn readable and does not include a nasty <code>-1</code> like in most other languages. Well&#8230; life is not that <a href="/proj/snippets/py004.html">beautiful</a>. If we change to a one-based numbering system, what will happen? <code>range(1, len(seq)+1)</code>? Seriously? Lua does not exclude <code>y</code> and therefore does not have a nasty <code>+1</code>.</p>
<p>Lists start with 0, because 0 is the <del>first</del><ins>zeroth</ins> number. In a decimal system, the <del>first</del><ins>zeroth</ins> number with two digits is 10. Three digits: 100. The least-significant number is always zero. The <del>first</del><ins>zeroth</ins> number with one digit is 1? This only comes from an exception in mathematics (10<sup>2..0</sup>).</p>
<p>If I want to have all numbers in a list at <code>2*n</code> indizes in python I will use &#8230;</p>
<pre class="syntax py python"><span class="o">&gt;&gt;&gt;</span> <span class="n">a</span> <span class="o">=</span> <span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">4</span><span class="p">,</span> <span class="mi">5</span><span class="p">,</span> <span class="mi">6</span><span class="p">,</span> <span class="mi">7</span><span class="p">,</span> <span class="mi">8</span><span class="p">,</span> <span class="mi">9</span><span class="p">,</span> <span class="mi">0</span><span class="p">]</span>
<span class="o">&gt;&gt;&gt;</span> <span class="p">[</span><span class="n">a</span><span class="p">[</span><span class="mi">2</span> <span class="o">*</span> <span class="n">index</span><span class="p">]</span> <span class="k">for</span> <span class="n">index</span> <span class="ow">in</span> <span class="nb">xrange</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">a</span><span class="p">)</span> <span class="o">/</span> <span class="mi">2</span><span class="p">)]</span>
<span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">5</span><span class="p">,</span> <span class="mi">7</span><span class="p">,</span> <span class="mi">9</span><span class="p">]</span></pre>
<p>Again: No nasty <code>+1</code>. Just like <a href="http://en.wikipedia.org/wiki/Zero-based_numbering#Advantages">Wikipedia</a> points out, it&#8217;s about congruence.</p>
<p>I understand that in certain situations it can be useful. If you want to get all numbers at 2<sup>n</sup> indizes, you probably want to have the mathematical base<sup>0</sup>=1 and you would be fine with one-based systems. You probably want to get the real <del>first</del><ins>zeroth</ins> number:</p>
<pre class="syntax py python"><span class="o">&gt;&gt;&gt;</span> <span class="kn">import</span> <span class="nn">math</span>
<span class="o">&gt;&gt;&gt;</span> <span class="n">a</span> <span class="o">=</span> <span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">5</span><span class="p">,</span> <span class="mi">8</span><span class="p">,</span> <span class="mi">13</span><span class="p">,</span> <span class="mi">21</span><span class="p">,</span> <span class="mi">34</span><span class="p">]</span>
<span class="o">&gt;&gt;&gt;</span> <span class="p">[</span><span class="n">a</span><span class="p">[</span><span class="mi">2</span> <span class="o">**</span> <span class="n">index</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span> <span class="k">for</span> <span class="n">index</span> <span class="ow">in</span> <span class="nb">xrange</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="nb">int</span><span class="p">(</span><span class="n">math</span><span class="o">.</span><span class="n">log</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">a</span><span class="p">),</span> <span class="mi">2</span><span class="p">))</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)]</span>
<span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">13</span><span class="p">]</span></span></pre>
<p>For Lua it just says:</p>
<pre class="syntax lua"><span class="n">a</span> <span class="o">=</span> <span class="p">{</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">5</span><span class="p">,</span> <span class="mi">8</span><span class="p">,</span> <span class="mi">13</span><span class="p">,</span> <span class="mi">21</span><span class="p">,</span> <span class="mi">34</span><span class="p">}</span>
<span class="k">for</span> <span class="n">index</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span><span class="nb">math.log</span><span class="p">(</span><span class="o">#</span><span class="n">a</span><span class="o">+</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span><span class="o">+</span><span class="mi">1</span> <span class="k">do</span>
  <span class="nb">print</span><span class="p">(</span><span class="n">a</span><span class="p">[</span><span class="mi">2</span> <span class="o">^</span> <span class="n">index</span><span class="p">])</span>
<span class="k">end</span>
</pre>
<p>I have shown only mathematical examples, but science is want I consider to be one of the most important fields for python. Other (especially old-school) languages really suck at this and it&#8217;s one of python&#8217;s strengths to be fine with scientists from other fields. In a mathematical context one-based systems it might be okay (see MATLAB), but for me a list starting with 1 is unpythonic and not useful. Yes, just like the Lua community I can live with a one-based languages, but I generally consider it to be a design fault.</p>
<p>Thanks to Bruce Leban for this <a href="http://mail.python.org/pipermail/python-ideas/2011-September/011454.html">awesome funny reply</a>.</p>
<p><strong>Update:</strong> Guido, you got me. It was a <a href="http://mail.python.org/pipermail/python-ideas/2011-September/011462.html">joke</a> <img src='http://lukas-prokop.at/blog/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://lukas-prokop.at/blog/2011/09/python-wants-to-become-one-based/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>When MySQL substr does not work</title>
		<link>http://lukas-prokop.at/blog/2011/08/when-mysql-substr-does-not-work/</link>
		<comments>http://lukas-prokop.at/blog/2011/08/when-mysql-substr-does-not-work/#comments</comments>
		<pubDate>Tue, 16 Aug 2011 20:32:37 +0000</pubDate>
		<dc:creator>meisterluk</dc:creator>
				<category><![CDATA[software & technology]]></category>

		<guid isPermaLink="false">http://lukas-prokop.at/blog/?p=2017</guid>
		<description><![CDATA[<a href="http://lukas-prokop.at/blog/2011/08/when-mysql-substr-does-not-work/" title="When MySQL substr does not work"></a>So let&#8217;s start with a simple MySQL setup: mysql&#62; CREATE TABLE example (prefix VARCHAR(50), domain VARCHAR(30), PRIMARY KEY(prefix, domain)); Query OK, 0 rows affected (0.02 sec) mysql&#62; INSERT INTO example VALUES ("hello", "world.org"), ("foo", "bar"), ("Foot","ball"); Query OK, 3 rows &#8230;<p class="read-more"><a href="http://lukas-prokop.at/blog/2011/08/when-mysql-substr-does-not-work/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<a href="http://lukas-prokop.at/blog/2011/08/when-mysql-substr-does-not-work/" title="When MySQL substr does not work"></a><p>So let&#8217;s start with a simple MySQL setup:</p>
<pre>mysql&gt; CREATE TABLE example (prefix VARCHAR(50),
domain VARCHAR(30), PRIMARY KEY(prefix, domain));
Query OK, 0 rows affected (0.02 sec)

mysql&gt; INSERT INTO example VALUES
("hello", "world.org"), ("foo", "bar"),  ("Foot","ball");
Query OK, 3 rows affected (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 0</pre>
<p>Alright&#8230; so we have some sort of &#8220;split up&#8221; email addresses. It&#8217;s not a problem to combine them together on the fly as far as MySQL provides basic string operations.</p>
<pre>mysql&gt; SELECT CONCAT(prefix, "@", domain) as email_addr FROM example;
+-----------------+
| email_addr      |
+-----------------+
| foo@bar         |
| Foot@ball       |
| hello@world.org |
+-----------------+
3 rows in set (0.00 sec)</pre>
<p>So now let&#8217;s say, we want to remove the Top Level Domain from the domain (&#8220;world&#8221; instead of &#8220;world.org&#8221;) <a href="#index01">[1]</a>.</p>
<pre>mysql&gt; SELECT SUBSTR(domain, 0, LOCATE('.', domain)-1) as tld FROM example;
+-----+
| tld |
+-----+
|     |
|     |
|     |
+-----+
3 rows in set (0.00 sec)
</pre>
<p>What? Let&#8217;s slow down&#8230; take a substring of domain starting at position zero and with length of the position of the &#8220;.&#8221; (dot character) minus 1 (before that dot character). Okay&#8230; so something has to be wrong about it.</p>
<pre>mysql&gt; SELECT domain as tld FROM example;
+-----------+
| tld       |
+-----------+
| bar       |
| ball      |
| world.org |
+-----------+
3 rows in set (0.00 sec)</pre>
<p>A quarter of an hour later I realized the problem with the help of a colleague:</p>
<pre>mysql&gt; SELECT SUBSTR(domain, 1, LOCATE('.', domain)-1) as tld FROM example;
+-------+
| tld   |
+-------+
|       |
|       |
| world |
+-------+
3 rows in set (0.00 sec)</pre>
<p>SQL (and therefore the substr function) is <a href="https://secure.wikimedia.org/wikipedia/en/wiki/One-based_indexing#Index_origin">one-based</a>. So to address the first character you have to specify it using &#8220;1&#8243;. MySQL uses 0 to tell &#8220;no match&#8221;.</p>
<p>Stupid world. Why do we have conventions? To break them? I was aware that MATLAB sucks in this regard too, but I was shocked, when I heard about Lua (both <a href="https://secure.wikimedia.org/wikipedia/en/wiki/Comparison_of_programming_languages_%28array%29#Array_system_cross-reference_list">languages</a> one-based).</p>
<p><strong id="index01">Note [1].</strong> If you really have such an usecase, please refer to <a href="http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_substring-index">SUBSTRING_INDEX</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://lukas-prokop.at/blog/2011/08/when-mysql-substr-does-not-work/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The XOR issue</title>
		<link>http://lukas-prokop.at/blog/2011/06/the-xor-issue/</link>
		<comments>http://lukas-prokop.at/blog/2011/06/the-xor-issue/#comments</comments>
		<pubDate>Mon, 13 Jun 2011 14:22:19 +0000</pubDate>
		<dc:creator>meisterluk</dc:creator>
				<category><![CDATA[software & technology]]></category>

		<guid isPermaLink="false">http://lukas-prokop.at/blog/?p=1959</guid>
		<description><![CDATA[<a href="http://lukas-prokop.at/blog/2011/06/the-xor-issue/" title="The XOR issue"></a>In discrete mathematics, you often define chains of logical operations. XOR has an issue, not everybody is aware of. If it&#8217;s used with 3 variables, it loses its most important behaviour: Indicating that only one value is set to True. &#8230;<p class="read-more"><a href="http://lukas-prokop.at/blog/2011/06/the-xor-issue/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<a href="http://lukas-prokop.at/blog/2011/06/the-xor-issue/" title="The XOR issue"></a><p>In discrete mathematics, you often define chains of logical operations. XOR has an issue, not everybody is aware of. If it&#8217;s used with 3 variables, it loses its most important behaviour: Indicating that only one value is set to True.</p>
<table width="100%" border="1" cellpadding="6" style="text-align:center">
<thead>
<tr>
<th>A</th>
<th>B</th>
<th>C</th>
<th>A &oplus; B &oplus; C</th>
</tr>
</thead>
<tbody>
<tr>
<td>True</td>
<td>True</td>
<td>True</td>
<td><b>True</b></td>
</tr>
<tr>
<td>True</td>
<td>True</td>
<td>False</td>
<td>False</td>
</tr>
<tr>
<td>True</td>
<td>False</td>
<td>True</td>
<td>False</td>
</tr>
<tr>
<td>True</td>
<td>False</td>
<td>False</td>
<td>True</td>
</tr>
<tr>
<td>False</td>
<td>True</td>
<td>True</td>
<td>False</td>
</tr>
<tr>
<td>False</td>
<td>True</td>
<td>False</td>
<td>True</td>
</tr>
<tr>
<td>False</td>
<td>False</td>
<td>True</td>
<td>True</td>
</tr>
<tr>
<td>False</td>
<td>False</td>
<td>False</td>
<td>False</td>
</tr>
</tbody>
</table>
<p>In the end, the XOR keeps associative for 3 variables: (A &oplus; B) &oplus; C = A &oplus; (B &oplus; C). For any greater number of variables the behaviour is in no intuitive relation with 2-var-XOR any longer:</p>
<table width="100%" border="1" cellpadding="6" style="text-align:center">
<thead>
<tr>
<th>A</th>
<th>B</th>
<th>C</th>
<th>D</th>
<th>A &oplus; B &oplus; C &oplus; D</th>
</tr>
</thead>
<tbody>
<tr>
<td>True</td>
<td>True</td>
<td>True</td>
<td>True</td>
<td>False</td>
</tr>
<tr>
<td>True</td>
<td>True</td>
<td>True</td>
<td>False</td>
<td>True</td>
</tr>
<tr>
<td>True</td>
<td>True</td>
<td>False</td>
<td>True</td>
<td>True</td>
</tr>
<tr>
<td>True</td>
<td>True</td>
<td>False</td>
<td>False</td>
<td>False</td>
</tr>
<tr>
<td>True</td>
<td>False</td>
<td>True</td>
<td>True</td>
<td>True</td>
</tr>
<tr>
<td>True</td>
<td>False</td>
<td>True</td>
<td>False</td>
<td>False</td>
</tr>
<tr>
<td>True</td>
<td>False</td>
<td>False</td>
<td>True</td>
<td>False</td>
</tr>
<tr>
<td>True</td>
<td>False</td>
<td>False</td>
<td>False</td>
<td>True</td>
</tr>
<tr>
<td>False</td>
<td>True</td>
<td>True</td>
<td>True</td>
<td>True</td>
</tr>
<tr>
<td>False</td>
<td>True</td>
<td>True</td>
<td>False</td>
<td>False</td>
</tr>
<tr>
<td>False</td>
<td>True</td>
<td>False</td>
<td>True</td>
<td>False</td>
</tr>
<tr>
<td>False</td>
<td>True</td>
<td>False</td>
<td>False</td>
<td>True</td>
</tr>
<tr>
<td>False</td>
<td>False</td>
<td>True</td>
<td>True</td>
<td>False</td>
</tr>
<tr>
<td>False</td>
<td>False</td>
<td>True</td>
<td>False</td>
<td>True</td>
</tr>
<tr>
<td>False</td>
<td>False</td>
<td>False</td>
<td>True</td>
<td>True</td>
</tr>
<tr>
<td>False</td>
<td>False</td>
<td>False</td>
<td>False</td>
<td>False</td>
</tr>
</tbody>
</table>
<p>If you want to experiment with XOR, I want to refer to my article <a href="http://lukas-prokop.at/blog/2010/11/truthtable-script/">Truthtable with python</a> and XOR is in python a caret &#8220;^&#8221;.</p>
]]></content:encoded>
			<wfw:commentRss>http://lukas-prokop.at/blog/2011/06/the-xor-issue/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Advertisments not for everybody</title>
		<link>http://lukas-prokop.at/blog/2011/06/advertisments-not-for-everybody/</link>
		<comments>http://lukas-prokop.at/blog/2011/06/advertisments-not-for-everybody/#comments</comments>
		<pubDate>Mon, 06 Jun 2011 08:34:42 +0000</pubDate>
		<dc:creator>meisterluk</dc:creator>
				<category><![CDATA[software & technology]]></category>

		<guid isPermaLink="false">http://lukas-prokop.at/blog/?p=1952</guid>
		<description><![CDATA[<a href="http://lukas-prokop.at/blog/2011/06/advertisments-not-for-everybody/" title="Advertisments not for everybody"></a>Probably such advertisements are not attractive for everybody :-/]]></description>
			<content:encoded><![CDATA[<a href="http://lukas-prokop.at/blog/2011/06/advertisments-not-for-everybody/" title="Advertisments not for everybody"></a><p style="text-align:center"><a href="http://lukas-prokop.at/blog/wp-content/uploads/2011/06/ads_not_for_everybody.png"><img title="ads_not_for_everybody" src="http://lukas-prokop.at/blog/wp-content/uploads/2011/06/ads_not_for_everybody.png" alt="Advertisement showing source code instead of content" width="292" height="263" /></a></p>
<p>Probably such advertisements are not attractive for everybody :-/</p>
]]></content:encoded>
			<wfw:commentRss>http://lukas-prokop.at/blog/2011/06/advertisments-not-for-everybody/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HowTo subscribe to the (non-existent) twitter user RSS feed</title>
		<link>http://lukas-prokop.at/blog/2011/06/howto-subscribe-to-the-non-existent-twitter-user-rss-feed/</link>
		<comments>http://lukas-prokop.at/blog/2011/06/howto-subscribe-to-the-non-existent-twitter-user-rss-feed/#comments</comments>
		<pubDate>Wed, 01 Jun 2011 07:15:14 +0000</pubDate>
		<dc:creator>meisterluk</dc:creator>
				<category><![CDATA[software & technology]]></category>

		<guid isPermaLink="false">http://lukas-prokop.at/blog/?p=1948</guid>
		<description><![CDATA[<a href="http://lukas-prokop.at/blog/2011/06/howto-subscribe-to-the-non-existent-twitter-user-rss-feed/" title="HowTo subscribe to the (non-existent) twitter user RSS feed"></a>I will explain it for Mozilla Thunderbird since this is my current feed reader. Just leave out steps 3, 4, 6 and 7 for any other feed reader. Get the name of the twitter user. Get the ID of the &#8230;<p class="read-more"><a href="http://lukas-prokop.at/blog/2011/06/howto-subscribe-to-the-non-existent-twitter-user-rss-feed/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<a href="http://lukas-prokop.at/blog/2011/06/howto-subscribe-to-the-non-existent-twitter-user-rss-feed/" title="HowTo subscribe to the (non-existent) twitter user RSS feed"></a><p>I will explain it for Mozilla Thunderbird since this is my current feed reader. Just leave out steps 3, 4, 6 and 7 for any other feed reader.</p>
<ol>
<li>Get the name of the twitter user.</li>
<li>Get the <a href="http://www.idfromuser.com/">ID of the twitter user by name</a>.</li>
<li>Open Thunderbird, select the top-level element containing your RSS feeds.</li>
<li>Select &#8220;Manage subscriptions&#8221; and click &#8220;Add&#8221;.</li>
<li>The feed URL is http://twitter.com/statuses/user_timeline/&lt;userID&gt;.rss (with the placeholder replaced)</li>
<li>Click &#8220;Ok&#8221; to subscribe and move the RSS-Feed to any subfolder you would like to place it.</li>
<li>Prefer &#8220;View&#8221; &gt; &#8220;Feed Message Body As&#8221; &gt; &#8220;Plain Text&#8221; and &#8220;Summary&#8221;</li>
</ol>
<p>Why &#8220;non-existent&#8221;? Because Twitter has <a href="http://support.twitter.com/groups/31-twitter-basics/topics/111-features/articles/15361-how-to-find-your-rss-feed">dropped support</a> for user RSS feeds some time ago. The feeds still exist, but should not be used. However I like RSS and was using this feature for the last 2 years continuously. This decision annoys me <img src='http://lukas-prokop.at/blog/wp-includes/images/smilies/icon_sad.gif' alt=':-(' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://lukas-prokop.at/blog/2011/06/howto-subscribe-to-the-non-existent-twitter-user-rss-feed/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

