<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:gml="http://www.opengis.net/gml"
>

<channel>
	<title>NuBlog &#187; Open Source</title>
	<atom:link href="http://blog.nuit.dk/category/open-source/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.nuit.dk</link>
	<description>Jens Ulrik Lange on Web technology, blogging, programming, Linux and IT project management</description>
	<lastBuildDate>Wed, 22 Sep 2010 20:56:00 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=</generator>
		<item>
		<title>Ubuntu 10.4 &#8211; up with only one quirk so far</title>
		<link>http://blog.nuit.dk/ubuntu-10-4-up-with-only-one-quirk-so-far/</link>
		<comments>http://blog.nuit.dk/ubuntu-10-4-up-with-only-one-quirk-so-far/#comments</comments>
		<pubDate>Tue, 04 May 2010 08:35:10 +0000</pubDate>
		<dc:creator>jul</dc:creator>
				<category><![CDATA[Geekyness]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[flicker]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://blog.nuit.dk/?p=109</guid>
		<description><![CDATA[This morning I let my Ubuntu 9.10 upgrade itself to 10.4. The upgrade itself ran fine with only a few interruptions where I had to confirm or deny changes to configuration files for PHP etc. As I landed at the office and hooked up the laptop (Thinkpad T61P) however, my external monitor was flickering a [...]]]></description>
			<content:encoded><![CDATA[<img style='float: left; margin-right: 10px; border: none;' src='http://www.gravatar.com/avatar.php?gravatar_id=21a11738f6a3b0696645fe12a6af6440&amp;default=http://use.perl.org/images/pix.gif' alt='No Gravatar' width=40 height=40/><p>This morning I let my Ubuntu 9.10 upgrade itself to 10.4. The upgrade itself ran fine with only a few interruptions where I had to confirm or deny changes to configuration files for PHP etc.</p>
<p>As I landed at the office and hooked up the laptop (Thinkpad T61P) however, my external monitor was flickering a lot. Tried booting into Windows and everything was fine. Google&#8217;d and found <a title="Post regarding fixes to flickering external monitor from Thinkpad T61P" href="http://ubuntuforums.org/showthread.php?p=9227527">this post</a> on <a href="http://ubuntuforums.org/">Ubuntu Forums</a>.</p>
<p>The post suggests making changes to menu.lst in /boot/grub. This is a somewhat short term solution, because the problem will probably reappear at the next kernel upgrade (which could be just around the corner). The fix may be on it&#8217;s way in an actual Ubuntu fix, but i chose a different approach which may also seem hack&#8217;ish &#8211; the fix could be more robust though.</p>
<p>Disclaimer: If you are not sure what you are doing, be <strong>very</strong> careful. Misspellings or deviations from the description below may lead to an unbootable system. This worked for me and doesn&#8217;t have to work for you. Make sure to back up any files you change.</p>
<p>OK? Let&#8217;s go..</p>
<p>First start a terminal (ALT-F2, enter &#8220;gnome-terminal&#8221;):</p>
<blockquote>
<pre>cd /etc/grub.d</pre>
</blockquote>
<p>Then:</p>
<blockquote>
<pre>sudo nano 10_linux</pre>
</blockquote>
<p>which will open an editor. Around line 96 inside the linux_entry-function is a line that looks like this:</p>
<blockquote>
<pre>linux    ${rel_dirname}/${basename} root=${linux_root_device_thisversion} ro ${args}</pre>
</blockquote>
<p>and it should be changed to:</p>
<blockquote>
<pre>linux    ${rel_dirname}/${basename} root=${linux_root_device_thisversion} ro <strong>radeon.modeset=0</strong> ${args}</pre>
</blockquote>
<p>Having done this, you should ask grub to rebuild it&#8217;s configuration files with:</p>
<blockquote>
<pre>sudo update-grub</pre>
</blockquote>
<p>Reboot and go on without the flicker..</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.nuit.dk/ubuntu-10-4-up-with-only-one-quirk-so-far/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<georss:point featurename="[55.700302654066256, 12.551295161247253]">55.700302654066256 12.551295161247253</georss:point>
	</item>
		<item>
		<title>Will ideas of the Massachusetts law spread?</title>
		<link>http://blog.nuit.dk/will-ideas-of-the-massachusetts-law-spread/</link>
		<comments>http://blog.nuit.dk/will-ideas-of-the-massachusetts-law-spread/#comments</comments>
		<pubDate>Thu, 29 Apr 2010 08:17:14 +0000</pubDate>
		<dc:creator>jul</dc:creator>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Software design]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[http]]></category>
		<category><![CDATA[https]]></category>
		<category><![CDATA[security]]></category>

		<guid isPermaLink="false">http://blog.nuit.dk/?p=105</guid>
		<description><![CDATA[On reddit, I found this article regarding a new law i Massachusetts that is to increase the security of personally identifiable information. If you have personally identifiable information (PII) about a Massachusetts resident, such as a first and last name, then you have to encrypt that data on the wire and as it’s persisted. Sending [...]]]></description>
			<content:encoded><![CDATA[<img style='float: left; margin-right: 10px; border: none;' src='http://www.gravatar.com/avatar.php?gravatar_id=21a11738f6a3b0696645fe12a6af6440&amp;default=http://use.perl.org/images/pix.gif' alt='No Gravatar' width=40 height=40/><p>On <a title="Reddit - programming" href="http://www.reddit.com/r/programming/">reddit</a>, I found <a title="SQL Server Magazine: A New Law Could Change the Way You Build Database Applications" href="http://www.sqlmag.com/print/sql-server/A-New-Law-that-Will-Change-the-Way-You-Build-Database-Applications.aspx">this article</a> regarding a new law i Massachusetts that is to increase the security of personally identifiable information.</p>
<blockquote><p>If you have personally identifiable information (PII) about a Massachusetts resident, such as a first and last name, then you have to encrypt that data on the wire and as it’s persisted. Sending PII over HTTP instead of HTTPS? That’s a big no no. Storing the name of a customer in SQL Server without the data being encrypted?  No way, Jose. You’ll get a fine of $5,000 per breach or lost record. If you have a database that contains 1,000 names of Massachusetts residents and lose it without the data being encrypted that’s $5,000,000. Yikes.</p></blockquote>
<p>The idea is good (yay &#8211; better security for anyone registering on a website) and bad (expensive). As a consultant in a country not covered by the law I could care less, but is this in general a good idea? Securing data and sending sensitive information across secure connections is always a good idea, and it could hit the EU soon. Documenting how you secure the Personally Identifiable Information (PII)? Who can argue with that being a good idea? As an IT consultant you won&#8217;t hear me cry myself to sleep.</p>
<p>But the proportions of the legislation seem unclear. If you log on to my website (securely of course), and I feed you the following pages through clear text HTTP &#8211; can I be fined if your name appear on the page as in &#8220;Reader XYZ is logged in&#8221;?</p>
<p>I guess so.</p>
<p>It strikes me that there is no level of sensitivity defined &#8211; anything considered personal must be secured. As a legislator, it seems very easy to do this when you don&#8217;t have to pick up the bill.</p>
<p>If this kind of legislation should hit Europe, I hope someone would elaborate a bit on the do&#8217;s and dont&#8217;s:</p>
<ul>
<li>Are all kinds of data included? Can I be fined if you, as a Massachusetts citizen, post a comment to this and include your name? (the database is secured, but nothing is sent through HTTPS)</li>
<li>Would it make sense to allow users to wave their rights, and thereby allow users to work with online applications that are not 100% secure?</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.nuit.dk/will-ideas-of-the-massachusetts-law-spread/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Karmic Koala &#8211; post install notes</title>
		<link>http://blog.nuit.dk/karmic-koala-post-install-notes/</link>
		<comments>http://blog.nuit.dk/karmic-koala-post-install-notes/#comments</comments>
		<pubDate>Sun, 08 Nov 2009 21:09:12 +0000</pubDate>
		<dc:creator>jul</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Networks]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Performance]]></category>

		<guid isPermaLink="false">http://blog.nuit.dk/?p=101</guid>
		<description><![CDATA[Installed Ubuntu 9.10 a few days ago. Everything seemed OK (very very nice actually) except for a little network performance glitch that may also bother you.Â  Canonical has once again taken Linux one step further away from the status of geek-challenge to a user friendly alternative to other OS&#8217;es. One thing bothered me though &#8211; [...]]]></description>
			<content:encoded><![CDATA[<img style='float: left; margin-right: 10px; border: none;' src='http://www.gravatar.com/avatar.php?gravatar_id=21a11738f6a3b0696645fe12a6af6440&amp;default=http://use.perl.org/images/pix.gif' alt='No Gravatar' width=40 height=40/><p>Installed Ubuntu 9.10 a few days ago. Everything seemed OK (very very nice actually) except for a little network performance glitch that may also bother you.Â  Canonical has once again taken Linux one step further away from the status of geek-challenge to a user friendly alternative to other OS&#8217;es.</p>
<p>One thing bothered me though &#8211; general network responsiveness seemed seriously degraded. Digging around i found that IPv6 had taken precedence to IPv4 in a few ways &#8211; one being DNS lookup sequence. Apparently all lookups was attempted through IPv6 first. My router and network is in no way configured for IPv6 and therefore every connection-attempt to uncached hosts would have to wait for the IPv6 timeout. Two things gave me responsiveness back.</p>
<ol>
<li>Disable IPv6 at the OS level</li>
<li>Disable IPv6 in Firefox (should give more responsiveness for any OS not running on an IPv6 network)</li>
</ol>
<p>Maybe you would think that the first step would be enough, but Firefox seems more responsive after step 2. Follow <a href="http://en.opensuse.org/Disable_IPv6_for_Firefox">this step to disable IPv6 in Firefox</a>.</p>
<p>Ubuntu 9.10 introduces the GRUB2 bootloader on clean installations only. The upgrade process from, say version 9.04, will not upgrade GRUB and will leave you with the previous version.</p>
<p>To disable IPv6 OS wide, i followed <a href="http://www.webupd8.org/2009/11/how-to-disable-ipv6-in-ubuntu-910.html">this sequence</a> and voila &#8211; responsiveness returned to my netbook (and soon to my other Ubuntu installations).</p>
<p><span style="text-decoration: underline;">2009-11-22 update:</span> Had to downgrade to 9.04 again &#8211; No matter what I did, which forums I visited &#8211; I could not get my Huawei 3G Modem to connect.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.nuit.dk/karmic-koala-post-install-notes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<georss:point featurename="[55.90423859525798, 12.486348152160645]">55.90423859525798 12.486348152160645</georss:point>
	</item>
		<item>
		<title>Netbooks &#8211; the necessary new design test-tool</title>
		<link>http://blog.nuit.dk/netbooks-the-necessary-new-design-test-tool/</link>
		<comments>http://blog.nuit.dk/netbooks-the-necessary-new-design-test-tool/#comments</comments>
		<pubDate>Sun, 22 Feb 2009 10:24:30 +0000</pubDate>
		<dc:creator>jul</dc:creator>
				<category><![CDATA[Geekyness]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Netbooks]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Software design]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://blog.nuit.dk/?p=64</guid>
		<description><![CDATA[Writing this on my Lenovo S10e netbook, I am furious. It&#8217;s before mid-day and yet I have had two experiences of software designs that did not consider netbooks a platform &#8211; or at least the new low screen resolution these computers imply. And before you call me a whiner (besides the fact that you&#8217;d be [...]]]></description>
			<content:encoded><![CDATA[<img style='float: left; margin-right: 10px; border: none;' src='http://www.gravatar.com/avatar.php?gravatar_id=21a11738f6a3b0696645fe12a6af6440&amp;default=http://use.perl.org/images/pix.gif' alt='No Gravatar' width=40 height=40/><p>Writing this on my Lenovo S10e netbook, I am furious. It&#8217;s before mid-day and yet I have had two experiences of software designs that did not consider netbooks a platform &#8211; or at least the new low screen resolution these computers imply. And before you call me a whiner (besides the fact that you&#8217;d be somewhat right), this is just a description of the changes I will make to include netbook users as an audience of software and website in the future.</p>
<p>Whine #1: Twice I&#8217;ve been cripled by software that saw the low screen resolution as a handicap &#8211; one of them on purpose. First I installed <a title="Pidgin IM home" href="http://www.pidgin.im/">Pidgin </a>- the cool cross-platform/cross-protocol IM and IRC client. I like it a lot, but on Windows some dialogs are too big and will not allow me to navigate to the OK/Cancel buttons at the bottomof the settings dialog. Fortunately this is Open Source stuff, so I can just participate and actively fix this myself.</p>
<p>Whine #2: I had to install a printer driver for my HP Photosmart 2575 printer &#8211; the install took over one hour because of some &#8220;ingenious&#8221; package system. That obviously poor user experience decision aside &#8211; the minimum requirement for the printer driver is a screen resolution of 800&#215;600 pixels. My S10e runs at 1024 x 576. The consequence &#8211; I cannot print from my netbook in Windows because the printer driver won&#8217;t finish installing, as it has an irrelevant requirement. Fortunately I am dual-booting with Ubuntu, which has excellent support for my printer (without the requirement)</p>
<p>I&#8217;ve read somewhere that 20% of all computers that will be sold in 2009 will be netbooks. Some producers (including Asus) will stop production of 8.9&#8243; -screen netbooks. The 10-inchers seems to dominate right now, and probably for the rest of the year (note: my guess only). Every company designing software will have to take this into account before they ship the next version of any product with a user interface.</p>
<p>I&#8217;ve worked on so many web projects with art directors saying: &#8220;Nobody runs 640&#215;480 or 800&#215;600 anymore&#8221;. Hey we know &#8211; but do you know how many users run with their browser maximized because a designer thought up a design that required it? Web designers don&#8217;t own the real estate of the users screen resolution &#8211; they can only hope to own the area the browser is sized to &#8211; and you have to count on users having at least one open history/bookmarks sidebar and/or plug-in and/or Google/MSN/Web developer toolbar enabled.</p>
<p>My point should be rather obvious: It is vital to include netbooks as testplatforms for serious UI-designers or your product will no longer be compatible with the equipment of the customers you want. The rules have changed &#8211; live with it.</p>
<p>You may argue that netbook users are asking for it, but if the competing website or software support the netbooks and you don&#8217;t &#8211; the users is no longer making the decision of leaving you.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.nuit.dk/netbooks-the-necessary-new-design-test-tool/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<georss:point featurename="[55.90423859525798, 12.486348152160645]">55.90423859525798 12.486348152160645</georss:point>
	</item>
		<item>
		<title>Netbooks growing up</title>
		<link>http://blog.nuit.dk/netbooks-growing-up/</link>
		<comments>http://blog.nuit.dk/netbooks-growing-up/#comments</comments>
		<pubDate>Mon, 26 Jan 2009 18:53:30 +0000</pubDate>
		<dc:creator>jul</dc:creator>
				<category><![CDATA[Geekyness]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Netbooks]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://blog.nuit.dk/?p=46</guid>
		<description><![CDATA[This post is written on my new netbook &#8211; a Lenovo ideapad s10e. Actually I had given up on netbooks. My first one was an Asus EEE PC 900 with SSD and that machine was a serious disappointment. I have always liked Asus hardware, mainly because it is extremly well updated with software. That was [...]]]></description>
			<content:encoded><![CDATA[<img style='float: left; margin-right: 10px; border: none;' src='http://www.gravatar.com/avatar.php?gravatar_id=21a11738f6a3b0696645fe12a6af6440&amp;default=http://use.perl.org/images/pix.gif' alt='No Gravatar' width=40 height=40/><p><img class="alignright size-full wp-image-48" title="ideapad s10_red" src="http://blog.nuit.dk/wp-content/uploads/s10_red.jpg" alt="ideapad s10_red" width="320" height="242" /></p>
<p>This post is written on my new netbook &#8211; a Lenovo ideapad s10e. Actually I had given up on netbooks. My first one was an <a title="Asus EEE PC 900" href="http://asus.com/products.aspx?l1=24&amp;l2=164&amp;l3=0&amp;l4=0&amp;model=2744&amp;modelmenu=1">Asus EEE PC 900 with SSD</a> and that machine was a serious disappointment. I have always liked Asus hardware, mainly because it is extremly well updated with software. That was also the case with the eee 900, but in order to make it cheap enough a cut was made on the CPU and on the keyboard. Actually I think I could live with the somewhat slow <a title="Hardwarezone.com about the Dothan CPU" href="http://www.hardwarezone.com/articles/view.php?cid=14&amp;id=1106">Dothan CPU</a> (Celeron&#8217;ish), but combined with the poor keyboard the experience was like:</p>
<blockquote><p>I don&#8217;t know if the machine refuses to react on my keypress because the stroke wasn&#8217;t registered on the keyboard or because I am waiting for the CPU.</p></blockquote>
<p>That is of course not acceptable. So the too-cheap netbook has been gathering dust for a while now.</p>
<p>Some colleagues also purchased netbooks. One of them a <a title="Medion Akoya Mini" href="http://www.medion.de/ms/aldi/md96910/dk/flash.html">Medion Akoya</a> (looks very much like the <a href="http://www.msimobile.com/windhome.aspx">MSI Wind</a> &#8211; which 95% of the hardware probably is). It had an Intel Atom processor, which seems to do A LOT for these small laptops. The price did get an extra nudge compared to the Asus eee PC 900, but that can actually mean the difference between a usable and an unusable netbook.</p>
<p>The Lenovo machine is Atom-based, responsive and so far a really really nice piece of machinery. I dual-boot Windows and Ubuntu Linux on it and have yet to encounter missing drivers or missing responsiveness from the keyboard.</p>
<p>As with anything, you get what you pay for and you actually don&#8217;t have to pay that much more for a netbook that actually behaves as you would expect.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.nuit.dk/netbooks-growing-up/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ubuntu two-finger scrolling</title>
		<link>http://blog.nuit.dk/ubuntu-two-finger-scrolling/</link>
		<comments>http://blog.nuit.dk/ubuntu-two-finger-scrolling/#comments</comments>
		<pubDate>Sun, 11 Jan 2009 06:38:18 +0000</pubDate>
		<dc:creator>jul</dc:creator>
				<category><![CDATA[Geekyness]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Tips]]></category>

		<guid isPermaLink="false">http://blog.nuit.dk/?p=40</guid>
		<description><![CDATA[My brother is now a fairly long time Mac-user. I haven&#8217;t gone down that road (yet). Last night he was here and i showed him my Asus EEE (which is currently running Ubuntu 8.10). &#8220;Cool&#8221; &#8211; he said. &#8220;It supports two-finger-scrolling&#8221;. I didn&#8217;t know, but he is right. Googling for it found me this. Apparently [...]]]></description>
			<content:encoded><![CDATA[<img style='float: left; margin-right: 10px; border: none;' src='http://www.gravatar.com/avatar.php?gravatar_id=21a11738f6a3b0696645fe12a6af6440&amp;default=http://use.perl.org/images/pix.gif' alt='No Gravatar' width=40 height=40/><p>My brother is now a fairly long time Mac-user. I haven&#8217;t gone down that road (yet). Last night he was here and i showed him my Asus EEE (which is currently running Ubuntu 8.10).</p>
<p>&#8220;Cool&#8221; &#8211; he said. &#8220;It supports two-finger-scrolling&#8221;. I didn&#8217;t know, but he is right. Googling for it found me <a title="Ubuntu two finger scrolling" href="http://lucumr.pocoo.org/2007/11/13/two-finger-scrolling-on-ubuntu">this</a>. Apparently the touchpad is new enough in the Asus EEE to support two finger scrolling. Nice to find hidden coolness.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.nuit.dk/ubuntu-two-finger-scrolling/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Magpie RSS/Snoopy problem finally solved</title>
		<link>http://blog.nuit.dk/magpie-rsssnoopy-problem-finally-solved/</link>
		<comments>http://blog.nuit.dk/magpie-rsssnoopy-problem-finally-solved/#comments</comments>
		<pubDate>Mon, 05 Nov 2007 09:10:07 +0000</pubDate>
		<dc:creator>jul</dc:creator>
				<category><![CDATA[LAMP]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Tips]]></category>

		<guid isPermaLink="false">http://blog.nuit.dk/2007/11/05/magpie-rsssnoopy-problem-finally-solved/</guid>
		<description><![CDATA[MagpieRSS IS great &#8211; I like it a lot, and it almost does exactly what you need to aggregate RSS feeds from PHP. MagpieRSS has one achilles heel in Snoopy. MagpieRSS relies on Snoopy as the HTTP-client (browser-component) that fetches feeds from websites &#8211; be it RSS or Atom formatted &#8211; It fetches files from [...]]]></description>
			<content:encoded><![CDATA[<img style='float: left; margin-right: 10px; border: none;' src='http://www.gravatar.com/avatar.php?gravatar_id=21a11738f6a3b0696645fe12a6af6440&amp;default=http://use.perl.org/images/pix.gif' alt='No Gravatar' width=40 height=40/><p><a href="http://sourceforge.net/project/showfiles.php?group_id=55691">MagpieRSS</a> IS great &#8211; I like it a lot, and it almost does exactly what you need to aggregate RSS feeds from PHP. MagpieRSS has one achilles heel in <a href="http://sourceforge.net/projects/snoopy/">Snoopy</a>. MagpieRSS relies on Snoopy as the HTTP-client (browser-component) that fetches feeds from websites &#8211; be it RSS or Atom formatted &#8211; It fetches files from a webserver.</p>
<p>The latests Snoopy release was in 2005 (as was the latest MagpieRSS), which could indicate that the development community has abandoned the code. The problem with Snoopy is that it has low tolerance to the use of carriage-return and linefeed characters in the header of HTTP responses from webservers. For some requests that means certain files, though rich in content, appear empty if they are fetched using Snoopy.</p>
<p>At first I tried downloading the latest Snoopy release from Sourceforge. It seemed to do the trick for some feeds, but aparently not all. <a href="http://blog.adaniels.nl/?p=18" title="Arnold Daniels blog">Arnold Daniels came to my rescue</a>. He has devised a wrapper &#8211; on the &#8220;outside&#8221; it appears to be Snoopy &#8211; but on the inside PHP&#8217;s Curl library has taken the place of a lot of the original Snoopy code. Give his alternative library a spin if you are using MagpieRSS for anything the should be somewhat resistant to deviations from standards.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.nuit.dk/magpie-rsssnoopy-problem-finally-solved/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<georss:point featurename="[55.69614575418864, 12.545013427734375]">55.69614575418864 12.545013427734375</georss:point>
	</item>
		<item>
		<title>Generate PDF files from PHP</title>
		<link>http://blog.nuit.dk/generate-pdf-files-from-php/</link>
		<comments>http://blog.nuit.dk/generate-pdf-files-from-php/#comments</comments>
		<pubDate>Wed, 12 Sep 2007 15:15:49 +0000</pubDate>
		<dc:creator>jul</dc:creator>
				<category><![CDATA[Geekyness]]></category>
		<category><![CDATA[LAMP]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://blog.nuit.dk/2007/09/12/generate-pdf-files-from-php/</guid>
		<description><![CDATA[For a web project I needed to create invoices, to be downloaded or e-mailed to clients in PDF format. The platform is PHP and the documentation for this almost exclusively describe PDFLib for this purpose. I am sure PDFLib is fine, and the tutorials that come with the package looks really good. But.. You pay [...]]]></description>
			<content:encoded><![CDATA[<img style='float: left; margin-right: 10px; border: none;' src='http://www.gravatar.com/avatar.php?gravatar_id=21a11738f6a3b0696645fe12a6af6440&amp;default=http://use.perl.org/images/pix.gif' alt='No Gravatar' width=40 height=40/><p>For a web project I needed to create invoices, to be downloaded or e-mailed to clients in PDF format. The platform is <a href="http://php.net/">PHP</a> and <a href="http://www.php.net/manual/en/ref.pdf.php" title="PHP Documentation: PDF Functions">the documentation</a> for this almost exclusively describe <a href="http://www.pdflib.com/products/pdflib-family/" title="PDFLib Product Family">PDFLib</a> for this purpose. I am sure PDFLib is fine, and the tutorials that come with the package looks really good.</p>
<p><strong>But..</strong></p>
<p>You pay for PDFLib &#8211; I don&#8217;t mind paying for software, you should pay for usable high-quality stuff, which I am sure PDFLib is. US$ 995 is a little steep though &#8211; compared to free. The FAQ however mentions a few free alternatives. Right now I am looking into <a href="http://www.fpdf.org/" title="FPDF website">FPDF</a> &#8211; which seem to do the trick.</p>
<p>Actually I found out that my previous ISP (invoicing their customers only by PDF invoices via E-mail) use FPDF. This tells me that FPDF is more than ready for production. I&#8217;ll let you know if I something disappoints me &#8211; although I would hate to bash a truly free initiative such as this one. Oh &#8211; and by the way it has another edge to PDFLib &#8211; It is written in PFP and does not need server reconfiguration to work. If you want a head start, there are quite an extensive list of <a href="http://www.fpdf.org/en/script/index.php" title="FPDF code examples">code examples</a> available.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.nuit.dk/generate-pdf-files-from-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<georss:point featurename="[55.6957164450209, 12.54413366317749]">55.6957164450209 12.54413366317749</georss:point>
	</item>
		<item>
		<title>MySQL query/indexing tip</title>
		<link>http://blog.nuit.dk/mysql-queryindexing-tip/</link>
		<comments>http://blog.nuit.dk/mysql-queryindexing-tip/#comments</comments>
		<pubDate>Fri, 31 Aug 2007 15:10:14 +0000</pubDate>
		<dc:creator>jul</dc:creator>
				<category><![CDATA[LAMP]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Performance]]></category>

		<guid isPermaLink="false">http://blog.nuit.dk/2007/08/31/mysql-queryindexing-tip/</guid>
		<description><![CDATA[I originally learned about this MySQL shortcoming in the book High Performance MySQL, and luckily I remembered it for an issue that struck me today. I have two tables &#8211; one containing blog-posts, and one containing a record for each tag on these posts. Now the requirement was to show a blog post AND to [...]]]></description>
			<content:encoded><![CDATA[<img style='float: left; margin-right: 10px; border: none;' src='http://www.gravatar.com/avatar.php?gravatar_id=21a11738f6a3b0696645fe12a6af6440&amp;default=http://use.perl.org/images/pix.gif' alt='No Gravatar' width=40 height=40/><p>I originally learned about this MySQL shortcoming in the book <a href="http://www.amazon.com/High-Performance-MySQL-Jeremy-Zawodny/dp/0596003064/ref=pd_bbs_sr_1/104-8510121-9631906?ie=UTF8&amp;s=books&amp;qid=1188570640&amp;sr=8-1" title="Amazon.com High Performance MySQL">High Performance MySQL</a>, and luckily I remembered it for an issue that struck me today.</p>
<p>I have two tables &#8211; one containing blog-posts, and one containing a record for each tag on these posts. Now the requirement was to show a blog post AND to show the five latest related posts. Related posts in this scenario are other posts that share one or more tags with this post.</p>
<p>Now, it does not take one second to find a blog post, and it does not take one second to find tags related to it. And actually it does not even take a second to find a list of posts having a list of tags. The reason why all these requests take less than a second is because the tables have been supplied with efficient indexes &#8211; the table of blogposts has more than 3.5 million records and there are about 700.000 tags.</p>
<p>The problem was that when we tried to generate a list of related posts, the query took up to twelve seconds to run. It sucked and looked like this:</p>
<blockquote><p><code>SELECT distinctrow i.id, i.item_title, i.item_url<br />
FROM rss_items_master i<br />
INNER JOIN rss_item_tag t ON i.id=t.item_id<br />
WHERE t.item_tag IN (SELECT item_tag FROM rss_item_tag WHERE item_id=$itemid)<br />
AND t.item_id != $itemid<br />
ORDER BY i.item_date DESC<br />
LIMIT 5;</code></p></blockquote>
<p>In plain english we request a list of items that does not match the specific post, but they must have at least one tag that match one of the tags from the specific post. The nested SELECT-statement produce a list of tags to look for, and the outer SELECT statement pulls blog posts containing tags found in the nested SELECT. This does not perform, <em><strong>because only one index can be used per query</strong></em> &#8211; so either the index from the rss_item_tag table or from the rss_items_master table is ignored (i did not bother figuring out which one was ignored). To fix it, I split the SQL in two (PHP example):</p>
<blockquote><p><code>$sql_tags = "SELECT item_tag FROM rss_item_tag WHERE item_id=$itemid;";<br />
$arr_tags = query_array($sql_tags, $link);<br />
// $tag_o will be an array of tags from the original post.<br />
$tag_o = Array();<br />
foreach($arr_tags as $tag_i) {<br />
array_push($tag_o, mysql_real_escape_string($tag_i[0]));<br />
}<br />
$tags = implode("','", $tag_o);</code></p></blockquote>
<p>Now $tags contain a list og tags to look for &#8211; actually it contains exactly what the nested SELECT-part did in the slow query. Now these two queries will actually complete in less than a second:</p>
<blockquote><p><code>select distinctrow i.id, i.item_title, i.item_url<br />
from rss_items_master i inner join rss_item_tag t on i.id=t.item_id<br />
and t.item_tag in ('$tags')<br />
and t.item_id != $itemid<br />
order by i.item_date desc<br />
limit 5;</code></p></blockquote>
<p>So even though the SQL has been split in two, and even though we are passing a lot of information through variables that we have to build from the first query and added quite a lot of code &#8211; this outperforms the first single query by a factor larger than 10 &#8211; simply because it enables MySQL to use the indexes it should.</p>
<p>For more MySQL performance tips, check out <a href="http://mysqlperformanceblog.com/">MySQL Performance Blog</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.nuit.dk/mysql-queryindexing-tip/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<georss:point featurename="[55.90423859525798, 12.486348152160645]">55.90423859525798 12.486348152160645</georss:point>
	</item>
		<item>
		<title>Light-weight XML editor</title>
		<link>http://blog.nuit.dk/light-weight-xml-editor/</link>
		<comments>http://blog.nuit.dk/light-weight-xml-editor/#comments</comments>
		<pubDate>Thu, 21 Jun 2007 09:45:18 +0000</pubDate>
		<dc:creator>jul</dc:creator>
				<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Tips]]></category>

		<guid isPermaLink="false">http://blog.nuit.dk/2007/06/21/light-weight-xml-editor/</guid>
		<description><![CDATA[I was looking for an XML editor to perform a few simple tasks. Since i worked heavily with XML a few years ago, the Windows XML editor of choice is apparently still the Altova XML Spy. You can get it to do anything with XML (except &#8211; i think &#8211; transform XML to coffee). Negative [...]]]></description>
			<content:encoded><![CDATA[<img style='float: left; margin-right: 10px; border: none;' src='http://www.gravatar.com/avatar.php?gravatar_id=21a11738f6a3b0696645fe12a6af6440&amp;default=http://use.perl.org/images/pix.gif' alt='No Gravatar' width=40 height=40/><p><a href="http://blog.nuit.dk/wp-content/xmlcopyeditor.jpg" title="XML Copy Editor Logo"><img src="http://blog.nuit.dk/wp-content/xmlcopyeditor.jpg" alt="XML Copy Editor Logo" align="right" /></a>I was looking for an XML editor to perform a few simple tasks. Since i worked heavily with XML a few years ago, the Windows XML editor of choice is apparently still the <a href="http://www.altova.com/products/xmlspy/xml_editor.html" title="Product page of Altova XML Spy">Altova XML Spy</a>. You can get it to do anything with XML (except &#8211; i think &#8211; transform XML to coffee). Negative minds would probably call it bloated and expensive. Positive minds would look for a cheap agile alternative.</p>
<p>Using the <a href="http://www.osalt.com/xmlspy" title="Open Source Alternative website - showing alternatives to Altova XML Spy">Open Source Alternative-site</a> it is possible to find applications doing somewhat the same as commercial products. For the XML Spy query, the result is <a href="http://xml-copy-editor.sourceforge.net/" title="XML Copy Editor home">XML Copy Editor</a> &#8211; a SourceForge application that has currently reached version 1.0.9. My needs were met as it:</p>
<ol>
<li>color-codes XML</li>
<li>beautify/pretty-print XML with consistent indentations to increase readability</li>
<li>opens files directly from URL&#8217;s</li>
</ol>
<p>Also it XSLT transforms and has a small set of other features you may or may not need. Before you venture into extensive license bill-paying, you may try out this nifty little XML editor.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.nuit.dk/light-weight-xml-editor/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Why are Wiki&#8217;s so darn ugly?</title>
		<link>http://blog.nuit.dk/why-are-wikis-so-darn-ugly/</link>
		<comments>http://blog.nuit.dk/why-are-wikis-so-darn-ugly/#comments</comments>
		<pubDate>Tue, 05 Jun 2007 22:37:24 +0000</pubDate>
		<dc:creator>jul</dc:creator>
				<category><![CDATA[Geekyness]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[Wiki]]></category>

		<guid isPermaLink="false">http://blog.nuit.dk/2007/06/06/why-are-wikis-so-darn-ugly/</guid>
		<description><![CDATA[I am a Wiki-virgin. Not in the sense of being a wiki-reader/contributor, but today I set up my first Wiki which is about to go online. Wiki&#8217;s based on the MediaWiki software (which is also used for WikiPedia) are actually skinable, but as content usually is king in Wiki land, very few operators make an [...]]]></description>
			<content:encoded><![CDATA[<img style='float: left; margin-right: 10px; border: none;' src='http://www.gravatar.com/avatar.php?gravatar_id=21a11738f6a3b0696645fe12a6af6440&amp;default=http://use.perl.org/images/pix.gif' alt='No Gravatar' width=40 height=40/><p>I am a Wiki-virgin. Not in the sense of being a wiki-reader/contributor, but today I set up my first Wiki which is about to go online. Wiki&#8217;s based on the <a href="http://www.mediawiki.org/wiki/MediaWiki" title="MediaWiki website">MediaWiki software</a> (which is also used for <a href="http://en.wikipedia.org/wiki/Main_Page" title="WikiPedia - The free encyclopedia">WikiPedia</a>) are actually skinable, but as content usually is king in Wiki land, very few operators make an effort to change skin before going online. The well known default Monobook skin is used almost everywhere (you know &#8211; the one where the monochrome image of an book is the back-drop).</p>
<p>This has one obvious benefit: People recognize it as being a Wiki-type site immediately. Indeed a strong argument to keep things as they are. I may be running my mouth of as the green first day Wiki operator, and maybe I have actually used Wiki based sites that I did not recognize because it used some great unknown skin. But doesn&#8217;t the Wiki deserve it&#8217;s <a href="http://binarybonsai.com/wordpress/kubrick/" title="From the creator of Kubrick">Kubrick skin</a> &#8211; which was considered the defacto blog-look a few years back. People would look at the skin (which is beautiful) and say &#8220;Ahh &#8211; that&#8217;s a weblog&#8221;. These days I (and probably a few other) say &#8220;Yuck &#8211; It&#8217;s a Wiki&#8221;.</p>
<p><a href="http://binarybonsai.com/" title="Binary Bonsai is the website of Kubrick skin creator Michael Heilemann">Michael Heilemann</a> did such a great job with Kubrick. Isn&#8217;t it time for Wiki&#8217;s to have their own updated slick skin? Do you have it or know where to get it? There is one Wiki-skin I like: <a href="http://www.ipbwiki.com/forums/index.php?automodule=downloads&amp;showfile=60#" title="Cavendish skin for Wiki downloadable from Ipb Wiki Forums">Cavendish</a>. I would love to be able to create one myself, but my graphic skills are unfortunately only focused around my eyes &#8211; not in my hands.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.nuit.dk/why-are-wikis-so-darn-ugly/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Open Source time registration and tracking</title>
		<link>http://blog.nuit.dk/open-source-time-registration-and-tracking/</link>
		<comments>http://blog.nuit.dk/open-source-time-registration-and-tracking/#comments</comments>
		<pubDate>Thu, 26 Apr 2007 06:12:47 +0000</pubDate>
		<dc:creator>jul</dc:creator>
				<category><![CDATA[Achievo]]></category>
		<category><![CDATA[Open Source]]></category>

		<guid isPermaLink="false">http://blog.nuit.dk/?p=10</guid>
		<description><![CDATA[I am in the middle of a project with a client &#8211; a project to improve their time usage registration procedures. They had been looking at several commercial solutions &#8211; all requiring customizations &#8211; most of them costing &#8220;an arm and a leg&#8221;. They actually started a project with one vendor who thought they could [...]]]></description>
			<content:encoded><![CDATA[<img style='float: left; margin-right: 10px; border: none;' src='http://www.gravatar.com/avatar.php?gravatar_id=21a11738f6a3b0696645fe12a6af6440&amp;default=http://use.perl.org/images/pix.gif' alt='No Gravatar' width=40 height=40/><p>I am in the middle of a project with a client &#8211; a project to improve their time usage registration procedures. They had been looking at several commercial solutions &#8211; all requiring customizations &#8211; most of them costing &#8220;an arm and a leg&#8221;.</p>
<p>They actually started a project with one vendor who thought they could deliver, but apparently forgot to listen for client needs and forgot to set client expectations correctly &#8211; the project ran for six months and finally they had to retreat and stop the project in progress because they could not deliver.</p>
<p><a href="http://achievo.org" title="Link to Achievo - a web-based resource management tool"><img src="http://blog.nuit.dk/wp-content/achievo13.jpg" alt="Achievo 1.3" align="left" /></a>I got a second chance to present my idea which is now running and in further development. It is based on the Open Source project <a href="http://www.achievo.org">Achievo</a>, originally developed and opened up by the cool guys at <a href="http://www.ibuildings.nl/" title="iBuildings - PHP Developers">iBuildings</a> in the Netherlands.</p>
<p>The advancements of the processes around time registration and tracking is usually &#8220;evolutionary&#8221; for companies like my client. They know they need to register time in order to bill the client at the end of the month. In this case, the consultants would initially share an Excel sheet in which they would register their hours. It worked, but apart from being limited to only one person entering hourly usage at a time, it was very difficult to verify that everybody had remembered to register all billable hours. And that may or may not be quite expensive in the end &#8211; they actually didn&#8217;t know.</p>
<p>Achievo is based on modules and it has a billing module which I guess is used by more or less anyone running the system. It will be included as a standard module in the next release. My main task has been to integrate with my clients CRM system (regularly import customers and create dummy projects for them). Also I created a few reports to ease the actual billing, as my client cannot use the billing module as-is. They have a somewhat special price matrix, which I needed to get Achievo in tune with. It was also necessary to build some tidbits that would enable handling of prepaying clients bying a predefined number of hours at special rates. I hope that I will dig up some time to feed some business process documentation  and project templates back to the Achievo community.</p>
<p>Achievo runs on a LAMP stack (Linux, Apache, MySQL and PHP). Check out the demo sites running version 1.2.1 (the current release) and the nightly builds for the upcoming version 1.3. My one-man company can use Achievo 100% as is. My client &#8211; a 25 person consultancy firm &#8211; has been running Achievo since the beginning of this year and we are just now entering phase two, where we will add quite a few more &#8220;need&#8221; and &#8220;nice&#8221; features.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.nuit.dk/open-source-time-registration-and-tracking/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

