<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE rss PUBLIC "-//Netscape Communications//DTD RSS 0.91//EN" "http://my.netscape.com/publish/formats/rss-0.91.dtd">

<rss version="0.91">
  <channel>
    <title>Malte Tancred&#39;s Weblog</title>
    <link>http://tancred.com/malte/blog/index.html</link>
    <description>Malte Tancred&#39;s Weblog</description>
    <language>en</language>
    <item>
        <title>Combining several images into one PDF document</title>
        <link>http://tancred.com/malte/blog/2006/08/21.html#combiningimages</link>
        <description>&lt;p&gt;I had a bunch of scanned hand-written documents
in GIF format
that I wanted to print
two pages per paper.
The print dialog in OS X
is quite helpful
when it comes to printing two-ups,
unless you have a bunch of separate documents,
just like my scans.&lt;/p&gt;

&lt;p&gt;ImageMagick to the rescue!
Here's all it took:
&lt;kdb&gt;convert -adjoin *.gif combined.pdf&lt;/kdb&gt;.
Sweet.&lt;/p&gt;
</description>
    </item>
    <item>
        <title>OS X launchd not waiting for disks to mount?</title>
        <link>http://tancred.com/malte/blog/2006/07/19.html#launchdmount</link>
        <description>&lt;p&gt;If you create a &lt;tt&gt;launchd.plist(5)&lt;/tt&gt;
	to start a program,
	make sure that program is stored somewhere on &lt;tt&gt;/&lt;/tt&gt;,
	else &lt;tt&gt;launchd&lt;/tt&gt; won't find it
	and the program will not be started, ever.
&lt;/p&gt;
&lt;p&gt;I'm not sure to how work around this problem,
	short of installing the program on the root filesystem
	(or write a second program
	that sleeps until a certain path appears
	&amp;mdash;
	which sounds like the perfect job for &lt;tt&gt;wait4path(1)&lt;/tt&gt;,
	but I just can't make it work
	&amp;mdash;
	and put that program
	just in front of the first program
	in a wrapper script
	that will then start the first program
	when the given path becomes available;
	just don't forget to put the wrapper script
	and the first program on &lt;tt&gt;/&lt;/tt&gt;).
&lt;/p&gt;
&lt;p&gt;Anyway! I just installed the damned thing
	I wanted to run in the first place on &lt;tt&gt;/&lt;/tt&gt;
	hoping this issue will be solved in the future.
	I'll be a good citizen and report a bug.
&lt;/p&gt;
</description>
    </item>
    <item>
        <title>D-Link DFL-200 and packet DUPs</title>
        <link>http://tancred.com/malte/blog/2005/06/09.html#dlinkdups</link>
        <description>
&lt;p&gt;We've had a problem with a D-Link router/firewall. Communication within the DMZ interface was crippled by a lot of duplicate packets while communication to and from other interfaces &lt;em&gt;just worked&lt;/em&gt;, and we just couldn't figure out why. After some experimenting earlier today we found out that the problem had to do with the switch connected to the DMZ interface. For some reason the D-Link and the Micronet switch didn't like each other. When we replaced the Micronet switch for a small D-Link switch the problem went away. For the record: the hardware that didn't play well together was a
&lt;a href=&quot;http://www.dlink.com/products/?pid=354&quot;&gt;D-Link DFL-200&lt;/a&gt;
and a
&lt;em&gt;Micronet SP586A EtherFast 10/100 Mbps Dual Speed Hub&lt;/em&gt;.
The replacement switch that solved the problem was a
&lt;a href=&quot;http://www.dlink.se/?go=jN7uAYLx/oIJaWVUDLYZU93ygJVYKOhST9vhLPG3yV3oUoB7haltbNlwaaRp7jwqED2onGQTo48EBt/lzKDpJkgQuOPaZ4U=&quot;&gt;D-Link DES1005D&lt;/a&gt;. &lt;/p&gt;
</description>
    </item>
    <item>
        <title>Testing from the view in Rails</title>
        <link>http://tancred.com/malte/blog/2005/04/18.html#railsfunctest</link>
        <description>
&lt;p&gt;I've been playing with &lt;a href=&quot;http://www.rubyonrails.org&quot;&gt;Ruby on Rails&lt;/a&gt; for a few days and I must say it's been and still is a great experience. I like the focus on automation, for example by providing the necessary facilities to run unit and functional tests. I've taken the view centered approach in writing some of my functional tests (by means of the REXML-library), because that's one thing that in my experience has been hard to do in other environments. My first reactions are that &lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;it's great to get instant feedback on your &lt;em&gt;actual output&lt;/em&gt;, as REXML screams at you if you feed it invalid XML, and&lt;/li&gt;
&lt;li&gt;the tests you write tend to be long.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt; I don't like the second point. Tests should be kept short and simple. Tests should be easy to write and easy to read. A lot of short, simple tests is better than a few big, complex ones. &lt;/p&gt;

&lt;p&gt; I suspect the main reason my tests got big is that REXML requires me to verify not only the &lt;em&gt;existence&lt;/em&gt; of specific elements but also their &lt;em&gt;location&lt;/em&gt; within the XML output. That's not good because changing the layout doesn't necessarily mean changing the behaviour of the app. What I want to verify is that &lt;q&gt;there is a &lt;tt&gt;div&lt;/tt&gt; in my document with certain properties&lt;/q&gt; and &lt;q&gt;there is a certain kind of link somewhere inside that &lt;tt&gt;div&lt;/tt&gt;&lt;/q&gt; and so on. This is what I came up with to solve the problem: &lt;/p&gt;

&lt;pre&gt;&lt;code&gt;module XPathExtensions
  def find_elements(xml=nil, tag_spec=nil)
    matched = Array.new
    e = REXML::XPath.match(xml,tag_spec)
    matched.concat(e)

    REXML::XPath.each(xml) { |each|
      arr = REXML::XPath.find_elements(each,tag_spec)
      matched.concat(arr)
    }
    matched
  end
end&lt;/code&gt;
&lt;/pre&gt;

&lt;p&gt;I saved the code above in a file called &lt;tt&gt;lib/xpath_extensions.rb&lt;/tt&gt; (I have some unit tests for it as well) and appended the following code to &lt;tt&gt;test/test_helper.rb&lt;/tt&gt; to load the module.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;require 'xpath_extensions'
REXML::XPath.extend(XPathExtensions)&lt;/code&gt;
&lt;/pre&gt;

&lt;p&gt; Now I can simply call &lt;code&gt;REXML::XPath.find_elements(xml, &quot;a&quot;)&lt;/code&gt; to get back an array of &lt;em&gt;all&lt;/em&gt; links in &lt;tt&gt;xml&lt;/tt&gt;. I'll probably add a few assertions based on this method as well, perhaps something like &lt;code&gt;assert_num_elems_matching&lt;/code&gt;, &lt;code&gt;assert_elem_in_elem&lt;/code&gt; and so on, which would bring us down to one-liners to verify the existence of specific elements in the output. &lt;/p&gt;

&lt;p&gt; I'm not a Ruby expert so the above code might not be the greatest. For one thing, I suppose it's a bit slow. Also, I haven't included the namespace parameter (mainly because I don't use namespaces in my output). It should be a trivial task to add. Finally, there might be ways to accomplish what &lt;code&gt;find_elements&lt;/code&gt; does using nice Ruby one-liners or some feature of REXML that I'm missing. I just don't know how. &lt;/p&gt;
</description>
    </item>
    <item>
        <title>Peter on building software</title>
        <link>http://tancred.com/malte/blog/2005/02/20.html#peterbuildingsoftware</link>
        <description>
&lt;p&gt; Don't miss Peter's very interesting and constantly ongoing thoughts and reflections on building software and how it relates (and doesn't relate) to &lt;q&gt;brick-and-mortar architecture&lt;/q&gt;. For example, take a look at &lt;a href=&quot;http://tesugen.com/archives/05/02/notes-on-hbl-0&quot;&gt;todays topic&lt;/a&gt; . There's &lt;em&gt;a lot&lt;/em&gt; of obligatory reading over at &lt;a href=&quot;http://tesugen.com&quot;&gt;Tesugen&lt;/a&gt;. &lt;/p&gt;
</description>
    </item>
    <item>
        <title>Reading and writing YAML in Objective-C</title>
        <link>http://tancred.com/malte/blog/2004/10/01.html#cocoayaml</link>
        <description>
&lt;p&gt; &lt;a href=&quot;http://www.yaml.org&quot;&gt;YAML&lt;/a&gt; is a cool thingy and Will Thimbleby has written a &lt;a href=&quot;http://will.thimbleby.net/yaml.html&quot;&gt;YAML-parser&lt;/a&gt; in Objective-C. Check it out! &lt;/p&gt;
</description>
    </item>
    <item>
        <title>LaunchBar and Quicksilver</title>
        <link>http://tancred.com/malte/blog/2004/08/18.html#quicksilveruiidea</link>
        <description>
&lt;p&gt; Tomas Jogin has apparently bought a PowerBook and writes about some &lt;a href=&quot;http://jogin.com/weblog/archives/2004/08/17/issues&quot;&gt;first impressions&lt;/a&gt;. A few commenters raves about &lt;a href=&quot;http://www.obdev.at/products/launchbar/&quot;&gt;LaunchBar&lt;/a&gt; and &lt;a href=&quot;http://quicksilver.blacktree.com/&quot;&gt;Quicksilver&lt;/a&gt;. I've tried them both, like them both and I'm currently using LaunchBar (mainly because LaunchBar is a bit faster on my machine, or at least it was when I last checked). &lt;/p&gt;

&lt;p&gt; There's something with Quicksilver however, that I really like, and that is the ability it gives you to &lt;em&gt;form sentences&lt;/em&gt; so to speak. You type a (very short) series of letters and voilą: you've created a mail with a file attached to it and sent it off to a few recipients, and it took you almost no time. Doing the same thing &lt;em&gt;the traditional way&lt;/em&gt; would have taken a lot more effort using both mouse and keyboard to switch to the mail application and start a new message, find and attach the file, select recipients, and finally send the message. &lt;/p&gt;

&lt;p&gt; If find the concept intriguing. What if the operating system could supply this kind of interface to all applications by default? A &lt;a href=&quot;http://www.apple.com/macosx/features/finder/&quot;&gt;Finder&lt;/a&gt; on steroids! For example, what if the operating system could remember the name and location of all files recently saved by each and every application? Download a file in your browser, bring up the Quicksilver-like sentence builder, find the downloaded file with a few keystrokes and build up sentence to open it in your favorit editor, mail it to a friend or some colleagues, move or copy it to another disk or folder, and so on. The traditional &lt;em&gt;do-it-with-the-mouse-and-keyboard-way&lt;/em&gt; would still be there so noone lose; it's a win-win situation. &lt;/p&gt;

&lt;p&gt;There are probably a lot of interesting features based on this simple user interface concept just waiting to be exploited. &lt;/p&gt;
</description>
    </item>
    <item>
        <title>Problems mounting and creating disk images after system upgrade</title>
        <link>http://tancred.com/malte/blog/2004/08/14.html#dmgfailureaftersysupdate</link>
        <description>
&lt;p&gt; After upgrading my TiBook to Mac OS X 10.3.5 I suddenly couldn't open disk image files (&lt;tt&gt;.dmg&lt;/tt&gt; extension). Couldn't find any solution on the net, but this line from &lt;tt&gt;/var/log/system.log&lt;/tt&gt; gave me a hint: &lt;/p&gt;

&lt;p&gt;&lt;tt&gt;Aug 13 07:50:51 localhost kextd[84]: a different version of dependency extension /System/Library/Extensions/IOStorageFamily.kext is already loaded&lt;/tt&gt;&lt;/p&gt;

&lt;p&gt; Something seemed to be wrong with a kernel extension. I vaguely remembered something about the kernel extensions being cached. How to update the kernel extensions cache is described &lt;a href=&quot;http://www.opensource.apple.com/projects/documentation/howto/html/kext_tutorials/kext_dependencies.html#d0e768&quot;&gt;here&lt;/a&gt;. Simply mark the extensions folder &quot;dirty&quot; by &lt;kbd&gt;touch&lt;/kbd&gt;ing it (as root), &lt;kbd&gt;touch /System/Library/Extensions&lt;/kbd&gt;, and the cache will be rebuilt. &lt;/p&gt;

&lt;p&gt; This operation solved the problem for me. &lt;/p&gt;
</description>
    </item>
    <item>
        <title>&lt;code&gt;poll()&lt;/code&gt; and &lt;acronym title=&quot;End Of File&quot;&gt;EOF&lt;/acronym&gt;</title>
        <link>http://tancred.com/malte/blog/2004/07/22.html#pollandeof</link>
        <description>
&lt;a href=&quot;http://www.greenend.org.uk/rjk/&quot;&gt;Richard Kettlewell&lt;/a&gt; compares how the &lt;code&gt;poll()&lt;/code&gt; system call behaves on seeing EOF on different platforms (see &lt;a href=&quot;http://www.greenend.org.uk/rjk/2001/06/poll.html&quot;&gt;here&lt;/a&gt;).
</description>
    </item>
    <item>
        <title>Recent MS patent and viruses</title>
        <link>http://tancred.com/malte/blog/2004/07/07.html#neilgaiman-mspatent-virus</link>
        <description>
&lt;p&gt; Neil Gaiman &lt;a href=&quot;http://www.neilgaiman.com/journal/2004/07/one-last-post-before-intermittent.asp&quot;&gt;writes&lt;/a&gt;: &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;And I see from the Guardian that Microsoft have now &lt;a href=&quot;http://www.guardian.co.uk/online/news/0,12597,1254911,00.html&quot;&gt;patented using the human body as a network&lt;/a&gt;. Which, apart from anything, brings a whole new meaning to the concept of viruses.&lt;/p&gt;
&lt;/blockquote&gt;
</description>
    </item>
    <item>
        <title>&lt;acronym title=&quot;Message Digest 5&quot;&gt;MD5&lt;/acronym&gt; digests in Objective C</title>
        <link>http://tancred.com/malte/blog/2004/07/05.html#objcmd5</link>
        <description>
&lt;p&gt; I began writing an Objective C wrapper around the &lt;a href=&quot;http://www.openssl.org/docs/crypto/EVP_DigestInit.html&quot;&gt;OpenSSL EVP message digest routines&lt;/a&gt; a while back. A few days ago I saw two requests (on Apple's &lt;a href=&quot;http://lists.apple.com/mailman/listinfo/cocoa-dev&quot;&gt;cocoa-dev&lt;/a&gt; and &lt;a href=&quot;http://lists.apple.com/mailman/listinfo/xcode-users&quot;&gt;xcode-users&lt;/a&gt; mailinglist, respectively) for an &lt;acronym title=&quot;Message Digest 5&quot;&gt;MD5&lt;/acronym&gt; routine in Objective C, so I made my unfinished code available &lt;a href=&quot;http://oops.se/~malte/software/scrap/ObjcMessageDigestTest.tar.gz&quot;&gt;here&lt;/a&gt;. The code handles &lt;acronym title=&quot;Message Digest 5&quot;&gt;MD5&lt;/acronym&gt; only, but based on the higher level &lt;acronym title=&quot;high-level cryptographic functions, according to OpenSSL documentation&quot;&gt;EVP&lt;/acronym&gt; routines it's very easy to extend (&lt;acronym title=&quot;Secure Hash Algorithm&quot;&gt;SHA&lt;/acronym&gt; for example). I thought the code could be useful to some, even if I never finish it myself. &lt;/p&gt;

&lt;p&gt; The standard disclaimer applies: unfinished code, not heavily tested, might contain catastrophic bugs, etc, etc. Use with care and common sense. &lt;/p&gt;
</description>
    </item>
    <item>
        <title>Secret codes</title>
        <link>http://tancred.com/malte/blog/2004/06/24.html#secretcode</link>
        <description>
&lt;p&gt; What if a lot of the spam that is distributed around the world today aren't really efforts to sell something? What if the &lt;em&gt;real&lt;/em&gt; reason behind a lot of these annoying messages is to enable communication between various shady groups and organizations, without letting anyone know? What if what you really see, when you look at one of these incomprehensible letters, is actually a secret code of foul and dreadful intent, sent out in masses in the hopes that at least &lt;em&gt;one&lt;/em&gt; will reach a desired destination? Never thought about &lt;strong&gt;that&lt;/strong&gt;, did you? &lt;/p&gt;
</description>
    </item>
    <item>
        <title>SubEthaEdit and GNOME's Bitstream Vera fonts</title>
        <link>http://tancred.com/malte/blog/2004/06/23.html#subethagnome</link>
        <description>
&lt;p&gt; Have been using &lt;a href=&quot;http://www.codingmonkeys.de/subethaedit/&quot;&gt;SubEthaEdit&lt;/a&gt; for a few days now. What a marvelous piece of software! In combination with  &lt;a href=&quot;http://www.gnome.org/fonts/&quot;&gt;GNOME's beautiful Bitstream Vera fonts&lt;/a&gt; it's just wonderful (thanks &lt;a href=&quot;http://tesugen.com&quot;&gt;Peter&lt;/a&gt;). &lt;/p&gt;
</description>
    </item>
    <item>
        <title>Links</title>
        <link>http://tancred.com/malte/blog/2004/06/15.html#tddgenxmatrixssl</link>
        <description>&lt;p&gt; Tim Bray &lt;a href=&quot;http://www.tbray.org/ongoing/When/200x/2004/06/13/TDD2004&quot;&gt;praises Test Driven Development&lt;/a&gt; (and rightly so). He also has a page about &lt;a href=&quot;http://www.tbray.org/ongoing/When/200x/2004/02/20/GenxStatus &quot;&gt;Genx&lt;/a&gt;, a library for generating well-formed, canonical XML. Looks quite interesting. &lt;/p&gt;

&lt;p&gt; Found my way to &lt;a href=&quot;http://www.matrixssl.org/&quot;&gt;MatrixSSL&lt;/a&gt; today, an &lt;q&gt;Open Source Embedded SSL&lt;/q&gt; implementation. I hope reading the code will give me a better understanding of how SSL works. From their list of &lt;em&gt;specifications&lt;/em&gt;: &lt;q&gt;Clean, heavily commented code in portable C&lt;/q&gt;. I don't believe heavily commented code is such a great idea really (&lt;em&gt;heavily&lt;/em&gt; sounds so... in your face, doesn't it?), but if their code is as clear as their information about it, it sure will be worth a look. &lt;/p&gt;</description>
    </item>
    <item>
        <title>Test Driven or Test First coding</title>
        <link>http://tancred.com/malte/blog/2004/05/28.html#testdriven-testfirst</link>
        <description>&lt;p&gt; I don't think that I've ever made a distinction between Test Driven coding and Test First coding, as &lt;a href=&quot;http://www.pragprog.com/pragdave/Practices/TestDrivenOrTestFirst.rdoc&quot;&gt;PragDave does&lt;/a&gt;. Dave's description of the two makes sense to me, but perhaps not all the way. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;In test-first, you never write a line of production code until you first have a failing test that will be &quot;fixed&quot; by the code you write. Want to write a new class? First write a test that instantiates it, watch the test fail, and then implement the class body to fix the broken test.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt; This could be interpreted in two ways. The tough interpretation says that if you want to create a class named &lt;code&gt;Firecracker&lt;/code&gt; you first add a test (not necessarily a test case) that tests instantiation of the test class. In java that could be something like this. &lt;/p&gt;

&lt;code&gt;
public void testFirecracker() {&lt;br/&gt;
&amp;nbsp;assertNotNull(new Firecracker());&lt;br/&gt;
}
&lt;/code&gt;

&lt;p&gt; This seems too rigorous to me. I did this back when I first started playing with UnitTests. I even went further and created unique test case classes for each class added, but nowadays my interpretation is looser; it takes so much time and effort to create and, most of all, maintain all these tests. &lt;/p&gt;

&lt;p&gt; The maintainance required is actually what bothers me the most. I feel that you're much more locked into a particular design when working this way. Instead I interpret the &lt;em&gt;Unit&lt;/em&gt; in Unit Testing as something above the class. The tests in my test cases today tries to express the inteded usage and functionallity of a specific class or a set of classes. I add a lot of code around the class being tested&amp;mdash;other classes, C-functions, whatever needed to make the tests run&amp;mdash;and my reasoning is that my tests will eventually be expressive enough to catch (almost) all  possible errors. And, I'm always writing the tests first so I do consider myself a test first coder, from time to time. &lt;/p&gt;

&lt;p&gt; I don't think this interpretation of mine is in conflict with PragDave's definition of test first programming. I do write a test that tests instantiation of a specific class, but indirectly. In my opinion, the &lt;em&gt;instantiation test&lt;/em&gt; doesn't even have to utilize the class in question to fullfill the test first requirement; the effects of the indirectly used class are covered in the test. I'm not sure if this is what he meant though. &lt;/p&gt;
</description>
    </item>
    <item>
        <title>Floating-point arithmetic</title>
        <link>http://tancred.com/malte/blog/2004/05/27.html#floatingpoint</link>
        <description>&lt;p&gt; I can't call myself a computer scientist but one day, one day, I'll read up on &lt;a href=&quot;http://docs.sun.com/source/806-3568/ncg_goldberg.html&quot;&gt;what every computer scientist should know about floating-point arithmetic&lt;/a&gt; and I will have taken a step in the right direction. &lt;/p&gt;
</description>
    </item>
    <item>
        <title>UFS, HFS+ and international characters</title>
        <link>http://tancred.com/malte/blog/2004/05/04.html#ufshfsissue</link>
        <description>&lt;p&gt; Today I stumbled across an issue with filename encodings on Mac OS X. We have a server that has been around since the good 'ol days of rhapsody, and since many files on this server differ only in the case of their names we've stayed on UFS. With the introduction of Case Sensitive HFS+ in Mac OS X version 10.3 I thought the time was right to migrate the old UFS filesystem. &lt;/p&gt;

&lt;p&gt; There's a problem though. It seems UFS is quite forgiving in respect to the encoding used in filenames. A lot of files on our UFS disk has been FTP:ed from Windows machines and have swedish characters in them, encoded in Windows Latin. These files cannot be copied to an HFS+ partition as HFS+ seems to require correct UTF-8 encoding (or, as discussed on &lt;a href=&quot;http://twiki.org/cgi-bin/view/Codev/MacOSXFilesystemEncodingWithI18N&quot;&gt;this page&lt;/a&gt;, &lt;q&gt;HFS+ actually uses an Apple-modified version of Unicode's Normalisation Form D&lt;/q&gt;). &lt;/p&gt;

&lt;p&gt; I'm not sure how to handle this. We could convert all filenames on the UFS disk to UTF-8 (which HFS+ seems to handle) before moving them to an HFS+ partition. I don't think this solves the problem where someone uploads a file with international characters in its name from a Windows machine using FTP, or when a cgi script like &lt;a href=&quot;http://www.usemod.com/cgi-bin/wiki.pl?UseModWiki&quot;&gt;UseModWiki&lt;/a&gt; tries to create a page with international characters in its name. Perhaps there are nice workarounds to these problems, but for now I feel it's safer to stay with UFS. &lt;/p&gt;
</description>
    </item>
    <item>
        <title>Mac OS X system user accounts</title>
        <link>http://tancred.com/malte/blog/2004/04/06.html#systemusersrealname</link>
        <description>
&lt;p&gt; I seldom mess around in the Accounts Preference Pane but yesterday I had reason to do so, only to rediscover a long time problem I've had with this preference pane. For some reason an exception was thrown when the pane was activated, making it almost unusable. According to &lt;tt&gt;console.log&lt;/tt&gt; the exception was raised because a &lt;q&gt;nil string (or other) argument&lt;/q&gt; was passed to &lt;code&gt;NSCFString&lt;/code&gt;'s &lt;code&gt;-replaceCharactersInRange:withString:&lt;/code&gt;. The whole thing was driving me mad. &lt;/p&gt;

&lt;p&gt; I finally found out that a few system user accounts I've created didn't have a &lt;tt&gt;realname&lt;/tt&gt; property. These system accounts also had &lt;tt&gt;uid&lt;/tt&gt;s starting at 1000 which apparently triggers the exception. I guess the Accounts Preference Pane interprets high &lt;tt&gt;uid&lt;/tt&gt;s to mean the users are a &lt;em&gt;real&lt;/em&gt; users and so wants to find a &lt;tt&gt;realname&lt;/tt&gt; property. I'm not sure where the limit is on system users versus real users, but 100 rings a bell. Oh well, the pane is working again even if the user list is populated with a few system users. &lt;/p&gt;
</description>
    </item>
    <item>
        <title>Duncan's UnitKit</title>
        <link>http://tancred.com/malte/blog/2004/03/22.html#unitkit</link>
        <description>&lt;p&gt; James Duncan Davidson has just released &lt;a href=&quot;http://x180.net/Code/UnitKit/index.html&quot;&gt;UnitKit&lt;/a&gt; version 0.6. A nice and simple unit testing framework with great Xcode integration! &lt;/p&gt;
</description>
    </item>
    <item>
        <title>The size of A</title>
        <link>http://tancred.com/malte/blog/2004/03/22.html#papersize</link>
        <description>&lt;p&gt; Just found out the width-height ratio of any &lt;tt&gt;A0, A1, ..., An&lt;/tt&gt; paper is
&lt;tt&gt;1:sqrt(2)&lt;/tt&gt;. Thus (if I'm not completely wrong) one should be able to use the function
&lt;tt&gt;h(x) = sqrt(sqrt(2)) * (1 / sqrt(2))^x&lt;/tt&gt;
to get the height (in meters) of any paper of size &lt;tt&gt;Ax&lt;/tt&gt;, and the function
&lt;tt&gt;b(x) = h(x) / sqrt(2)&lt;/tt&gt;
(or &lt;tt&gt;b(x) = h(x + 1)&lt;/tt&gt;)
to get the width of any paper of size Ax. You never know when this might come in handy. &lt;/p&gt;
</description>
    </item>
</channel>
</rss>
