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

<channel>
	<title>fifo.nl &#187; exel</title>
	<atom:link href="http://fifo.nl/author/exel/feed" rel="self" type="application/rss+xml" />
	<link>http://fifo.nl</link>
	<description>the #fifo aggregate blog</description>
	<lastBuildDate>Fri, 03 Sep 2010 22:07:49 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
<atom:link rel="hub" href="http://pubsubhubbub.appspot.com"/><atom:link rel="hub" href="http://superfeedr.com/hubbub"/>		<item>
		<title>Solstice Part III</title>
		<link>http://blog.madscience.nl/Site/Podcast/1e3da44c-10fe-4f5d-b7d6-20574d99d1bb/</link>
		<comments>http://blog.madscience.nl/Site/Podcast/1e3da44c-10fe-4f5d-b7d6-20574d99d1bb/#comments</comments>
		<pubDate>Sat, 03 Jul 2010 07:10:43 +0000</pubDate>
		<dc:creator>exel</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.madscience.nl/Site/Podcast/1e3da44c-10fe-4f5d-b7d6-20574d99d1bb/</guid>
		<description><![CDATA[Greenhouse (Solstice) - 00:05:26]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.madscience.nl/Site/Podcast/1e3da44c-10fe-4f5d-b7d6-20574d99d1bb/greenhouse-solstice_part_iii.mp3"><img src="http://blog.madscience.nl/Site/Podcast/1e3da44c-10fe-4f5d-b7d6-20574d99d1bb/icon.jpg" style="float:left; padding-right:10px; padding-bottom:10px; width:128px; height:128px;"/></a>Greenhouse (Solstice) - 00:05:26</p>]]></content:encoded>
			<wfw:commentRss>http://fifo.nl/exel/8820/solstice-part-iii/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://blog.madscience.nl/Site/Podcast/1e3da44c-10fe-4f5d-b7d6-20574d99d1bb/greenhouse-solstice_part_iii.mp3" length="11892458" type="audio/mpeg" />
		</item>
		<item>
		<title>What are we up to?</title>
		<link>http://blog.openpanel.com/2010/02/02/what-are-we-up-to/</link>
		<comments>http://blog.openpanel.com/2010/02/02/what-are-we-up-to/#comments</comments>
		<pubDate>Mon, 01 Feb 2010 22:54:45 +0000</pubDate>
		<dc:creator>exel</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.openpanel.com/?p=72</guid>
		<description><![CDATA[Our site has remained dormant for quite a while and we get the occasional visitor on the irc channel poking us with a stick to check for rigor mortis. It&#8217;s not that bad, actually. We&#8217;re very close to a 1.0 release, code-wise, and have been for quite a while. But the devil is in the [...]]]></description>
			<content:encoded><![CDATA[<p>Our site has remained dormant for quite a while and we get the occasional visitor on the irc channel poking us with a stick to check for rigor mortis. It&#8217;s not that bad, actually. We&#8217;re very close to a 1.0 release, code-wise, and have been for quite a while. But the devil is in the details and the details are definitely in the packages. When we started the project, Debian 4 and CentOS 4 were sensible stable targets. Obviously, they&#8217;re not anymore. So our first effort into getting ready for a testable pre-1.0 branch is to pick up whatever pile of paperclips and rubber bands we used to autobuild the packages for both these platforms and re-adopt the contraption to work with their newer distro brethern, CentOS 5 and Debian 5.<br />
<span id="more-72"></span><br />
The whole operation of converting to newer distros turned out to be a tremendous pain, basically leaving us at square one packaging-wise. At that point we decided to concentrate resources even further and focus first on Debian 5 as a target for OpenPanel. Right now we&#8217;re getting help from Tomas Šiaulys who is kicking the builds into submission. If you&#8217;re not afraid of a compiler and know a bit about packaging, perhaps you could help out as well. Drop by in #openpanel on the oftc irc network and ask around. We could also use a couple of CSS/javascript people to take a look at any dangling issues in that department.</p>
<p>Speaking of the GUI, it has become quite a magical environment. Widgets respond correctly to keyboard commands and focus events. We&#8217;ve been paying a lot of attention to little details. The look has been completely refreshed from the alpha release, following a more modern layout style. The GUI also scales with the browser vertically, leaving less screen real estate wasted:</p>
<p><a href="http://blog.openpanel.com/static/screenshot34.png"><img src="http://blog.openpanel.com/static/screenshot34.png" alt="Screenshot of current beta branch" /></a></p>
<p>A precise E.T.A. for the public release is hard to give. We&#8217;ll try to post more frequent updates as the 1.0 target approaches. Thanks for hanging on.</p>
<!-- Social Bookmarks BEGIN -->
<div class="social_bookmark">
<a><strong><em>Bookmark It</em></strong></a>
<br />
<div class="d">
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://del.icio.us/post?url=http://blog.openpanel.com/2010/02/02/what-are-we-up-to/&amp;title=What+are+we+up+to?" rel="nofollow" title="Add to&nbsp;Del.icio.us"><img class="social_img" src="http://blog.openpanel.com/wp-content/plugins/social_bookmarks/images/delicious.png" title="Add to&nbsp;Del.icio.us" alt="Add to&nbsp;Del.icio.us" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;url=http://blog.openpanel.com/2010/02/02/what-are-we-up-to/&amp;title=What+are+we+up+to?" rel="nofollow" title="Add to&nbsp;digg"><img class="social_img" src="http://blog.openpanel.com/wp-content/plugins/social_bookmarks/images/digg.png" title="Add to&nbsp;digg" alt="Add to&nbsp;digg" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.dzone.com/links/add.html?description=What+are+we+up+to?&amp;url=http://blog.openpanel.com/2010/02/02/what-are-we-up-to/&amp;title=What+are+we+up+to?" rel="nofollow" title="Add to&nbsp;DZone"><img class="social_img" src="http://blog.openpanel.com/wp-content/plugins/social_bookmarks/images/dzone.png" title="Add to&nbsp;DZone" alt="Add to&nbsp;DZone" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://furl.net/storeIt.jsp?t=What+are+we+up+to?&amp;u=http://blog.openpanel.com/2010/02/02/what-are-we-up-to/" rel="nofollow" title="Add to&nbsp;FURL"><img class="social_img" src="http://blog.openpanel.com/wp-content/plugins/social_bookmarks/images/furl.png" title="Add to&nbsp;FURL" alt="Add to&nbsp;FURL" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http://blog.openpanel.com/2010/02/02/what-are-we-up-to/&amp;title=What+are+we+up+to?" rel="nofollow" title="Add to&nbsp;Google Bookmarks"><img class="social_img" src="http://blog.openpanel.com/wp-content/plugins/social_bookmarks/images/google.png" title="Add to&nbsp;Google Bookmarks" alt="Add to&nbsp;Google Bookmarks" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.netscape.com/submit/?U=http://blog.openpanel.com/2010/02/02/what-are-we-up-to/&amp;T=What+are+we+up+to?" rel="nofollow" title="Add to&nbsp;Netscape"><img class="social_img" src="http://blog.openpanel.com/wp-content/plugins/social_bookmarks/images/netscape.png" title="Add to&nbsp;Netscape" alt="Add to&nbsp;Netscape" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://reddit.com/submit?url=http://blog.openpanel.com/2010/02/02/what-are-we-up-to/&amp;title=What+are+we+up+to?" rel="nofollow" title="Add to&nbsp;reddit"><img class="social_img" src="http://blog.openpanel.com/wp-content/plugins/social_bookmarks/images/reddit.png" title="Add to&nbsp;reddit" alt="Add to&nbsp;reddit" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://slashdot.org/bookmark.pl?url=http://blog.openpanel.com/2010/02/02/what-are-we-up-to/&amp;title=What+are+we+up+to?" rel="nofollow" title="Add to&nbsp;Slashdot"><img class="social_img" src="http://blog.openpanel.com/wp-content/plugins/social_bookmarks/images/slashdot.png" title="Add to&nbsp;Slashdot" alt="Add to&nbsp;Slashdot" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.stumbleupon.com/submit.php?url=http://blog.openpanel.com/2010/02/02/what-are-we-up-to/&amp;title=What+are+we+up+to?" rel="nofollow" title="Add to&nbsp;Stumble Upon"><img class="social_img" src="http://blog.openpanel.com/wp-content/plugins/social_bookmarks/images/stumbleupon.png" title="Add to&nbsp;Stumble Upon" alt="Add to&nbsp;Stumble Upon" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.spurl.net/spurl.php?url=http://blog.openpanel.com/2010/02/02/what-are-we-up-to/&amp;title=What+are+we+up+to?" rel="nofollow" title="Add to&nbsp;Spurl"><img class="social_img" src="http://blog.openpanel.com/wp-content/plugins/social_bookmarks/images/spurl.png" title="Add to&nbsp;Spurl" alt="Add to&nbsp;Spurl" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.technorati.com/faves?add=http://blog.openpanel.com/2010/02/02/what-are-we-up-to/" rel="nofollow" title="Add to&nbsp;Technorati"><img class="social_img" src="http://blog.openpanel.com/wp-content/plugins/social_bookmarks/images/technorati.png" title="Add to&nbsp;Technorati" alt="Add to&nbsp;Technorati" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http://blog.openpanel.com/2010/02/02/what-are-we-up-to/&amp;t=What+are+we+up+to?" rel="nofollow" title="Add to&nbsp;Yahoo My Web"><img class="social_img" src="http://blog.openpanel.com/wp-content/plugins/social_bookmarks/images/yahoo.png" title="Add to&nbsp;Yahoo My Web" alt="Add to&nbsp;Yahoo My Web" /></a>
<br />
</div>
</div>
<!-- Social Bookmarks END -->
]]></content:encoded>
			<wfw:commentRss>http://blog.openpanel.com/2010/02/02/what-are-we-up-to/feed/atom/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Solstice Parts I and II</title>
		<link>http://blog.madscience.nl/Site/Podcast/a528b846-831f-4ce7-a1d4-ec1a418e8e2e/</link>
		<comments>http://blog.madscience.nl/Site/Podcast/a528b846-831f-4ce7-a1d4-ec1a418e8e2e/#comments</comments>
		<pubDate>Mon, 04 Jan 2010 23:47:42 +0000</pubDate>
		<dc:creator>exel</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.madscience.nl/Site/Podcast/a528b846-831f-4ce7-a1d4-ec1a418e8e2e/</guid>
		<description><![CDATA[Greenhouse (MadPodcast) - 00:08:16]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.madscience.nl/Site/Podcast/a528b846-831f-4ce7-a1d4-ec1a418e8e2e/greenhouse-solstice_parts_i_and_ii.mp3"><img src="http://blog.madscience.nl/Site/Podcast/a528b846-831f-4ce7-a1d4-ec1a418e8e2e/icon.jpg" style="float:left; padding-right:10px; padding-bottom:10px; width:128px; height:128px;"/></a>Greenhouse (MadPodcast) - 00:08:16</p>]]></content:encoded>
			<wfw:commentRss>http://fifo.nl/exel/4812/solstice-parts-i-and-ii/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://blog.madscience.nl/Site/Podcast/a528b846-831f-4ce7-a1d4-ec1a418e8e2e/greenhouse-solstice_parts_i_and_ii.mp3" length="18492679" type="audio/mpeg" />
		</item>
		<item>
		<title>To the Moon</title>
		<link>http://blog.madscience.nl/Site/Podcast/972012cc-b8c8-4600-bec3-cc3e4dd36ebb/</link>
		<comments>http://blog.madscience.nl/Site/Podcast/972012cc-b8c8-4600-bec3-cc3e4dd36ebb/#comments</comments>
		<pubDate>Sat, 12 Sep 2009 22:59:42 +0000</pubDate>
		<dc:creator>exel</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.madscience.nl/Site/Podcast/972012cc-b8c8-4600-bec3-cc3e4dd36ebb/</guid>
		<description><![CDATA[Pim van Riezen (MadPodcast) - 00:04:49]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.madscience.nl/Site/Podcast/972012cc-b8c8-4600-bec3-cc3e4dd36ebb/pim_van_riezen-to_the_moon.mp3"><img src="http://blog.madscience.nl/Site/Podcast/972012cc-b8c8-4600-bec3-cc3e4dd36ebb/icon.jpg" style="float:left; padding-right:10px; padding-bottom:10px; width:128px; height:128px;"/></a>Pim van Riezen (MadPodcast) - 00:04:49</p>]]></content:encoded>
			<wfw:commentRss>http://fifo.nl/exel/2770/to-the-moon/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://blog.madscience.nl/Site/Podcast/972012cc-b8c8-4600-bec3-cc3e4dd36ebb/pim_van_riezen-to_the_moon.mp3" length="10318033" type="audio/mpeg" />
		</item>
		<item>
		<title>Seeing You Laugh</title>
		<link>http://blog.madscience.nl/Site/Podcast/95d9cc5f-ab79-4323-aa8b-2df08c723551/</link>
		<comments>http://blog.madscience.nl/Site/Podcast/95d9cc5f-ab79-4323-aa8b-2df08c723551/#comments</comments>
		<pubDate>Mon, 13 Jul 2009 19:40:57 +0000</pubDate>
		<dc:creator>exel</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.madscience.nl/Site/Podcast/95d9cc5f-ab79-4323-aa8b-2df08c723551/</guid>
		<description><![CDATA[Pim van Riezen (MadPodcast) - 00:05:29]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.madscience.nl/Site/Podcast/95d9cc5f-ab79-4323-aa8b-2df08c723551/pim_van_riezen-seeing_you_laugh.mp3"><img src="http://blog.madscience.nl/Site/Podcast/95d9cc5f-ab79-4323-aa8b-2df08c723551/icon.jpg" style="float:left; padding-right:10px; padding-bottom:10px; width:128px; height:128px;"/></a>Pim van Riezen (MadPodcast) - 00:05:29</p>]]></content:encoded>
			<wfw:commentRss>http://fifo.nl/exel/1785/seeing-you-laugh/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://blog.madscience.nl/Site/Podcast/95d9cc5f-ab79-4323-aa8b-2df08c723551/pim_van_riezen-seeing_you_laugh.mp3" length="11294227" type="audio/mpeg" />
		</item>
		<item>
		<title>Blue People of Kentucky</title>
		<link>http://blog.madscience.nl/Site/Podcast/a843a101-a2bb-4278-b7a6-f92a06998a0c/</link>
		<comments>http://blog.madscience.nl/Site/Podcast/a843a101-a2bb-4278-b7a6-f92a06998a0c/#comments</comments>
		<pubDate>Sat, 28 Feb 2009 16:54:01 +0000</pubDate>
		<dc:creator>exel</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.madscience.nl/Site/Podcast/a843a101-a2bb-4278-b7a6-f92a06998a0c/</guid>
		<description><![CDATA[Pim van Riezen (MadPodcast) - 00:04:22]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.madscience.nl/Site/Podcast/a843a101-a2bb-4278-b7a6-f92a06998a0c/pim_van_riezen-blue_people_of_kentucky.mp3"><img src="http://blog.madscience.nl/Site/Podcast/a843a101-a2bb-4278-b7a6-f92a06998a0c/icon.jpg" style="float:left; padding-right:10px; padding-bottom:10px; width:128px; height:128px;"/></a>Pim van Riezen (MadPodcast) - 00:04:22</p>]]></content:encoded>
			<wfw:commentRss>http://fifo.nl/exel/1312/blue-people-of-kentucky/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://blog.madscience.nl/Site/Podcast/a843a101-a2bb-4278-b7a6-f92a06998a0c/pim_van_riezen-blue_people_of_kentucky.mp3" length="7312710" type="audio/mpeg" />
		</item>
		<item>
		<title>Song for Cello</title>
		<link>http://blog.madscience.nl/Site/Podcast/8b4e184b-2404-475d-b44f-68dcabd9ea07/</link>
		<comments>http://blog.madscience.nl/Site/Podcast/8b4e184b-2404-475d-b44f-68dcabd9ea07/#comments</comments>
		<pubDate>Sat, 06 Sep 2008 17:13:13 +0000</pubDate>
		<dc:creator>exel</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.madscience.nl/Site/Podcast/8b4e184b-2404-475d-b44f-68dcabd9ea07/</guid>
		<description><![CDATA[Pim van Riezen (MadPodcast Sessions) - 00:03:03]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.madscience.nl/Site/Podcast/8b4e184b-2404-475d-b44f-68dcabd9ea07/pim_van_riezen-song_for_cello.mp3"><img src="http://blog.madscience.nl/Site/Podcast/8b4e184b-2404-475d-b44f-68dcabd9ea07/icon.jpg" style="float:left; padding-right:10px; padding-bottom:10px; width:128px; height:128px;"/></a>Pim van Riezen (MadPodcast Sessions) - 00:03:03</p>]]></content:encoded>
			<wfw:commentRss>http://fifo.nl/exel/935/song-for-cello/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://blog.madscience.nl/Site/Podcast/8b4e184b-2404-475d-b44f-68dcabd9ea07/pim_van_riezen-song_for_cello.mp3" length="7387234" type="audio/mpeg" />
		</item>
		<item>
		<title>Calling Mr. Jones</title>
		<link>http://blog.madscience.nl/Site/Podcast/4a1a0e77-990a-492f-9c9b-f4a916c9ec44/</link>
		<comments>http://blog.madscience.nl/Site/Podcast/4a1a0e77-990a-492f-9c9b-f4a916c9ec44/#comments</comments>
		<pubDate>Sun, 17 Aug 2008 06:17:49 +0000</pubDate>
		<dc:creator>exel</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.madscience.nl/Site/Podcast/4a1a0e77-990a-492f-9c9b-f4a916c9ec44/</guid>
		<description><![CDATA[Pim van Riezen (MadPodcast Sessions) - 00:08:07]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.madscience.nl/Site/Podcast/4a1a0e77-990a-492f-9c9b-f4a916c9ec44/pim_van_riezen-calling_mr._jones.mp3"><img src="http://blog.madscience.nl/Site/Podcast/4a1a0e77-990a-492f-9c9b-f4a916c9ec44/icon.jpg" style="float:left; padding-right:10px; padding-bottom:10px; width:128px; height:128px;"/></a>Pim van Riezen (MadPodcast Sessions) - 00:08:07</p>]]></content:encoded>
			<wfw:commentRss>http://fifo.nl/exel/917/calling-mr-jones/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://blog.madscience.nl/Site/Podcast/4a1a0e77-990a-492f-9c9b-f4a916c9ec44/pim_van_riezen-calling_mr._jones.mp3" length="19552941" type="audio/mpeg" />
		</item>
		<item>
		<title>Blue Indulgence</title>
		<link>http://blog.madscience.nl/Site/Podcast/492d8f35-1730-467c-a1b6-9f190717a9d7/</link>
		<comments>http://blog.madscience.nl/Site/Podcast/492d8f35-1730-467c-a1b6-9f190717a9d7/#comments</comments>
		<pubDate>Sat, 16 Aug 2008 13:23:10 +0000</pubDate>
		<dc:creator>exel</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.madscience.nl/Site/Podcast/492d8f35-1730-467c-a1b6-9f190717a9d7/</guid>
		<description><![CDATA[Pim van Riezen (MadPodcast Sessions) - 00:04:34]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.madscience.nl/Site/Podcast/492d8f35-1730-467c-a1b6-9f190717a9d7/pim_van_riezen-blue_indulgence.mp3"><img src="http://blog.madscience.nl/Site/Podcast/492d8f35-1730-467c-a1b6-9f190717a9d7/icon.jpg" style="float:left; padding-right:10px; padding-bottom:10px; width:128px; height:128px;"/></a>Pim van Riezen (MadPodcast Sessions) - 00:04:34</p>]]></content:encoded>
			<wfw:commentRss>http://fifo.nl/exel/915/blue-indulgence/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://blog.madscience.nl/Site/Podcast/492d8f35-1730-467c-a1b6-9f190717a9d7/pim_van_riezen-blue_indulgence.mp3" length="11065472" type="audio/mpeg" />
		</item>
		<item>
		<title>Unload</title>
		<link>http://blog.madscience.nl/Site/Podcast/724a10fa-2c84-4456-be9b-1969107fb1db/</link>
		<comments>http://blog.madscience.nl/Site/Podcast/724a10fa-2c84-4456-be9b-1969107fb1db/#comments</comments>
		<pubDate>Tue, 12 Aug 2008 19:48:47 +0000</pubDate>
		<dc:creator>exel</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.madscience.nl/Site/Podcast/724a10fa-2c84-4456-be9b-1969107fb1db/</guid>
		<description><![CDATA[Greenhouse (Industry Inside) - 00:05:36]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.madscience.nl/Site/Podcast/724a10fa-2c84-4456-be9b-1969107fb1db/greenhouse-unload.mp3"><img src="http://blog.madscience.nl/Site/Podcast/724a10fa-2c84-4456-be9b-1969107fb1db/icon.jpg" style="float:left; padding-right:10px; padding-bottom:10px; width:128px; height:128px;"/></a>Greenhouse (Industry Inside) - 00:05:36</p>]]></content:encoded>
			<wfw:commentRss>http://fifo.nl/exel/911/unload/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://blog.madscience.nl/Site/Podcast/724a10fa-2c84-4456-be9b-1969107fb1db/greenhouse-unload.mp3" length="14144621" type="audio/mpeg" />
		</item>
		<item>
		<title>On Snobism</title>
		<link>http://blog.openpanel.com/2008/07/10/on-snobism/</link>
		<comments>http://blog.openpanel.com/2008/07/10/on-snobism/#comments</comments>
		<pubDate>Wed, 09 Jul 2008 22:31:39 +0000</pubDate>
		<dc:creator>exel</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.openpanel.com/?p=70</guid>
		<description><![CDATA[Recently I decided to bring some life to the Grace homepage. I always expected it to spawn some controversy so I&#8217;ve not been surprised by seeing a vocal group of people dismissing its ideas out of hand. One of the most colorful reviews is one that could only make me chuckle: &#8220;it&#8217;s like Java and [...]]]></description>
			<content:encoded><![CDATA[<p>Recently I decided to bring some life to the <a href="http://grace.openpanel.com/">Grace homepage</a>. I always expected it to spawn some controversy so I&#8217;ve not been surprised by seeing a vocal group of people dismissing its ideas out of hand. One of the most colorful reviews is one that could only make me chuckle: &#8220;it&#8217;s like Java and PHP gang-raped a Makefile&#8221;. I&#8217;m not likely to make too much out of reactions like that, these are questions about taste where you just can&#8217;t please everyone (and shouldn&#8217;t try).</p>
<p>Another reason why I don&#8217;t worry about art critics in this context is that, even if Grace were a library with only a single user, it would still help <i>me</i> get my stuff done in a way that I enjoy. It has already proven its value and given me an excellent return on investment using it in a lot of roles. It scratched my itch and that is fine.</p>
<p>I do find some of the negativism on sites like reddit interesting as a phenomenon. I&#8217;ve thought of this as a factor of the functional programming cartel that seems to be hanging out at such places. And I realized that this way of looking at it is just as dismissive and childish, so it made me wonder how it can be that there seems to be this great wall between that crowd and the typical ISP/Unix nerd demographic I normally interact with.</p>
<p>When looking at software, I reckon there are two approaches. Some people, when they think about code, see a world of math. For me, what I mostly see is flying bits, an interconnected lego-world of action-reaction patterns that makes intuitive sense.  I think both approaches are valid, but obviously they lead to a completely different view on software development.</p>
<p>Naturally I may be suffering from confirmation bias on this subject, but I get the impression that those of us that are more into this direct approach to programming are the ones producing most of the real, living software out there. I can definitely see areas where a more distanced and abstract approach like functional programming can make a difference, but a lot of software development is really about moving bits from A to B, more about rolling up your sleeves and building it than mulling about algorithms and monads; lego, not math.</p>
<!-- Social Bookmarks BEGIN -->
<div class="social_bookmark">
<a><strong><em>Bookmark It</em></strong></a>
<br />
<div class="d">
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://del.icio.us/post?url=http://blog.openpanel.com/2008/07/10/on-snobism/&amp;title=On+Snobism" rel="nofollow" title="Add to&nbsp;Del.icio.us"><img class="social_img" src="http://blog.openpanel.com/wp-content/plugins/social_bookmarks/images/delicious.png" title="Add to&nbsp;Del.icio.us" alt="Add to&nbsp;Del.icio.us" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;url=http://blog.openpanel.com/2008/07/10/on-snobism/&amp;title=On+Snobism" rel="nofollow" title="Add to&nbsp;digg"><img class="social_img" src="http://blog.openpanel.com/wp-content/plugins/social_bookmarks/images/digg.png" title="Add to&nbsp;digg" alt="Add to&nbsp;digg" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.dzone.com/links/add.html?description=On+Snobism&amp;url=http://blog.openpanel.com/2008/07/10/on-snobism/&amp;title=On+Snobism" rel="nofollow" title="Add to&nbsp;DZone"><img class="social_img" src="http://blog.openpanel.com/wp-content/plugins/social_bookmarks/images/dzone.png" title="Add to&nbsp;DZone" alt="Add to&nbsp;DZone" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://furl.net/storeIt.jsp?t=On+Snobism&amp;u=http://blog.openpanel.com/2008/07/10/on-snobism/" rel="nofollow" title="Add to&nbsp;FURL"><img class="social_img" src="http://blog.openpanel.com/wp-content/plugins/social_bookmarks/images/furl.png" title="Add to&nbsp;FURL" alt="Add to&nbsp;FURL" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http://blog.openpanel.com/2008/07/10/on-snobism/&amp;title=On+Snobism" rel="nofollow" title="Add to&nbsp;Google Bookmarks"><img class="social_img" src="http://blog.openpanel.com/wp-content/plugins/social_bookmarks/images/google.png" title="Add to&nbsp;Google Bookmarks" alt="Add to&nbsp;Google Bookmarks" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.netscape.com/submit/?U=http://blog.openpanel.com/2008/07/10/on-snobism/&amp;T=On+Snobism" rel="nofollow" title="Add to&nbsp;Netscape"><img class="social_img" src="http://blog.openpanel.com/wp-content/plugins/social_bookmarks/images/netscape.png" title="Add to&nbsp;Netscape" alt="Add to&nbsp;Netscape" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://reddit.com/submit?url=http://blog.openpanel.com/2008/07/10/on-snobism/&amp;title=On+Snobism" rel="nofollow" title="Add to&nbsp;reddit"><img class="social_img" src="http://blog.openpanel.com/wp-content/plugins/social_bookmarks/images/reddit.png" title="Add to&nbsp;reddit" alt="Add to&nbsp;reddit" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://slashdot.org/bookmark.pl?url=http://blog.openpanel.com/2008/07/10/on-snobism/&amp;title=On+Snobism" rel="nofollow" title="Add to&nbsp;Slashdot"><img class="social_img" src="http://blog.openpanel.com/wp-content/plugins/social_bookmarks/images/slashdot.png" title="Add to&nbsp;Slashdot" alt="Add to&nbsp;Slashdot" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.stumbleupon.com/submit.php?url=http://blog.openpanel.com/2008/07/10/on-snobism/&amp;title=On+Snobism" rel="nofollow" title="Add to&nbsp;Stumble Upon"><img class="social_img" src="http://blog.openpanel.com/wp-content/plugins/social_bookmarks/images/stumbleupon.png" title="Add to&nbsp;Stumble Upon" alt="Add to&nbsp;Stumble Upon" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.spurl.net/spurl.php?url=http://blog.openpanel.com/2008/07/10/on-snobism/&amp;title=On+Snobism" rel="nofollow" title="Add to&nbsp;Spurl"><img class="social_img" src="http://blog.openpanel.com/wp-content/plugins/social_bookmarks/images/spurl.png" title="Add to&nbsp;Spurl" alt="Add to&nbsp;Spurl" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.technorati.com/faves?add=http://blog.openpanel.com/2008/07/10/on-snobism/" rel="nofollow" title="Add to&nbsp;Technorati"><img class="social_img" src="http://blog.openpanel.com/wp-content/plugins/social_bookmarks/images/technorati.png" title="Add to&nbsp;Technorati" alt="Add to&nbsp;Technorati" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http://blog.openpanel.com/2008/07/10/on-snobism/&amp;t=On+Snobism" rel="nofollow" title="Add to&nbsp;Yahoo My Web"><img class="social_img" src="http://blog.openpanel.com/wp-content/plugins/social_bookmarks/images/yahoo.png" title="Add to&nbsp;Yahoo My Web" alt="Add to&nbsp;Yahoo My Web" /></a>
<br />
</div>
</div>
<!-- Social Bookmarks END -->
]]></content:encoded>
			<wfw:commentRss>http://blog.openpanel.com/2008/07/10/on-snobism/feed/atom/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Some Notes on the OpenPanel Architecture</title>
		<link>http://blog.openpanel.com/2008/05/14/some-notes-on-the-openpanel-architecture/</link>
		<comments>http://blog.openpanel.com/2008/05/14/some-notes-on-the-openpanel-architecture/#comments</comments>
		<pubDate>Wed, 14 May 2008 06:10:21 +0000</pubDate>
		<dc:creator>exel</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.openpanel.com/?p=69</guid>
		<description><![CDATA[I&#8217;m a strong believer in systems that are easily discoverable, where the structure of the files that make up the system communicate something about the application&#8217;s internal structure to the outside world. I tried to do much of the same thing with OpenPanel, but at the end of the day there&#8217;s still a lot to [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m a strong believer in systems that are easily discoverable, where the structure of the files that make up the system communicate something about the application&#8217;s internal structure to the outside world. I tried to do much of the same thing with OpenPanel, but at the end of the day there&#8217;s still a lot to go around, so perhaps now&#8217;s a good time to write up a bit about the thinking and architecture behind OpenPanel and its components.
</p>
<p>
When we started the design, we wanted to focus on the following demands:</p>
<ol>
<li> OpenPanel should be modular, and modules should not be restricted to any specific language </li>
<li> There should be elementary protection against security defects in module code </li>
<li> There should be a possibility of multiple user interfaces (at the very least both a GUI and a command line tool) </li>
<li> The system should anticipate the possibility of remote control and clustered integration </li>
<li> Configuration provided by OpenPanel should follow the standard configuration practices for the programs involved &mdash; no funky business relying on access to a MySQL database </li>
<li> It should be possible to dedicate an installation to a single purpose (like mail) without requiring unrelated services (Apache, MySQL) through dependencies </li>
</ol>
<p>What we came up with, is a design that could best be explained as a domain-specific object database that reflects changes into the configuration of outside programs. The <i>opencore</i> daemon implements this abstraction. At the bottom it has an sqlite database that stores object and class data. Modules are implemented as directories inside /var/opencore/modules that define object classes for the database and the program that executes the necessary changes to outside configuration related to objects of those classes. A JSON-based RPC interface accepts requests through HTTP. This backend port is also used to serve static files related to the web-based GUI.
</p>
<p>
Obviously, accepting remote RPC requests is something you don&#8217;t want to combine with root privileges. Also, since we wanted to keep a low number of privileges exposed directly to module code, running the back-end programs/scripts for module actions was definitely not something we felt should be done as the root user. This is where the <i>authd</i> daemon comes in. It accept requests on a unix domain socket that is only accessible to the opencore daemon. Whenever opencore runs a module program, it will fork to a new process, open a socket to authd, tell authd which module will be executed and drop the privileges needed to open any new connections to authd. The unprivileged module can talk to authd on fd 3, but will be restricted to those privileged actions defined in its module.xml file.
</p>
<p>
Documentation for the <a href="http://documentation.openpanel.com/index.php/Building_OpenPanel_Modules">Module API</a> and the <a href="http://documentation.openpanel.com/index.php/OpenCORE_RPC">RPC Interface</a> is on our site, but some of it may still be a bit rough around the edges.</p>
<!-- Social Bookmarks BEGIN -->
<div class="social_bookmark">
<a><strong><em>Bookmark It</em></strong></a>
<br />
<div class="d">
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://del.icio.us/post?url=http://blog.openpanel.com/2008/05/14/some-notes-on-the-openpanel-architecture/&amp;title=Some+Notes+on+the+OpenPanel+Architecture" rel="nofollow" title="Add to&nbsp;Del.icio.us"><img class="social_img" src="http://blog.openpanel.com/wp-content/plugins/social_bookmarks/images/delicious.png" title="Add to&nbsp;Del.icio.us" alt="Add to&nbsp;Del.icio.us" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;url=http://blog.openpanel.com/2008/05/14/some-notes-on-the-openpanel-architecture/&amp;title=Some+Notes+on+the+OpenPanel+Architecture" rel="nofollow" title="Add to&nbsp;digg"><img class="social_img" src="http://blog.openpanel.com/wp-content/plugins/social_bookmarks/images/digg.png" title="Add to&nbsp;digg" alt="Add to&nbsp;digg" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.dzone.com/links/add.html?description=Some+Notes+on+the+OpenPanel+Architecture&amp;url=http://blog.openpanel.com/2008/05/14/some-notes-on-the-openpanel-architecture/&amp;title=Some+Notes+on+the+OpenPanel+Architecture" rel="nofollow" title="Add to&nbsp;DZone"><img class="social_img" src="http://blog.openpanel.com/wp-content/plugins/social_bookmarks/images/dzone.png" title="Add to&nbsp;DZone" alt="Add to&nbsp;DZone" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://furl.net/storeIt.jsp?t=Some+Notes+on+the+OpenPanel+Architecture&amp;u=http://blog.openpanel.com/2008/05/14/some-notes-on-the-openpanel-architecture/" rel="nofollow" title="Add to&nbsp;FURL"><img class="social_img" src="http://blog.openpanel.com/wp-content/plugins/social_bookmarks/images/furl.png" title="Add to&nbsp;FURL" alt="Add to&nbsp;FURL" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http://blog.openpanel.com/2008/05/14/some-notes-on-the-openpanel-architecture/&amp;title=Some+Notes+on+the+OpenPanel+Architecture" rel="nofollow" title="Add to&nbsp;Google Bookmarks"><img class="social_img" src="http://blog.openpanel.com/wp-content/plugins/social_bookmarks/images/google.png" title="Add to&nbsp;Google Bookmarks" alt="Add to&nbsp;Google Bookmarks" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.netscape.com/submit/?U=http://blog.openpanel.com/2008/05/14/some-notes-on-the-openpanel-architecture/&amp;T=Some+Notes+on+the+OpenPanel+Architecture" rel="nofollow" title="Add to&nbsp;Netscape"><img class="social_img" src="http://blog.openpanel.com/wp-content/plugins/social_bookmarks/images/netscape.png" title="Add to&nbsp;Netscape" alt="Add to&nbsp;Netscape" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://reddit.com/submit?url=http://blog.openpanel.com/2008/05/14/some-notes-on-the-openpanel-architecture/&amp;title=Some+Notes+on+the+OpenPanel+Architecture" rel="nofollow" title="Add to&nbsp;reddit"><img class="social_img" src="http://blog.openpanel.com/wp-content/plugins/social_bookmarks/images/reddit.png" title="Add to&nbsp;reddit" alt="Add to&nbsp;reddit" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://slashdot.org/bookmark.pl?url=http://blog.openpanel.com/2008/05/14/some-notes-on-the-openpanel-architecture/&amp;title=Some+Notes+on+the+OpenPanel+Architecture" rel="nofollow" title="Add to&nbsp;Slashdot"><img class="social_img" src="http://blog.openpanel.com/wp-content/plugins/social_bookmarks/images/slashdot.png" title="Add to&nbsp;Slashdot" alt="Add to&nbsp;Slashdot" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.stumbleupon.com/submit.php?url=http://blog.openpanel.com/2008/05/14/some-notes-on-the-openpanel-architecture/&amp;title=Some+Notes+on+the+OpenPanel+Architecture" rel="nofollow" title="Add to&nbsp;Stumble Upon"><img class="social_img" src="http://blog.openpanel.com/wp-content/plugins/social_bookmarks/images/stumbleupon.png" title="Add to&nbsp;Stumble Upon" alt="Add to&nbsp;Stumble Upon" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.spurl.net/spurl.php?url=http://blog.openpanel.com/2008/05/14/some-notes-on-the-openpanel-architecture/&amp;title=Some+Notes+on+the+OpenPanel+Architecture" rel="nofollow" title="Add to&nbsp;Spurl"><img class="social_img" src="http://blog.openpanel.com/wp-content/plugins/social_bookmarks/images/spurl.png" title="Add to&nbsp;Spurl" alt="Add to&nbsp;Spurl" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.technorati.com/faves?add=http://blog.openpanel.com/2008/05/14/some-notes-on-the-openpanel-architecture/" rel="nofollow" title="Add to&nbsp;Technorati"><img class="social_img" src="http://blog.openpanel.com/wp-content/plugins/social_bookmarks/images/technorati.png" title="Add to&nbsp;Technorati" alt="Add to&nbsp;Technorati" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http://blog.openpanel.com/2008/05/14/some-notes-on-the-openpanel-architecture/&amp;t=Some+Notes+on+the+OpenPanel+Architecture" rel="nofollow" title="Add to&nbsp;Yahoo My Web"><img class="social_img" src="http://blog.openpanel.com/wp-content/plugins/social_bookmarks/images/yahoo.png" title="Add to&nbsp;Yahoo My Web" alt="Add to&nbsp;Yahoo My Web" /></a>
<br />
</div>
</div>
<!-- Social Bookmarks END -->
]]></content:encoded>
			<wfw:commentRss>http://blog.openpanel.com/2008/05/14/some-notes-on-the-openpanel-architecture/feed/atom/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The OpenPanel CLI, opencli, in Action</title>
		<link>http://blog.openpanel.com/2008/04/28/the-openpanel-cli-in-action/</link>
		<comments>http://blog.openpanel.com/2008/04/28/the-openpanel-cli-in-action/#comments</comments>
		<pubDate>Mon, 28 Apr 2008 17:41:37 +0000</pubDate>
		<dc:creator>exel</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.openpanel.com/?p=65</guid>
		<description><![CDATA[People requested a screencast of our command line interface, opencli, in action as well, so here it is:
				
				
We&#8217;ll be adding a dedicated screenshots section to our website soon.


Bookmark It



















]]></description>
			<content:encoded><![CDATA[<p>People requested a screencast of our command line interface, opencli, in action as well, so here it is:</p>
<div class="flvPlayer">				<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0" width="448" height="356"><param name="movie" value="http://blog.openpanel.com/flvplayer/mediaplayer.swf?file=http://www.openpanel.com/openpanel_cli.flv&amp;autoStart=false;" /><param name="quality" value="high" /><param name="wmode" value="transparent" /><embed src="http://blog.openpanel.com/flvplayer/mediaplayer.swf?file=http://www.openpanel.com/openpanel_cli.flv&amp;autoStart=false;" quality="high" wmode="transparent" width="448" height="356" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" /><br />
				</object></div>
<p>We&#8217;ll be adding a dedicated screenshots section to <a href="http://www.openpanel.com/">our website</a> soon.</p>
<!-- Social Bookmarks BEGIN -->
<div class="social_bookmark">
<a><strong><em>Bookmark It</em></strong></a>
<br />
<div class="d">
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://del.icio.us/post?url=http://blog.openpanel.com/2008/04/28/the-openpanel-cli-in-action/&amp;title=The+OpenPanel+CLI,+opencli,+in+Action" rel="nofollow" title="Add to&nbsp;Del.icio.us"><img class="social_img" src="http://blog.openpanel.com/wp-content/plugins/social_bookmarks/images/delicious.png" title="Add to&nbsp;Del.icio.us" alt="Add to&nbsp;Del.icio.us" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;url=http://blog.openpanel.com/2008/04/28/the-openpanel-cli-in-action/&amp;title=The+OpenPanel+CLI,+opencli,+in+Action" rel="nofollow" title="Add to&nbsp;digg"><img class="social_img" src="http://blog.openpanel.com/wp-content/plugins/social_bookmarks/images/digg.png" title="Add to&nbsp;digg" alt="Add to&nbsp;digg" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.dzone.com/links/add.html?description=The+OpenPanel+CLI,+opencli,+in+Action&amp;url=http://blog.openpanel.com/2008/04/28/the-openpanel-cli-in-action/&amp;title=The+OpenPanel+CLI,+opencli,+in+Action" rel="nofollow" title="Add to&nbsp;DZone"><img class="social_img" src="http://blog.openpanel.com/wp-content/plugins/social_bookmarks/images/dzone.png" title="Add to&nbsp;DZone" alt="Add to&nbsp;DZone" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://furl.net/storeIt.jsp?t=The+OpenPanel+CLI,+opencli,+in+Action&amp;u=http://blog.openpanel.com/2008/04/28/the-openpanel-cli-in-action/" rel="nofollow" title="Add to&nbsp;FURL"><img class="social_img" src="http://blog.openpanel.com/wp-content/plugins/social_bookmarks/images/furl.png" title="Add to&nbsp;FURL" alt="Add to&nbsp;FURL" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http://blog.openpanel.com/2008/04/28/the-openpanel-cli-in-action/&amp;title=The+OpenPanel+CLI,+opencli,+in+Action" rel="nofollow" title="Add to&nbsp;Google Bookmarks"><img class="social_img" src="http://blog.openpanel.com/wp-content/plugins/social_bookmarks/images/google.png" title="Add to&nbsp;Google Bookmarks" alt="Add to&nbsp;Google Bookmarks" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.netscape.com/submit/?U=http://blog.openpanel.com/2008/04/28/the-openpanel-cli-in-action/&amp;T=The+OpenPanel+CLI,+opencli,+in+Action" rel="nofollow" title="Add to&nbsp;Netscape"><img class="social_img" src="http://blog.openpanel.com/wp-content/plugins/social_bookmarks/images/netscape.png" title="Add to&nbsp;Netscape" alt="Add to&nbsp;Netscape" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://reddit.com/submit?url=http://blog.openpanel.com/2008/04/28/the-openpanel-cli-in-action/&amp;title=The+OpenPanel+CLI,+opencli,+in+Action" rel="nofollow" title="Add to&nbsp;reddit"><img class="social_img" src="http://blog.openpanel.com/wp-content/plugins/social_bookmarks/images/reddit.png" title="Add to&nbsp;reddit" alt="Add to&nbsp;reddit" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://slashdot.org/bookmark.pl?url=http://blog.openpanel.com/2008/04/28/the-openpanel-cli-in-action/&amp;title=The+OpenPanel+CLI,+opencli,+in+Action" rel="nofollow" title="Add to&nbsp;Slashdot"><img class="social_img" src="http://blog.openpanel.com/wp-content/plugins/social_bookmarks/images/slashdot.png" title="Add to&nbsp;Slashdot" alt="Add to&nbsp;Slashdot" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.stumbleupon.com/submit.php?url=http://blog.openpanel.com/2008/04/28/the-openpanel-cli-in-action/&amp;title=The+OpenPanel+CLI,+opencli,+in+Action" rel="nofollow" title="Add to&nbsp;Stumble Upon"><img class="social_img" src="http://blog.openpanel.com/wp-content/plugins/social_bookmarks/images/stumbleupon.png" title="Add to&nbsp;Stumble Upon" alt="Add to&nbsp;Stumble Upon" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.spurl.net/spurl.php?url=http://blog.openpanel.com/2008/04/28/the-openpanel-cli-in-action/&amp;title=The+OpenPanel+CLI,+opencli,+in+Action" rel="nofollow" title="Add to&nbsp;Spurl"><img class="social_img" src="http://blog.openpanel.com/wp-content/plugins/social_bookmarks/images/spurl.png" title="Add to&nbsp;Spurl" alt="Add to&nbsp;Spurl" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.technorati.com/faves?add=http://blog.openpanel.com/2008/04/28/the-openpanel-cli-in-action/" rel="nofollow" title="Add to&nbsp;Technorati"><img class="social_img" src="http://blog.openpanel.com/wp-content/plugins/social_bookmarks/images/technorati.png" title="Add to&nbsp;Technorati" alt="Add to&nbsp;Technorati" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http://blog.openpanel.com/2008/04/28/the-openpanel-cli-in-action/&amp;t=The+OpenPanel+CLI,+opencli,+in+Action" rel="nofollow" title="Add to&nbsp;Yahoo My Web"><img class="social_img" src="http://blog.openpanel.com/wp-content/plugins/social_bookmarks/images/yahoo.png" title="Add to&nbsp;Yahoo My Web" alt="Add to&nbsp;Yahoo My Web" /></a>
<br />
</div>
</div>
<!-- Social Bookmarks END -->
]]></content:encoded>
			<wfw:commentRss>http://blog.openpanel.com/2008/04/28/the-openpanel-cli-in-action/feed/atom/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Pimping is Hard: The Challenges of Giving Away Your Stuff for Free</title>
		<link>http://blog.openpanel.com/2008/04/24/pimping-is-hard-the-challenges-of-giving-away-your-stuff-for-free/</link>
		<comments>http://blog.openpanel.com/2008/04/24/pimping-is-hard-the-challenges-of-giving-away-your-stuff-for-free/#comments</comments>
		<pubDate>Thu, 24 Apr 2008 13:07:22 +0000</pubDate>
		<dc:creator>exel</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.openpanel.com/?p=61</guid>
		<description><![CDATA[The premise sounds easy enough: There&#8217;s no arguing with free. In the server control panel market we found a niche dominated by commercial players with a stranglehold on price and a bunch of products that annoy system administrators to the bone. So we set out to create something appealing — software with disruptive potential. With [...]]]></description>
			<content:encoded><![CDATA[<p>The premise sounds easy enough: There&#8217;s no arguing with free. In the server control panel market we found a niche dominated by commercial players with a stranglehold on price and a bunch of products that annoy system administrators to the bone. So we set out to create something appealing — software with disruptive potential. With <a href="http://www.openpanel.com/">a product</a> in our hands that ticks all the checkboxes in terms of nerd appeal, you would say that this would be as easy a sell as free blowjobs at a LAN party. Unfortunately, things are not quite that simple.</p>
<p>We went through the hoops submitting the news of our release to a dozen of the usual suspects, got a couple of hits and the first testers have arrived. There&#8217;s even a couple of people around doing more involved things like trying to port packages to other distros. It&#8217;s not bad and we appreciate all the people helping us out by playing with the beta, but a stampede it is not. Building a community takes <em>time</em>.</p>
<p>In terms of strategy, this may be the real reason for the &#8216;release early, release often&#8217; mantra. Especially when your project is in a niche area, expect community building to take up maybe just as much time as actual development. We wanted to avoid getting distracted by actual users too early in the game, so our gut feeling at the time was &#8216;early, schmearly&#8217;. We had a couple of other reasons, some of them even sounded real good — like how there are too many open source projects in the field that need so much polishing that the market has been mostly ignoring them. But the fact of the matter is, all the hours of community building we&#8217;ve been avoiding up to the beta release will have to be put in double now. We&#8217;ll need to go from our current mode of reclusive introversion to full-blown extravert. Tough job for a bunch of nerds.</p>
<!-- Social Bookmarks BEGIN -->
<div class="social_bookmark">
<a><strong><em>Bookmark It</em></strong></a>
<br />
<div class="d">
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://del.icio.us/post?url=http://blog.openpanel.com/2008/04/24/pimping-is-hard-the-challenges-of-giving-away-your-stuff-for-free/&amp;title=Pimping+is+Hard:+The+Challenges+of+Giving+Away+Your+Stuff+for+Free" rel="nofollow" title="Add to&nbsp;Del.icio.us"><img class="social_img" src="http://blog.openpanel.com/wp-content/plugins/social_bookmarks/images/delicious.png" title="Add to&nbsp;Del.icio.us" alt="Add to&nbsp;Del.icio.us" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;url=http://blog.openpanel.com/2008/04/24/pimping-is-hard-the-challenges-of-giving-away-your-stuff-for-free/&amp;title=Pimping+is+Hard:+The+Challenges+of+Giving+Away+Your+Stuff+for+Free" rel="nofollow" title="Add to&nbsp;digg"><img class="social_img" src="http://blog.openpanel.com/wp-content/plugins/social_bookmarks/images/digg.png" title="Add to&nbsp;digg" alt="Add to&nbsp;digg" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.dzone.com/links/add.html?description=Pimping+is+Hard:+The+Challenges+of+Giving+Away+Your+Stuff+for+Free&amp;url=http://blog.openpanel.com/2008/04/24/pimping-is-hard-the-challenges-of-giving-away-your-stuff-for-free/&amp;title=Pimping+is+Hard:+The+Challenges+of+Giving+Away+Your+Stuff+for+Free" rel="nofollow" title="Add to&nbsp;DZone"><img class="social_img" src="http://blog.openpanel.com/wp-content/plugins/social_bookmarks/images/dzone.png" title="Add to&nbsp;DZone" alt="Add to&nbsp;DZone" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://furl.net/storeIt.jsp?t=Pimping+is+Hard:+The+Challenges+of+Giving+Away+Your+Stuff+for+Free&amp;u=http://blog.openpanel.com/2008/04/24/pimping-is-hard-the-challenges-of-giving-away-your-stuff-for-free/" rel="nofollow" title="Add to&nbsp;FURL"><img class="social_img" src="http://blog.openpanel.com/wp-content/plugins/social_bookmarks/images/furl.png" title="Add to&nbsp;FURL" alt="Add to&nbsp;FURL" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http://blog.openpanel.com/2008/04/24/pimping-is-hard-the-challenges-of-giving-away-your-stuff-for-free/&amp;title=Pimping+is+Hard:+The+Challenges+of+Giving+Away+Your+Stuff+for+Free" rel="nofollow" title="Add to&nbsp;Google Bookmarks"><img class="social_img" src="http://blog.openpanel.com/wp-content/plugins/social_bookmarks/images/google.png" title="Add to&nbsp;Google Bookmarks" alt="Add to&nbsp;Google Bookmarks" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.netscape.com/submit/?U=http://blog.openpanel.com/2008/04/24/pimping-is-hard-the-challenges-of-giving-away-your-stuff-for-free/&amp;T=Pimping+is+Hard:+The+Challenges+of+Giving+Away+Your+Stuff+for+Free" rel="nofollow" title="Add to&nbsp;Netscape"><img class="social_img" src="http://blog.openpanel.com/wp-content/plugins/social_bookmarks/images/netscape.png" title="Add to&nbsp;Netscape" alt="Add to&nbsp;Netscape" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://reddit.com/submit?url=http://blog.openpanel.com/2008/04/24/pimping-is-hard-the-challenges-of-giving-away-your-stuff-for-free/&amp;title=Pimping+is+Hard:+The+Challenges+of+Giving+Away+Your+Stuff+for+Free" rel="nofollow" title="Add to&nbsp;reddit"><img class="social_img" src="http://blog.openpanel.com/wp-content/plugins/social_bookmarks/images/reddit.png" title="Add to&nbsp;reddit" alt="Add to&nbsp;reddit" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://slashdot.org/bookmark.pl?url=http://blog.openpanel.com/2008/04/24/pimping-is-hard-the-challenges-of-giving-away-your-stuff-for-free/&amp;title=Pimping+is+Hard:+The+Challenges+of+Giving+Away+Your+Stuff+for+Free" rel="nofollow" title="Add to&nbsp;Slashdot"><img class="social_img" src="http://blog.openpanel.com/wp-content/plugins/social_bookmarks/images/slashdot.png" title="Add to&nbsp;Slashdot" alt="Add to&nbsp;Slashdot" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.stumbleupon.com/submit.php?url=http://blog.openpanel.com/2008/04/24/pimping-is-hard-the-challenges-of-giving-away-your-stuff-for-free/&amp;title=Pimping+is+Hard:+The+Challenges+of+Giving+Away+Your+Stuff+for+Free" rel="nofollow" title="Add to&nbsp;Stumble Upon"><img class="social_img" src="http://blog.openpanel.com/wp-content/plugins/social_bookmarks/images/stumbleupon.png" title="Add to&nbsp;Stumble Upon" alt="Add to&nbsp;Stumble Upon" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.spurl.net/spurl.php?url=http://blog.openpanel.com/2008/04/24/pimping-is-hard-the-challenges-of-giving-away-your-stuff-for-free/&amp;title=Pimping+is+Hard:+The+Challenges+of+Giving+Away+Your+Stuff+for+Free" rel="nofollow" title="Add to&nbsp;Spurl"><img class="social_img" src="http://blog.openpanel.com/wp-content/plugins/social_bookmarks/images/spurl.png" title="Add to&nbsp;Spurl" alt="Add to&nbsp;Spurl" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.technorati.com/faves?add=http://blog.openpanel.com/2008/04/24/pimping-is-hard-the-challenges-of-giving-away-your-stuff-for-free/" rel="nofollow" title="Add to&nbsp;Technorati"><img class="social_img" src="http://blog.openpanel.com/wp-content/plugins/social_bookmarks/images/technorati.png" title="Add to&nbsp;Technorati" alt="Add to&nbsp;Technorati" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http://blog.openpanel.com/2008/04/24/pimping-is-hard-the-challenges-of-giving-away-your-stuff-for-free/&amp;t=Pimping+is+Hard:+The+Challenges+of+Giving+Away+Your+Stuff+for+Free" rel="nofollow" title="Add to&nbsp;Yahoo My Web"><img class="social_img" src="http://blog.openpanel.com/wp-content/plugins/social_bookmarks/images/yahoo.png" title="Add to&nbsp;Yahoo My Web" alt="Add to&nbsp;Yahoo My Web" /></a>
<br />
</div>
</div>
<!-- Social Bookmarks END -->
]]></content:encoded>
			<wfw:commentRss>http://blog.openpanel.com/2008/04/24/pimping-is-hard-the-challenges-of-giving-away-your-stuff-for-free/feed/atom/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Birthing a Product</title>
		<link>http://blog.openpanel.com/2008/04/16/birthing-a-product/</link>
		<comments>http://blog.openpanel.com/2008/04/16/birthing-a-product/#comments</comments>
		<pubDate>Wed, 16 Apr 2008 14:08:32 +0000</pubDate>
		<dc:creator>exel</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.openpanel.com/2008/04/16/birthing-a-product/</guid>
		<description><![CDATA[It all started as an enormous itch that needed serious scratching. We&#8217;ve been dealing, in our various capacities at hosting providers, with many incarnations of commercial server control panels like Ensim, Plesk and cPanel. Not only were these, in our view, haphazardly constructed kludges of magic that actively worked against the operating systems they were [...]]]></description>
			<content:encoded><![CDATA[<p>It all started as an enormous itch that needed serious scratching. We&#8217;ve been dealing, in our various capacities at hosting providers, with many incarnations of commercial server control panels like Ensim, Plesk and cPanel. Not only were these, in our view, haphazardly constructed kludges of magic that actively worked <i>against</i> the operating systems they were installed on; we kept coming back to the fact that people were actually <i>paying</i> for such software. Through the nose, no less. This felt wrong and paved the way for the OpenPanel project.
</p>
<p>
We spent over a year creating something with the capacity to change the landscape, by combining the proper amount of openness and flexibility with a state of the art user interface and a license that should make trumpets sound from the heavens. People we&#8217;ve shown it to have been raving. But, now that we&#8217;re at the point to hit the submit button for all this on sites like freshmeat, all those little doubts start setting in. It&#8217;s scary as hell.
</p>
<p>
I&#8217;m convinced we&#8217;ve taken the right step by not fully adopting the &#8216;release early&#8217; mantra &mdash; it has given us the chance to quickly reshape the design where needed (Heck, we&#8217;re on the second incarnation of the GUI). But this is the downside. If you release early, expectations are lower and you never get this neckhair-raising fear of throwing your work into the world. Alas.
</p>
<p>
We&#8217;ve opened up the 0.9 (beta) branch of OpenPanel as of today. There&#8217;s no longer a requirement to email us to get access, just follow the download instructions from the main site. Messages have also gone out to the usual places. The future is now.</p>
<!-- Social Bookmarks BEGIN -->
<div class="social_bookmark">
<a><strong><em>Bookmark It</em></strong></a>
<br />
<div class="d">
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://del.icio.us/post?url=http://blog.openpanel.com/2008/04/16/birthing-a-product/&amp;title=Birthing+a+Product" rel="nofollow" title="Add to&nbsp;Del.icio.us"><img class="social_img" src="http://blog.openpanel.com/wp-content/plugins/social_bookmarks/images/delicious.png" title="Add to&nbsp;Del.icio.us" alt="Add to&nbsp;Del.icio.us" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;url=http://blog.openpanel.com/2008/04/16/birthing-a-product/&amp;title=Birthing+a+Product" rel="nofollow" title="Add to&nbsp;digg"><img class="social_img" src="http://blog.openpanel.com/wp-content/plugins/social_bookmarks/images/digg.png" title="Add to&nbsp;digg" alt="Add to&nbsp;digg" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.dzone.com/links/add.html?description=Birthing+a+Product&amp;url=http://blog.openpanel.com/2008/04/16/birthing-a-product/&amp;title=Birthing+a+Product" rel="nofollow" title="Add to&nbsp;DZone"><img class="social_img" src="http://blog.openpanel.com/wp-content/plugins/social_bookmarks/images/dzone.png" title="Add to&nbsp;DZone" alt="Add to&nbsp;DZone" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://furl.net/storeIt.jsp?t=Birthing+a+Product&amp;u=http://blog.openpanel.com/2008/04/16/birthing-a-product/" rel="nofollow" title="Add to&nbsp;FURL"><img class="social_img" src="http://blog.openpanel.com/wp-content/plugins/social_bookmarks/images/furl.png" title="Add to&nbsp;FURL" alt="Add to&nbsp;FURL" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http://blog.openpanel.com/2008/04/16/birthing-a-product/&amp;title=Birthing+a+Product" rel="nofollow" title="Add to&nbsp;Google Bookmarks"><img class="social_img" src="http://blog.openpanel.com/wp-content/plugins/social_bookmarks/images/google.png" title="Add to&nbsp;Google Bookmarks" alt="Add to&nbsp;Google Bookmarks" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.netscape.com/submit/?U=http://blog.openpanel.com/2008/04/16/birthing-a-product/&amp;T=Birthing+a+Product" rel="nofollow" title="Add to&nbsp;Netscape"><img class="social_img" src="http://blog.openpanel.com/wp-content/plugins/social_bookmarks/images/netscape.png" title="Add to&nbsp;Netscape" alt="Add to&nbsp;Netscape" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://reddit.com/submit?url=http://blog.openpanel.com/2008/04/16/birthing-a-product/&amp;title=Birthing+a+Product" rel="nofollow" title="Add to&nbsp;reddit"><img class="social_img" src="http://blog.openpanel.com/wp-content/plugins/social_bookmarks/images/reddit.png" title="Add to&nbsp;reddit" alt="Add to&nbsp;reddit" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://slashdot.org/bookmark.pl?url=http://blog.openpanel.com/2008/04/16/birthing-a-product/&amp;title=Birthing+a+Product" rel="nofollow" title="Add to&nbsp;Slashdot"><img class="social_img" src="http://blog.openpanel.com/wp-content/plugins/social_bookmarks/images/slashdot.png" title="Add to&nbsp;Slashdot" alt="Add to&nbsp;Slashdot" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.stumbleupon.com/submit.php?url=http://blog.openpanel.com/2008/04/16/birthing-a-product/&amp;title=Birthing+a+Product" rel="nofollow" title="Add to&nbsp;Stumble Upon"><img class="social_img" src="http://blog.openpanel.com/wp-content/plugins/social_bookmarks/images/stumbleupon.png" title="Add to&nbsp;Stumble Upon" alt="Add to&nbsp;Stumble Upon" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.spurl.net/spurl.php?url=http://blog.openpanel.com/2008/04/16/birthing-a-product/&amp;title=Birthing+a+Product" rel="nofollow" title="Add to&nbsp;Spurl"><img class="social_img" src="http://blog.openpanel.com/wp-content/plugins/social_bookmarks/images/spurl.png" title="Add to&nbsp;Spurl" alt="Add to&nbsp;Spurl" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.technorati.com/faves?add=http://blog.openpanel.com/2008/04/16/birthing-a-product/" rel="nofollow" title="Add to&nbsp;Technorati"><img class="social_img" src="http://blog.openpanel.com/wp-content/plugins/social_bookmarks/images/technorati.png" title="Add to&nbsp;Technorati" alt="Add to&nbsp;Technorati" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http://blog.openpanel.com/2008/04/16/birthing-a-product/&amp;t=Birthing+a+Product" rel="nofollow" title="Add to&nbsp;Yahoo My Web"><img class="social_img" src="http://blog.openpanel.com/wp-content/plugins/social_bookmarks/images/yahoo.png" title="Add to&nbsp;Yahoo My Web" alt="Add to&nbsp;Yahoo My Web" /></a>
<br />
</div>
</div>
<!-- Social Bookmarks END -->
]]></content:encoded>
			<wfw:commentRss>http://blog.openpanel.com/2008/04/16/birthing-a-product/feed/atom/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Full Album</title>
		<link>http://blog.madscience.nl/Site/Podcast/e567907e-d13a-438b-8b21-828b336638ec/</link>
		<comments>http://blog.madscience.nl/Site/Podcast/e567907e-d13a-438b-8b21-828b336638ec/#comments</comments>
		<pubDate>Fri, 28 Mar 2008 22:29:04 +0000</pubDate>
		<dc:creator>exel</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.madscience.nl/Site/Podcast/e567907e-d13a-438b-8b21-828b336638ec/</guid>
		<description><![CDATA[Greenhouse (Electric Sheep EP) - 00:35:27]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.madscience.nl/Site/Podcast/e567907e-d13a-438b-8b21-828b336638ec/greenhouse-full_album.mp3"><img src="http://blog.madscience.nl/Site/Podcast/e567907e-d13a-438b-8b21-828b336638ec/icon.jpg" style="float:left; padding-right:10px; padding-bottom:10px; width:128px; height:128px;"/></a>Greenhouse (Electric Sheep EP) - 00:35:27</p>]]></content:encoded>
			<wfw:commentRss>http://fifo.nl/exel/498/full-album/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://blog.madscience.nl/Site/Podcast/e567907e-d13a-438b-8b21-828b336638ec/greenhouse-full_album.mp3" length="85247088" type="audio/mpeg" />
		</item>
		<item>
		<title>See OpenPanel Run. Run OpenPanel, Run.</title>
		<link>http://blog.openpanel.com/2008/03/21/see-openpanel-run-run-openpanel-run/</link>
		<comments>http://blog.openpanel.com/2008/03/21/see-openpanel-run-run-openpanel-run/#comments</comments>
		<pubDate>Fri, 21 Mar 2008 16:25:32 +0000</pubDate>
		<dc:creator>exel</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.openpanel.com/2008/03/21/see-openpanel-run-run-openpanel-run/</guid>
		<description><![CDATA[Here&#8217;s a preview of the upcoming Beta release of our life&#8217;s work. Now that we&#8217;re over that &#8220;oh no, we&#8217;re all going to die and we&#8217;ll never finish it&#8221; point, things are starting to look well. Or perhaps the other way around:
				
				
We&#8217;ll pick up the last bugs we found monday and then seed a release [...]]]></description>
			<content:encoded><![CDATA[<p>Here&#8217;s a preview of the upcoming Beta release of our life&#8217;s work. Now that we&#8217;re over that &#8220;oh no, we&#8217;re all going to die and we&#8217;ll never finish it&#8221; point, things are starting to look well. Or perhaps the other way around:</p>
<div class="flvPlayer">				<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0" width="448" height="356"><param name="movie" value="http://blog.openpanel.com/flvplayer/mediaplayer.swf?file=http://www.openpanel.com/openpanel_beta.flv&amp;autoStart=false;" /><param name="quality" value="high" /><param name="wmode" value="transparent" /><embed src="http://blog.openpanel.com/flvplayer/mediaplayer.swf?file=http://www.openpanel.com/openpanel_beta.flv&amp;autoStart=false;" quality="high" wmode="transparent" width="448" height="356" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" /><br />
				</object></div>
<p>We&#8217;ll pick up the last bugs we found monday and then seed a release candidate to our alpha team. If no show stoppers emerge, that will be followed up shortly by a full public release of the OpenPanel beta.</p>
<!-- Social Bookmarks BEGIN -->
<div class="social_bookmark">
<a><strong><em>Bookmark It</em></strong></a>
<br />
<div class="d">
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://del.icio.us/post?url=http://blog.openpanel.com/2008/03/21/see-openpanel-run-run-openpanel-run/&amp;title=See+OpenPanel+Run.+Run+OpenPanel,+Run." rel="nofollow" title="Add to&nbsp;Del.icio.us"><img class="social_img" src="http://blog.openpanel.com/wp-content/plugins/social_bookmarks/images/delicious.png" title="Add to&nbsp;Del.icio.us" alt="Add to&nbsp;Del.icio.us" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;url=http://blog.openpanel.com/2008/03/21/see-openpanel-run-run-openpanel-run/&amp;title=See+OpenPanel+Run.+Run+OpenPanel,+Run." rel="nofollow" title="Add to&nbsp;digg"><img class="social_img" src="http://blog.openpanel.com/wp-content/plugins/social_bookmarks/images/digg.png" title="Add to&nbsp;digg" alt="Add to&nbsp;digg" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.dzone.com/links/add.html?description=See+OpenPanel+Run.+Run+OpenPanel,+Run.&amp;url=http://blog.openpanel.com/2008/03/21/see-openpanel-run-run-openpanel-run/&amp;title=See+OpenPanel+Run.+Run+OpenPanel,+Run." rel="nofollow" title="Add to&nbsp;DZone"><img class="social_img" src="http://blog.openpanel.com/wp-content/plugins/social_bookmarks/images/dzone.png" title="Add to&nbsp;DZone" alt="Add to&nbsp;DZone" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://furl.net/storeIt.jsp?t=See+OpenPanel+Run.+Run+OpenPanel,+Run.&amp;u=http://blog.openpanel.com/2008/03/21/see-openpanel-run-run-openpanel-run/" rel="nofollow" title="Add to&nbsp;FURL"><img class="social_img" src="http://blog.openpanel.com/wp-content/plugins/social_bookmarks/images/furl.png" title="Add to&nbsp;FURL" alt="Add to&nbsp;FURL" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http://blog.openpanel.com/2008/03/21/see-openpanel-run-run-openpanel-run/&amp;title=See+OpenPanel+Run.+Run+OpenPanel,+Run." rel="nofollow" title="Add to&nbsp;Google Bookmarks"><img class="social_img" src="http://blog.openpanel.com/wp-content/plugins/social_bookmarks/images/google.png" title="Add to&nbsp;Google Bookmarks" alt="Add to&nbsp;Google Bookmarks" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.netscape.com/submit/?U=http://blog.openpanel.com/2008/03/21/see-openpanel-run-run-openpanel-run/&amp;T=See+OpenPanel+Run.+Run+OpenPanel,+Run." rel="nofollow" title="Add to&nbsp;Netscape"><img class="social_img" src="http://blog.openpanel.com/wp-content/plugins/social_bookmarks/images/netscape.png" title="Add to&nbsp;Netscape" alt="Add to&nbsp;Netscape" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://reddit.com/submit?url=http://blog.openpanel.com/2008/03/21/see-openpanel-run-run-openpanel-run/&amp;title=See+OpenPanel+Run.+Run+OpenPanel,+Run." rel="nofollow" title="Add to&nbsp;reddit"><img class="social_img" src="http://blog.openpanel.com/wp-content/plugins/social_bookmarks/images/reddit.png" title="Add to&nbsp;reddit" alt="Add to&nbsp;reddit" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://slashdot.org/bookmark.pl?url=http://blog.openpanel.com/2008/03/21/see-openpanel-run-run-openpanel-run/&amp;title=See+OpenPanel+Run.+Run+OpenPanel,+Run." rel="nofollow" title="Add to&nbsp;Slashdot"><img class="social_img" src="http://blog.openpanel.com/wp-content/plugins/social_bookmarks/images/slashdot.png" title="Add to&nbsp;Slashdot" alt="Add to&nbsp;Slashdot" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.stumbleupon.com/submit.php?url=http://blog.openpanel.com/2008/03/21/see-openpanel-run-run-openpanel-run/&amp;title=See+OpenPanel+Run.+Run+OpenPanel,+Run." rel="nofollow" title="Add to&nbsp;Stumble Upon"><img class="social_img" src="http://blog.openpanel.com/wp-content/plugins/social_bookmarks/images/stumbleupon.png" title="Add to&nbsp;Stumble Upon" alt="Add to&nbsp;Stumble Upon" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.spurl.net/spurl.php?url=http://blog.openpanel.com/2008/03/21/see-openpanel-run-run-openpanel-run/&amp;title=See+OpenPanel+Run.+Run+OpenPanel,+Run." rel="nofollow" title="Add to&nbsp;Spurl"><img class="social_img" src="http://blog.openpanel.com/wp-content/plugins/social_bookmarks/images/spurl.png" title="Add to&nbsp;Spurl" alt="Add to&nbsp;Spurl" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.technorati.com/faves?add=http://blog.openpanel.com/2008/03/21/see-openpanel-run-run-openpanel-run/" rel="nofollow" title="Add to&nbsp;Technorati"><img class="social_img" src="http://blog.openpanel.com/wp-content/plugins/social_bookmarks/images/technorati.png" title="Add to&nbsp;Technorati" alt="Add to&nbsp;Technorati" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http://blog.openpanel.com/2008/03/21/see-openpanel-run-run-openpanel-run/&amp;t=See+OpenPanel+Run.+Run+OpenPanel,+Run." rel="nofollow" title="Add to&nbsp;Yahoo My Web"><img class="social_img" src="http://blog.openpanel.com/wp-content/plugins/social_bookmarks/images/yahoo.png" title="Add to&nbsp;Yahoo My Web" alt="Add to&nbsp;Yahoo My Web" /></a>
<br />
</div>
</div>
<!-- Social Bookmarks END -->
]]></content:encoded>
			<wfw:commentRss>http://blog.openpanel.com/2008/03/21/see-openpanel-run-run-openpanel-run/feed/atom/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sunday Night Dancing Bear Blogging</title>
		<link>http://blog.openpanel.com/2008/03/16/sunday-night-dancing-bear-blogging/</link>
		<comments>http://blog.openpanel.com/2008/03/16/sunday-night-dancing-bear-blogging/#comments</comments>
		<pubDate>Sun, 16 Mar 2008 20:55:32 +0000</pubDate>
		<dc:creator>exel</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.openpanel.com/2008/03/16/sunday-night-dancing-bear-blogging/</guid>
		<description><![CDATA[Bookmark It]]></description>
			<content:encoded><![CDATA[<p><code>
<object	type="application/x-shockwave-flash"
			data="http://youtube.com/v/rdklako-Hy4"
			width="425"
			height="350">
	<param name="movie" value="http://youtube.com/v/rdklako-Hy4" />
	<param name=wmode" value="transparent" />
</object></code></p>
<!-- Social Bookmarks BEGIN -->
<div class="social_bookmark">
<a><strong><em>Bookmark It</em></strong></a>
<br />
<div class="d">
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://del.icio.us/post?url=http://blog.openpanel.com/2008/03/16/sunday-night-dancing-bear-blogging/&amp;title=Sunday+Night+Dancing+Bear+Blogging" rel="nofollow" title="Add to&nbsp;Del.icio.us"><img class="social_img" src="http://blog.openpanel.com/wp-content/plugins/social_bookmarks/images/delicious.png" title="Add to&nbsp;Del.icio.us" alt="Add to&nbsp;Del.icio.us" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;url=http://blog.openpanel.com/2008/03/16/sunday-night-dancing-bear-blogging/&amp;title=Sunday+Night+Dancing+Bear+Blogging" rel="nofollow" title="Add to&nbsp;digg"><img class="social_img" src="http://blog.openpanel.com/wp-content/plugins/social_bookmarks/images/digg.png" title="Add to&nbsp;digg" alt="Add to&nbsp;digg" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.dzone.com/links/add.html?description=Sunday+Night+Dancing+Bear+Blogging&amp;url=http://blog.openpanel.com/2008/03/16/sunday-night-dancing-bear-blogging/&amp;title=Sunday+Night+Dancing+Bear+Blogging" rel="nofollow" title="Add to&nbsp;DZone"><img class="social_img" src="http://blog.openpanel.com/wp-content/plugins/social_bookmarks/images/dzone.png" title="Add to&nbsp;DZone" alt="Add to&nbsp;DZone" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://furl.net/storeIt.jsp?t=Sunday+Night+Dancing+Bear+Blogging&amp;u=http://blog.openpanel.com/2008/03/16/sunday-night-dancing-bear-blogging/" rel="nofollow" title="Add to&nbsp;FURL"><img class="social_img" src="http://blog.openpanel.com/wp-content/plugins/social_bookmarks/images/furl.png" title="Add to&nbsp;FURL" alt="Add to&nbsp;FURL" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http://blog.openpanel.com/2008/03/16/sunday-night-dancing-bear-blogging/&amp;title=Sunday+Night+Dancing+Bear+Blogging" rel="nofollow" title="Add to&nbsp;Google Bookmarks"><img class="social_img" src="http://blog.openpanel.com/wp-content/plugins/social_bookmarks/images/google.png" title="Add to&nbsp;Google Bookmarks" alt="Add to&nbsp;Google Bookmarks" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.netscape.com/submit/?U=http://blog.openpanel.com/2008/03/16/sunday-night-dancing-bear-blogging/&amp;T=Sunday+Night+Dancing+Bear+Blogging" rel="nofollow" title="Add to&nbsp;Netscape"><img class="social_img" src="http://blog.openpanel.com/wp-content/plugins/social_bookmarks/images/netscape.png" title="Add to&nbsp;Netscape" alt="Add to&nbsp;Netscape" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://reddit.com/submit?url=http://blog.openpanel.com/2008/03/16/sunday-night-dancing-bear-blogging/&amp;title=Sunday+Night+Dancing+Bear+Blogging" rel="nofollow" title="Add to&nbsp;reddit"><img class="social_img" src="http://blog.openpanel.com/wp-content/plugins/social_bookmarks/images/reddit.png" title="Add to&nbsp;reddit" alt="Add to&nbsp;reddit" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://slashdot.org/bookmark.pl?url=http://blog.openpanel.com/2008/03/16/sunday-night-dancing-bear-blogging/&amp;title=Sunday+Night+Dancing+Bear+Blogging" rel="nofollow" title="Add to&nbsp;Slashdot"><img class="social_img" src="http://blog.openpanel.com/wp-content/plugins/social_bookmarks/images/slashdot.png" title="Add to&nbsp;Slashdot" alt="Add to&nbsp;Slashdot" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.stumbleupon.com/submit.php?url=http://blog.openpanel.com/2008/03/16/sunday-night-dancing-bear-blogging/&amp;title=Sunday+Night+Dancing+Bear+Blogging" rel="nofollow" title="Add to&nbsp;Stumble Upon"><img class="social_img" src="http://blog.openpanel.com/wp-content/plugins/social_bookmarks/images/stumbleupon.png" title="Add to&nbsp;Stumble Upon" alt="Add to&nbsp;Stumble Upon" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.spurl.net/spurl.php?url=http://blog.openpanel.com/2008/03/16/sunday-night-dancing-bear-blogging/&amp;title=Sunday+Night+Dancing+Bear+Blogging" rel="nofollow" title="Add to&nbsp;Spurl"><img class="social_img" src="http://blog.openpanel.com/wp-content/plugins/social_bookmarks/images/spurl.png" title="Add to&nbsp;Spurl" alt="Add to&nbsp;Spurl" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.technorati.com/faves?add=http://blog.openpanel.com/2008/03/16/sunday-night-dancing-bear-blogging/" rel="nofollow" title="Add to&nbsp;Technorati"><img class="social_img" src="http://blog.openpanel.com/wp-content/plugins/social_bookmarks/images/technorati.png" title="Add to&nbsp;Technorati" alt="Add to&nbsp;Technorati" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http://blog.openpanel.com/2008/03/16/sunday-night-dancing-bear-blogging/&amp;t=Sunday+Night+Dancing+Bear+Blogging" rel="nofollow" title="Add to&nbsp;Yahoo My Web"><img class="social_img" src="http://blog.openpanel.com/wp-content/plugins/social_bookmarks/images/yahoo.png" title="Add to&nbsp;Yahoo My Web" alt="Add to&nbsp;Yahoo My Web" /></a>
<br />
</div>
</div>
<!-- Social Bookmarks END -->
]]></content:encoded>
			<wfw:commentRss>http://blog.openpanel.com/2008/03/16/sunday-night-dancing-bear-blogging/feed/atom/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Using Protocols in C++</title>
		<link>http://blog.openpanel.com/2008/03/16/using-protocols-in-c/</link>
		<comments>http://blog.openpanel.com/2008/03/16/using-protocols-in-c/#comments</comments>
		<pubDate>Sun, 16 Mar 2008 12:30:10 +0000</pubDate>
		<dc:creator>exel</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.openpanel.com/2008/03/16/using-protocols-in-c/</guid>
		<description><![CDATA[A major source of anger and frustration in C++ style OO is multiple inheritance. It&#8217;s a source of anger and frustration and one most people recognize as a path best avoided. The Objective-C idea of a protocol is a real life-saver in many occasions where you would need to deal with multiple inheritance otherwise. The [...]]]></description>
			<content:encoded><![CDATA[<p>A major source of anger and frustration in C++ style OO is multiple inheritance. It&#8217;s a source of anger and frustration and one most people recognize as a path best avoided. The Objective-C idea of a <i>protocol</i> is a real life-saver in many occasions where you would need to deal with multiple inheritance otherwise. The concept of a protocol is to have a <i>second</i> way of classifying objects, one that completely sidesteps the hierarchical class model and instead just classifies objects by their common functions.</p>
<p>One area where the concept of protocols is quite convenient is iteration. There is usually a wide area of possible classes that could, theoretically, enumerate a list of contained items. Although C++ lacks protocols proper, template iterators are a fine way to access any class that implements a de facto iterator protocol. The only thing missing is an explicit declaration of the implemented protocol.</p>
<p>The Grace iterator&lt;collectionclass,nodeclass&gt; template is a minimized version of the visitor&lt;&gt; template. It requires one function (visitchild) to be defined inside your class that returns a pointer to a child node. Here is what it would look like for a purely synthetic class:</p>
<p><code><br />
class syntheticlist<br />
{<br />
public:<br />
 &nbsp; &nbsp;syntheticlist (void) {}<br />
 &nbsp; &nbsp;~syntheticlist (void) {}<br />
 &nbsp; &nbsp;string *visitchild (int atpos)<br />
 &nbsp; &nbsp;{<br />
 &nbsp; &nbsp; &nbsp; &nbsp;if ((atpos1)) return NULL;<br />
 &nbsp; &nbsp; &nbsp; &nbsp;if (atpos==0) str = &#8220;Hello&#8221;;<br />
 &nbsp; &nbsp; &nbsp; &nbsp;else str = &#8220;world&#8221;;<br />
 &nbsp; &nbsp; &nbsp; &nbsp;return &str;<br />
 &nbsp; &nbsp;}<br />
protected:<br />
 &nbsp; &nbsp;string str;<br />
};<br><br />
int myApp::main (void)<br />
{<br />
 &nbsp; &nbsp;syntheticlist L;<br />
 &nbsp; &nbsp;foreach (n,L) fout.writeln (n);<br />
 &nbsp; &nbsp;return 0;<br />
}<br />
</code><br />
The foreach macro goes through the following steps:</p>
<ol>
<li>It creates an iterator&lt;syntheticlist, string *&gt; pointing to L</li>
<li>It sets up a for loop that starts at visitchild(0) and stops when it returns NULL</li>
<li>It creates a temporary reference variable n linked to the current node.</li>
</ol>
<p>The Grace iterator protocol looks a bit ascetic with only visitchild and the lack of the traditional first() and next() pattern. Part of this is due to the visitor protocol (which iterator is a part of) being about more than just of iteration. If your goal, however, is to make your class iterable with foreach, you can safely assume an argument value 0 to mean &#8216;first&#8217; and any value bigger than 0 to mean &#8216;next&#8217; if that makes more sense in your context. Most collection classes used within Grace use growable arrays, which means they don&#8217;t have to keep any state information in order to be iterable.</p>
]]></content:encoded>
			<wfw:commentRss>http://fifo.nl/exel/510/using-protocols-in-c/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Garbage Collection is Overrated</title>
		<link>http://blog.openpanel.com/2008/03/15/garbage-collection-is-overrated/</link>
		<comments>http://blog.openpanel.com/2008/03/15/garbage-collection-is-overrated/#comments</comments>
		<pubDate>Sat, 15 Mar 2008 10:54:56 +0000</pubDate>
		<dc:creator>exel</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.openpanel.com/2008/03/15/garbage-collection-is-overrated/</guid>
		<description><![CDATA[Next to string and array handling, memory management has always been one of those reasons users of other languages pointed at C++ programmers and laughed. The problem stems from dealing with temporary objects and keeping track of their lifetime. Although remembering to delete objects after you&#8217;re done with them sounds easy on paper, in the [...]]]></description>
			<content:encoded><![CDATA[<p>Next to string and array handling, memory management has always been one of those reasons users of other languages pointed at C++ programmers and laughed. The problem stems from dealing with temporary objects and keeping track of their lifetime. Although remembering to delete objects after you&#8217;re done with them sounds easy on paper, in the real world it&#8217;s tedious and you&#8217;re always just one forgetful early <b>return</b> statement away from a memory leak.</p>
<p>A lot of modern languages offer a friendlier form of memory management for this reason. They keep track of all references to a particular object and regularly take care of objects that are no longer referenced. This garbage collection process has a number of drawbacks that are usually seen as justified, considering the programming problems it solves. And it does solve them, but not all problems it solves need to be problems and, once you take those non-problems off the list, the smell of over-engineering becomes apparent. </p>
<p>What I see as the most interesting memory management problem that garbage collection solves can be illustrated by the following snippet:<br />
<code><br />
Storpel *createStorpel (int modelNumber)<br />
{<br />
 &nbsp; &nbsp;Storpel *res = new Storpel;<br />
 &nbsp; &nbsp;res-&gt;setModel (modelNumber);<br />
 &nbsp; &nbsp;return res;<br />
}<br><br />
int main (void)<br />
{<br />
 &nbsp; &nbsp;Storpel *myStorpel = createStorpel (42);<br />
 &nbsp; &nbsp;myStorpel-&gt;grind (11);<br />
 &nbsp; &nbsp;delete myStorpel;<br />
 &nbsp; &nbsp;return 0;<br />
}<br />
</code><br />
The problem with this pattern is obvious: The receiving function, by calling createStorpel() has taken responsibility for managing the Storpel object. This can get hairy in almost zero time.</p>
<p>In Grace, I prevented this anti-pattern from emerging by sticking to a number of principles:</p>
<ul>
<li>Use of pointers and <b>new</b> for objects is minimalized (pointers are awkward when you want to use overloaded operators anyway, so there&#8217;s exterior motivation).</li>
<li>Data container classes are designed to be mere vessels for a raw data block that can be taken away from one object and &#8216;given&#8217; to another without copying.</li>
<li>When confronted with a pointer during assignment and initialization, data container classes will &#8216;take over&#8217; the other object&#8217;s data and immediately delete it.</li>
<li>Functions that want to return objects actually return pointers to temporary objects. The <b>returnclass (<i>type</i>) <i>name</i> retain</b> macro creates such a temporary object plus a temporary reference to make it easier to access the object.</li>
</ul>
<p>Words are words, code is code. This is what it effectively looks like:<br />
<code><br />
string *getGreeting (void)<br />
{<br />
 &nbsp; &nbsp;returnclass (string) res retain;<br />
 &nbsp; &nbsp;res = "Hello, world.";<br />
 &nbsp; &nbsp;return &res;<br />
}<br><br />
int main (void)<br />
{<br />
 &nbsp; &nbsp;string s = getGreeting();<br />
 &nbsp; &nbsp;fout.writeln (s);<br />
 &nbsp; &nbsp;return 0;<br />
}<br />
</code><br />
Behind the curtains, the <b>returnclass</b> macro creates a temporary string object using a custom allocator. This string object creates a persistent <b>refblock</b> structure to hold the data. Then, inside main(), we assign it to s:<br />
<img src='http://blog.openpanel.com/wp-content/uploads/2008/03/strcpy_stage1.png' alt='assignment' /><br />
The receiving object takes a reference to the underlying refblock:<br />
<img src='http://blog.openpanel.com/wp-content/uploads/2008/03/strcpy_stage2.png' alt='strcpy_stage2.png' /><br />
And then the original object is immediately destroyed:<br />
<img src='http://blog.openpanel.com/wp-content/uploads/2008/03/strcpy_stage3.png' alt='strcpy_stage3.png' /><br />
When main() goes out of scope, the &#8217;s&#8217; string object will be automatically cleaned up and, with it, the refblock. No need for an explicit delete.</p>
<p>As for the other problems that garbage collection solves, most of them have to do with interactions between collections of more complex objects. Mostly, if you find yourself in need of tracking such complex relationships, you may need to look at a way of simplifying your design. If that is not possible, then keeping track of memory references takes no more diligence than what the structure already demands.</p>
]]></content:encoded>
			<wfw:commentRss>http://fifo.nl/exel/511/garbage-collection-is-overrated/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Strings in Grace</title>
		<link>http://blog.openpanel.com/2008/03/14/strings-in-grace/</link>
		<comments>http://blog.openpanel.com/2008/03/14/strings-in-grace/#comments</comments>
		<pubDate>Fri, 14 Mar 2008 20:36:43 +0000</pubDate>
		<dc:creator>exel</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.openpanel.com/2008/03/14/strings-in-grace/</guid>
		<description><![CDATA[The lack of a &#8216;native&#8217; string type is one of the major gripes people have had with C and C++. I&#8217;ve basically grown up on C and I&#8217;ve walked that line. At the same time, when I looked at the string abstractions as they were implemented in class libraries and other languages, I realized that [...]]]></description>
			<content:encoded><![CDATA[<p>The lack of a &#8216;native&#8217; string type is one of the major gripes people have had with C and C++. I&#8217;ve basically grown up on C and I&#8217;ve walked that line. At the same time, when I looked at the string abstractions as they were implemented in class libraries and other languages, I realized that some things that were easy to do if you treated strings as arrays of characters in the way C did, were harder to accomplish if you treated them as types. To wit:<br />
<code><br />
const char *hwld = "Hello, world.";<br><br />
/* Insanely quick copy of a substring */<br />
const char *wld = hwld + 7;<br />
</code></p>
<p>The C approach &mdash; having this mutable array as a working area &mdash; makes it relatively easy to hack and split strings into smaller parts and work with them as first class strings that can be used as arguments for other functions. All without ever copying a byte to a new object.</p>
<p>The Grace string class has grown a lot of nice features that make it easier to forget the feeling of loss that accompanies the sudden inability to cut up strings by spraypainting them with NUL bytes. With methods like <b>string::left</b>, <b>string::mid</b>, <b>string::cutat</b> and the <b>strutil::split</b> family of functions, a lot of splicing joy can be had for all.</p>
<p>The storage behind a string object uses a reference count and copy-on-write to deal with assignments and mutations. Assignments can be a real pain in the context of strings, which is why a number of languages recognize the concept of immutable strings. These languages make you go on string building expeditions to dynamically compose new strings, but they do this to allow for assignment without copying; if both the sending and the receiving object guarantee not to alter the data, it is safe to let them point to the same memory location. Copy-on-write satisfies this same &#8216;zero copy&#8217; approach to assignment, but allows strings to remain mutable. The cost of copying is at best prevented, at worst delayed until the moment of mutation.</p>
<p>With all the hacking, cutting and copying kung-fu under its belt, Grace strings made me stop missing the C array approach, except for one thing: Each time you split up a string <strike>god killed a kitten</strike> data got copied. This week, the string class got a major overhaul: Next to the pointer to the copy-on-write back-end memory that each individual string carries, it now keeps track of an offset. So now, when you do this:<br />
<code><br />
string s1 = "Hello, world."<br />
string s2 = s1.cutat (' ');<br />
</code></p>
<p>what actually happens is this:</p>
<p><img src="http://grace.openpanel.com/grace_strsplit.png"></p>
<p>That means even less copying. Some unexpected things now trigger a copy-on-write, though. The most sad one is conversion to a C-compatible string. Since C expects a NUL character, a sub-string will have to mutate, triggering a copy-on-write.</p>
]]></content:encoded>
			<wfw:commentRss>http://fifo.nl/exel/512/strings-in-grace/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Programming and Exploration</title>
		<link>http://blog.openpanel.com/2008/03/06/programming-and-exploration/</link>
		<comments>http://blog.openpanel.com/2008/03/06/programming-and-exploration/#comments</comments>
		<pubDate>Thu, 06 Mar 2008 15:03:46 +0000</pubDate>
		<dc:creator>exel</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.openpanel.com/2008/03/06/programming-and-exploration/</guid>
		<description><![CDATA[Although it was never a conscious design goal, during its evolution a wholesome part of Grace proved to actively make C++ look more like Python. I wasn&#8217;t even really aware of Python until about two years into the project, so this fact both surprised and inspired me. It surprised me, because I didn&#8217;t expect similar [...]]]></description>
			<content:encoded><![CDATA[<p>Although it was never a conscious design goal, during its evolution a wholesome part of Grace proved to actively make C++ look more like Python. I wasn&#8217;t even really aware of Python until about two years into the project, so this fact both surprised and inspired me. It surprised me, because I didn&#8217;t expect similar efforts towards code legibility to spring out of the corner of a system scripting language &mdash; obviously a wrong way to look at things, but after seeing Tcl, Perl and PHP at work my cynical heart had grown weary. It is inspiring to know that there are people out there with similar ideas and vision and that their ideas are capable of growing a following. Ever since, I&#8217;ve been using Python as a reflective surface when evaluating potential new constructs in Grace. </p>
<p>I&#8217;ve never been envious of Python. I&#8217;m rational enough to just forget about it all and join the dark side if that&#8217;s ever going to happen. I was, however, particularily fond of the Python command line interpreter. Of course this idea has been around since the invention of, well, the shell, but one thing it accomplishes is that it allows you to quickly try out the effects of different commands and constructs without opening a text editor. This is a place where compiled languages tend to suck.</p>
<p>This week, Peter lamented the absence of this feature as well. He mumbled something about &#8216;just feed it through gcc&#8217; and probably expected that to be the end of it. So last night I built a Grace shell. It uses some awfully tacky hacks to do its business, but I didn&#8217;t even have enough time to accumulate my distaste for that once I started noticing how completely addictive working with it is. It takes away a lot of anxiety that would normally have you running for the documentation by letting you just <i>explore</i> what happens when you call an API function.</p>
<p>Here&#8217;s the shell in action, working out the value class:<br />
<code><br />
&gt;&gt;&gt; <b>value p</b><br />
&gt;&gt;&gt; <b>p = $(&#8221;name&#8221;,&#8221;John Doe&#8221;)-&gt;$(&#8221;mail&#8221;,&#8221;j@doe.org&#8221;)</b><br />
&gt;&gt;&gt; <b>p[&#8221;url&#8221;] = &#8220;http://doe.org/~j/&#8221;</b><br />
&gt;&gt;&gt; <b>print (p.toxml())</b><br />
&lt;?xml version=&#8221;1.0&#8243; encoding=&#8221;UTF-8&#8243;?&gt;<br />
&lt;dict id=&#8221;person&#8221;&gt;<br />
&nbsp; &nbsp; &lt;string id=&#8221;name&#8221;&gt;John Doe&lt;/string&gt;<br />
&nbsp; &nbsp; &lt;string id=&#8221;mail&#8221;&gt;j@doe.org&lt;/string&gt;<br />
&nbsp; &nbsp; &lt;string id=&#8221;url&#8221;&gt;http://doe.org/~j/&lt;/string&gt;<br />
&lt;/dict&gt;<br />
&nbsp;<br />
&gt;&gt;&gt; <b>foreach (f,p){</b><br />
 &nbsp; &gt; <b>&nbsp; print (&#8221;%10s : %s&#8221; %format (f.id(),f))</b><br />
 &nbsp; &gt; <b>}</b><br />
name &nbsp; &nbsp; &nbsp; : John Doe<br />
mail &nbsp; &nbsp; &nbsp; : j@doe.org<br />
url &nbsp; &nbsp; &nbsp; &nbsp;: http://doe.org/~j/<br />
</code></p>
<p>The shell already exposed a number of bugs that would&#8217;ve taken much longer to get themselves caught otherwise. People with access to our mercurial repo can find gracesh in /hg/.</p>
]]></content:encoded>
			<wfw:commentRss>http://fifo.nl/exel/513/programming-and-exploration/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Saturday Night Dancing Bear Blogging</title>
		<link>http://blog.openpanel.com/2008/02/17/saturday-night-dancing-bear-blogging/</link>
		<comments>http://blog.openpanel.com/2008/02/17/saturday-night-dancing-bear-blogging/#comments</comments>
		<pubDate>Sat, 16 Feb 2008 23:22:53 +0000</pubDate>
		<dc:creator>exel</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.openpanel.com/2008/02/17/saturday-night-dancing-bear-blogging/</guid>
		<description><![CDATA[

	
	

]]></description>
			<content:encoded><![CDATA[<p><code>

	
	
</code></p>
]]></content:encoded>
			<wfw:commentRss>http://fifo.nl/exel/514/saturday-night-dancing-bear-blogging/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>About that compact web server</title>
		<link>http://blog.openpanel.com/2008/02/17/about-that-compact-web-server/</link>
		<comments>http://blog.openpanel.com/2008/02/17/about-that-compact-web-server/#comments</comments>
		<pubDate>Sat, 16 Feb 2008 22:57:55 +0000</pubDate>
		<dc:creator>exel</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.openpanel.com/2008/02/17/about-that-compact-web-server/</guid>
		<description><![CDATA[It&#8217;s funny to notice how, subconsciously, the way things work in Grace turn out to look eerily similar to how they work in Python. I was reminded of that fact again when I read this article, illustrating a 15 line web server implementation in Python. This is how it would look in Grace:

#include &#60;grace/daemon.h&#62;
#include &#60;grace/httpd.h&#62;

class [...]]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s funny to notice how, subconsciously, the way things work in Grace turn out to look eerily similar to how they work in Python. I was reminded of that fact again when I read <a href="http://www.goldb.org/goldblog/2008/02/12/Python15LineHTTPServerWebInterfaceForYourTools.aspx">this article</a>, illustrating a 15 line web server implementation in Python. This is how it would look in Grace:</p>
<p><code><br />
#include &lt;grace/daemon.h&gt;<br />
#include &lt;grace/httpd.h&gt;<br />
<br><br />
class myApp : public daemon<br />
{<br />
public:<br />
 &nbsp; &nbsp;myApp (void) : daemon (&#8221;myapp&#8221;) {}<br />
 &nbsp; &nbsp;~myApp (void) {}<br />
 &nbsp; &nbsp;int main (void);<br />
};<br />
<br><br />
class helloPage : public serverpage<br />
{<br />
public:<br />
 &nbsp; &nbsp;helloPage (httpd &#38;p) : serverpage (p, &#8220;/foo&#8221;) {}<br />
 &nbsp; &nbsp;~helloPage (void) {}<br />
 &nbsp; &nbsp;<br />
 &nbsp; &nbsp;int execute (value &#38;env, value &#38;argv,<br />
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; string &#38;out, value &#38;outhdr)<br />
 &nbsp; &nbsp;{<br />
 &nbsp; &nbsp; &nbsp; &nbsp;if (! argv.exists (&#8221;target&#8221;))<br />
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;argv[&#8221;target&#8221;] = &#8220;world&#8221;;<br />
<br><br />
 &nbsp; &nbsp; &nbsp; &nbsp;out = &#8220;Hello, %[target]s\n&#8221; %format (argv);<br />
&nbsp; &nbsp; &nbsp; &nbsp;return 200;<br />
 &nbsp; &nbsp;}<br />
};<br />
<br><br />
$application (myApp);<br />
$version (1.0);<br />
<br><br />
int myApp::main (void)<br />
{<br />
 &nbsp; &nbsp;httpd srv (8180);<br />
 &nbsp; &nbsp;value event;<br />
 &nbsp; &nbsp;new helloPage (srv);<br />
 &nbsp; &nbsp;daemonize ();<br />
 &nbsp; &nbsp;srv.start ();<br />
 &nbsp; &nbsp;while (event.type() != &#8220;shutdown&#8221;)<br />
 &nbsp; &nbsp; &nbsp; &nbsp;event = waitevent ();<br />
 &nbsp; &nbsp;httpd.shutdown ();<br />
 &nbsp; &nbsp;return 0;<br />
}<br />
</code><br />
Admittedly this is a bit more than 15 lines (even if we don&#8217;t count lines with curly brackets). We do get a little bit more oomph for those lines, though:</p>
<ul>
<li>The application checks a pid-file in /var/run or ${HOME}/var/run.</li>
<li>The application is forked to the background</li>
<li>The application responds sanely to SIGTERM</li>
</ul>
<p>Having an easily extendible web server built into your framework turns out to be pretty convenient: It&#8217;s a very quick way to deploy a remotely accessible service.</p>
]]></content:encoded>
			<wfw:commentRss>http://fifo.nl/exel/515/about-that-compact-web-server/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Inline Tree Declarations in Grace</title>
		<link>http://blog.openpanel.com/2008/02/12/inline-tree-declarations-in-grace/</link>
		<comments>http://blog.openpanel.com/2008/02/12/inline-tree-declarations-in-grace/#comments</comments>
		<pubDate>Mon, 11 Feb 2008 22:51:05 +0000</pubDate>
		<dc:creator>exel</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.openpanel.com/2008/02/12/inline-tree-declarations-in-grace/</guid>
		<description><![CDATA[The Grace value class is a pretty useful container for tree-data. It walks and quacks like an associative array that, combined with the foreach macro makes it easy to inspect and manipulate tree structures using compact code like this:

void printListOfPersons (const value &#38;persons)
{
 &#160;foreach (p, persons)
 &#160;{
 &#160; &#160;fout.writeln ("%s &#60;%s&#62;" %format (p["name"], p["email"]));
 &#160;}
}

Getting [...]]]></description>
			<content:encoded><![CDATA[<p>The Grace <i>value</i> class is a pretty useful container for tree-data. It walks and quacks like an associative array that, combined with the <b>foreach</b> macro makes it easy to inspect and manipulate tree structures using compact code like this:</p>
<p><code><br />
void printListOfPersons (const value &amp;persons)<br />
{<br />
 &nbsp;foreach (p, persons)<br />
 &nbsp;{<br />
 &nbsp; &nbsp;fout.writeln ("%s &lt;%s&gt;" %format (p["name"], p["email"]));<br />
 &nbsp;}<br />
}<br />
</code><br />
Getting data <i>into</i> such a structure posed to be a bit of a challenge, though. You ended up with huge blocks of code with lots of repetitions:<br />
<code><br />
persons["john"]["name"] = "John Smith";<br />
persons["john"]["email"] = "jsmith@example.net";<br />
persons["steve"]["name"] = "Steve McSmith";<br />
persons["steve"]["email"] = "steve@example.net";<br />
</code><br />
The repetitive nature wasn&#8217;t only straining on the hands, the build-up here also involved looking up the node for &#8216;john&#8217; and &#8217;steve&#8217; <i>twice</i>. Using the negative array index to refer to the last node was a nice timesaver in this respect:<br />
<code><br />
persons["john"]["name"] = "John Smith";<br />
persons[-1]["email"] = "jsmith@example.net";<br />
</code><br />
The problem with this approach, apart from it still being pretty repetitive, is that it starts you thinking that the idiom <b>persons[-1]</b> means &#8220;the node I created in the line before&#8221;, but there are lots of situations where you cannot really know this. Take this example:<br />
<code><br />
persons = listPersons();<br />
persons["john"]["favoriteColor"] = "blue";<br />
persons[-1]["favoriteSwallowType"] = "African";<br />
</code><br />
All it takes for this code to break is the inclusion of the key &#8216;john&#8217; in the result set of <b>listPersons()</b> at a position that is not the last one in the array. This may sound like a mistake that is easy to avoid, but in an application that sees a bit of growth, the assumptions you make in this respect may stop being valid in the future, and you&#8217;ll have forgotten all about them.</p>
<p>
The solution to this problem came to me as an inspiration from jQuery&#8217;s clever discovery of this one symbol in the C-like namespace that managed to remain completely overlooked by most library builders: The dollar sign. On the global level, two variations of the function <b>$(&#8230;)</b> are defined that create a retainable pointer to a <i>value</i> object:</p>
<ul>
<li><b>$(&#8221;value&#8221;)</b> creates an array and adds a node with &#8220;value&#8221; as its value data.</li>
<li><b>$(&#8221;key&#8221;,&#8221;value&#8221;)</b> creates a dictionary and adds a node with the key &#8220;key&#8221; and &#8220;value&#8221; as its value data.</li>
</ul>
<p>These functions create a pointer to a value object, so the library also defines <b>value::$(&#8230;)</b>. Now you can chain nodes together, like this:<br />
<code><br />
value v = $("john",<br />
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;$("name", "John Doe") -&gt;<br />
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;$("email", "jdoe@example.net") -&gt;<br />
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;$("favoriteColors",<br />
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;$("Titanium White") -&gt;<br />
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;$("Cadmium Yellow")<br />
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ) -&gt;<br />
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;$("favoriteNumber", 42)<br />
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ) -&gt;<br />
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;$("steve",<br />
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;$("name", "Steve Jibs") -&gt;<br />
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;$("email", "sjibs@example.net") -&gt;<br />
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;$("favoriteColors", $("Black")) -&gt;<br />
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;$("favoriteNumber", 1)<br />
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; );<br />
</code><br />
The result is pretty compact on a scale from 1 to JSON. There are some extra functions that will come of use:</p>
<ul>
<li><b>$attr(key,value)</b> Sets an attribute.</li>
<li><b>$type(type)</b> Sets the value&#8217;s type().</li>
<li><b>$val(otherval)</b> Sets the value&#8217;s <i>data only</i> to that of otherval.</li>
<li><b>$merge(otherval)</b> Merges the child nodes and attributes of another value.</li>
</ul>
<p>After these functions were added to grace, I started using them religiously. Inline declarations are a powerful way to keep your code readable. Thanks, jQuery.</p>
]]></content:encoded>
			<wfw:commentRss>http://fifo.nl/exel/516/inline-tree-declarations-in-grace/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Seeming Paradox of the Popularity of XML</title>
		<link>http://blog.openpanel.com/2008/02/10/the-seeming-paradox-of-the-popularity-of-xml/</link>
		<comments>http://blog.openpanel.com/2008/02/10/the-seeming-paradox-of-the-popularity-of-xml/#comments</comments>
		<pubDate>Sun, 10 Feb 2008 11:55:05 +0000</pubDate>
		<dc:creator>exel</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.openpanel.com/2008/02/10/the-seeming-paradox-of-the-popularity-of-xml/</guid>
		<description><![CDATA[The growth of XML as a data exchange standard is often seen as a positive development in terms of the chaos it replaced. The relationship the world has with XML, however, is not built on pure love. It&#8217;s interesting to know a bit about the problems people have with the standard, especially if we can [...]]]></description>
			<content:encoded><![CDATA[The growth of XML as a data exchange standard is often seen as a positive development in terms of the chaos it replaced. The relationship the world has with XML, however, is not built on pure love. It&#8217;s interesting to know a bit about the problems people have with the standard, especially if we can [...]]]></content:encoded>
			<wfw:commentRss>http://fifo.nl/exel/517/the-seeming-paradox-of-the-popularity-of-xml/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Retire a Human</title>
		<link>http://blog.madscience.nl/Site/Podcast/1ddaddf3-450d-4d12-bb46-82386b5e1af5/</link>
		<comments>http://blog.madscience.nl/Site/Podcast/1ddaddf3-450d-4d12-bb46-82386b5e1af5/#comments</comments>
		<pubDate>Mon, 28 May 2007 08:39:10 +0000</pubDate>
		<dc:creator>exel</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.madscience.nl/Site/Podcast/1ddaddf3-450d-4d12-bb46-82386b5e1af5/</guid>
		<description><![CDATA[Greenhouse (Electric Sheep) - 00:03:26]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.madscience.nl/Site/Podcast/1ddaddf3-450d-4d12-bb46-82386b5e1af5/greenhouse-retire_a_human.mp3"><img src="http://blog.madscience.nl/Site/Podcast/1ddaddf3-450d-4d12-bb46-82386b5e1af5/icon.jpg" style="float:left; padding-right:10px; padding-bottom:10px; width:128px; height:128px;"/></a>Greenhouse (Electric Sheep) - 00:03:26</p>]]></content:encoded>
			<wfw:commentRss>http://fifo.nl/exel/499/retire-a-human/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://blog.madscience.nl/Site/Podcast/1ddaddf3-450d-4d12-bb46-82386b5e1af5/greenhouse-retire_a_human.mp3" length="7321216" type="audio/mpeg" />
		</item>
		<item>
		<title>Mutton</title>
		<link>http://blog.madscience.nl/Site/Podcast/c1881fe3-f676-41bf-acb1-767ddb25d2ea/</link>
		<comments>http://blog.madscience.nl/Site/Podcast/c1881fe3-f676-41bf-acb1-767ddb25d2ea/#comments</comments>
		<pubDate>Mon, 21 May 2007 10:56:18 +0000</pubDate>
		<dc:creator>exel</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.madscience.nl/Site/Podcast/c1881fe3-f676-41bf-acb1-767ddb25d2ea/</guid>
		<description><![CDATA[<a href="http://blog.madscience.nl/Site/Podcast/c1881fe3-f676-41bf-acb1-767ddb25d2ea/greenhouse-mutton.mp3"><img src="http://blog.madscience.nl/Site/Podcast/c1881fe3-f676-41bf-acb1-767ddb25d2ea/icon.jpg" style="float:left; padding-right:10px; padding-bottom:10px; width:128px; height:128px;"/></a>Greenhouse (Electric Sheep) - 00:03:28]]></description>
			<content:encoded><![CDATA[<a href="http://blog.madscience.nl/Site/Podcast/c1881fe3-f676-41bf-acb1-767ddb25d2ea/greenhouse-mutton.mp3"><img src="http://blog.madscience.nl/Site/Podcast/c1881fe3-f676-41bf-acb1-767ddb25d2ea/icon.jpg" /></a>Greenhouse (Electric Sheep) - 00:03:28]]></content:encoded>
			<wfw:commentRss>http://fifo.nl/exel/500/mutton/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://blog.madscience.nl/Site/Podcast/c1881fe3-f676-41bf-acb1-767ddb25d2ea/greenhouse-mutton.mp3" length="7599538" type="audio/mpeg" />
		</item>
		<item>
		<title>Nostalgic Hangover (Remaster)</title>
		<link>http://blog.madscience.nl/Site/Podcast/582d2ad9-8690-4f28-ad3f-7c0ad4161085/</link>
		<comments>http://blog.madscience.nl/Site/Podcast/582d2ad9-8690-4f28-ad3f-7c0ad4161085/#comments</comments>
		<pubDate>Wed, 16 May 2007 12:01:29 +0000</pubDate>
		<dc:creator>exel</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.madscience.nl/Site/Podcast/582d2ad9-8690-4f28-ad3f-7c0ad4161085/</guid>
		<description><![CDATA[<a href="http://blog.madscience.nl/Site/Podcast/582d2ad9-8690-4f28-ad3f-7c0ad4161085/greenhouse-nostalgic_hangover_(remaster).mp3"><img src="http://blog.madscience.nl/Site/Podcast/582d2ad9-8690-4f28-ad3f-7c0ad4161085/icon.jpg" style="float:left; padding-right:10px; padding-bottom:10px; width:128px; height:128px;"/></a>Greenhouse (Conus) - 00:07:31]]></description>
			<content:encoded><![CDATA[<a href="http://blog.madscience.nl/Site/Podcast/582d2ad9-8690-4f28-ad3f-7c0ad4161085/greenhouse-nostalgic_hangover_(remaster).mp3"><img src="http://blog.madscience.nl/Site/Podcast/582d2ad9-8690-4f28-ad3f-7c0ad4161085/icon.jpg" /></a>Greenhouse (Conus) - 00:07:31]]></content:encoded>
			<wfw:commentRss>http://fifo.nl/exel/501/nostalgic-hangover-remaster/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://blog.madscience.nl/Site/Podcast/582d2ad9-8690-4f28-ad3f-7c0ad4161085/greenhouse-nostalgic_hangover_(remaster).mp3" length="16129147" type="audio/mpeg" />
		</item>
		<item>
		<title>Flock</title>
		<link>http://blog.madscience.nl/Site/Podcast/752e4540-0e87-4bd7-8a20-8ba7826ce2ff/</link>
		<comments>http://blog.madscience.nl/Site/Podcast/752e4540-0e87-4bd7-8a20-8ba7826ce2ff/#comments</comments>
		<pubDate>Mon, 14 May 2007 07:21:30 +0000</pubDate>
		<dc:creator>exel</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.madscience.nl/Site/Podcast/752e4540-0e87-4bd7-8a20-8ba7826ce2ff/</guid>
		<description><![CDATA[<a href="http://blog.madscience.nl/Site/Podcast/752e4540-0e87-4bd7-8a20-8ba7826ce2ff/greenhouse-flock.mp3"><img src="http://blog.madscience.nl/Site/Podcast/752e4540-0e87-4bd7-8a20-8ba7826ce2ff/icon.jpg" style="float:left; padding-right:10px; padding-bottom:10px; width:128px; height:128px;"/></a>Greenhouse (Electric Sheep) - 00:03:00]]></description>
			<content:encoded><![CDATA[<a href="http://blog.madscience.nl/Site/Podcast/752e4540-0e87-4bd7-8a20-8ba7826ce2ff/greenhouse-flock.mp3"><img src="http://blog.madscience.nl/Site/Podcast/752e4540-0e87-4bd7-8a20-8ba7826ce2ff/icon.jpg" /></a>Greenhouse (Electric Sheep) - 00:03:00]]></content:encoded>
			<wfw:commentRss>http://fifo.nl/exel/502/flock/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://blog.madscience.nl/Site/Podcast/752e4540-0e87-4bd7-8a20-8ba7826ce2ff/greenhouse-flock.mp3" length="6478502" type="audio/mpeg" />
		</item>
		<item>
		<title>A Sense of Being</title>
		<link>http://blog.madscience.nl/Site/Podcast/1a3452aa-58c1-4157-8955-d101a7d3291c/</link>
		<comments>http://blog.madscience.nl/Site/Podcast/1a3452aa-58c1-4157-8955-d101a7d3291c/#comments</comments>
		<pubDate>Wed, 14 Mar 2007 14:49:45 +0000</pubDate>
		<dc:creator>exel</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.madscience.nl/Site/Podcast/1a3452aa-58c1-4157-8955-d101a7d3291c/</guid>
		<description><![CDATA[<a href="http://blog.madscience.nl/Site/Podcast/1a3452aa-58c1-4157-8955-d101a7d3291c/pim_van_riezen-a_sense_of_being.mp3"><img src="http://blog.madscience.nl/Site/Podcast/1a3452aa-58c1-4157-8955-d101a7d3291c/icon.jpg" style="float:left; padding-right:10px; padding-bottom:10px; width:128px; height:128px;"/></a>Pim van Riezen (MadPodcast) - 00:08:07]]></description>
			<content:encoded><![CDATA[<a href="http://blog.madscience.nl/Site/Podcast/1a3452aa-58c1-4157-8955-d101a7d3291c/pim_van_riezen-a_sense_of_being.mp3"><img src="http://blog.madscience.nl/Site/Podcast/1a3452aa-58c1-4157-8955-d101a7d3291c/icon.jpg" /></a>Pim van Riezen (MadPodcast) - 00:08:07]]></content:encoded>
			<wfw:commentRss>http://fifo.nl/exel/503/a-sense-of-being/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://blog.madscience.nl/Site/Podcast/1a3452aa-58c1-4157-8955-d101a7d3291c/pim_van_riezen-a_sense_of_being.mp3" length="15989419" type="audio/mpeg" />
		</item>
		<item>
		<title>A Sense of Longing</title>
		<link>http://blog.madscience.nl/Site/Podcast/8b390bcf-b0a6-4a75-b6a6-85a13d754c82/</link>
		<comments>http://blog.madscience.nl/Site/Podcast/8b390bcf-b0a6-4a75-b6a6-85a13d754c82/#comments</comments>
		<pubDate>Tue, 13 Mar 2007 08:52:09 +0000</pubDate>
		<dc:creator>exel</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.madscience.nl/Site/Podcast/8b390bcf-b0a6-4a75-b6a6-85a13d754c82/</guid>
		<description><![CDATA[<a href="http://blog.madscience.nl/Site/Podcast/8b390bcf-b0a6-4a75-b6a6-85a13d754c82/pim_van_riezen-a_sense_of_longing.mp3"><img src="http://blog.madscience.nl/Site/Podcast/8b390bcf-b0a6-4a75-b6a6-85a13d754c82/icon.jpg" style="float:left; padding-right:10px; padding-bottom:10px; width:128px; height:128px;"/></a>Pim van Riezen (MadPodcast) - 00:08:38]]></description>
			<content:encoded><![CDATA[<a href="http://blog.madscience.nl/Site/Podcast/8b390bcf-b0a6-4a75-b6a6-85a13d754c82/pim_van_riezen-a_sense_of_longing.mp3"><img src="http://blog.madscience.nl/Site/Podcast/8b390bcf-b0a6-4a75-b6a6-85a13d754c82/icon.jpg" /></a>Pim van Riezen (MadPodcast) - 00:08:38]]></content:encoded>
			<wfw:commentRss>http://fifo.nl/exel/504/a-sense-of-longing/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://blog.madscience.nl/Site/Podcast/8b390bcf-b0a6-4a75-b6a6-85a13d754c82/pim_van_riezen-a_sense_of_longing.mp3" length="" type="audio/mpeg" />
		</item>
		<item>
		<title>Song for C</title>
		<link>http://blog.madscience.nl/Site/Podcast/a0110e58-7b94-4e35-bccf-0605707adb3a/</link>
		<comments>http://blog.madscience.nl/Site/Podcast/a0110e58-7b94-4e35-bccf-0605707adb3a/#comments</comments>
		<pubDate>Mon, 12 Mar 2007 08:00:00 +0000</pubDate>
		<dc:creator>exel</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.madscience.nl/Site/Podcast/a0110e58-7b94-4e35-bccf-0605707adb3a/</guid>
		<description><![CDATA[<a href="http://blog.madscience.nl/Site/Podcast/a0110e58-7b94-4e35-bccf-0605707adb3a/pim_van_riezen-a_sense_of_longing.mp3"><img src="http://blog.madscience.nl/Site/Podcast/a0110e58-7b94-4e35-bccf-0605707adb3a/icon.jpg" style="float:left; padding-right:10px; padding-bottom:10px; width:128px; height:128px;"/></a>Pim van Riezen (MadPodcast) - 00:03:04]]></description>
			<content:encoded><![CDATA[<a href="http://blog.madscience.nl/Site/Podcast/a0110e58-7b94-4e35-bccf-0605707adb3a/pim_van_riezen-a_sense_of_longing.mp3"><img src="http://blog.madscience.nl/Site/Podcast/a0110e58-7b94-4e35-bccf-0605707adb3a/icon.jpg" /></a>Pim van Riezen (MadPodcast) - 00:03:04]]></content:encoded>
			<wfw:commentRss>http://fifo.nl/exel/505/song-for-c/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://blog.madscience.nl/Site/Podcast/a0110e58-7b94-4e35-bccf-0605707adb3a/pim_van_riezen-a_sense_of_longing.mp3" length="12344908" type="audio/mpeg" />
		</item>
		<item>
		<title>Never Too Late</title>
		<link>http://blog.madscience.nl/Site/Podcast/b9abc441-cd95-49e4-bb7e-e2185f610141/</link>
		<comments>http://blog.madscience.nl/Site/Podcast/b9abc441-cd95-49e4-bb7e-e2185f610141/#comments</comments>
		<pubDate>Sun, 11 Mar 2007 16:50:16 +0000</pubDate>
		<dc:creator>exel</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.madscience.nl/Site/Podcast/b9abc441-cd95-49e4-bb7e-e2185f610141/</guid>
		<description><![CDATA[<a href="http://blog.madscience.nl/Site/Podcast/b9abc441-cd95-49e4-bb7e-e2185f610141/pim_van_riezen-to_the_moon.mp3"><img src="http://blog.madscience.nl/Site/Podcast/b9abc441-cd95-49e4-bb7e-e2185f610141/icon.jpg"></a>Pim van Riezen (MadPodcast) - 00:05:18]]></description>
			<content:encoded><![CDATA[<a href="http://blog.madscience.nl/Site/Podcast/b9abc441-cd95-49e4-bb7e-e2185f610141/pim_van_riezen-to_the_moon.mp3"><img src="http://blog.madscience.nl/Site/Podcast/b9abc441-cd95-49e4-bb7e-e2185f610141/icon.jpg" style="float:left; padding-right:10px; padding-bottom:10px; width:128px; height:128px;"/></a>Pim van Riezen (MadPodcast) - 00:05:18]]></content:encoded>
			<wfw:commentRss>http://fifo.nl/exel/2771/never-too-late-2/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://blog.madscience.nl/Site/Podcast/b9abc441-cd95-49e4-bb7e-e2185f610141/pim_van_riezen-to_the_moon.mp3" length="" type="audio/mpeg" />
		</item>
		<item>
		<title>Alone With Your Thoughts</title>
		<link>http://blog.madscience.nl/Site/Podcast/549989a5-70c7-412f-a194-aadd883a7cbd/</link>
		<comments>http://blog.madscience.nl/Site/Podcast/549989a5-70c7-412f-a194-aadd883a7cbd/#comments</comments>
		<pubDate>Sun, 11 Mar 2007 11:00:00 +0000</pubDate>
		<dc:creator>exel</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.madscience.nl/Site/Podcast/549989a5-70c7-412f-a194-aadd883a7cbd/</guid>
		<description><![CDATA[<a href="http://blog.madscience.nl/Site/Podcast/549989a5-70c7-412f-a194-aadd883a7cbd/pim_van_riezen-a_sense_of_longing.mp3"><img src="http://blog.madscience.nl/Site/Podcast/549989a5-70c7-412f-a194-aadd883a7cbd/icon.jpg" style="float:left; padding-right:10px; padding-bottom:10px; width:128px; height:128px;"/></a>Pim van Riezen (MadPodcast) - 00:06:14]]></description>
			<content:encoded><![CDATA[<a href="http://blog.madscience.nl/Site/Podcast/549989a5-70c7-412f-a194-aadd883a7cbd/pim_van_riezen-a_sense_of_longing.mp3"><img src="http://blog.madscience.nl/Site/Podcast/549989a5-70c7-412f-a194-aadd883a7cbd/icon.jpg" /></a>Pim van Riezen (MadPodcast) - 00:06:14]]></content:encoded>
			<wfw:commentRss>http://fifo.nl/exel/506/alone-with-your-thoughts/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://blog.madscience.nl/Site/Podcast/549989a5-70c7-412f-a194-aadd883a7cbd/pim_van_riezen-a_sense_of_longing.mp3" length="12233655" type="audio/mpeg" />
		</item>
		<item>
		<title>Never Too Late</title>
		<link>http://blog.madscience.nl/Site/Podcast/0aa00652-e086-4371-ac0e-55178707d9ea/</link>
		<comments>http://blog.madscience.nl/Site/Podcast/0aa00652-e086-4371-ac0e-55178707d9ea/#comments</comments>
		<pubDate>Fri, 09 Mar 2007 11:00:00 +0000</pubDate>
		<dc:creator>exel</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.madscience.nl/Site/Podcast/0aa00652-e086-4371-ac0e-55178707d9ea/</guid>
		<description><![CDATA[<a href="http://blog.madscience.nl/Site/Podcast/0aa00652-e086-4371-ac0e-55178707d9ea/pim_van_riezen-a_sense_of_longing.mp3"><img src="http://blog.madscience.nl/Site/Podcast/0aa00652-e086-4371-ac0e-55178707d9ea/icon.jpg" style="float:left; padding-right:10px; padding-bottom:10px; width:128px; height:128px;"/></a>Pim van Riezen (MadPodcast) - 00:05:18]]></description>
			<content:encoded><![CDATA[<a href="http://blog.madscience.nl/Site/Podcast/0aa00652-e086-4371-ac0e-55178707d9ea/pim_van_riezen-a_sense_of_longing.mp3"><img src="http://blog.madscience.nl/Site/Podcast/0aa00652-e086-4371-ac0e-55178707d9ea/icon.jpg" /></a>Pim van Riezen (MadPodcast) - 00:05:18]]></content:encoded>
			<wfw:commentRss>http://fifo.nl/exel/507/never-too-late/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://blog.madscience.nl/Site/Podcast/0aa00652-e086-4371-ac0e-55178707d9ea/pim_van_riezen-a_sense_of_longing.mp3" length="12344908" type="audio/mpeg" />
		</item>
		<item>
		<title>New Podcast Entries</title>
		<link>http://blog.madscience.nl/Site/ArsPriori/345B62E7-CF38-42D5-BDE9-F33283A5C5B4.html</link>
		<comments>http://blog.madscience.nl/Site/ArsPriori/345B62E7-CF38-42D5-BDE9-F33283A5C5B4.html#comments</comments>
		<pubDate>Wed, 28 Feb 2007 16:02:49 +0000</pubDate>
		<dc:creator>exel</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.madscience.nl/Site/ArsPriori/345B62E7-CF38-42D5-BDE9-F33283A5C5B4.html</guid>
		<description><![CDATA[I added two tracks to the podcast section of my site, basically some easygoing electronics created with Garageband during a couple of sleepless nights. I'll be adding more tracks to this series until I've got enough material for some form of album.]]></description>
			<content:encoded><![CDATA[<a href="http://blog.madscience.nl/Site/ArsPriori/345B62E7-CF38-42D5-BDE9-F33283A5C5B4_files/electricsheep_1.jpg"><img src="http://blog.madscience.nl/Site/ArsPriori/Images/electricsheep.jpg" style="float:left; padding-right:10px; padding-bottom:10px; width:174px; height:174px;"/></a>I added two tracks to the <a href="http://blog.madscience.nl/Site/Podcast/Podcast.html">podcast</a> section of my site, basically some easygoing electronics created with Garageband during a couple of sleepless nights. I'll be adding more tracks to this series until I've got enough material for some form of album.]]></content:encoded>
			<wfw:commentRss>http://fifo.nl/exel/493/new-podcast-entries/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://blog.madscience.nl/Site/ArsPriori/345B62E7-CF38-42D5-BDE9-F33283A5C5B4_files/electricsheep_1.jpg" length="149152" type="image/jpg" />
		</item>
		<item>
		<title>Progress on Grace</title>
		<link>http://blog.madscience.nl/Site/ArsPriori/51CB62B5-0115-4F73-9061-A1D174928E1D.html</link>
		<comments>http://blog.madscience.nl/Site/ArsPriori/51CB62B5-0115-4F73-9061-A1D174928E1D.html#comments</comments>
		<pubDate>Sat, 02 Sep 2006 00:01:49 +0000</pubDate>
		<dc:creator>exel</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.madscience.nl/Site/ArsPriori/51CB62B5-0115-4F73-9061-A1D174928E1D.html</guid>
		<description><![CDATA[The last release of Grace (0.8.12) was eons ago, but there is lots of activity going on in the 0.8.13 branch, the long wait is mostly due to a rush on features and improvements. We want to stabilize the API enough to work towards version 0.9 and a 1.0 ...]]></description>
			<content:encoded><![CDATA[<a href="http://blog.madscience.nl/Site/ArsPriori/51CB62B5-0115-4F73-9061-A1D174928E1D_files/icekey_1.jpg"><img src="http://blog.madscience.nl/Site/ArsPriori/Images/icekey.jpg" style="float:left; padding-right:10px; padding-bottom:10px; width:174px; height:130px;"/></a>The last release of Grace (0.8.12) was eons ago, but there is lots of activity going on in the 0.8.13 branch, the long wait is mostly due to a rush on features and improvements. We want to stabilize the API enough to work towards version 0.9 and a 1.0 release. If you're interested in how things are ]]></content:encoded>
			<wfw:commentRss>http://fifo.nl/exel/494/progress-on-grace/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://blog.madscience.nl/Site/ArsPriori/51CB62B5-0115-4F73-9061-A1D174928E1D_files/icekey_1.jpg" length="38232" type="image/jpg" />
		</item>
		<item>
		<title>How to Tolerate Any Pop Song</title>
		<link>http://blog.madscience.nl/Site/ArsPriori/847B6B3F-A609-4ADD-82E0-8F851B38F6FE.html</link>
		<comments>http://blog.madscience.nl/Site/ArsPriori/847B6B3F-A609-4ADD-82E0-8F851B38F6FE.html#comments</comments>
		<pubDate>Thu, 31 Aug 2006 23:28:08 +0000</pubDate>
		<dc:creator>exel</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.madscience.nl/Site/ArsPriori/847B6B3F-A609-4ADD-82E0-8F851B38F6FE.html</guid>
		<description><![CDATA[Imagine it being sung by Eric Cartman. Hope that helps.]]></description>
			<content:encoded><![CDATA[<a href="http://blog.madscience.nl/Site/ArsPriori/847B6B3F-A609-4ADD-82E0-8F851B38F6FE_files/1139662681_f_1.jpg"><img src="http://blog.madscience.nl/Site/ArsPriori/Images/1139662681_f.jpg" style="float:left; padding-right:10px; padding-bottom:10px; width:174px; height:131px;"/></a>Imagine it being sung by Eric Cartman. Hope that helps.]]></content:encoded>
			<wfw:commentRss>http://fifo.nl/exel/495/how-to-tolerate-any-pop-song/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://blog.madscience.nl/Site/ArsPriori/847B6B3F-A609-4ADD-82E0-8F851B38F6FE_files/1139662681_f_1.jpg" length="14579" type="image/jpg" />
		</item>
		<item>
		<title>Augh! Don&#8217;t Mess With Monaco!</title>
		<link>http://blog.madscience.nl/Site/ArsPriori/1F96A415-25BF-42D3-8F8A-7F8B7E79C1CB.html</link>
		<comments>http://blog.madscience.nl/Site/ArsPriori/1F96A415-25BF-42D3-8F8A-7F8B7E79C1CB.html#comments</comments>
		<pubDate>Tue, 11 Jul 2006 17:05:53 +0000</pubDate>
		<dc:creator>exel</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.madscience.nl/Site/ArsPriori/1F96A415-25BF-42D3-8F8A-7F8B7E79C1CB.html</guid>
		<description><![CDATA[The Monaco10 font has always been a godsend to programmers and Unix nerds in the Macintosh world. It's one of the better fixed width fonts out there and it's what I use in BBEdit and Terminal.app. Somewhere after the last Mac OS X update, however, Appl...]]></description>
			<content:encoded><![CDATA[<a href="http://blog.madscience.nl/Site/ArsPriori/1F96A415-25BF-42D3-8F8A-7F8B7E79C1CB_files/monacoannoyance.png"><img src="http://blog.madscience.nl/Site/ArsPriori/Images/monacoannoyance.png" style="float:left; padding-right:10px; padding-bottom:10px; width:174px; height:142px;"/></a>The Monaco10 font has always been a godsend to programmers and Unix nerds in the Macintosh world. It's one of the better fixed width fonts out there and it's what I use in BBEdit and Terminal.app. Somewhere after the last Mac OS X update, however, Apple seems to have screwed something up royally in ]]></content:encoded>
			<wfw:commentRss>http://fifo.nl/exel/496/augh-dont-mess-with-monaco/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://blog.madscience.nl/Site/ArsPriori/1F96A415-25BF-42D3-8F8A-7F8B7E79C1CB_files/monacoannoyance.png" length="49463" type="image/png" />
		</item>
		<item>
		<title>Fun With C++ and Macros 2: any case</title>
		<link>http://blog.madscience.nl/Site/ArsPriori/0DCFBEF1-F173-4B50-995B-1EB29C0C2184.html</link>
		<comments>http://blog.madscience.nl/Site/ArsPriori/0DCFBEF1-F173-4B50-995B-1EB29C0C2184.html#comments</comments>
		<pubDate>Fri, 07 Jul 2006 21:18:48 +0000</pubDate>
		<dc:creator>exel</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.madscience.nl/Site/ArsPriori/0DCFBEF1-F173-4B50-995B-1EB29C0C2184.html</guid>
		<description><![CDATA[The lack of a foreach command is not the only thing that has been bothering me in my quest for C++ code that is easy to follow: The inconsistent switch() { case: ... default: } keywords. Although the C++ language allows you to use operator overloading ...]]></description>
			<content:encoded><![CDATA[<a href="http://blog.madscience.nl/Site/ArsPriori/0DCFBEF1-F173-4B50-995B-1EB29C0C2184_files/tacpro2_1.jpg"><img src="http://blog.madscience.nl/Site/ArsPriori/Images/tacpro2.jpg" style="float:left; padding-right:10px; padding-bottom:10px; width:174px; height:169px;"/></a>The lack of a foreach command is not the only thing that has been bothering me in my quest for C++ code that is easy to follow: The inconsistent switch() { case: ... default: } keywords. Although the C++ language allows you to use operator overloading to perform equivalency checks on two objects, th]]></content:encoded>
			<wfw:commentRss>http://fifo.nl/exel/497/fun-with-c-and-macros-2-any-case/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://blog.madscience.nl/Site/ArsPriori/0DCFBEF1-F173-4B50-995B-1EB29C0C2184_files/tacpro2_1.jpg" length="16595" type="image/jpg" />
		</item>
	</channel>
</rss>
