<?xml version="1.0" encoding="utf-8" ?>
<?xml-stylesheet href="/blog/templates/default/atom.css" type="text/css" ?>

<feed 
   xmlns="http://www.w3.org/2005/Atom"
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:admin="http://webns.net/mvcb/"
   xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
   xmlns:wfw="http://wellformedweb.org/CommentAPI/">
    <link href="http://pol.spurious.biz/blog/feeds/atom10.xml" rel="self" title="POL's fortune factory" type="application/atom+xml" />
    <link href="http://pol.spurious.biz/blog/"                        rel="alternate"    title="POL's fortune factory" type="text/html" />
    <link href="http://pol.spurious.biz/blog/rss.php?version=2.0"     rel="alternate"    title="POL's fortune factory" type="application/rss+xml" />
    <title type="html">POL's fortune factory</title>
    <subtitle type="html"></subtitle>
    <icon>http://pol.spurious.biz/blog/templates/default/img/s9y_banner_small.png</icon>
    <id>http://pol.spurious.biz/blog/</id>
    <updated>2010-02-02T16:30:51Z</updated>
    <generator uri="http://www.s9y.org/" version="1.5.1">Serendipity 1.5.1 - http://www.s9y.org/</generator>
    <dc:language>en</dc:language>

    <entry>
        <link href="http://pol.spurious.biz/blog/archives/79-Google-fail-goodbye.html" rel="alternate" title="Google fail / goodbye" />
        <author>
            <name>Pol</name>
                    </author>
    
        <published>2010-02-02T16:22:15Z</published>
        <updated>2010-02-02T16:30:51Z</updated>
        <wfw:comment>http://pol.spurious.biz/blog/wfwcomment.php?cid=79</wfw:comment>
    
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://pol.spurious.biz/blog/rss.php?version=atom1.0&amp;type=comments&amp;cid=79</wfw:commentRss>
    
    
        <id>http://pol.spurious.biz/blog/archives/79-guid.html</id>
        <title type="html">Google fail / goodbye</title>
        <content type="xhtml" xml:base="http://pol.spurious.biz/blog/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                <p>Thanx for the ride! Used you a lot since the old .org days. Time for <a href="http://www.bing.com/"><strong>BING</strong></a>. And no, I will not get rid of the &quot;<a href="http://www.customizegoogle.com/">Customize google</a>&quot; extension 
to get rid of the <a href="http://www.google-watch.org/cgi-bin/cookie.htm">google cookie</a>.
 The day Google admitted to not being nice <a href="http://www.google-watch.org/krane.html">is long ago</a>.</p> 
<p><img src="http://pol.spurious.biz/blog/uploads/picks/googlefail.png" alt=""  /> <br /></p> 
<p> </p> 
            </div>
        </content>
        <dc:subject>bing</dc:subject>
<dc:subject>fail</dc:subject>
<dc:subject>google</dc:subject>
<dc:subject>search</dc:subject>

    </entry>
    <entry>
        <link href="http://pol.spurious.biz/blog/archives/78-Annoying-Thunderbird-3-imap-bug-leading-to-readunread-flag-randomly-changing.html" rel="alternate" title="Annoying Thunderbird 3 imap bug leading to read/unread flag randomly changing" />
        <author>
            <name>Pol</name>
                    </author>
    
        <published>2010-01-24T19:34:37Z</published>
        <updated>2010-01-29T12:33:52Z</updated>
        <wfw:comment>http://pol.spurious.biz/blog/wfwcomment.php?cid=78</wfw:comment>
    
        <slash:comments>13</slash:comments>
        <wfw:commentRss>http://pol.spurious.biz/blog/rss.php?version=atom1.0&amp;type=comments&amp;cid=78</wfw:commentRss>
    
    
        <id>http://pol.spurious.biz/blog/archives/78-guid.html</id>
        <title type="html">Annoying Thunderbird 3 imap bug leading to read/unread flag randomly changing</title>
        <content type="xhtml" xml:base="http://pol.spurious.biz/blog/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                <pre><strong>UPDATE </strong>25th Jan 2010: It looks like this is going to go into 3.0.2, as the attached patch is flagged approval&#8209;thunderbird3.0.2. Yes!</pre>
<p>Today, after upgrading my email server from <a title="Courier IMAP" href="http://www.courier-mta.org/imap/">Courier IMAP</a> to <a title="Dovecot" href="http://www.dovecot.org/">Dovecot</a>, I noticed that <a title="Thunderbird 3" href="http://www.mozillamessaging.com/">Thunderbird 3</a> seemed to randomly set the unread flag on super-old messages. Resetting those flags using a right-click and &quot;Mark Folder Read&quot; also didn't help. Forcing a rebuild of the index also failed solving the issue. Some searching reveiled a bug in the current version of Thunderbird 3: <a title="https://bugzilla.mozilla.org/show_bug.cgi?id=540554" href="https://bugzilla.mozilla.org/show_bug.cgi?id=540554">IMAP: In some folders a lot of mails is false marked as unread. 
(CONDSTORE is supportted by IMAP server)</a></p> 
<p>Not wanting to wait for a newer release (hopefull 3.0.2 will fix this issue), I figured out how to fix the symptom by tweaking the settings: You have to disable the use of CONDSTORE (see <a title="RFC 4551" href="http://www.faqs.org/rfcs/rfc4551.html">RFC 4551</a>) in Thunderbird 3.</p> 
<p>This is done like so:</p> 
<p>Open Thundebird 3 preferences and go to the &quot;Advanced Tab&quot; and click on &quot;Config Editor...&quot;</p> 
<p> <img src="http://pol.spurious.biz/blog/uploads/picks/thunderbird-condstore/condstore1.png" alt=""  /></p> 
<p>&#160;Then, acknowledge you know what you're doing although you might not</p> 
<p><img src="http://pol.spurious.biz/blog/uploads/picks/thunderbird-condstore/condstore2.png" alt=""  /> </p> 
<p>&#160;Type in &quot;condstore&quot; in the Filter: box and set <a href="http://mail.server.default.use_condstore">mail.server.default.use_condstore</a>&#160; to false by double clicking on the value<br /><img src="http://pol.spurious.biz/blog/uploads/picks/thunderbird-condstore/condstore3.png" alt=""  /><br /></p> 
<p>Exit Thunderbird and start over, the symptom should be gone with a slight penalty of using more bandwidth (due to the lack of condstore support).</p> 
<p>hope this helps.<br /></p> 
<p> <br /></p> 
            </div>
        </content>
        <dc:subject>bug</dc:subject>
<dc:subject>condstore</dc:subject>
<dc:subject>courier</dc:subject>
<dc:subject>dovecot</dc:subject>
<dc:subject>email</dc:subject>
<dc:subject>fail</dc:subject>
<dc:subject>imap</dc:subject>
<dc:subject>mozilla</dc:subject>
<dc:subject>thunderbird</dc:subject>
<dc:subject>thunderbird3</dc:subject>

    </entry>
    <entry>
        <link href="http://pol.spurious.biz/blog/archives/76-When-you-speak-of-the-devil....html" rel="alternate" title="When you speak of the devil..." />
        <author>
            <name>Pol</name>
                    </author>
    
        <published>2009-02-26T14:03:03Z</published>
        <updated>2009-02-26T15:03:06Z</updated>
        <wfw:comment>http://pol.spurious.biz/blog/wfwcomment.php?cid=76</wfw:comment>
    
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://pol.spurious.biz/blog/rss.php?version=atom1.0&amp;type=comments&amp;cid=76</wfw:commentRss>
    
    
        <id>http://pol.spurious.biz/blog/archives/76-guid.html</id>
        <title type="html">When you speak of the devil...</title>
        <content type="xhtml" xml:base="http://pol.spurious.biz/blog/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                <p>Just a couple of days ago, <a href="http://pol.spurious.biz/blog/archives/69-How-to-create-a-patent-infringement-with-a-couple-of-lines-of-code.html">I ranted about software patents</a>. Luckily, in the past, big corporations have (in general) refrained from suing others based on their software patent portfolio. But when you start speaking about the devil, inevitably it has to happen: <a href="http://lwn.net/Articles/320737/">Microsoft sues TomTom</a> over patents. Not going into the details of the patents involved, I still would like to place a public laugh on the triviality of at least one of them: &quot;<em>A vehicle computer system has a housing sized to be mounted in a vehicle dashboard or other appropriate location.</em>&quot; Wow, how smart! I would never ever in my whole life have gotten the idea of mounting a computer in a box in an appropriate location!<br /></p> 
<p>Ah well, are the days when Microsoft just ranted about open source over? Is it now going to become a patent troll?<br /></p> 
            </div>
        </content>
        <dc:subject>intellectual property</dc:subject>
<dc:subject>patents</dc:subject>

    </entry>
    <entry>
        <link href="http://pol.spurious.biz/blog/archives/69-How-to-create-a-patent-infringement-with-a-couple-of-lines-of-code.html" rel="alternate" title="How to create a patent infringement with a couple of lines of code" />
        <author>
            <name>Pol</name>
                    </author>
    
        <published>2009-02-23T21:07:00Z</published>
        <updated>2009-02-23T23:25:35Z</updated>
        <wfw:comment>http://pol.spurious.biz/blog/wfwcomment.php?cid=69</wfw:comment>
    
        <slash:comments>1</slash:comments>
        <wfw:commentRss>http://pol.spurious.biz/blog/rss.php?version=atom1.0&amp;type=comments&amp;cid=69</wfw:commentRss>
    
    
        <id>http://pol.spurious.biz/blog/archives/69-guid.html</id>
        <title type="html">How to create a patent infringement with a couple of lines of code</title>
        <content type="xhtml" xml:base="http://pol.spurious.biz/blog/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                <h2>Introduction <br /></h2> 
<p>I have been telling people around me that software patents are a bad idea <a href="http://homepages.cwi.nl/~paulk/patents/isnot/isnot.html">as it stands right now</a>. In this blog post, I want to focus on a specific argument in the discussion about software patents. My argument is in disfavour of software patents and is based on the concept of triviality. So first of all, what is trivial? As far as my understanding goes, triviality is the fact that an item, for example a piece of information, is unrelevant, unimportant in terms of semantic meaning, or just plain simple in its structure.</p> 
<p>What does that mean from a developers perspective? Let's take an example: to save a piece of information on a computer, one has to allocate memory for that information. Trivial. To compute the arithmetic average of a list of numbers, one has to compute the sum and divide the sum by the number of elements. Trivial. I hope you get my point: some problems are not really problems.<br /></p> 
<p>The process of creating software for a computer is constrained by a couple of circumstances. The laws of mathematics are one constraint, the hardware limitations another constraint. But most importantly, the problem to be solved (the job of programmers) is usually the biggest constraint. In mathematics, writing down the problem often leads directly to the solution. Look at the following problem:<br /></p> 
<div align="center"> 
<blockquote> 
<pre>x + 3 = 8</pre> 
</blockquote> 
</div> 
<p>This is the problem description on one hand, but also the implicit solution too, because by only changing the way it is written (through the laws of mathematics), one gets:</p> 
<blockquote> 
<div align="center"> 
<pre>x = 8 - 3</pre> 
</div> 
</blockquote> 
<h2>The problem <br /></h2> 
<p>What I want to show is a specific software problem which I had to solve a couple of days ago and which can be solved merely by reformulating it. What is baffling me, is that I don't have the right to use that solution, at least in the US (to my understanding, I am not a lawyer). Here is the problem in some simple words:<br /></p> 
<p><strong>Description:</strong> The program &quot;<em>spam-and-eggs.py</em>&quot; creates files inside a directory, each file is created with a unique filename. The program can create an arbitrary amount of files, only restricted by filesystem constraints which make it crash at a certain point. Many, even modern filesystems, have a limit on the number of files that can be placed within a directory.</p> 
<p><strong>Problem to be solved:</strong> find a way to save the files without hitting the filesystem limits.<br /></p> 
<p>This is a relatively clear problem. What about the solution?</p> 
<h2>Finding the solution <br /></h2> 
<p>To find a solution, we usually have to look at the constraints we have:</p> 
<ol> 
<li>place a lot of files on the filesystem</li> 
<li>don't hit filesystem limits, in our case, 32000 files per directory<br /></li> 
<li>each file is uniquely named<br /></li> 
</ol> 
<p>Obviously, to solve constraint 1 and 2, we will have to create more than one directory, at least if the number of files exceeds 32000. From an algorithmic design perspective, it would be good if the program would not need to know if we hit the 32000 limit. It should be designed in a way so that no one has to do bookkeeping with regard to the total number of files, but this is not a strict requirement, I'll just throw it in additionally. Let's re-iterate over our constraints:</p> 
<ol> 
<li>create or re-use directories as files are generated</li> 
<li>automatically keep the number of items within a directory below 32000</li> 
<li>each file is uniquely named</li> 
</ol> 
<p>The sky still seems clouded, but it has changed slightly. Constraint 1 and 3 look like we are gonna need to create or re-use directories based on the names that are generated by our program.</p> 
<p>So what are the constraints around our filenames? Our program will give us arbitrary names, e.g. arbitrary arrays of byte values. Because filenames cannot usually have arbitrary names, this is a problem. But let's assume for a moment that we have the WONDERFULLY PERFECT FS<sup><span style="font-size: 8pt; color: #006400;">Â©</span></sup>, then this means that we can measure the number of possible entries in a directory like so:</p> 
<div align="center"> 
<blockquote> 
<pre>max = 256<span><sup>numbytes</sup></span></pre> 
</blockquote> 
</div> 
<p>E.g for one glyph filenames, we get a total of max == 256 possible filenames, for 2 glyphs in our filename, we get max == 65536 possible filenames. Clearly, 65536 is already out of bound with regard to our maximum of 32000.</p> 
<p>Hm. The sky is still clouded. Let me throw in some abstraction.
Let me call a directory a <em>container for slots</em> and a file or subdirectory a <em>slot</em>. We know that the number
of free slots is limited. What characterizes a slot? Its name. If we could limit the number of possible names, we automatically limit the number of slots. Our limit is 32000, which means that by limiting slot-names to one single glyph, we could restrict the number of slots to 256, limiting it to two glyphs would already grow out of bound. This would work, but has 2 problems:</p> 
<ol> 
<li>we do not actually have the WONDERFULLY PERFECT FS<sup><span style="font-size: 8pt; color: #006400;">Â©</span></sup></li> 
<li>restricting slots to only 256 entries is suboptimal, as it leaves almost 30000 slots unused<br /></li> 
</ol> 
<p>Problem 1 can be bypassed by transliterating an arbitrary array of bytes into something that can be mapped onto our filesystem, which is POSIX compliant. An example on how to do that would be to encode a given name into hexadecimal form. The advantages are clear:</p> 
<ul> 
<li>the hexadecimal numeral system is well understood and widespread (<a href="http://en.wikipedia.org/wiki/Hexadecimal">http://en.wikipedia.org/wiki/Hexadecimal</a>)<br /></li> 
<li>each symbol (glyphs) used in the hexadecimal system is acceptable in a POSIX filesystem (<a href="http://www.opengroup.org/onlinepubs/009695399/toc.htm">http://www.opengroup.org/onlinepubs/009695399/toc.htm</a>)</li> 
<li>using filenames with just 16 possible glyphs is probably highly portable<br /></li> 
</ul> 
<p>Problem 2 can be optimized by having 3 hexadecimal glyphs: 16<sup>3</sup> = 4096 slots, which is not a perfect match, but a lot better than only 256 slots.<br /></p> 
<p>Let's re-iterate our constraints and re-formulate:</p> 
<ol> 
<li>each unique name is converted to its hexadecimal representation</li> 
<li>generate slots names based on hexadecimal values</li> 
<li>generate slots names that have a maximum of 3 glyphs<br /></li> 
</ol> 
<h2>Implementing the solution <br /></h2> 
<p>The sky is now clearing. We can actually start to write code. I use Python, so here we go:<br /></p> 
<textarea name="code" class="python" cols="50" rows="8">def generateSlotSequenceFromName(name):
   hexname = name.encode(&quot;hex&quot;)
   slotsequence = []
   for pos in range(0, len(hexname), 3):
      slotsequence.append(hexname[i:i+3])
   return slotsequence

slotsequence = generateSlotSequenceFromName(&quot;An example name&quot;)
</textarea> 
<p>This can be shortened by using list comprehensions:</p> 
<textarea name="code" class="python" cols="50" rows="3">def generateSlotSequenceFromName(name):
   hexname = name.encode(&quot;hex&quot;)
   return [hexname[i:i+3] for i in xrange(0, len(hexname), 3)]
</textarea> 
<p>The code needed to save a file, is as simple as:</p> 
<textarea name="code" class="python" cols="50" rows="2">if not os.path.exists(os.path.dirname(os.path.join(slotsequence))): os.makedirs(os.path.dirname(os.path.join(slotsequence)))
open(os.path.join(slotsequence), 'wb').write(&quot;THIS IS OUR PIECE OF INFORMATION WE WANT TO SAVE&quot;)
</textarea> 
<p>To open an existing file, one could write:</p> 
<p> </p> 
<textarea name="code" class="python" cols="50" rows="1">data = open(os.path.join(slotsequence), 'rb').read()
</textarea> 
<p>Admittedly, the last lines are a bit thrown in and won't appeal to most programmers eyes, but hey, it works ;-)<br /></p> 
<p> </p> 
<h2>Googling<br /></h2> 
<p> I drafted the above code during a cup of coffee after getting up in the morning. Before I left home and went for work, I thought I'd google for this kind of approach to see if there were any nice alternative solutions or if there are any nifty open-source libraries that do this. This is a habit of mine, as I have often found to do things in an awkward way and re-using online publications to learn and verify your own work is as good as asking your mentor for feedback (if you have one). I couldn't find much but lots of filesystem related papers and research. This wasn't what I was looking for. After continuing my searches, I suddenly found <a href="http://www.freepatentsonline.com/7412449.html">this</a>. To be sure this wasn't some sort of fake (haha, how could it?), I looked up the same patent in the public <a href="http://patft.uspto.gov/">USPTO fulltext and image archive</a> and found <a href="http://patft.uspto.gov/netacgi/nph-Parser?Sect1=PTO1&amp;Sect2=HITOFF&amp;d=PALL&amp;p=1&amp;u=%2Fnetahtml%2FPTO%2Fsrchnum.htm&amp;r=1&amp;f=G&amp;l=50&amp;s1=7412449.PN.&amp;OS=PN/7412449&amp;RS=PN/7412449">US patent 7,412,449</a> (for your convenience, I organized a <a class="serendipity_image_link" href="http://pol.spurious.biz/blog/uploads/pdf/US7412449.pdf">PDF file for <strong>US patent 7,412,449</strong></a> with the text created by an OCR program). </p> 
<h2>Patent infringement</h2> 
<p> </p> 
<p>As I am not a lawyer, my first reaction upon reading the patent document, was &quot;<em>wow, cool, this is the confirmation that my approach must be worth something</em>&quot;. After a couple of seconds, though, I realized that this patent document probably also means that the code I just wrote may not be used without permission from the patent holder. But luckily, because I live outside the U.S., the patent in question has no legal effect on me. Thinking like that made me feel slightly better, but knowing that nowadays many patents are cross-published in many countries, I wasn't so sure anymore. Especially since the assignee of the patent is SAP, an internationally active company, and the inventor being located in Germany (where I live), I became worried again. So I tried to look up other online databases for publications in other countries, especially in Germany, referring to the same &quot;<em>invention</em>&quot;. This search didn't yield any results and although I tried hard for a moment, I quickly realized that I could not actually make sure to find a potential patent for the same invention in Germany without the help of someone who knows its way through the patent publication jungle.</p> 
<h2>Consequences</h2> 
<p>Because I want to use the above code (I created) at work, I will now probably need to involve the company legal department. Also, as a software developer, I feel strongly attacked at my right to be creative and solution oriented. When I drafted the implementation, I was also considering creating a small library and publish it as open-source, probably using a license like the <a href="http://www.gnu.org/licenses/lgpl.html">LGPL</a> or the <a href="http://www.opensource.org/licenses/mit-license.php">MIT License</a>, as there wasn't any library doing this. Obviously, such a library would have to provide a nice API and all the tidbits of modern programming, not just the 2 lines of code creating a hash slot sequence from a name. But I am not sure I can do this easily anymore, as uploading such a library to a community site could create legal problems for that site if it is located in the U.S., which I obviously want to avoid.</p> 
<p>Essentially, I am now forced to stop working on what I am actually supposed to do and either:<br /></p> 
<ul> 
<li>find a different approach, bypassing the patent</li> 
<li>ignore potential legal problems and continue</li> 
<li>switch my job to something non-creative<br /></li> 
</ul> 
<h2>Conclusion</h2> 
<p>By reformulating a problem in just 2-3 steps, a problem description can become a self apparent solution description. Trivial. I consider the above stuff trivial, because there is no new concept being created, there is no real invention, just the mere re-use of the laws of logic, mathematics and some lesser generic constraints from the computer world.</p> 
<p>I am devastated by the fact that a minimal piece of code like</p> 
<textarea class="python" name="code" rows="1" cols="50">[&quot;An example name&quot;.encode(&quot;hex&quot;)[i:i+3] for i in xrange(0, len(&quot;An example name&quot;.encode(&quot;hex&quot;)), 3)]
</textarea> 
<p>created during my first cup of coffee to start the day potentially has legal problems attached to it.</p> 
<p>I am not convinced that this is something worth patenting, I think it is non-inventive, it is not something I had to put a lot of research into. Maybe it is creative in the sense that every act of writing is creative.<br /></p> 
<p>Actually, I have no real conclusion, except that I got reaffirmed in my position about software patents. I might add that I don't think patents are bad in general, but that in a world where every online transaction is governed by pieces of code like this, potentially every business that runs online runs into patent problems. That is obviously unacceptable, because it hinders the deployment of a better marketplace.<br /></p> 
<p>It is time to rethink how patents apply to software and how they can both help creating incentives for creating new technology and protecting investments. Creating publically available peer review mechanisms for patent applications would be one optimization to the existing system, another could be to allow patent holders to legally specify their intent on how they want to enforce their patent or not. Many companies apply for patents in order to create a legal portfolio that will only be used in case of legal disputes with other plaintiffs. Also, it might be wise to reconsider the time spawns involved with the validity periods of patents in the software area.</p> 
<p> </p> 
<p><br /></p> 
<h3>Remarks</h3> 
<ol> 
<li>The Obama administration has two interesting points in their <a href="http://www.whitehouse.gov/agenda/technology/">technology agenda</a>:

<ul> 
<li><strong>Protect American Intellectual Property at Home:</strong>
Update and reform our copyright and patent systems to promote civic
discourse, innovation, and investment while ensuring that intellectual
property owners are fairly treated.</li> 
<li><strong>Reform the Patent System:</strong>
Ensure that our patent laws protect legitimate rights while not
stifling innovation and collaboration. Give the Patent and Trademark
Office (PTO) the resources to improve patent quality and open up the
patent process to citizen review to help foster an environment that
encourages innovation. Reduce uncertainty and wasteful litigation that
is currently a significant drag on innovation.</li> 
</ul>
</li> 
<li>There are active projects that provide public peer reviewing of patent applications like <a href="http://www.peertopatent.org/">http://www.peertopatent.org/</a>.</li> 
<li>I actively changed the naming in my code to use words like &quot;hash slots&quot; after reading the patent in question to focus on similarity.</li> 
<li>The content divulged in this article (unless otherwise noted) is licensed under the <a href="http://creativecommons.org/licenses/by-nc-sa/3.0/">Creative Commons Attribution-Noncommercial-Share Alike 3.0</a> license. This obviously excludes the USPTO patent application filed under the application number  <strong>10/444,509</strong> and the publication number <strong><a name="h1" href="http://patft.uspto.gov/netacgi/nph-Parser?Sect1=PTO1&amp;Sect2=HITOFF&amp;d=PALL&amp;p=1&amp;u=%2Fnetahtml%2FPTO%2Fsrchnum.htm&amp;r=1&amp;f=G&amp;l=50&amp;s1=7412449.PN.&amp;OS=PN/7412449&amp;RS=PN/7412449#h0"></a>7,412,449</strong>.</li> 
</ol> 
<p> </p> 
<p><br /></p> 
<p> </p> 
<pre></pre> 
            </div>
        </content>
        <dc:subject>code</dc:subject>
<dc:subject>freedom</dc:subject>
<dc:subject>intellectual property</dc:subject>
<dc:subject>law</dc:subject>
<dc:subject>oss</dc:subject>
<dc:subject>patents</dc:subject>
<dc:subject>python</dc:subject>
<dc:subject>rant</dc:subject>
<dc:subject>software</dc:subject>
<dc:subject>storage</dc:subject>
<dc:subject>uspto</dc:subject>

    </entry>
    <entry>
        <link href="http://pol.spurious.biz/blog/archives/68-dictators-america-beer-jesus.html" rel="alternate" title="dictators america beer jesus" />
        <author>
            <name>Pol</name>
                    </author>
    
        <published>2009-02-19T01:05:07Z</published>
        <updated>2009-02-22T13:24:41Z</updated>
        <wfw:comment>http://pol.spurious.biz/blog/wfwcomment.php?cid=68</wfw:comment>
    
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://pol.spurious.biz/blog/rss.php?version=atom1.0&amp;type=comments&amp;cid=68</wfw:commentRss>
    
    
        <id>http://pol.spurious.biz/blog/archives/68-guid.html</id>
        <title type="html">dictators america beer jesus</title>
        <content type="xhtml" xml:base="http://pol.spurious.biz/blog/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                <p>made this video remix years ago and finally managed to upload it to youtube, so here we go...</p> 
<p> <!-- xhtml clean youtube --><object type="application/x-shockwave-flash" width="640" height="505" data="http://www.youtube.com/v/jT20uf0jsKg&amp;hl=de&amp;fs=1"><param name="movie" value="http://www.youtube.com/v/jT20uf0jsKg&amp;hl=de&amp;fs=1" /><param value="http://www.youtube.com/v/jT20uf0jsKg&amp;hl=de&amp;fs=1" name="movie" /><param value="true" name="allowFullScreen" /><param value="always" name="allowscriptaccess" /></object><!-- /xhtml clean youtube -->

<!-- <object width="640" height="505"><param value="http://www.youtube.com/v/jT20uf0jsKg&amp;hl=de&amp;fs=1" name="movie" /><param value="true" name="allowFullScreen" /><param value="always" name="allowscriptaccess" /><embed width="640" height="505" allowfullscreen="true" allowscriptaccess="always" type="application/x-shockwave-flash" src="http://www.youtube.com/v/jT20uf0jsKg&amp;hl=de&amp;fs=1" /></object> -->

<a href="http://www.youtube.com/v/jT20uf0jsKg&amp;hl=de&amp;fs=1" class="wpqhsgqntyglohysytma visible ontop" title="Click here to block this object with Adblock Plus" style="left: 640px ! important; top: -505px ! important;"></a><a style="left: 640px ! important; top: -505px ! important;" title="Click here to block this object with Adblock Plus" class="nokftkysxecotzqptyjo visible ontop" href="http://www.youtube.com/v/jT20uf0jsKg&amp;hl=de&amp;fs=1"></a><a href="http://www.youtube.com/v/jT20uf0jsKg&amp;hl=de&amp;fs=1" class="nokftkysxecotzqptyjo visible ontop" title="Click here to block this object with Adblock Plus" style="left: 640px ! important; top: -505px ! important;"></a> </p> 
            </div>
        </content>
        <dc:subject>art</dc:subject>
<dc:subject>culture</dc:subject>
<dc:subject>politics</dc:subject>
<dc:subject>remix</dc:subject>

    </entry>
    <entry>
        <link href="http://pol.spurious.biz/blog/archives/67-constructing-Datetime-objects-with-ISO-week-numbers.html" rel="alternate" title="constructing Datetime objects with ISO week numbers" />
        <author>
            <name>Pol</name>
                    </author>
    
        <published>2008-11-04T21:30:11Z</published>
        <updated>2009-02-24T01:44:04Z</updated>
        <wfw:comment>http://pol.spurious.biz/blog/wfwcomment.php?cid=67</wfw:comment>
    
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://pol.spurious.biz/blog/rss.php?version=atom1.0&amp;type=comments&amp;cid=67</wfw:commentRss>
    
    
        <id>http://pol.spurious.biz/blog/archives/67-guid.html</id>
        <title type="html">constructing Datetime objects with ISO week numbers</title>
        <content type="xhtml" xml:base="http://pol.spurious.biz/blog/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                <p>an old problem, but almost no library implements it, so here is my shot at it in python:</p> 
<textarea cols="80" rows="20" class="python" name="code">    import datetime

    def DateTimeFromIsoWeek(year, isoweek=1):
       &quot;&quot;&quot;DateTimeFromIsoWeek(year,isoweek=1)

           Returns a DateTime instance pointing to the given ISO week/year
           The weekday defaults to 4, which corresponds to Thursday in the
           ISO numbering. The time part is set to 00:00:00.
       &quot;&quot;&quot;
       # anyone knows what assertions could be done for the year?
     assert 0 &lt; isoweek &lt; 54
     # start stupidly with 1st Januray of the given year:
     d = datetime.datetime(year, 1, 1, 0, 0, 0)
     # what weekday is this?
     dow = d.isocalendar()[2]
     # advance to next thursday, if not already on a thursday:
     if dow &lt; 4: # if we are in monday - wednesday:
        d += datetime.timedelta(7 - dow - 3)
     elif dow &gt; 4: # if we are in friday - sunday
        d += datetime.timedelta(7 - dow + 4)
     # advance to the given week:
     d += datetime.timedelta((isoweek-1) * 7)
     if isoweek == 53: # this might be a user error, not all years have 53 weeks, so check it
        y = d.isocalendar()[0]
     if y != year: # we ended in a different year -&gt; the given year only has 52 weeks!
        raise Exception, &quot;The year '%i' does not have an ISO week '%i'&quot; % (year, isoweek)

     return d
</textarea> 
            </div>
        </content>
        <dc:subject>code</dc:subject>
<dc:subject>date</dc:subject>
<dc:subject>python</dc:subject>
<dc:subject>time</dc:subject>

    </entry>
    <entry>
        <link href="http://pol.spurious.biz/blog/archives/66-logresolve-drop-in-replacement.html" rel="alternate" title="logresolve drop-in replacement" />
        <author>
            <name>Pol</name>
                    </author>
    
        <published>2008-09-16T22:42:57Z</published>
        <updated>2009-02-22T13:44:22Z</updated>
        <wfw:comment>http://pol.spurious.biz/blog/wfwcomment.php?cid=66</wfw:comment>
    
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://pol.spurious.biz/blog/rss.php?version=atom1.0&amp;type=comments&amp;cid=66</wfw:commentRss>
    
    
        <id>http://pol.spurious.biz/blog/archives/66-guid.html</id>
        <title type="html">logresolve drop-in replacement</title>
        <content type="xhtml" xml:base="http://pol.spurious.biz/blog/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                <p>Requires Perl and CPAN Module Net::DNS</p> 
<p>The main difference to <a href="http://httpd.apache.org/docs/2.0/programs/logresolve.html">Apache's logresolve</a> is that it doesn't fuck up with long lines containing garbage from spambots and other malware.</p> 
<p><a href="/projects/scripting/logresolve.pl">Download logresolve.pl</a></p> 
<p>It caches resolved IPs in an internal hash table, so the memory consumption depends on the size of your input. You should probly run a local resolving DNS service like <a href="http://cr.yp.to/djbdns/dnscache.html">dnscache</a>. It does not use multithreading or asynchronous IO to optimize speed. Patches welcome.</p> 
            </div>
        </content>
        <dc:subject>apache</dc:subject>
<dc:subject>code</dc:subject>
<dc:subject>dns</dc:subject>
<dc:subject>download</dc:subject>
<dc:subject>log</dc:subject>
<dc:subject>perl</dc:subject>

    </entry>
    <entry>
        <link href="http://pol.spurious.biz/blog/archives/65-dyndnsc-0.1.0.html" rel="alternate" title="dyndnsc 0.1.0" />
        <author>
            <name>Pol</name>
                    </author>
    
        <published>2008-09-03T21:38:40Z</published>
        <updated>2009-02-22T13:35:36Z</updated>
        <wfw:comment>http://pol.spurious.biz/blog/wfwcomment.php?cid=65</wfw:comment>
    
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://pol.spurious.biz/blog/rss.php?version=atom1.0&amp;type=comments&amp;cid=65</wfw:commentRss>
    
    
        <id>http://pol.spurious.biz/blog/archives/65-guid.html</id>
        <title type="html">dyndnsc 0.1.0</title>
        <content type="xhtml" xml:base="http://pol.spurious.biz/blog/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                <p>I just uploaded my dyndns client to the <a href="http://pypi.python.org/pypi/dyndnsc">python cheeseshop</a>, it also has a <a href="https://pol.spurious.biz/dyndnsc/">crappy homepage</a>.</p> 
<p>See also my post on creating a <a href="https://pol.spurious.biz/blog/index.php?/archives/57-providing-an-ipv6-ready-dynamic-dns-service-with-djbdns-and-a-couple-of-scripts.html">dynamic dns service</a>.</p> 
            </div>
        </content>
        <dc:subject>code</dc:subject>
<dc:subject>dns</dc:subject>
<dc:subject>download</dc:subject>
<dc:subject>internet</dc:subject>
<dc:subject>python</dc:subject>

    </entry>
    <entry>
        <link href="http://pol.spurious.biz/blog/archives/64-A-new-browser,-yuppie!.html" rel="alternate" title="A new browser, yuppie!" />
        <author>
            <name>Pol</name>
                    </author>
    
        <published>2008-09-02T21:59:08Z</published>
        <updated>2009-02-22T13:44:43Z</updated>
        <wfw:comment>http://pol.spurious.biz/blog/wfwcomment.php?cid=64</wfw:comment>
    
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://pol.spurious.biz/blog/rss.php?version=atom1.0&amp;type=comments&amp;cid=64</wfw:commentRss>
    
    
        <id>http://pol.spurious.biz/blog/archives/64-guid.html</id>
        <title type="html">A new browser, yuppie!</title>
        <content type="xhtml" xml:base="http://pol.spurious.biz/blog/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                <p><a href="http://www.google.com/">Google</a> just released a new web-browser called &quot;<a href="http://www.google.com/chrome/">Google Chrome</a>&quot;. Fine. Nice. Any comments? yes!</p> 
<ul> 
<li>They say it's open source. Nice! But why do I have to &quot;sign up&quot; to get it? And why am I not able to download it when browsing from a non-windows computer?</li> 
<li>They say &quot;one box for everything&quot;. Nice! But how do I know what the box does when I mistype a URL? Does it get submitted for safe browsing to google too? Come on, it is an address bar. Let it be that way. I am not sure making things &quot;simple&quot; this way is solving anything.</li> 
<li>They say &quot;shortcuts for your apps&quot;. OK, this has been around on the Mac and on Linux since years. So is this just a workaround for a crappy system on Windows?</li> 
<li>They say &quot;incognito mode&quot;. Well, to be a bit harsh, this is seriously misleading as it does not explain where you stay incognito. Also, why is it not called &quot;porn mode&quot;?</li> 
<li>Isolating each tab into its own process: ok, good idea, but why do I need a crash manager inside an application??? WTF? Replace the operating system with a browser? Why do I need &quot;easy&quot; switching between tabs etc. when the OS comes with a window manager that supposedly solves this problem already?</li> 
<li>Safe browsing? Ah, yeah. Submit all your sensitive browsing information to google inc. (Is this disabled in porn mode?)</li> 
</ul> 
<p>Anyhow, my comments may seem backward, but hey, there is nothing in it that really makes me enthusiastic in any way. The cool thing is that is is open-source (special thanks should probably mostly go to the former <a href="http://developer.kde.org/documentation/library/kdeqt/kde3arch/khtml/">khtml</a> team from the <a href="http://kde.org/">kde</a> project).</p> 
<p>But what does it offer right now that <a href="http://www.mozilla.com/firefox/">firefox</a> or <a href="http://www.apple.com/safari/">safari</a> or any other browser does not offer? I still don't have a webbrowser that has a visual history that I can search &quot;easily&quot; (oh yeah, I forgot, maybe you can install the <a href="http://www.theregister.co.uk/2004/10/15/google_desktop_privacy/">privacy problem infected</a> <a href="http://desktop.google.com/">google desktop search</a>).</p> 
<p>Last but not least, will it support the &quot;<a href="http://www.customizegoogle.com/">Customize google</a>&quot; extension to get rid of the <a href="http://www.google-watch.org/cgi-bin/cookie.htm">google cookie</a>???? The day Google admitted not being nice <a href="http://www.google-watch.org/krane.html">is long ago</a>.</p> 
<p>I believe even more people are now going to put their private data into google online services. What a sad day.</p> 
<p> </p> 
<p>p.s.: If you are a firefox user, I strongly suggest you install <a href="http://adblock.mozdev.org/">adblock</a> and <a href="http://noscript.net/">noscript</a>, you will be <strong>amazed</strong> how nice surfing can be (or <strong>shocked</strong> about what information crosses your network for your casual surfing).</p> 
<p> </p> 
<p> </p> 
<p> </p> 
            </div>
        </content>
        <dc:subject>google</dc:subject>
<dc:subject>privacy</dc:subject>
<dc:subject>security</dc:subject>
<dc:subject>technology</dc:subject>
<dc:subject>web</dc:subject>

    </entry>
    <entry>
        <link href="http://pol.spurious.biz/blog/archives/63-Klaus,-thank-you.html" rel="alternate" title="Klaus, thank you" />
        <author>
            <name>Pol</name>
                    </author>
    
        <published>2008-08-09T19:37:09Z</published>
        <updated>2009-02-22T13:25:58Z</updated>
        <wfw:comment>http://pol.spurious.biz/blog/wfwcomment.php?cid=63</wfw:comment>
    
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://pol.spurious.biz/blog/rss.php?version=atom1.0&amp;type=comments&amp;cid=63</wfw:commentRss>
    
    
        <id>http://pol.spurious.biz/blog/archives/63-guid.html</id>
        <title type="html">Klaus, thank you</title>
        <content type="xhtml" xml:base="http://pol.spurious.biz/blog/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                <p align="center">I just realized how much I owe you for making my summer 2008 so much brighter!</p> 
<div align="center"><a href="http://en.wikipedia.org/wiki/Klaus_Nomi"><img width="460" vspace="0" hspace="0" border="0" src="http://www.cs.northwestern.edu/~hunicke/blog/images/klaus.jpg" alt="Klaus Nomi" /></a> </div> 
            </div>
        </content>
        <dc:subject>art</dc:subject>
<dc:subject>love</dc:subject>

    </entry>
    <entry>
        <link href="http://pol.spurious.biz/blog/archives/62-some-current-ongoing-work-at-MANIFESTA7-in-Bolzano.html" rel="alternate" title="some current ongoing work at MANIFESTA7 in Bolzano" />
        <author>
            <name>Pol</name>
                    </author>
    
        <published>2008-07-17T14:37:43Z</published>
        <updated>2009-02-22T13:26:12Z</updated>
        <wfw:comment>http://pol.spurious.biz/blog/wfwcomment.php?cid=62</wfw:comment>
    
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://pol.spurious.biz/blog/rss.php?version=atom1.0&amp;type=comments&amp;cid=62</wfw:commentRss>
    
    
        <id>http://pol.spurious.biz/blog/archives/62-guid.html</id>
        <title type="html">some current ongoing work at MANIFESTA7 in Bolzano</title>
        <content type="xhtml" xml:base="http://pol.spurious.biz/blog/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                <p><a href="http://etoy.com/blog/">The etoy blog: http://etoy.com/blog/</a></p> 
<p><a href="http://www.etoy.com/cam/2008-bolzano/">Live camera feeds: http://www.etoy.com/cam/2008-bolzano/</a></p> 
<p><a href="http://twitter.com/etoy_TANKS">Twitter: http://twitter.com/etoy_TANKS</a></p> 
<p> </p> 
            </div>
        </content>
        <dc:subject>art</dc:subject>
<dc:subject>etoy</dc:subject>
<dc:subject>fun</dc:subject>

    </entry>
    <entry>
        <link href="http://pol.spurious.biz/blog/archives/61-dogma-eat-more-meat.html" rel="alternate" title="dogma: eat more meat" />
        <author>
            <name>Pol</name>
                    </author>
    
        <published>2008-01-24T21:40:08Z</published>
        <updated>2009-02-22T13:27:31Z</updated>
        <wfw:comment>http://pol.spurious.biz/blog/wfwcomment.php?cid=61</wfw:comment>
    
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://pol.spurious.biz/blog/rss.php?version=atom1.0&amp;type=comments&amp;cid=61</wfw:commentRss>
    
    
        <id>http://pol.spurious.biz/blog/archives/61-guid.html</id>
        <title type="html">dogma: eat more meat</title>
        <content type="xhtml" xml:base="http://pol.spurious.biz/blog/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                <p>or: why I never understood vegetarians</p> 
<p><!-- s9ymdb:13 --><img width="110" height="75" class="serendipity_image_left" style="border: 0px none ; float: left; padding-left: 5px; padding-right: 5px;" src="http://pol.spurious.biz/blog/uploads/picks/Jamon-Serrano.serendipityThumb.jpg" alt=""  /> </p> 
<p><a class="serendipity_image_link" href="uploads/Jamon_serrano.jpg" onclick="F1 = window.open('/blog/uploads/picks/Jamon-Serrano.jpg','Zoom','height=1336,width=1949,top=-135.5,left=-127,toolbar=no,menubar=no,location=no,resize=1,resizable=1,scrollbars=yes'); return false;"><br /></a></p> 
<p> </p> 
<p> </p> 
<p> </p> 
<p>This is what my kitchen looks like right now.</p> 
<p>Together with a nice smell in the air.</p> 
<p>And the promise that it will last a while.</p> 
<p>I mean, honestly, who doesn't want to get a taste of this? ;-)</p> 
            </div>
        </content>
        <dc:subject>culture</dc:subject>
<dc:subject>food</dc:subject>

    </entry>
    <entry>
        <link href="http://pol.spurious.biz/blog/archives/60-Unison-2.13.6-binary-intel-for-Mac-OS-X.html" rel="alternate" title="Unison 2.13.6 binary (intel) for Mac OS X" />
        <author>
            <name>Pol</name>
                    </author>
    
        <published>2007-12-31T16:16:08Z</published>
        <updated>2009-02-22T13:28:02Z</updated>
        <wfw:comment>http://pol.spurious.biz/blog/wfwcomment.php?cid=60</wfw:comment>
    
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://pol.spurious.biz/blog/rss.php?version=atom1.0&amp;type=comments&amp;cid=60</wfw:commentRss>
    
    
        <id>http://pol.spurious.biz/blog/archives/60-guid.html</id>
        <title type="html">Unison 2.13.6 binary (intel) for Mac OS X</title>
        <content type="xhtml" xml:base="http://pol.spurious.biz/blog/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                I am a heavy user of <a href="http://www.cis.upenn.edu/~bcpierce/unison/">unison</a>, a file-synchronisation tool for Linux, Windows and other Platforms. Since I also use <a href="http://www.debian.org/">Debian</a> based servers, I need to rely on the version shipped with the latest debian stable distribution. On the desktop I use Mac OS X a lot, so I wanted to try the native aqua GUI of unison and found there were no precompiled binaries for version 2.13.6. So here it is: <a href="http://pol.spurious.biz/blog/uploads/files/Unison-2.13.app.zip">Unison-2.13.app.zip</a> 
            </div>
        </content>
        <dc:subject>automation</dc:subject>
<dc:subject>binary</dc:subject>
<dc:subject>oss</dc:subject>
<dc:subject>synchonisation</dc:subject>

    </entry>
    <entry>
        <link href="http://pol.spurious.biz/blog/archives/59-Automator-workflow-with-rsync.html" rel="alternate" title="Automator workflow with rsync" />
        <author>
            <name>Pol</name>
                    </author>
    
        <published>2007-10-16T23:09:55Z</published>
        <updated>2009-02-22T13:28:34Z</updated>
        <wfw:comment>http://pol.spurious.biz/blog/wfwcomment.php?cid=59</wfw:comment>
    
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://pol.spurious.biz/blog/rss.php?version=atom1.0&amp;type=comments&amp;cid=59</wfw:commentRss>
    
    
        <id>http://pol.spurious.biz/blog/archives/59-guid.html</id>
        <title type="html">Automator workflow with rsync</title>
        <content type="xhtml" xml:base="http://pol.spurious.biz/blog/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                <p>Sometimes it's really sad to see how people are bumping their head against walls when they try to pubish files on a webserver. Especially when it comes to &quot;automating&quot; the transfer, so they don't have to track each and every file.</p> 
<p>Personally, I always recommend using <a href="http://samba.anu.edu.au/rsync/">rsync</a>, which is very powerful, super-fast, well tested and comes with <a href="http://www.apple.com/macosx/">OS X</a>. The problem is that most people are afraid of that mystic thing called &quot;Terminal.app&quot; and want to avoid it by all means, even if that creates even more sources for problems. After all, syncing one folder with another is only one command, so why would one want to avoid it? Anyhow, tonight I had the unusual situation of being in the mood for end-user support and I created an automator workflow that asks for the source folder and for the destination and then executes rsync and show its output using &quot;Console.app&quot;.</p> 
<p><a target="_blank" title="rsync.workflow.zip" href="http://pol.spurious.biz/blog/uploads/files/rsync.workflow.zip">rsync.workflow.zip</a></p> 
<p>I don't think it's secure, but hey. (whatever that means)<a target="_blank" title="rsync.workflow.zip" href="http://pol.spurious.biz/blog/uploads/files/rsync.workflow.zip"></a></p> 
            </div>
        </content>
        <dc:subject>automation</dc:subject>
<dc:subject>download</dc:subject>
<dc:subject>osx</dc:subject>
<dc:subject>workflow</dc:subject>

    </entry>
    <entry>
        <link href="http://pol.spurious.biz/blog/archives/58-unsafe-streets.html" rel="alternate" title="unsafe streets" />
        <author>
            <name>Pol</name>
                    </author>
    
        <published>2007-09-09T00:28:24Z</published>
        <updated>2009-02-22T13:28:49Z</updated>
        <wfw:comment>http://pol.spurious.biz/blog/wfwcomment.php?cid=58</wfw:comment>
    
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://pol.spurious.biz/blog/rss.php?version=atom1.0&amp;type=comments&amp;cid=58</wfw:commentRss>
    
    
        <id>http://pol.spurious.biz/blog/archives/58-guid.html</id>
        <title type="html">unsafe streets</title>
        <content type="xhtml" xml:base="http://pol.spurious.biz/blog/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                <p align="baseline">with all those freaks around ;-)</p><!-- s9ymdb:10 --><!-- s9ymdb:10 --><img width="417" height="500" style="border: 0px none ; float: left; padding-left: 5px; padding-right: 5px;" src="http://pol.spurious.biz/blog/uploads/picks/patch.jpg" alt=""  /><br /> 
<p> </p> 
<p><!-- s9ymdb:8 --></p> 
            </div>
        </content>
        <dc:subject>fun</dc:subject>
<dc:subject>picks</dc:subject>
<dc:subject>street</dc:subject>

    </entry>

</feed>