<?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>timburrell.net &#187; Review</title>
	<atom:link href="http://timburrell.net/tag/review/feed/" rel="self" type="application/rss+xml" />
	<link>http://timburrell.net</link>
	<description>All that is Tim Burrell</description>
	<lastBuildDate>Sun, 04 Jul 2010 01:44:20 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Sweet, sweet, creamy, goodness&#8230;</title>
		<link>http://timburrell.net/blog/2010-07-03/sweet-sweet-creamy-goodness/</link>
		<comments>http://timburrell.net/blog/2010-07-03/sweet-sweet-creamy-goodness/#comments</comments>
		<pubDate>Sun, 04 Jul 2010 01:44:20 +0000</pubDate>
		<dc:creator>Tim.</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Rants]]></category>
		<category><![CDATA[Ice Cream]]></category>
		<category><![CDATA[Peanut Butter ice Cream]]></category>
		<category><![CDATA[Review]]></category>
		<category><![CDATA[Seal Clubbing]]></category>

		<guid isPermaLink="false">http://timburrell.net/?p=709</guid>
		<description><![CDATA[<p>A couple weeks ago I departed on a journey&#8230; an entirely new phase of life one might say.  It started with a growing distaste for modern food manufacturing techniques and an expensive premium ice cream habit, and culminated in the arrival of a Cuisinart ICE-50BCC Ice Cream Maker.  I did a lot of [...]</p>

<div class="sociable">
<div class="sociable_tagline">
<strong>Share this article:</strong>
</div>

	<a rel="nofollow" target="_blank" href="mailto:?subject=Sweet%2C%20sweet%2C%20creamy%2C%20goodness...&amp;body=http%3A%2F%2Ftimburrell.net%2Fblog%2F2010-07-03%2Fsweet-sweet-creamy-goodness%2F" title="E-mail this story to a friend!"><img src="http://timburrell.net/wp-content/plugins/sociable/images/email_link.png" title="E-mail this story to a friend!" alt="E-mail this story to a friend!" class="sociable-hovers" /></a>
	<a rel="nofollow" target="_blank" href="http://reddit.com/submit?url=http%3A%2F%2Ftimburrell.net%2Fblog%2F2010-07-03%2Fsweet-sweet-creamy-goodness%2F&amp;title=Sweet%2C%20sweet%2C%20creamy%2C%20goodness..." title="Reddit"><img src="http://timburrell.net/wp-content/plugins/sociable/images/reddit.png" title="Reddit" alt="Reddit" class="sociable-hovers" /></a>
	<a rel="nofollow" target="_blank" href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Ftimburrell.net%2Fblog%2F2010-07-03%2Fsweet-sweet-creamy-goodness%2F&amp;title=Sweet%2C%20sweet%2C%20creamy%2C%20goodness..." title="StumbleUpon"><img src="http://timburrell.net/wp-content/plugins/sociable/images/stumbleupon.png" title="StumbleUpon" alt="StumbleUpon" class="sociable-hovers" /></a>
	<a rel="nofollow" target="_blank" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Ftimburrell.net%2Fblog%2F2010-07-03%2Fsweet-sweet-creamy-goodness%2F&amp;title=Sweet%2C%20sweet%2C%20creamy%2C%20goodness..." title="Digg"><img src="http://timburrell.net/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a>
	<a rel="nofollow" target="_blank" href="http://technorati.com/faves?add=http%3A%2F%2Ftimburrell.net%2Fblog%2F2010-07-03%2Fsweet-sweet-creamy-goodness%2F" title="Technorati"><img src="http://timburrell.net/wp-content/plugins/sociable/images/technorati.png" title="Technorati" alt="Technorati" class="sociable-hovers" /></a>
	<a rel="nofollow" target="_blank" href="http://slashdot.org/bookmark.pl?title=Sweet%2C%20sweet%2C%20creamy%2C%20goodness...&amp;url=http%3A%2F%2Ftimburrell.net%2Fblog%2F2010-07-03%2Fsweet-sweet-creamy-goodness%2F" title="Slashdot"><img src="http://timburrell.net/wp-content/plugins/sociable/images/slashdot.png" title="Slashdot" alt="Slashdot" class="sociable-hovers" /></a>
	<a rel="nofollow" target="_blank" href="http://del.icio.us/post?url=http%3A%2F%2Ftimburrell.net%2Fblog%2F2010-07-03%2Fsweet-sweet-creamy-goodness%2F&amp;title=Sweet%2C%20sweet%2C%20creamy%2C%20goodness..." title="del.icio.us"><img src="http://timburrell.net/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" class="sociable-hovers" /></a>
	<a rel="nofollow" target="_blank" href="http://www.facebook.com/sharer.php?u=http%3A%2F%2Ftimburrell.net%2Fblog%2F2010-07-03%2Fsweet-sweet-creamy-goodness%2F&amp;t=Sweet%2C%20sweet%2C%20creamy%2C%20goodness..." title="Facebook"><img src="http://timburrell.net/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a>
	<a rel="nofollow" target="_blank" href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http%3A%2F%2Ftimburrell.net%2Fblog%2F2010-07-03%2Fsweet-sweet-creamy-goodness%2F&amp;title=Sweet%2C%20sweet%2C%20creamy%2C%20goodness...&amp;source=timburrell.net+All+that+is+Tim+Burrell&amp;summary=A%20couple%20weeks%20ago%20I%20departed%20on%20a%20journey...%20an%20entirely%20new%20phase%20of%20life%20one%20might%20say.%20%20It%20started%20with%20a%20growing%20distaste%20for%20modern%20food%20manufacturing%20techniques%20and%20an%20expensive%20premium%20ice%20cream%20habit%2C%20and%20culminated%20in%20the%20arrival%20of%20a%20Cuisi" title="LinkedIn"><img src="http://timburrell.net/wp-content/plugins/sociable/images/linkedin.png" title="LinkedIn" alt="LinkedIn" class="sociable-hovers" /></a>
	<a rel="nofollow" target="_blank" href="http://twitthis.com/twit?url=http%3A%2F%2Ftimburrell.net%2Fblog%2F2010-07-03%2Fsweet-sweet-creamy-goodness%2F" title="TwitThis"><img src="http://timburrell.net/wp-content/plugins/sociable/images/twitter.png" title="TwitThis" alt="TwitThis" class="sociable-hovers" /></a>
	<a rel="nofollow" target="_blank" href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Ftimburrell.net%2Fblog%2F2010-07-03%2Fsweet-sweet-creamy-goodness%2F&amp;title=Sweet%2C%20sweet%2C%20creamy%2C%20goodness..." title="Google"><img src="http://timburrell.net/wp-content/plugins/sociable/images/googlebookmark.png" title="Google" alt="Google" class="sociable-hovers" /></a>

</div>
<small><em>posted in <a href="http://timburrell.net/topics/blog/">Blog</a> by Tim. <a href="http://timburrell.net/blog/2010-07-03/sweet-sweet-creamy-goodness/#comments">Leave a Comment</a><br />&copy;2010 <a href="http://timburrell.net">timburrell.net</a>. All Rights Reserved.</em></small>]]></description>
			<content:encoded><![CDATA[<p>A couple weeks ago I departed on a journey&#8230; an entirely new phase of life one might say.  It started with a growing distaste for modern food manufacturing techniques and an expensive premium ice cream habit, and culminated in the arrival of a <a href="http://www.cuisinart.ca/cuisinart_product.php?item_id=144&#038;product_id=128&#038;cat_id=27">Cuisinart ICE-50BCC Ice Cream Maker</a>.  I did a lot of research before purchasing it, and despite being considered a &#8220;budget&#8221; ice cream maker, it gets great ratings from ice cream people (a group which is, perhaps, even more zealous than coffee people, or Apple people).</p>
<p>So here&#8217;s my quick review: it&#8217;s about as quiet as a baby seal being clubbed to death.  No joke, it makes a loud screaming noise when the churning gets tough.  Eerie.  It takes up a lot of counter space, and it&#8217;s not the most aesthetically pleasing device, nor is it the most well made.  The freezing unit looks pretty solid, but the motor arm, and mixing paddle are made from plastic.  That said the only other device I&#8217;d consider purchasing, the Lello Musso Lussino Ice Cream Maker 4080, costs significantly more than the Cuisinart.  When this one burns out I&#8217;ll probably replace it with the Lello though.</p>
<p>Having said all that, I would, without hesitation, recommend the 50BCC to anyone.  There&#8217;s a markedly clear division in my life: there&#8217;s my life as it was prior to owning an ice cream maker, and there&#8217;s my life as it is now.  It&#8217;s hard to describe what it&#8217;s like, but the best I can come up with is this: it&#8217;s like having a garden, only instead of the garden being made of dirt it&#8217;s a metal cube, and instead of growing plants, the end result is a sweet, creamy, cold, nectar of the gods, set to the tune of whatever your brain and tastebuds can come up with.  Honestly now I look at every ingredient and wonder about its suitability for inclusion into an ice cream.  Pickles: considered it, rejected it.  Cayenne pepper: considered it, have a plan for it.  Peas: considered it, unsure about it.</p>
<p>And similar to having a garden, with each mouthful of god nectar you can smile in the smug satisfaction of being able to stick some xantham gum up the ass of some douchebag corporate foodie in one of the many tiny pointless towns called Exploitedville, USA.  Go ahead, club a baby seal.  Not only will you not hear it because your 50BCC will be screaming like a banshee, but you&#8217;ll have plenty of good food karma to spare.  I wonder: baby seal ice cream?  Wrong, just wrong.</p>
<p>Have you ever taken a close look at what happens when grocery store ice cream melts?  Have you ever wondered why ice cream from the store is kind of &#8220;fluffy?&#8221;  Let me assure you that the weird liquid separation you see when it melts, and the fluffy texture are in no way natural.  Modern ice cream barely qualifies as ice cream at all.  In fact, most commercial ice creams are solidified through the use of various viscous compounds.  The most common is Xantham gum, which if produced in North America, is almost certainly derived from corn.  Even &#8220;all natural&#8221; ice creams will often include guar gum, or &#8220;natural tara gum&#8221;.  Yes tara gum is made from a plant, but no it&#8217;s not natural.  It&#8217;s also used for killing insects and in creating leather for furniture.  So when buying ice cream it&#8217;s your choice: corn or insect free leather.  Mmmm&#8230; tasty couch!  </p>
<p>The only exception I&#8217;ve been able to find is good &#8216;ol Häagen-Dazs.  The downfall to the Dazs, as I can attest to, is it comes in small packages and is quite expensive.  Not only that but the flavor selection is a bit limited.</p>
<p>And, now that I have an ice cream maker, I can say that Dazs isn&#8217;t even that good.  Even some of my &#8220;failed&#8221; creations are leaps and bounds ahead of Dasz in terms of both texture, and flavor.  Did you know that real French Vanilla ice cream is made with custard?  I do now, because I&#8217;ve made it, and although it&#8217;s quite a bit different than the so called &#8220;French Vanilla&#8221; you can buy in the store, it&#8217;s also much, much, better.  Seriously they put some egg ingredients in there, along with some yellow colouring, and call it French Vanilla.</p>
<p>I should also give a warning: I used to pretend this blog was mostly devoted to technology and computer science related topics, but likely for the next while it will be devoted mostly to ice cream recipes <img src='http://timburrell.net/smilies/yahoo_smiley.gif' alt='&#58;&#41;' class='wp-smiley' width='18' height='18' title='&#58;&#41;' />.</p>
<p>On that note I&#8217;ll end with a killer recipe I came up with today.  I previously made a Peanut Butter and Banana ice cream, but today I made two batches, one of peanut butter, and another of banana.  They both turned out awesome, but the PB was the star for me.  Of course they compliment each other well.  But anyway, here&#8217;s the Peanut Butter:</p>
<p>Ingredients:</p>
<p>1/4 to 1/2 cup Peanut Butter to taste (choose your favorite kind, I used a creamy variety because I like creamy ice cream)<br />
1 cup heavy cream<br />
1 cup table cream<br />
1 cup whole milk<br />
1/2 cup organic granulated sugar</p>
<p>Directions:</p>
<p>Put the sugar, peanut butter, and milk in a sauce pan and slowly heat the mixture until the peanut butter is dissolved.  Transfer it to a mixing bowl and whisk it until the sugar is dissolved (if it isn&#8217;t already), put it in the freezer and wait for it to be cold again.  Mix in the creams, and you&#8217;re good to go!</p>
<p>The hardest part is getting the PB ratio correct.  The taste changes a bit during the freezing process, it gets a little less potent, so keep that in mind.  I started with ~1/4 cup but when I added in the creams I realized it wasn&#8217;t going to have the punch I wanted, so I added in another few spoon fulls.  I was too lazy to reheat the mixture, so the newly added PB gave the ice cream some interesting flaky bits which I actually kind of like.  I might make it like that on purpose again next time.</p>
]]></content:encoded>
			<wfw:commentRss>http://timburrell.net/blog/2010-07-03/sweet-sweet-creamy-goodness/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>KDE 4.2: The Answer?</title>
		<link>http://timburrell.net/blog/2009-01-31/kde-42-the-answer/</link>
		<comments>http://timburrell.net/blog/2009-01-31/kde-42-the-answer/#comments</comments>
		<pubDate>Sat, 31 Jan 2009 22:39:51 +0000</pubDate>
		<dc:creator>Tim.</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Rants]]></category>
		<category><![CDATA[KDE]]></category>
		<category><![CDATA[Review]]></category>

		<guid isPermaLink="false">http://timburrell.net/?p=414</guid>
		<description><![CDATA[<p>I&#8217;ve used my share of window managers and desktop environments over the years; I think the progression went something like this: DOS (single window?) -> DESQview -> Windows 3.1 through WinNT -> WindowMaker -> Enlightenment -> IceWM -> Fluxbox -> E17 -> XFce -> KDE 3.x -> KDE 3.x with Compiz-Fusion -> Gnome + Compiz, [...]</p>

<div class="sociable">
<div class="sociable_tagline">
<strong>Share this article:</strong>
</div>

	<a rel="nofollow" target="_blank" href="mailto:?subject=KDE%204.2%3A%20The%20Answer%3F&amp;body=http%3A%2F%2Ftimburrell.net%2Fblog%2F2009-01-31%2Fkde-42-the-answer%2F" title="E-mail this story to a friend!"><img src="http://timburrell.net/wp-content/plugins/sociable/images/email_link.png" title="E-mail this story to a friend!" alt="E-mail this story to a friend!" class="sociable-hovers" /></a>
	<a rel="nofollow" target="_blank" href="http://reddit.com/submit?url=http%3A%2F%2Ftimburrell.net%2Fblog%2F2009-01-31%2Fkde-42-the-answer%2F&amp;title=KDE%204.2%3A%20The%20Answer%3F" title="Reddit"><img src="http://timburrell.net/wp-content/plugins/sociable/images/reddit.png" title="Reddit" alt="Reddit" class="sociable-hovers" /></a>
	<a rel="nofollow" target="_blank" href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Ftimburrell.net%2Fblog%2F2009-01-31%2Fkde-42-the-answer%2F&amp;title=KDE%204.2%3A%20The%20Answer%3F" title="StumbleUpon"><img src="http://timburrell.net/wp-content/plugins/sociable/images/stumbleupon.png" title="StumbleUpon" alt="StumbleUpon" class="sociable-hovers" /></a>
	<a rel="nofollow" target="_blank" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Ftimburrell.net%2Fblog%2F2009-01-31%2Fkde-42-the-answer%2F&amp;title=KDE%204.2%3A%20The%20Answer%3F" title="Digg"><img src="http://timburrell.net/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a>
	<a rel="nofollow" target="_blank" href="http://technorati.com/faves?add=http%3A%2F%2Ftimburrell.net%2Fblog%2F2009-01-31%2Fkde-42-the-answer%2F" title="Technorati"><img src="http://timburrell.net/wp-content/plugins/sociable/images/technorati.png" title="Technorati" alt="Technorati" class="sociable-hovers" /></a>
	<a rel="nofollow" target="_blank" href="http://slashdot.org/bookmark.pl?title=KDE%204.2%3A%20The%20Answer%3F&amp;url=http%3A%2F%2Ftimburrell.net%2Fblog%2F2009-01-31%2Fkde-42-the-answer%2F" title="Slashdot"><img src="http://timburrell.net/wp-content/plugins/sociable/images/slashdot.png" title="Slashdot" alt="Slashdot" class="sociable-hovers" /></a>
	<a rel="nofollow" target="_blank" href="http://del.icio.us/post?url=http%3A%2F%2Ftimburrell.net%2Fblog%2F2009-01-31%2Fkde-42-the-answer%2F&amp;title=KDE%204.2%3A%20The%20Answer%3F" title="del.icio.us"><img src="http://timburrell.net/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" class="sociable-hovers" /></a>
	<a rel="nofollow" target="_blank" href="http://www.facebook.com/sharer.php?u=http%3A%2F%2Ftimburrell.net%2Fblog%2F2009-01-31%2Fkde-42-the-answer%2F&amp;t=KDE%204.2%3A%20The%20Answer%3F" title="Facebook"><img src="http://timburrell.net/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a>
	<a rel="nofollow" target="_blank" href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http%3A%2F%2Ftimburrell.net%2Fblog%2F2009-01-31%2Fkde-42-the-answer%2F&amp;title=KDE%204.2%3A%20The%20Answer%3F&amp;source=timburrell.net+All+that+is+Tim+Burrell&amp;summary=I%27ve%20used%20my%20share%20of%20window%20managers%20and%20desktop%20environments%20over%20the%20years%3B%20I%20think%20the%20progression%20went%20something%20like%20this%3A%20DOS%20%28single%20window%3F%29%20-%3E%20DESQview%20-%3E%20Windows%203.1%20through%20WinNT%20-%3E%20WindowMaker%20-%3E%20Enlightenment%20-%3E%20IceWM%20-%3E%20Fluxbox%20-%3E%20E17%20" title="LinkedIn"><img src="http://timburrell.net/wp-content/plugins/sociable/images/linkedin.png" title="LinkedIn" alt="LinkedIn" class="sociable-hovers" /></a>
	<a rel="nofollow" target="_blank" href="http://twitthis.com/twit?url=http%3A%2F%2Ftimburrell.net%2Fblog%2F2009-01-31%2Fkde-42-the-answer%2F" title="TwitThis"><img src="http://timburrell.net/wp-content/plugins/sociable/images/twitter.png" title="TwitThis" alt="TwitThis" class="sociable-hovers" /></a>
	<a rel="nofollow" target="_blank" href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Ftimburrell.net%2Fblog%2F2009-01-31%2Fkde-42-the-answer%2F&amp;title=KDE%204.2%3A%20The%20Answer%3F" title="Google"><img src="http://timburrell.net/wp-content/plugins/sociable/images/googlebookmark.png" title="Google" alt="Google" class="sociable-hovers" /></a>

</div>
<small><em>posted in <a href="http://timburrell.net/topics/blog/">Blog</a> by Tim. <a href="http://timburrell.net/blog/2009-01-31/kde-42-the-answer/#comments">Leave a Comment</a><br />&copy;2010 <a href="http://timburrell.net">timburrell.net</a>. All Rights Reserved.</em></small>]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve used my share of window managers and desktop environments over the years; I think the progression went something like this: DOS (single window?) -> DESQview -> Windows 3.1 through WinNT -> WindowMaker -> Enlightenment -> IceWM -> Fluxbox -> E17 -> XFce -> KDE 3.x -> KDE 3.x with Compiz-Fusion -> Gnome + Compiz, and now back to KDE 4.2.  From time to time I have also been known to use WinXP, Vista, and OS X.  Basically, I&#8217;ve tried enough of them to know what I like and do not like.</p>
<p>Up until the 4.0 release I had become an avid KDE user.  Like most people, however, I was pretty dismayed at their choice to tag a feature incomplete, and horribly buggy release as 4.0.  Yes they did come out and say it wasn&#8217;t ready for mass consumption yet, but they pretty much blew it by tagging it as 4.0, when really it was an early, early beta, or perhaps an alpha release &#8212; I won&#8217;t go on about since it&#8217;s already been <a href="http://aseigo.blogspot.com/2009/01/choices-and-punishment.html">discussed to death</a>.  KDE 3.5 held up fairly well for a while, but eventually Gnome surpassed it in terms of features, stability, and it remained lightweight yet had nice integration with Compiz, meaning I could still appease my inherent fascination with shiny things.  So, I begrudgingly left KDE behind.</p>
<p>And now, KDE 4.2 is here, which is being touted as &#8220;The Answer&#8221; to all the critics.  So is it?</p>
<p>First let me say that it really is a great release.  It&#8217;s what a 4.0 beta should have been.  It&#8217;s [mostly] stable, and [mostly] feature complete in comparison to 3.5.  The new API changes are awesome &#8212; it&#8217;s an absolute joy to develop for.  It&#8217;s got a solid foundation, and what they&#8217;ve built from it really is a technical achievement &#8212; they should be proud of their efforts.  All the KDE4 applications have a consistent UI feel, and they all work in exactly the way you&#8217;d expect with regards to things like some of the more advanced drag &#8216;n drop features that OS X has supported for years (and that Microsoft still hasn&#8217;t caught on to).</p>
<p>My favorite thing: its window management is absolutely top notch.  I thought nothing could beat Compiz, but the new KWin is pretty much perfect.  It strikes a great balance between configurability and simplicity.  The average user will never know 90% of the things it can do, but for those picky people among us it offers things like: an excellent focus-follows-mouse implementation, the ability to be able to easily set individual windows as on-top or below-others, and the ability to disable or enable window decorations on case by case basis, and that&#8217;s just for starters.  KWin does everything I want, and more, yet it doesn&#8217;t suffer from the insane configuration and menu nightmare that is the Compiz configuration tool.</p>
<p>All that being said, my answer to the question is still a definitive &#8220;no&#8221;.  KDE 4.2 is not The Answer.  I am back in Gnome right now due to bugs.  I really like konsole but the toggle that disables the menubar does not work, nor does the toggle that disables blinking text.  There&#8217;s still no native network manager for those with wireless connections.  The list of, admittedly minor, complaints goes on at length, and while none of them are a really big deal on their own, as a whole they leave me with a bad aftertaste in mouth&#8230; a taste that is reminiscent of an x.0 beta release, and not a .2 release.</p>
<p>However, this release does at least give me hope.  I have faith in the KDE developers, and believe that their cause is a good one and a worthy one.  They&#8217;re creating an excellent new foundation for what should become a consistent and unified interface experience &#8212; something Linux has sorely been lacking since the great KDE and Gnome divide began.</p>
]]></content:encoded>
			<wfw:commentRss>http://timburrell.net/blog/2009-01-31/kde-42-the-answer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>QAwesomeness: Reflection in C++ with Qt</title>
		<link>http://timburrell.net/blog/2009-01-21/qawesomeness-reflection-in-c-with-qt/</link>
		<comments>http://timburrell.net/blog/2009-01-21/qawesomeness-reflection-in-c-with-qt/#comments</comments>
		<pubDate>Wed, 21 Jan 2009 12:27:27 +0000</pubDate>
		<dc:creator>Tim.</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Qt]]></category>
		<category><![CDATA[Review]]></category>

		<guid isPermaLink="false">http://timburrell.net/?p=398</guid>
		<description><![CDATA[<p>In case you&#8217;ve been living under a rock or something and haven&#8217;t heard about Qt, it&#8217;s a cross-platform application framework that&#8217;s most famously known for being the underlying widget toolkit for the KDE desktop environment for *nixes.<br />
Prior to a couple weeks ago I had never played with Qt, and I actually had sort of a [...]</p>

<div class="sociable">
<div class="sociable_tagline">
<strong>Share this article:</strong>
</div>

	<a rel="nofollow" target="_blank" href="mailto:?subject=QAwesomeness%3A%20Reflection%20in%20C%2B%2B%20with%20Qt&amp;body=http%3A%2F%2Ftimburrell.net%2Fblog%2F2009-01-21%2Fqawesomeness-reflection-in-c-with-qt%2F" title="E-mail this story to a friend!"><img src="http://timburrell.net/wp-content/plugins/sociable/images/email_link.png" title="E-mail this story to a friend!" alt="E-mail this story to a friend!" class="sociable-hovers" /></a>
	<a rel="nofollow" target="_blank" href="http://reddit.com/submit?url=http%3A%2F%2Ftimburrell.net%2Fblog%2F2009-01-21%2Fqawesomeness-reflection-in-c-with-qt%2F&amp;title=QAwesomeness%3A%20Reflection%20in%20C%2B%2B%20with%20Qt" title="Reddit"><img src="http://timburrell.net/wp-content/plugins/sociable/images/reddit.png" title="Reddit" alt="Reddit" class="sociable-hovers" /></a>
	<a rel="nofollow" target="_blank" href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Ftimburrell.net%2Fblog%2F2009-01-21%2Fqawesomeness-reflection-in-c-with-qt%2F&amp;title=QAwesomeness%3A%20Reflection%20in%20C%2B%2B%20with%20Qt" title="StumbleUpon"><img src="http://timburrell.net/wp-content/plugins/sociable/images/stumbleupon.png" title="StumbleUpon" alt="StumbleUpon" class="sociable-hovers" /></a>
	<a rel="nofollow" target="_blank" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Ftimburrell.net%2Fblog%2F2009-01-21%2Fqawesomeness-reflection-in-c-with-qt%2F&amp;title=QAwesomeness%3A%20Reflection%20in%20C%2B%2B%20with%20Qt" title="Digg"><img src="http://timburrell.net/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a>
	<a rel="nofollow" target="_blank" href="http://technorati.com/faves?add=http%3A%2F%2Ftimburrell.net%2Fblog%2F2009-01-21%2Fqawesomeness-reflection-in-c-with-qt%2F" title="Technorati"><img src="http://timburrell.net/wp-content/plugins/sociable/images/technorati.png" title="Technorati" alt="Technorati" class="sociable-hovers" /></a>
	<a rel="nofollow" target="_blank" href="http://slashdot.org/bookmark.pl?title=QAwesomeness%3A%20Reflection%20in%20C%2B%2B%20with%20Qt&amp;url=http%3A%2F%2Ftimburrell.net%2Fblog%2F2009-01-21%2Fqawesomeness-reflection-in-c-with-qt%2F" title="Slashdot"><img src="http://timburrell.net/wp-content/plugins/sociable/images/slashdot.png" title="Slashdot" alt="Slashdot" class="sociable-hovers" /></a>
	<a rel="nofollow" target="_blank" href="http://del.icio.us/post?url=http%3A%2F%2Ftimburrell.net%2Fblog%2F2009-01-21%2Fqawesomeness-reflection-in-c-with-qt%2F&amp;title=QAwesomeness%3A%20Reflection%20in%20C%2B%2B%20with%20Qt" title="del.icio.us"><img src="http://timburrell.net/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" class="sociable-hovers" /></a>
	<a rel="nofollow" target="_blank" href="http://www.facebook.com/sharer.php?u=http%3A%2F%2Ftimburrell.net%2Fblog%2F2009-01-21%2Fqawesomeness-reflection-in-c-with-qt%2F&amp;t=QAwesomeness%3A%20Reflection%20in%20C%2B%2B%20with%20Qt" title="Facebook"><img src="http://timburrell.net/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a>
	<a rel="nofollow" target="_blank" href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http%3A%2F%2Ftimburrell.net%2Fblog%2F2009-01-21%2Fqawesomeness-reflection-in-c-with-qt%2F&amp;title=QAwesomeness%3A%20Reflection%20in%20C%2B%2B%20with%20Qt&amp;source=timburrell.net+All+that+is+Tim+Burrell&amp;summary=In%20case%20you%27ve%20been%20living%20under%20a%20rock%20or%20something%20and%20haven%27t%20heard%20about%20Qt%2C%20it%27s%20a%20cross-platform%20application%20framework%20that%27s%20most%20famously%20known%20for%20being%20the%20underlying%20widget%20toolkit%20for%20the%20KDE%20desktop%20environment%20for%20%2Anixes.%0D%0A%0D%0APrior%20to%20a%20" title="LinkedIn"><img src="http://timburrell.net/wp-content/plugins/sociable/images/linkedin.png" title="LinkedIn" alt="LinkedIn" class="sociable-hovers" /></a>
	<a rel="nofollow" target="_blank" href="http://twitthis.com/twit?url=http%3A%2F%2Ftimburrell.net%2Fblog%2F2009-01-21%2Fqawesomeness-reflection-in-c-with-qt%2F" title="TwitThis"><img src="http://timburrell.net/wp-content/plugins/sociable/images/twitter.png" title="TwitThis" alt="TwitThis" class="sociable-hovers" /></a>
	<a rel="nofollow" target="_blank" href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Ftimburrell.net%2Fblog%2F2009-01-21%2Fqawesomeness-reflection-in-c-with-qt%2F&amp;title=QAwesomeness%3A%20Reflection%20in%20C%2B%2B%20with%20Qt" title="Google"><img src="http://timburrell.net/wp-content/plugins/sociable/images/googlebookmark.png" title="Google" alt="Google" class="sociable-hovers" /></a>

</div>
<small><em>posted in <a href="http://timburrell.net/topics/blog/">Blog</a> by Tim. <a href="http://timburrell.net/blog/2009-01-21/qawesomeness-reflection-in-c-with-qt/#comments">Comments (3)</a><br />&copy;2010 <a href="http://timburrell.net">timburrell.net</a>. All Rights Reserved.</em></small>]]></description>
			<content:encoded><![CDATA[<p>In case you&#8217;ve been living under a rock or something and haven&#8217;t heard about <a href="http://en.wikipedia.org/wiki/Qt_(toolkit)">Qt</a>, it&#8217;s a cross-platform application framework that&#8217;s most famously known for being the underlying widget toolkit for the <a href="http://kde.org">KDE</a> desktop environment for *nixes.</p>
<p>Prior to a couple weeks ago I had never played with Qt, and I actually had sort of a negative opinion of it.  I had known that it required this extra compilation step where it preprocessed C++ source files for some reason&#8230; but I&#8217;ll back get to that soon &#8212; for now I&#8217;ll just say I thought it was silly because I didn&#8217;t understand it.  The other thing I thought was that Qt was just a widget toolkit for building GUI applications.</p>
<p>I was wrong.  On both accounts.  First of all Qt is so much more than just a GUI API.  It&#8217;s an amazingly well designed collection of classes for building robust cross-platform apps.  Example, the <a href="http://doc.trolltech.com/qstring.html">QString</a> class is so much more useful than std::string.  It has built in support for all types of unicode strings, and has a ton of handy functions and operators available.  Memory management is also really well done in Qt &#8212; you can often &#8220;new and forget&#8221;.  It has a high performance computing API that includes out of the box support for things like <a href="http://en.wikipedia.org/wiki/Map_Reduce">Map-Reduce</a>, job scheduling, futures, etc.  I could go on and on, but suffice to say, Qt is another tool I&#8217;m really glad to put into my toolbox right next to <a href="http://boost.org">Boost</a>.</p>
<p>As a quick aside, before getting to my actual point, I&#8217;d like to mention <a href="http://en.wikipedia.org/wiki/Nokia">Nokia</a>&#8217;s recent acquisition of <a href="http://en.wikipedia.org/wiki/Trolltech">Trolltech</a> (the company responsible for Qt), and their decision to <a href="http://en.wikipedia.org/wiki/GNU_Lesser_General_Public_License">LGPL</a> the library.  I think that this is probably the greatest thing that has happened to Linux, since the Linux kernel itself, and perhaps the GNU tool collection.  I honestly can&#8217;t see why any developer would continue to support and use <a href="http://www.gnome.org/">Gnome</a> now that Qt is LGPL&#8217;ed, and you can use it to write cross-platform apps that use native widgets on Mac, Windows, and Linux.  Competition is usually good, but not when it comes to competing desktop widget sets.</p>
<p>Alright, my actual point, and the thing that inspired me to post about Qt in the first place: the MOC.  Qt&#8217;s Meta Object compiler.  What it does is preprocess a C++ header and build another header out of it that you then include into your source file along side the original header.  This preprocessing step gleans all of the information from your class(es) and puts it into a format digestible at runtime.  Qt has kindly wrapped this up into a nice <a href="http://doc.trolltech.com/metaobjects.html">meta object system</a> that stems from the <a href="http://doc.trolltech.com/qmetaobject.html">QMetaObject</a>.</p>
<p>Essentially what they&#8217;ve done is given <a href="http://en.wikipedia.org/wiki/Reflection_(computer_science)">reflection</a> to C++.  If you&#8217;ve ever programmed in languages like Python, Ruby, Objective-C, C#, or Java, and friends, you know how awesome and useful reflection is.  With Qt&#8217;s MOC system you can do many of the neat things in C++ that you can in dynamically bound languages.  You can enumerate all the methods of a class, and then invoke them via a string representation of their function name.  You can dynamically cast to and from super-classes (again, via a string), or iterate over an object&#8217;s class hierarchy &#8212; all at runtime!  It&#8217;s awesome.  Really awesome.</p>
<p>But, does this extra MOC step require some insane build system?  Well, fortunately no!  Thanks to the KDE project having adopted <a href="http://cmake.org">CMake</a> as their build system they&#8217;ve created all the necessary build scripts for using Qt in your project.  You just do your build setup like you normally would with CMake, include the Qt CMake module, which automatically detects the Qt libraries, and sets up support for automoc&#8217;ing your source files.</p>
<p>And while I&#8217;m on the topic I might as well say a few words about Qt as a GUI library.  I&#8217;ve use quite a few GUI APIs in my day: everything from raw WIN32, to MFC, and .net&#8217;s WPF (Windows Forms), Cocoa and Carbon, WxWidgets, GTK, TK, AWT, Swing, and there&#8217;s probably a few others in there that I&#8217;ve [likely thankfully] forgotten [or repressed].</p>
<p>In the past, I&#8217;ve never really been impressed by a GUI API before.  Cocoa is the one I&#8217;ve used the least, but I was definitely impressed by it &#8212; that being said it&#8217;s sort of wrapped up in the Objective-C way of doing things, which isn&#8217;t necessarily bad, but it&#8217;s a bit more difficult to evaluate on its own because of that fact.  Windows Forms is also relatively well done, but nothing to write home about.  And the rest are just plain awful.  With the shining star being Qt.  </p>
<p>When I created my first Qt GUI (through the help of <a href="http://www.qtsoftware.com/products/appdev/developer-tools/developer-tools">Qt&#8217;s excellent GUI designer</a>) I was extremely happy.  I&#8217;ll be the first to admit that I hate GUI programming, but let&#8217;s face it, every once in a while you do need an app with a GUI, and Qt takes all the crap work out of GUI programming.  There&#8217;s almost never a need to write code that resizes widgets when you resize your application&#8217;s window (they have a well thought out <a href="http://doc.trolltech.com/layout.html">Layout system</a>), and the whole process of designing a GUI and including it in your app is very well done.</p>
<p>The GUI designer creates a nice human readable XML file that you can either have your CMake build system auto-process for you and produce C++ code that you merely include into your project, or you can use the Qt library to dynamically load and process the UI XML files at runtime.  Who doesn&#8217;t want their users to be able to change your GUI around in whatever twisted ways they want?  Well okay, probably a lot of people, but at least the option is there!</p>
<p>All in all I give Qt a resounding thumbs up.  I will probably use it in every spare-time project I do from now on, even non-graphical ones, just because I think the API is that good &#8212; Qt really has given C++ a gift with their meta-object system.  And now with Nokia&#8217;s support and LGPL goodness, there&#8217;s finally no reason not to use Qt.</p>
]]></content:encoded>
			<wfw:commentRss>http://timburrell.net/blog/2009-01-21/qawesomeness-reflection-in-c-with-qt/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>D Postmortem</title>
		<link>http://timburrell.net/blog/2008-06-22/d-postmortem/</link>
		<comments>http://timburrell.net/blog/2008-06-22/d-postmortem/#comments</comments>
		<pubDate>Sun, 22 Jun 2008 12:43:17 +0000</pubDate>
		<dc:creator>Tim.</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[C++0x]]></category>
		<category><![CDATA[D]]></category>
		<category><![CDATA[Parallel programming]]></category>
		<category><![CDATA[Programming languages]]></category>
		<category><![CDATA[Review]]></category>

		<guid isPermaLink="false">http://timburrell.net/?p=358</guid>
		<description><![CDATA[<p>It&#8217;s been about a year and half since I started actively using D &#8212; I&#8217;ve written (and maintained) a couple of small commercial applications in it, and taken maintainership over a couple of D related open source projects, but most of my experience with the language comes from using it to write my thesis project [...]</p>

<div class="sociable">
<div class="sociable_tagline">
<strong>Share this article:</strong>
</div>

	<a rel="nofollow" target="_blank" href="mailto:?subject=D%20Postmortem&amp;body=http%3A%2F%2Ftimburrell.net%2Fblog%2F2008-06-22%2Fd-postmortem%2F" title="E-mail this story to a friend!"><img src="http://timburrell.net/wp-content/plugins/sociable/images/email_link.png" title="E-mail this story to a friend!" alt="E-mail this story to a friend!" class="sociable-hovers" /></a>
	<a rel="nofollow" target="_blank" href="http://reddit.com/submit?url=http%3A%2F%2Ftimburrell.net%2Fblog%2F2008-06-22%2Fd-postmortem%2F&amp;title=D%20Postmortem" title="Reddit"><img src="http://timburrell.net/wp-content/plugins/sociable/images/reddit.png" title="Reddit" alt="Reddit" class="sociable-hovers" /></a>
	<a rel="nofollow" target="_blank" href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Ftimburrell.net%2Fblog%2F2008-06-22%2Fd-postmortem%2F&amp;title=D%20Postmortem" title="StumbleUpon"><img src="http://timburrell.net/wp-content/plugins/sociable/images/stumbleupon.png" title="StumbleUpon" alt="StumbleUpon" class="sociable-hovers" /></a>
	<a rel="nofollow" target="_blank" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Ftimburrell.net%2Fblog%2F2008-06-22%2Fd-postmortem%2F&amp;title=D%20Postmortem" title="Digg"><img src="http://timburrell.net/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a>
	<a rel="nofollow" target="_blank" href="http://technorati.com/faves?add=http%3A%2F%2Ftimburrell.net%2Fblog%2F2008-06-22%2Fd-postmortem%2F" title="Technorati"><img src="http://timburrell.net/wp-content/plugins/sociable/images/technorati.png" title="Technorati" alt="Technorati" class="sociable-hovers" /></a>
	<a rel="nofollow" target="_blank" href="http://slashdot.org/bookmark.pl?title=D%20Postmortem&amp;url=http%3A%2F%2Ftimburrell.net%2Fblog%2F2008-06-22%2Fd-postmortem%2F" title="Slashdot"><img src="http://timburrell.net/wp-content/plugins/sociable/images/slashdot.png" title="Slashdot" alt="Slashdot" class="sociable-hovers" /></a>
	<a rel="nofollow" target="_blank" href="http://del.icio.us/post?url=http%3A%2F%2Ftimburrell.net%2Fblog%2F2008-06-22%2Fd-postmortem%2F&amp;title=D%20Postmortem" title="del.icio.us"><img src="http://timburrell.net/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" class="sociable-hovers" /></a>
	<a rel="nofollow" target="_blank" href="http://www.facebook.com/sharer.php?u=http%3A%2F%2Ftimburrell.net%2Fblog%2F2008-06-22%2Fd-postmortem%2F&amp;t=D%20Postmortem" title="Facebook"><img src="http://timburrell.net/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a>
	<a rel="nofollow" target="_blank" href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http%3A%2F%2Ftimburrell.net%2Fblog%2F2008-06-22%2Fd-postmortem%2F&amp;title=D%20Postmortem&amp;source=timburrell.net+All+that+is+Tim+Burrell&amp;summary=It%27s%20been%20about%20a%20year%20and%20half%20since%20I%20started%20actively%20using%20D%20--%20I%27ve%20written%20%28and%20maintained%29%20a%20couple%20of%20small%20commercial%20applications%20in%20it%2C%20and%20taken%20maintainership%20over%20a%20couple%20of%20D%20related%20open%20source%20projects%2C%20but%20most%20of%20my%20experience%20wit" title="LinkedIn"><img src="http://timburrell.net/wp-content/plugins/sociable/images/linkedin.png" title="LinkedIn" alt="LinkedIn" class="sociable-hovers" /></a>
	<a rel="nofollow" target="_blank" href="http://twitthis.com/twit?url=http%3A%2F%2Ftimburrell.net%2Fblog%2F2008-06-22%2Fd-postmortem%2F" title="TwitThis"><img src="http://timburrell.net/wp-content/plugins/sociable/images/twitter.png" title="TwitThis" alt="TwitThis" class="sociable-hovers" /></a>
	<a rel="nofollow" target="_blank" href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Ftimburrell.net%2Fblog%2F2008-06-22%2Fd-postmortem%2F&amp;title=D%20Postmortem" title="Google"><img src="http://timburrell.net/wp-content/plugins/sociable/images/googlebookmark.png" title="Google" alt="Google" class="sociable-hovers" /></a>

</div>
<small><em>posted in <a href="http://timburrell.net/topics/blog/">Blog</a> by Tim. <a href="http://timburrell.net/blog/2008-06-22/d-postmortem/#comments">Comments (8)</a><br />&copy;2010 <a href="http://timburrell.net">timburrell.net</a>. All Rights Reserved.</em></small>]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s been about a year and half since I started actively using <a href="http://digitalmars.com/d">D</a> &#8212; I&#8217;ve written (and maintained) a couple of small commercial applications in it, and taken maintainership over a couple of D related open source projects, but most of my experience with the language comes from using it to write my thesis project in &#8212; around 30,000 lines of code spread over 100 source files.  Not exactly a huge project, but large enough to get a good feel for the language.</p>
<p>First of all the good: the bottom line is, D is a great little language, and I say little because in many ways it&#8217;s a lot simpler, and less complicated than any of the other system level object-oriented languages that it competes with (C++).  This doesn&#8217;t mean that D is any less valuable though &#8212; in fact much the opposite.  D&#8217;s inherent simplicity is by design.  It&#8217;s pretty clear by looking at the <a href="http://digitalmars.com/d/1.0/lex.html">language spec</a> that the idea was to take the best elements of some languages, throw out the rest, and add some of the missing features that we all wish we had (built in strings, optional garbage collection, modern language features, etc).</p>
<p>And by modern language features, this is the kind of stuff I&#8217;m talking about: <a href="http://www.digitalmars.com/d/1.0/mixin.html">mixins</a>, <a href="http://www.digitalmars.com/d/1.0/expression.html#FunctionLiteral">lambdas</a>, <a href="http://www.digitalmars.com/d/1.0/variadic-function-templates.html">variadic templates</a>, <a href="http://www.digitalmars.com/d/1.0/lazy-evaluation.html">lazy evaluation</a>, <a href="http://www.digitalmars.com/d/1.0/function.html#closures">delegates</a>, <a href="http://www.digitalmars.com/d/1.0/function.html#nested">nested functions</a>, <a href="http://www.digitalmars.com/d/1.0/struct.html">anonymous unions</a>, <a href="http://www.digitalmars.com/d/1.0/arrays.html#slicing">array slicing</a>, <a href="http://www.digitalmars.com/d/1.0/dbc.html">contract programming</a>, <a href="http://www.digitalmars.com/d/1.0/statement.html#ForeachStatement">handy statements</a>.  Basically, much of C++0x&#8217;s upcoming feature set, and more.</p>
<p>So does D deliver?  The answer yes, a resounding yes in fact.  In terms of core language design and features, D provides exactly what many of us have been yearning for for years &#8212; a system level language that is on par with (or better than) modern scripting languages (such as Python, and Ruby) in terms of development speed, provides the language features we all should have by now, yet compiles to native code that can be as efficient as C++.</p>
<p>The panacea of programming languages?  Well&#8230; no, not quite.  Unfortunately the story doesn&#8217;t end there.</p>
<p>The first problem is a major one, and I don&#8217;t want to downplay it because as it stands it&#8217;s enough of an issue that no development house could even consider D as a prospective language, but fortunately it&#8217;s something that should get better over time.  The issue: compiler bugs, and plenty of them.  Some of them are small, some of them are huge, but there&#8217;s enough that they add up to a serious problem.</p>
<p>The bugs I ran into ranged from little things like floating point printing errors, all the way to compiler segfaults.  Being that D is so young and the compilers aren&#8217;t close to maturity yet, any project complex enough is basically guaranteed to run into problems with either of the existing compilers, and my thesis project was no exception.  Fortunately there are two major compilers that use separate optimization paths (a frequent culprit in the official digitalmars compiler) so one at least has a contingency option, but unfortunately, they share the same front-end, so they tend to exhibit some of the same bugs as well.</p>
<p>There&#8217;s also some serious performance issues with both compilers.   For example, if you look at the assembler output of either of the compilers you can see them doing the same wasteful, redundant memory copies when doing something simple like returning a struct from a function.  The only work around to this compiler bug is to do ugly things like return values from functions using by-reference function parameters.  </p>
<p>Take a moment to think about the case where you can&#8217;t return values from functions &#8212; design goes out the window, along with readability and maintainability, not to mention ease of porting to other languages (should the desire arise).  It extends further than that though &#8212; it means, for example, using custom foreach iterators to do a simple iteration over a collection of stack allocated structs becomes so inefficient that you end up having to put regular for loops in places where they really shouldn&#8217;t be.</p>
<p>Basically these &#8220;little&#8221; compiler issues make it difficult to consistently employ OO design principles, and use all of the nice modern language features that made the language so attractive in the first place.  And after discovering these issues, along with their associated workarounds (wasting time discovering that your program&#8217;s poor performance is due to the compiler and not your code), you&#8217;re basically left with either a slow, inefficient executable, or ugly, unmaintainable code written in a language that was specifically designed to produce clear, concise, elegant code.  </p>
<p>It&#8217;s a terrible shame to have a few minor problems result in such broad consequences, but these issues are all things that can be fixed, and they&#8217;re not nearly as prevalent as this post makes them seem.  In fairness, given how new D is, the overall stability and quality of the available compilers is actually quite impressive.  The language itself shouldn&#8217;t be judged on these compiler issues, but it&#8217;s important that people who may be considering adopting D be aware that there are problems with the compilers before forging ahead.</p>
<p>The next big issue isn&#8217;t technically related to the language itself, but is still a problem because it&#8217;s one of the root causes of much of what&#8217;s stopping D from living up to its potential.  The heart of the matter is that D is currently going through some growing pains, and project leadership isn&#8217;t keeping up with the community.</p>
<p>Right now the D community is split between two incompatible standard libraries (<a href="http://dsource.org/projects/tango">Tango</a>, and <a href="http://www.digitalmars.com/d/1.0/phobos/phobos.html">Phobos</a>) that offer up different design philosophies, and although the majority of the community uses one library (Tango), it&#8217;s not the official standard library.  This tends to create confusion for new users, and forces people to adopt one library or another, or library designers to write and maintain two sets of sources &#8212; neither being optimal solutions.</p>
<p>To come back to the issue of the compiler bugs &#8212; in other projects such a situation might not be as much of an issue, but many of the compiler bugs have been sitting idle in the D bug tracker for many months, and many releases.  It appears as though the project is transitioning between a small niche language, to something that might even be getting close to being considered mainstream (D is currently <a href="http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html">12<sup>th</sup> on the programming language popularity list</a>, and still moving up), so it&#8217;s understandable that some project leadership issues might crop up along the way.</p>
<p>Regardless of how understandable these growing pains may be, it&#8217;s still something that the project maintainers, and the D user community, are going to have to deal with before the language can really take the next step in terms of public acceptance.</p>
<p>There&#8217;s also one final problem with the language, or rather, the upcoming D2 language spec, and as big as all the other issues are this is actually the biggest thing that&#8217;s keeping me from continuing to use D on future projects.  We all know that multi-core systems are the defacto standard these days, and although we&#8217;re starting to get a handle on developing tools to help programmers deal with the almost always non-trivial task of writing parallel code, we&#8217;ve barely even scratched the surface of what compilers and runtimes can do to help regular joe-six-pack-programmer effectively, and easily, design algorithms that take advantage of today&#8217;s processors.</p>
<p>Given the current state of affairs in terms of SMP and distributed development, and that there&#8217;s a new revision of the D language in the works, D has a great opportunity to assert its intent to be a player in the upcoming multiprogramming language war.  But nothing is in the works.  The D team isn&#8217;t actively working on providing any inclusion of a modern parallel programming paradigm for D2, which means it will likely be pushed back to some future release of D.  This is unfortunate, because I know a great many developers are waiting for tools to help them deal with parallel programming (even if they don&#8217;t know they are).</p>
<p>Aside from <a href="http://en.wikipedia.org/wiki/Erlang_(programming_language)">Erlang</a> and other more obscure functional languages, right now C++ is still one of the best choices around for parallel development.  With the resounding success <a href="http://openmp.org">OpenMP</a> has seen in the last few years, and with <a href="http://en.wikipedia.org/wiki/C%2B%2B0x">C++0x</a> on the horizon and the new <a href="http://terboven.spaces.live.com/blog/cns!EA3D3C756483FECB!316.entry">OpenMP 3 being recently released</a> it looks like C++ is going to continue to be the language of choice for most system level and computationally expensive tasks.</p>
<p>Neither D, nor the upcoming D2 spec, give developers anything beyond raw threading (plus some critical section synchronization and resource locking type mechanisms, along with a controversial <a href="http://www.digitalmars.com/d/2.0/const-faq.html">const system</a>), but definitely nothing in the way of a modern parallel programming methodology.  It&#8217;s another unfortunate oversight that takes a language that should be an ultramodern successor to nearly all current languages in its class and puts it years behind C++, and even Fortran (both of which have OpenMP at their disposal), and let&#8217;s not even try to make a comparison to other languages like <a href="http://www.erlang.org/download/getting_started-5.4.pdf">Erlang</a>, <a href="http://jocaml.inria.fr/">JoCaml</a>, <a href="http://www.haskell.org/ghc/docs/6.4/html/users_guide/concurrent-and-parallel.html">Parallel Haskell</a>, and friends.</p>
<p>I really wish I could recommend D as a natural successor to C++, but given all the issues it&#8217;s currently facing, I just can&#8217;t.  It&#8217;s simply not there yet, and I fear, given it&#8217;s current direction, that it never will be.  I still think it&#8217;s a great project, and I hope that it works out because I&#8217;d like very much to see it succeed, because I think a strong competitor to the multi-paradigm system-level language would be a great boon to the software development and computer science communities.</p>
<p>I&#8217;ll definitely keep watching D to see what happens in the future, but I likely won&#8217;t be using it for any more projects until they can iron out the compiler stability and efficiency issues, and implement some reasonable multiprogramming method.</p>
]]></content:encoded>
			<wfw:commentRss>http://timburrell.net/blog/2008-06-22/d-postmortem/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
	</channel>
</rss>
