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

<feed version="0.3" 
   xmlns="http://purl.org/atom/ns#"
   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://grahamcox.co.uk/serendipity/rss.php?version=atom0.3" rel="service.feed" title="This site works best in a real browser" type="application/x.atom+xml" />
    <link href="http://grahamcox.co.uk/serendipity/"                        rel="alternate"    title="This site works best in a real browser" type="text/html" />
    <link href="http://grahamcox.co.uk/serendipity/rss.php?version=2.0"     rel="alternate"    title="This site works best in a real browser" type="application/rss+xml" />
    <title mode="escaped" type="text/html">This site works best in a real browser</title>
    <tagline mode="escaped" type="text/html">My little place on the web...</tagline>
    <id>http://grahamcox.co.uk/serendipity/</id>
    <modified>2010-08-17T10:10:26Z</modified>
    <generator url="http://www.s9y.org/" version="1.5.3">Serendipity 1.5.3 - http://www.s9y.org/</generator>
    <dc:language>en</dc:language>
    <info mode="xml" type="text/html">
        <div xmlns="http://www.w3.org/1999/xhtml">You are viewing an ATOM formatted XML site feed. Usually this file is inteded to be viewed in an aggregator or syndication software. If you want to know more about ATOM, please visist <a href="http://atomenabled.org/">Atomenabled.org</a></div>
    </info>

    <entry>
        <link href="http://grahamcox.co.uk/serendipity/index.php?/archives/39-Calling-Maven2-from-Ant.html" rel="alternate" title="Calling Maven2 from Ant" type="text/html" />
        <author>
            <name>Graham Cox</name>
                    </author>
    
        <issued>2010-08-17T10:10:26Z</issued>
        <created>2010-08-17T10:10:26Z</created>
        <modified>2010-08-17T10:10:26Z</modified>
        <wfw:comment>http://grahamcox.co.uk/serendipity/wfwcomment.php?cid=39</wfw:comment>
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://grahamcox.co.uk/serendipity/rss.php?version=atom0.3&amp;type=comments&amp;cid=39</wfw:commentRss>
    
        <id>http://grahamcox.co.uk/serendipity/index.php?/archives/39-guid.html</id>
        <title mode="escaped" type="text/html">Calling Maven2 from Ant</title>
        <content type="application/xhtml+xml" xml:base="http://grahamcox.co.uk/serendipity/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                There is a lot of information available on how to call Ant from Maven2 scripts, but very little on the reverse operation. As it happens, this is actually quite simple to manage - Maven2 is a Java app, so it can be executed by simply using the Java task from inside your Ant script with the correct classpath, Main class name and arguments. The following snippit will do this for the simple case:<br />
<br />
<div class="bb-code-title">CODE:</div><div class="bb-code">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#60;target&#160;name="execute_maven"&#62;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#60;java&#160;classname="org.codehaus.classworlds.Launcher"<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;fork="yes"<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;failonerror="true"&#62;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#60;arg&#160;value="${maven.target}"&#160;/&#62;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#60;sysproperty&#160;key="classworlds.conf"&#160;value="${maven.home}/bin/m2.conf"&#160;/&#62;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#60;sysproperty&#160;key="maven.home"&#160;value="${maven.home}"&#160;/&#62;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#60;classpath&#62;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#60;pathelement&#160;location="${maven.home}/boot/classworlds-1.1.jar"&#160;/&#62;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#60;/classpath&#62;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#60;/java&#62;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#60;/target&#62;</div><br />
<br />
Note that this depends on the property "maven.home" being set correctly, and when called it will require the "maven.target" parameter to be supplied. "maven.home" will likely be set in build.properties or similar, and calling it is as simple as<br />
<div class="bb-code-title">CODE:</div><div class="bb-code">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#60;antcall&#160;target="execute_maven"&#62;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#60;param&#160;name="maven.target"&#160;value="install"&#160;/&#62;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#60;/antcall&#62;</div> 
            </div>
        </content>

        
    </entry>
    <entry>
        <link href="http://grahamcox.co.uk/serendipity/index.php?/archives/38-Buying-a-Windows-free-laptop.html" rel="alternate" title="Buying a Windows-free laptop" type="text/html" />
        <author>
            <name>Graham Cox</name>
                    </author>
    
        <issued>2009-04-15T10:02:15Z</issued>
        <created>2009-04-15T10:02:15Z</created>
        <modified>2009-04-15T10:39:00Z</modified>
        <wfw:comment>http://grahamcox.co.uk/serendipity/wfwcomment.php?cid=38</wfw:comment>
        <slash:comments>1</slash:comments>
        <wfw:commentRss>http://grahamcox.co.uk/serendipity/rss.php?version=atom0.3&amp;type=comments&amp;cid=38</wfw:commentRss>
    
        <id>http://grahamcox.co.uk/serendipity/index.php?/archives/38-guid.html</id>
        <title mode="escaped" type="text/html">Buying a Windows-free laptop</title>
        <content type="application/xhtml+xml" xml:base="http://grahamcox.co.uk/serendipity/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                I have recently been on a quest to buy a new laptop that does not come with Windows. If it comes with Linux pre-installed then that's the best outcome. If it comes with nothing pre-installed - which includes if it comes with the FreeDOS that some companies are now offering - then that counts as second, and if it comes with Windows but the company will allow me to get a refund for the software then that is third.<br />
<br />
I am looking in the £300ish price range - ideally I don't want to pay more than £300 after Windows has been removed from the equation, which means that I'm looking at laptops that cost up to £400 with Windows installed and being hopeful. I'm also looking at full size laptops and not netbooks. If I decide to go for a Netbook then the Asus EeePC 1000 wins hands down and I know where I can get one from for £300 already. If I can get a larger screen and keyboard, and better spec machine, for the same price I'm going to. :)<br />
<br />
So far, I have contacted the following companies with the following results:<br />
<br />
<a href="http://grahamcox.co.uk/serendipity/exit.php?url=aHR0cDovL3d3dy5pbnNpZ2h0LmNvbS91aw==&amp;entry_id=38" title="http://www.insight.com/uk"  onmouseover="window.status='http://www.insight.com/uk';return true;" onmouseout="window.status='';return true;">Insight</a> - Insight replied to my email within one day, which was very impressive. However, Insight can not offer laptops from stock with no operating systems, and can not offer a refund for a pre-installed version of Windows. However, they do have a laptop from stock that comes with FreeDOS pre-installed instead of Windows.<br />
<br />
<a href="http://grahamcox.co.uk/serendipity/exit.php?url=aHR0cDovL3d3dy5kZWxsLmNvLnVr&amp;entry_id=38" title="http://www.dell.co.uk"  onmouseover="window.status='http://www.dell.co.uk';return true;" onmouseout="window.status='';return true;">Dell</a> - Dell US apparantly offer Laptops with Linux pre-installed. Dell UK don't seem to do this except for the Dell Mini range however. They do offer exactly 4 larger laptops with Linux, but prices range from £800 to £2000! Two chats with Dell on their Live Support Chat service both ended up with my being told to ring Customer Services. Ringing Customer Services ended up with my being transfered to Pre-Sales, who then told me that they couldn't answer my question, that I'd need to talk to Customer Services and gave me the number that I'd just rang. Additionally a post in the Dell Support forums has so far gone unanswered.<br />
<br />
<a href="http://grahamcox.co.uk/serendipity/exit.php?url=aHR0cDovL3d3dy5wY3dvcmxkLmNvLnVr&amp;entry_id=38" title="http://www.pcworld.co.uk"  onmouseover="window.status='http://www.pcworld.co.uk';return true;" onmouseout="window.status='';return true;">PC World</a> - An email to PC World has so far taken 3 days without an answer. Admittedly, the first of those three days was Easter Monday but it's still not hopeful.<br />
<br />
<a href="http://grahamcox.co.uk/serendipity/exit.php?url=aHR0cDovL3d3dy5lYnV5ZXIuY28udWs=&amp;entry_id=38" title="http://www.ebuyer.co.uk"  onmouseover="window.status='http://www.ebuyer.co.uk';return true;" onmouseout="window.status='';return true;">eBuyer</a> - An Email to eBuyer got a response 3 days after being sent - again the first of those three days was Easter Monday - but the email just said that I would need to ring Pre-Sales. Having just spoken to them, they apparently can't offer a refund for the pre-installed Windows that comes with the computer and don't offer any computers that don't come with Windows at all.<br />
<br />
<a href="http://grahamcox.co.uk/serendipity/exit.php?url=aHR0cDovL3d3dy5kYWJzLmNvLnVr&amp;entry_id=38" title="http://www.dabs.co.uk"  onmouseover="window.status='http://www.dabs.co.uk';return true;" onmouseout="window.status='';return true;">Dabs</a> - An Email sent three days ago hasn't been answered yet. The first of those three days was Easter Monday though.<br />
<br />
<a href="http://grahamcox.co.uk/serendipity/exit.php?url=aHR0cDovL3d3dy5hcmlhLmNvLnVr&amp;entry_id=38" title="http://www.aria.co.uk"  onmouseover="window.status='http://www.aria.co.uk';return true;" onmouseout="window.status='';return true;">Aria</a> - An Email sent yesterday hasn't been answered yet<br />
<br />
<a href="http://grahamcox.co.uk/serendipity/exit.php?url=aHR0cDovL3d3dy5zY2FuLmNvLnVr&amp;entry_id=38" title="http://www.scan.co.uk"  onmouseover="window.status='http://www.scan.co.uk';return true;" onmouseout="window.status='';return true;">Scan</a> - An Email sent yesterday hasn't been answered yet<br />
 
            </div>
        </content>

        
    </entry>
    <entry>
        <link href="http://grahamcox.co.uk/serendipity/index.php?/archives/37-Automatic-testing-of-the-Linux-Kernel.html" rel="alternate" title="Automatic testing of the Linux Kernel" type="text/html" />
        <author>
            <name>Graham Cox</name>
                    </author>
    
        <issued>2009-02-28T11:34:10Z</issued>
        <created>2009-02-28T11:34:10Z</created>
        <modified>2009-02-28T11:34:10Z</modified>
        <wfw:comment>http://grahamcox.co.uk/serendipity/wfwcomment.php?cid=37</wfw:comment>
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://grahamcox.co.uk/serendipity/rss.php?version=atom0.3&amp;type=comments&amp;cid=37</wfw:commentRss>
    
        <id>http://grahamcox.co.uk/serendipity/index.php?/archives/37-guid.html</id>
        <title mode="escaped" type="text/html">Automatic testing of the Linux Kernel</title>
        <content type="application/xhtml+xml" xml:base="http://grahamcox.co.uk/serendipity/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                I was reading fairly recently about somebody (No attribution because I really can't remember who it was or where I read it. Sorry) who has a setup where he can do automatic bisect runs on the linux kernel by building the kernel, copying the built files across to a second machine and causing the second machine to reboot. The build was then considered bad if the second machine hadn't come up within 10 minutes, and the entire process was automatic except for needing to reboot the machine by hand if it didn't come up.<br />
<br />
This got me to thinking about ways that this can be improved. I haven't tested this yet, but in theory this would work just as well but be more streamlined. <br />
<br />
The first thought was to use a virtual machine - something like VMWare or VirtualBox - instead of a physical machine then the script can also be responsible for killing the machine if it doesn't come up. <br />
<br />
It then occured to me that this can be taken a step further by having a virtual machine booting off of a live CD - one that was specially crafted using the newly built kernel. This way, there's no requirement to have the machine be able to boot in order to install the new kernel. The entire process would be something like:<br />
<br />
** Build kernel<br />
** Master a new Live CD image featuring the kernel<br />
** Fire up the virtual machine using the newly mastered Live CD<br />
** Test if it worked<br />
** Kill the virtual machine<br />
** Repeat<br />
<br />
Testing if it worked is a slightly tricky one - I think the article I read used a serial console to do this, but I'm not sure if that's possible on a virtual machine. What is possible though is if the script was to run up a network server on a well known IP/Port - the script already knows these details and so can build it into the Live CD - and the Live CD run a program that connects to this network server during startup. It could even go so far as to make the only process that is loaded in startup - after all of the required networking stuff is loaded, obviously - be the client that connects to this server. The script can then determine success/failure by if the server gets a connection from the virtual machine within a known period of time - 10 minutes works, but can probably be cut down quite a lot since the virtual machine is doing very little now. I'd like to think with the amount that is being done, a boot up time of 2 minutes is slow...<br />
<br />
As I said - I've not even considered how to go about making this a reality, but it's an interesting thought that could streamline bisecting of kernels to see which ones boot with zero user intervention. 
            </div>
        </content>

        
    </entry>
    <entry>
        <link href="http://grahamcox.co.uk/serendipity/index.php?/archives/36-CMake-code-to-support-asciidoc.html" rel="alternate" title="CMake code to support asciidoc" type="text/html" />
        <author>
            <name>Graham Cox</name>
                    </author>
    
        <issued>2008-11-07T13:14:38Z</issued>
        <created>2008-11-07T13:14:38Z</created>
        <modified>2008-11-07T13:14:38Z</modified>
        <wfw:comment>http://grahamcox.co.uk/serendipity/wfwcomment.php?cid=36</wfw:comment>
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://grahamcox.co.uk/serendipity/rss.php?version=atom0.3&amp;type=comments&amp;cid=36</wfw:commentRss>
    
        <id>http://grahamcox.co.uk/serendipity/index.php?/archives/36-guid.html</id>
        <title mode="escaped" type="text/html">CMake code to support asciidoc</title>
        <content type="application/xhtml+xml" xml:base="http://grahamcox.co.uk/serendipity/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                Asciidoc is a really useful and sensible way of allowing people to write documentation, in that the plain text source code is nearly as readable as the generated output. The following is a CMake file to allow for conversion of text input files into asciidoc generated output files<br />
<br />
<code><br />
PROJECT(Document)<br />
FIND_PACKAGE(Asciidoc)<br />
IF(ASCIIDOC_FOUND)<br />
  FILE(GLOB _docfiles *.txt)<br />
<br />
  FOREACH(_file ${_docfiles})<br />
    GET_FILENAME_COMPONENT(_file_we ${_file} NAME_WE)<br />
    SET(_in "${_file_we}")<br />
    SET(_out "${_file_we}.html")<br />
    IF (NOT "${_in}" STREQUAL "CMakeLists")<br />
        ADD_CUSTOM_COMMAND(<br />
            OUTPUT    "${_out}"<br />
            COMMAND   ${ASCIIDOC_EXECUTABLE} -a toc -o ${_out} ${_file}<br />
            DEPENDS   ${_file}<br />
            COMMENT   "Asciidoc ${_in}"<br />
        )<br />
        ADD_CUSTOM_TARGET(${_in} ALL echo<br />
          DEPENDS   "${_out}"<br />
        )<br />
    ENDIF (NOT "${_in}" STREQUAL "CMakeLists")<br />
<br />
  ENDFOREACH(_file)<br />
ENDIF(ASCIIDOC_FOUND)<br />
</code><br />
<br />
And it needs the following FindAsciidoc.cmake file available<br />
<br />
<code><br />
# - Find Asciidoc<br />
# this module looks for asciidoc<br />
#<br />
#  ASCIIDOC_EXECUTABLE - the full path to asciidoc<br />
#  ASCIIDOC_FOUND      - If false, don't attempt to use asciidoc.<br />
<br />
FIND_PROGRAM(ASCIIDOC_EXECUTABLE<br />
  asciidoc<br />
  )<br />
<br />
MARK_AS_ADVANCED(<br />
  ASCIIDOC_EXECUTABLE<br />
  )<br />
<br />
IF (NOT ASCIIDOC_EXECUTABLE)<br />
  SET(ASCIIDOC_FOUND "NO")<br />
ELSE (NOT ASCIIDOC_EXECUTABLE)<br />
  SET(ASCIIDOC_FOUND "YES")<br />
ENDIF (NOT ASCIIDOC_EXECUTABLE)<br />
<br />
<br />
IF (NOT ASCIIDOC_FOUND AND Asciidoc_FIND_REQUIRED)<br />
   MESSAGE(FATAL_ERROR "Could not find asciidoc")<br />
ENDIF (NOT ASCIIDOC_FOUND AND Asciidoc_FIND_REQUIRED)<br />
</code> 
            </div>
        </content>

        
    </entry>
    <entry>
        <link href="http://grahamcox.co.uk/serendipity/index.php?/archives/35-realpath-script.html" rel="alternate" title="realpath script" type="text/html" />
        <author>
            <name>Graham Cox</name>
                    </author>
    
        <issued>2008-04-09T09:35:25Z</issued>
        <created>2008-04-09T09:35:25Z</created>
        <modified>2008-04-09T09:35:25Z</modified>
        <wfw:comment>http://grahamcox.co.uk/serendipity/wfwcomment.php?cid=35</wfw:comment>
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://grahamcox.co.uk/serendipity/rss.php?version=atom0.3&amp;type=comments&amp;cid=35</wfw:commentRss>
    
        <id>http://grahamcox.co.uk/serendipity/index.php?/archives/35-guid.html</id>
        <title mode="escaped" type="text/html">realpath script</title>
        <content type="application/xhtml+xml" xml:base="http://grahamcox.co.uk/serendipity/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                One thing that always gets me is how to convert a given path - be it absolute, relative or whatever - into an absolute path on the filesystem. It turns out there's a perl module that can do exactly this, and so I've just rolled a tiny script that makes use of this and converts it's first parameter into a real path - an absolute path on the filesystem regardless of where it came from, and without any extra . or .. elements in there.<br />
<br />
The script does require the File::PathConvert module to be installed before it will work, but then you can just drop it into /usr/local/bin or wherever and do magic with it exactly the same as dirname or basename.<br />
<br />
<code><br />
#!/usr/bin/perl -w<br />
<br />
use File::PathConvert qw(realpath);<br />
<br />
if (@ARGV==0)<br />
{<br />
        print "Usage: realpath <pathname>\n";<br />
        exit();<br />
}<br />
my $in = $ARGV[0];<br />
my $outpath = realpath($in);<br />
print $outpath;<br />
</code> 
            </div>
        </content>

        
    </entry>
    <entry>
        <link href="http://grahamcox.co.uk/serendipity/index.php?/archives/34-Yet-another-IE6-Hang-bug.html" rel="alternate" title="Yet another IE6 Hang bug" type="text/html" />
        <author>
            <name>Graham Cox</name>
                    </author>
    
        <issued>2008-01-03T16:10:06Z</issued>
        <created>2008-01-03T16:10:06Z</created>
        <modified>2008-01-03T16:10:06Z</modified>
        <wfw:comment>http://grahamcox.co.uk/serendipity/wfwcomment.php?cid=34</wfw:comment>
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://grahamcox.co.uk/serendipity/rss.php?version=atom0.3&amp;type=comments&amp;cid=34</wfw:commentRss>
    
        <id>http://grahamcox.co.uk/serendipity/index.php?/archives/34-guid.html</id>
        <title mode="escaped" type="text/html">Yet another IE6 Hang bug</title>
        <content type="application/xhtml+xml" xml:base="http://grahamcox.co.uk/serendipity/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                It appears that I have just discovered yet another IE6 hang bug- though I'm probably not the first person to discover it...<br />
<br />
I'm not sure of the exact set of circumstances that cause it to happen yet, as I've not been able to reproduce it in a simplified form unfortunatly, but at least part of what is required is as follows:<br />
<ul><br />
<li>An element - div in this case - with a margin-left of some non-zero value</li><br />
<li>Immediatly inside this element at least 4 input elements of type hidden, all together</li><br />
<li>Immediatly after these 4 input elements, an element that is defined to be float: left</li><br />
</ul><br />
Whether or not a doctype is present does not appear to affect the outcome, so it is not a simple reproduction of the bug mentioned at <a href="http://grahamcox.co.uk/serendipity/exit.php?url=aHR0cDovL2Jsb2cuc2VhZ3VsLmNvLnVrL2FydGljbGVzLzIwMDcvMDIvMTUvY3Jhc2hpbmctaWUtNi13aXRoLXN0eWxlLXNoZWV0cw==&amp;entry_id=34" title="http://blog.seagul.co.uk/articles/2007/02/15/crashing-ie-6-with-style-sheets"  onmouseover="window.status='http://blog.seagul.co.uk/articles/2007/02/15/crashing-ie-6-with-style-sheets';return true;" onmouseout="window.status='';return true;">this blog post</a>.<br />
<br />
However, the following do stop the bug from manifesting:<br />
<ul><br />
<li>Making it so that there are less than 4 input elements all together before the float</li><br />
<li>Making at least one of the input elements to not be of type hidden</li><br />
<li>Putting another element between the 4 inputs and the float</li><br />
<li>Making the element not float any more</li><br />
<li>Changing the margin-left to padding-left instead.</li><br />
<li>Wrapping the 4 input elements in a container element themselves - This is the one I used to solve the problem, the 4 input elements now exist inside a div that is set to display: none, and everything is happy.</li><br />
</ul> 
            </div>
        </content>

        
    </entry>
    <entry>
        <link href="http://grahamcox.co.uk/serendipity/index.php?/archives/33-Git-ignore-lists-for-autotools.html" rel="alternate" title="Git ignore lists for autotools" type="text/html" />
        <author>
            <name>Graham Cox</name>
                    </author>
    
        <issued>2007-12-04T11:17:48Z</issued>
        <created>2007-12-04T11:17:48Z</created>
        <modified>2010-08-17T10:16:41Z</modified>
        <wfw:comment>http://grahamcox.co.uk/serendipity/wfwcomment.php?cid=33</wfw:comment>
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://grahamcox.co.uk/serendipity/rss.php?version=atom0.3&amp;type=comments&amp;cid=33</wfw:commentRss>
    
        <id>http://grahamcox.co.uk/serendipity/index.php?/archives/33-guid.html</id>
        <title mode="escaped" type="text/html">Git ignore lists for autotools</title>
        <content type="application/xhtml+xml" xml:base="http://grahamcox.co.uk/serendipity/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                Having just set up a new autotools project, and started the project in <a href="http://grahamcox.co.uk/serendipity/exit.php?url=aHR0cDovL2dpdC5vci5jeg==&amp;entry_id=33" title="http://git.or.cz"  onmouseover="window.status='http://git.or.cz';return true;" onmouseout="window.status='';return true;">Git</a> the following is the complete .gitignore list that I've produced to capture all of the artifacts that have been produced. This only covers the artifacts that are produced by a bare project that doesn't acutally produce any output.<br />
<div class="bb-code-title">CODE:</div><div class="bb-code">#&#160;The&#160;actual&#160;Makefiles&#160;produced<br />
Makefile<br />
Makefile.in<br />
<br />
#&#160;The&#160;local&#160;aclocal.m4&#160;file<br />
aclocal.m4<br />
<br />
#&#160;The&#160;output&#160;of&#160;the&#160;configure&#160;script<br />
config.guess<br />
config.log<br />
config.status<br />
config.sub<br />
<br />
#&#160;The&#160;configure&#160;script&#160;itself<br />
configure<br />
<br />
#&#160;The&#160;include&#160;directory&#160;artifacts<br />
include/config.h<br />
include/stamp-h1<br />
<br />
#&#160;Various&#160;scripts&#160;used&#160;for&#160;libtool&#160;and&#160;the&#160;like<br />
install-sh<br />
libtool<br />
ltmain.sh<br />
missing<br />
depcomp<br />
<br />
#&#160;Not&#160;sure&#160;what&#160;this&#160;one&#160;is&#160;for<br />
autom4te.cache/&#42;</div> 
            </div>
        </content>

        
    </entry>
    <entry>
        <link href="http://grahamcox.co.uk/serendipity/index.php?/archives/32-XSL-in-the-Browser-and-output-encodings.html" rel="alternate" title="XSL in the Browser and output encodings" type="text/html" />
        <author>
            <name>Graham Cox</name>
                    </author>
    
        <issued>2007-07-26T14:13:22Z</issued>
        <created>2007-07-26T14:13:22Z</created>
        <modified>2007-07-26T14:13:22Z</modified>
        <wfw:comment>http://grahamcox.co.uk/serendipity/wfwcomment.php?cid=32</wfw:comment>
        <slash:comments>1</slash:comments>
        <wfw:commentRss>http://grahamcox.co.uk/serendipity/rss.php?version=atom0.3&amp;type=comments&amp;cid=32</wfw:commentRss>
    
        <id>http://grahamcox.co.uk/serendipity/index.php?/archives/32-guid.html</id>
        <title mode="escaped" type="text/html">XSL in the Browser and output encodings</title>
        <content type="application/xhtml+xml" xml:base="http://grahamcox.co.uk/serendipity/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                All the major browsers have the ability to download an XML document that has an xml-stylesheet processing instruction, understand the xml-stylesheet instruction, download the referenced XSL file and transform the downloaded XML before rendering it for the user. This means that you have the ability to even more clearly seperate the data from the design when producing web pages - have an XML feed that is the pure data, have an XSL file that transforms this XML file into (X)HTML for the browser to render and then have linked CSS files to apply visual styles to the HTML that is being rendered.<br />
<br />
Where this falls apart at first attempts is with the output encodings - specifically with IE trying to render the pages. It turns out that the encoding name that I keep using for everything is actually wrong. I always put an encoding of "utf8" on my xml documents, but the legal encoding name is actually "UTF-8". In every XML and XSL capable program that I've used, this has never been a problem which is why I never realised. <br />
<br />
Except for IE of course. In IE if you put in an encoding of "utf8" then you get the dreaded "System does not support the specified encoding" error that doesn't actually tell you anything. To make matters even more complicated, IE as an XML or HTML renderer can handle the name "utf8" perfectly well. It is only IE as an XSL processor that has trouble handling it. In other words, if you don't have an xml-stylesheet PI on your XML file, where the XML file is listed as having an encoding of "utf8" then IE will open it perfectly well, and will even process it with it's built in XSL file perfectly well. As soon as you put an xml-stylesheet PI onto this document, still with the encoding of "utf8" then it just all stops working...<br />
<br />
In short - to make sure that your XML and XSL files are going to work with IE, use an encoding name of "UTF-8" instead of "utf8"... 
            </div>
        </content>

        
    </entry>
    <entry>
        <link href="http://grahamcox.co.uk/serendipity/index.php?/archives/31-Soundex,-Metaphone-and-Double-Metaphone-generator.html" rel="alternate" title="Soundex, Metaphone and Double Metaphone generator" type="text/html" />
        <author>
            <name>Graham Cox</name>
                    </author>
    
        <issued>2007-06-11T10:12:03Z</issued>
        <created>2007-06-11T10:12:03Z</created>
        <modified>2007-06-11T10:12:03Z</modified>
        <wfw:comment>http://grahamcox.co.uk/serendipity/wfwcomment.php?cid=31</wfw:comment>
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://grahamcox.co.uk/serendipity/rss.php?version=atom0.3&amp;type=comments&amp;cid=31</wfw:commentRss>
    
        <id>http://grahamcox.co.uk/serendipity/index.php?/archives/31-guid.html</id>
        <title mode="escaped" type="text/html">Soundex, Metaphone and Double Metaphone generator</title>
        <content type="application/xhtml+xml" xml:base="http://grahamcox.co.uk/serendipity/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                For something I'm working on at the moment, I needed a simple way of generating <a href="http://grahamcox.co.uk/serendipity/exit.php?url=aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Tb3VuZGV4&amp;entry_id=31" title="http://en.wikipedia.org/wiki/Soundex"  onmouseover="window.status='http://en.wikipedia.org/wiki/Soundex';return true;" onmouseout="window.status='';return true;">Soundex</a>, <a href="http://grahamcox.co.uk/serendipity/exit.php?url=aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9NZXRhcGhvbmU=&amp;entry_id=31" title="http://en.wikipedia.org/wiki/Metaphone"  onmouseover="window.status='http://en.wikipedia.org/wiki/Metaphone';return true;" onmouseout="window.status='';return true;">Metaphone</a> and <a  href="http://grahamcox.co.uk/serendipity/exit.php?url=aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Eb3VibGVfTWV0YXBob25l&amp;entry_id=31" title="http://en.wikipedia.org/wiki/Double_Metaphone"  onmouseover="window.status='http://en.wikipedia.org/wiki/Double_Metaphone';return true;" onmouseout="window.status='';return true;">Double Metaphone</a> conversions of strings. As I couldn't find anything that did this easily on the web, I wrote myself one. This is found <a href="http://grahamcox.co.uk/serendipity/exit.php?url=aHR0cDovL2dyYWhhbWNveC5jby51ay9jZ2ktYmluL3NvdW5kZXgucGw=&amp;entry_id=31" title="http://grahamcox.co.uk/cgi-bin/soundex.pl"  onmouseover="window.status='http://grahamcox.co.uk/cgi-bin/soundex.pl';return true;" onmouseout="window.status='';return true;">Here</a><br />
<br />
The code for this uses the modules <a href="http://grahamcox.co.uk/serendipity/exit.php?url=aHR0cDovL3NlYXJjaC5jcGFuLm9yZy9+bWFya20vVGV4dC1Tb3VuZGV4LTMuMDIvU291bmRleC5wbQ==&amp;entry_id=31" title="http://search.cpan.org/~markm/Text-Soundex-3.02/Soundex.pm"  onmouseover="window.status='http://search.cpan.org/~markm/Text-Soundex-3.02/Soundex.pm';return true;" onmouseout="window.status='';return true;">Text::Soundex</a>, <a href="http://grahamcox.co.uk/serendipity/exit.php?url=aHR0cDovL3NlYXJjaC5jcGFuLm9yZy9+bXNjaHdlcm4vVGV4dC1NZXRhcGhvbmUtMS45Ni9NZXRhcGhvbmUucG0=&amp;entry_id=31" title="http://search.cpan.org/~mschwern/Text-Metaphone-1.96/Metaphone.pm"  onmouseover="window.status='http://search.cpan.org/~mschwern/Text-Metaphone-1.96/Metaphone.pm';return true;" onmouseout="window.status='';return true;">Text::Metaphone</a> and <a href="http://grahamcox.co.uk/serendipity/exit.php?url=aHR0cDovL3NlYXJjaC5jcGFuLm9yZy9+bWF1cmljZS9UZXh0LURvdWJsZU1ldGFwaG9uZS0wLjA3L0RvdWJsZU1ldGFwaG9uZS5wbQ==&amp;entry_id=31" title="http://search.cpan.org/~maurice/Text-DoubleMetaphone-0.07/DoubleMetaphone.pm"  onmouseover="window.status='http://search.cpan.org/~maurice/Text-DoubleMetaphone-0.07/DoubleMetaphone.pm';return true;" onmouseout="window.status='';return true;">Text::DoubleMetaphone</a> <br /><a href="http://grahamcox.co.uk/serendipity/index.php?/archives/31-Soundex,-Metaphone-and-Double-Metaphone-generator.html#extended">Continue reading "Soundex, Metaphone and Double Metaphone generator"</a>
            </div>
        </content>

        
    </entry>
    <entry>
        <link href="http://grahamcox.co.uk/serendipity/index.php?/archives/30-Compiling-LDAP-support-for-Apache-2.2.4.html" rel="alternate" title="Compiling LDAP support for Apache 2.2.4" type="text/html" />
        <author>
            <name>Graham Cox</name>
                    </author>
    
        <issued>2007-05-03T20:17:45Z</issued>
        <created>2007-05-03T20:17:45Z</created>
        <modified>2007-05-03T20:36:46Z</modified>
        <wfw:comment>http://grahamcox.co.uk/serendipity/wfwcomment.php?cid=30</wfw:comment>
        <slash:comments>1</slash:comments>
        <wfw:commentRss>http://grahamcox.co.uk/serendipity/rss.php?version=atom0.3&amp;type=comments&amp;cid=30</wfw:commentRss>
    
        <id>http://grahamcox.co.uk/serendipity/index.php?/archives/30-guid.html</id>
        <title mode="escaped" type="text/html">Compiling LDAP support for Apache 2.2.4</title>
        <content type="application/xhtml+xml" xml:base="http://grahamcox.co.uk/serendipity/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                Apache 2.2.4 has bundled with it modules for managing authentication against an LDAP directory. Unfortunatly the obvious way to compile this doesn't actually work.<br />
<br />
The obvious way is to us a configure line like this:<br />
<code><br />
./configure --prefix=/usr/local/httpd --enable-mods-shared=all --enable-ssl --enable-so --enable-auth-digest --enable-authnz-ldap  --with-ldap --enable-ldap --with-ldap-sdk=openldap<br />
</code><br />
<br />
Unfortunatly, this doesn't build APR or APR-Util with LDAP support, so when it comes to compile the module itself it fails.<br />
<br />
What I had to do instead is build APR and APR-Util seperatly. Of course, doing so still didn't work properly for some reason. It turns out that you have to build APR and APR-Util seperatly, then build Apache telling it exactly where these two libraries can be found.<br />
<br />
My full build script for it now looks like this:<br />
<code><br />
#!/bin/sh<br />
<br />
cd httpd<br />
make distclean<br />
./configure --prefix=/usr/local/httpd --enable-mods-shared=all --enable-ssl --enable-so --enable-auth-digest --enable-authnz-ldap  --with-ldap --enable-ldap --with-ldap-sdk=openldap --with-apr=./srclib/apr --with-apr-util=./srclib/apr-util<br />
<br />
# Build APR and APR-util seperatly due to LDAP issues<br />
cd srclib<br />
cd apr<br />
./configure --prefix=/usr/local/httpd --enable-threads --enable-other-child<br />
make<br />
cd ..<br />
cd apr-util<br />
./configure --prefix=/usr/local/httpd --with-apr=../apr --with-ldap-lib=/usr/local/openldap/lib --with-ldap-include=/usr/local/openldap/include --with-ldap=ldap<br />
make<br />
cd ..<br />
cd ..<br />
<br />
make<br />
</code><br />
<br />
In addition, by doing it this way you need to make sure that you do a make install in both srclib/apr and srclib/apr-util in addition to just the apache source directory. Failing to do so will mean that the LDAP enabled APR and APR-Util won't be installed, and adding the LDAP modules into your httpd.conf will stop Apache from loading... You can tell you've done this if you get the error<br />
<code><br />
httpd: Syntax error on line 110 of /usr/local/httpd/conf/httpd.conf: Cannot load /usr/local/httpd/modules/mod_ldap.so into server: /usr/local/httpd/modules/mod_ldap.so: undefined symbol: apr_ldap_info<br />
</code><br />
or something similar when you try to load Apache. 
            </div>
        </content>

        
    </entry>
    <entry>
        <link href="http://grahamcox.co.uk/serendipity/index.php?/archives/29-Google-Adsense-site-specific-ads-are-awful.html" rel="alternate" title="Google Adsense site-specific ads are awful" type="text/html" />
        <author>
            <name>Graham Cox</name>
                    </author>
    
        <issued>2007-03-13T14:34:26Z</issued>
        <created>2007-03-13T14:34:26Z</created>
        <modified>2007-03-13T14:36:03Z</modified>
        <wfw:comment>http://grahamcox.co.uk/serendipity/wfwcomment.php?cid=29</wfw:comment>
        <slash:comments>-2</slash:comments>
        <wfw:commentRss>http://grahamcox.co.uk/serendipity/rss.php?version=atom0.3&amp;type=comments&amp;cid=29</wfw:commentRss>
    
        <id>http://grahamcox.co.uk/serendipity/index.php?/archives/29-guid.html</id>
        <title mode="escaped" type="text/html">Google Adsense site-specific ads are awful</title>
        <content type="application/xhtml+xml" xml:base="http://grahamcox.co.uk/serendipity/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                I've only just noticed, but the Google Adsense down the side of the blog here are really dreadful compared to the actual contents of the page they are on<br />
<br />
On a page that is almost entirelly tech-related stuff, I'm getting ads for legal advise and pregnancy stuff - hardly the most relevant of stuff... 
            </div>
        </content>

        
    </entry>
    <entry>
        <link href="http://grahamcox.co.uk/serendipity/index.php?/archives/28-fmemopen-for-Cygwin.html" rel="alternate" title="fmemopen for Cygwin" type="text/html" />
        <author>
            <name>Graham Cox</name>
                    </author>
    
        <issued>2007-01-16T10:52:00Z</issued>
        <created>2007-01-16T10:52:00Z</created>
        <modified>2007-01-16T11:26:38Z</modified>
        <wfw:comment>http://grahamcox.co.uk/serendipity/wfwcomment.php?cid=28</wfw:comment>
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://grahamcox.co.uk/serendipity/rss.php?version=atom0.3&amp;type=comments&amp;cid=28</wfw:commentRss>
    
        <id>http://grahamcox.co.uk/serendipity/index.php?/archives/28-guid.html</id>
        <title mode="escaped" type="text/html">fmemopen for Cygwin</title>
        <content type="application/xhtml+xml" xml:base="http://grahamcox.co.uk/serendipity/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                The GNU GLibC library defines a function called fmemopen that allows you to open an in-memory buffer as if it was a FILE &#42; handle. The LibC that Cygwin uses doesn't define this, and so this functionality is not possible.<br />
<br />
The below code is an implementation of fmemopen that works under Cygwin. It's far from finished, and likely to be very flakey, but simple tests do prove that it works.<br />
<br />
Currently missing features are:<br />
** Seeking<br />
** Writing into the buffer<br />
<br />
<a  href="http://grahamcox.co.uk/serendipity/exit.php?url=aHR0cDovL2dyYWhhbWNveC5jby51ay9maWxlcy9mbWVtb3Blbi5o&amp;entry_id=28" title="http://grahamcox.co.uk/files/fmemopen.h"  onmouseover="window.status='http://grahamcox.co.uk/files/fmemopen.h';return true;" onmouseout="window.status='';return true;">fmemopen.h</a><br />
<br />
To use it, simply #include the fmemopen.h file in your source file, and then call the fmemopen(const char &#42; data, const size_t size, const char &#42; mode) function to get your FILE &#42; pointer.<br />
<br />
The fields are as follows:<br />
** data: The data that you want to use.<br />
** size: The size of the data to use. <br />
** mode: Ignored, but included for footprint compatibility with the GLibC version.<br />
<br />
The actual data is memcpy'd out into an internal buffer, starting at <i>data</i>, and going for <i>size</i> bytes. 
            </div>
        </content>

        
    </entry>
    <entry>
        <link href="http://grahamcox.co.uk/serendipity/index.php?/archives/27-Lua-Scripting.html" rel="alternate" title="Lua Scripting" type="text/html" />
        <author>
            <name>Graham Cox</name>
                    </author>
    
        <issued>2007-01-05T14:45:19Z</issued>
        <created>2007-01-05T14:45:19Z</created>
        <modified>2007-01-05T14:46:08Z</modified>
        <wfw:comment>http://grahamcox.co.uk/serendipity/wfwcomment.php?cid=27</wfw:comment>
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://grahamcox.co.uk/serendipity/rss.php?version=atom0.3&amp;type=comments&amp;cid=27</wfw:commentRss>
    
        <id>http://grahamcox.co.uk/serendipity/index.php?/archives/27-guid.html</id>
        <title mode="escaped" type="text/html">Lua Scripting</title>
        <content type="application/xhtml+xml" xml:base="http://grahamcox.co.uk/serendipity/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                Not tested any of this yet, but this looks like a very concise and easy-to-understand introduction to embedding Lua in C++ code.<br />
<br />
<a href="http://grahamcox.co.uk/serendipity/exit.php?url=aHR0cDovL3d3dy5kZWJpYW4tYWRtaW5pc3RyYXRpb24ub3JnL2FydGljbGVzLzI2NA==&amp;entry_id=27" title="http://www.debian-administration.org/articles/264"  onmouseover="window.status='http://www.debian-administration.org/articles/264';return true;" onmouseout="window.status='';return true;">http://www.debian-administration.org/articles/264</a> 
            </div>
        </content>

        
    </entry>
    <entry>
        <link href="http://grahamcox.co.uk/serendipity/index.php?/archives/21-GPG-Key-Autoresponder-with-Procmail.html" rel="alternate" title="GPG Key Autoresponder with Procmail" type="text/html" />
        <author>
            <name>Graham Cox</name>
                    </author>
    
        <issued>2006-11-10T15:04:39Z</issued>
        <created>2006-11-10T15:04:39Z</created>
        <modified>2006-11-13T16:59:41Z</modified>
        <wfw:comment>http://grahamcox.co.uk/serendipity/wfwcomment.php?cid=21</wfw:comment>
        <slash:comments>1</slash:comments>
        <wfw:commentRss>http://grahamcox.co.uk/serendipity/rss.php?version=atom0.3&amp;type=comments&amp;cid=21</wfw:commentRss>
    
        <id>http://grahamcox.co.uk/serendipity/index.php?/archives/21-guid.html</id>
        <title mode="escaped" type="text/html">GPG Key Autoresponder with Procmail</title>
        <content type="application/xhtml+xml" xml:base="http://grahamcox.co.uk/serendipity/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                I have just set up my <a href="http://grahamcox.co.uk/serendipity/exit.php?url=aHR0cDovL3d3dy5wcm9jbWFpbC5vcmc=&amp;entry_id=21" title="http://www.procmail.org"  onmouseover="window.status='http://www.procmail.org';return true;" onmouseout="window.status='';return true;">procmail</a> config to automatically send out my GPG Public key to anyone who sends a specially crafted email to me. Because I use <a href="http://grahamcox.co.uk/serendipity/exit.php?url=aHR0cDovL3d3dy5leGltLm9yZw==&amp;entry_id=21" title="http://www.exim.org"  onmouseover="window.status='http://www.exim.org';return true;" onmouseout="window.status='';return true;">exim</a> as my MTA, I receive emails that get sent to graham-*@ and graham+*@ as well as those simply sent to graham@.<br />
<br />
Making use of this, I've put together a procmail rule that automatically responds to all emails sent to graham-gpgkey@grahamcox.co.uk. This rule simply automatically responds to the sender with an email containing my GPG Public key.<br />
<br />
The procmail rule that does this is as follows:<br />
<code><br />
:0<br />
<strong> ^To: .*graham-gpgkey@grahamcox.co.uk<br />
{<br />
        # Rewrite the header of the incoming mail<br />
        # formail's -r flag makes it a reply to the incoming message<br />
        # formail's -I flags add/replace headers in the original message<br />
        :0 fhw<br />
        | formail       -rI"Subject: My GnuPG public key" \<br />
                        -I"X-Loop: $MY_ADDR"<br />
        # Write the body of the outgoing mail<br />
        :0 fbw<br />
        | /usr/bin/gpg --armor --export &lt;my id&gt;<br />
<br />
        # Send the email<br />
        :0 w<br />
        </strong> > 1<br />
        ! -oi -t<br />
}<br />
</code> 
            </div>
        </content>

        
    </entry>
    <entry>
        <link href="http://grahamcox.co.uk/serendipity/index.php?/archives/20-Website-Templates.html" rel="alternate" title="Website Templates" type="text/html" />
        <author>
            <name>Graham Cox</name>
                    </author>
    
        <issued>2006-10-10T12:53:08Z</issued>
        <created>2006-10-10T12:53:08Z</created>
        <modified>2006-10-10T12:57:54Z</modified>
        <wfw:comment>http://grahamcox.co.uk/serendipity/wfwcomment.php?cid=20</wfw:comment>
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://grahamcox.co.uk/serendipity/rss.php?version=atom0.3&amp;type=comments&amp;cid=20</wfw:commentRss>
    
        <id>http://grahamcox.co.uk/serendipity/index.php?/archives/20-guid.html</id>
        <title mode="escaped" type="text/html">Website Templates</title>
        <content type="application/xhtml+xml" xml:base="http://grahamcox.co.uk/serendipity/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                Web design is something that people are either very good at or very bad at. I'm one of the people who are very bad at it, and as such use as much help as possible from elsewhere to do the design of any websites I'm working on.<br />
<br />
One such place is <a href="http://grahamcox.co.uk/serendipity/exit.php?url=aHR0cDovL3d3dy5vc3dkLm9yZy8=&amp;entry_id=20" title="http://www.oswd.org/"  onmouseover="window.status='http://www.oswd.org/';return true;" onmouseout="window.status='';return true;">Open Source Web Design</a> - a repository of free to use web templates that you can just drop into place and use. This I have used a fair bit and the work is generally quite excellent.<br />
<br />
Another place that I have just found is <a href="http://grahamcox.co.uk/serendipity/exit.php?url=aHR0cDovL3d3dy5nZXR0ZW1wbGF0ZS5jb20v&amp;entry_id=20" title="http://www.gettemplate.com/"  onmouseover="window.status='http://www.gettemplate.com/';return true;" onmouseout="window.status='';return true;">GetTemplate</a> - another site with free web templates and also offering custom designs for a fee. I <strong>think</strong> this site is run by one of the publishers who has work on OSWD, and it's his work that he is offering. 
            </div>
        </content>

        
    </entry>
</feed>