<?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</title>
	<atom:link href="http://timburrell.net/feed/" rel="self" type="application/rss+xml" />
	<link>http://timburrell.net</link>
	<description>All that is Tim Burrell</description>
	<lastBuildDate>Fri, 03 Jul 2009 12:01:14 +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>Back from Amsterdam!</title>
		<link>http://timburrell.net/blog/2009-06-21/back-from-amsterdam/</link>
		<comments>http://timburrell.net/blog/2009-06-21/back-from-amsterdam/#comments</comments>
		<pubDate>Sun, 21 Jun 2009 16:32:58 +0000</pubDate>
		<dc:creator>Tim.</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Fluid simulation]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[Travel]]></category>

		<guid isPermaLink="false">http://timburrell.net/?p=681</guid>
		<description><![CDATA[<p>I&#8217;m still exhausted from the flight, but the trip was excellent, and I think the presentation went really well!<br />
Amsterdam is definitely a very cool and unique city!  I&#8217;m extremely glad we were able to find Jess a last minute flight, and that the hotel didn&#8217;t mind her staying in my room (which was booked [...]</p>

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

	<a rel="nofollow" target="_blank" href="mailto:?subject=Back%20from%20Amsterdam%21&amp;body=http%3A%2F%2Ftimburrell.net%2Fblog%2F2009-06-21%2Fback-from-amsterdam%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-06-21%2Fback-from-amsterdam%2F&amp;title=Back%20from%20Amsterdam%21" 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-06-21%2Fback-from-amsterdam%2F&amp;title=Back%20from%20Amsterdam%21" 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-06-21%2Fback-from-amsterdam%2F&amp;title=Back%20from%20Amsterdam%21" 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-06-21%2Fback-from-amsterdam%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=Back%20from%20Amsterdam%21&amp;url=http%3A%2F%2Ftimburrell.net%2Fblog%2F2009-06-21%2Fback-from-amsterdam%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-06-21%2Fback-from-amsterdam%2F&amp;title=Back%20from%20Amsterdam%21" 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-06-21%2Fback-from-amsterdam%2F&amp;t=Back%20from%20Amsterdam%21" 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-06-21%2Fback-from-amsterdam%2F&amp;title=Back%20from%20Amsterdam%21&amp;source=timburrell.net+All+that+is+Tim+Burrell&amp;summary=I%27m%20still%20exhausted%20from%20the%20flight%2C%20but%20the%20trip%20was%20excellent%2C%20and%20I%20think%20the%20presentation%20went%20really%20well%21%0D%0A%0D%0AAmsterdam%20is%20definitely%20a%20very%20cool%20and%20unique%20city%21%20%20I%27m%20extremely%20glad%20we%20were%20able%20to%20find%20Jess%20a%20last%20minute%20flight%2C%20and%20that%20the%20h" 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-06-21%2Fback-from-amsterdam%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-06-21%2Fback-from-amsterdam%2F&amp;title=Back%20from%20Amsterdam%21" 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-06-21/back-from-amsterdam/#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;m still exhausted from the flight, but the trip was excellent, and I think the presentation went really well!</p>
<p>Amsterdam is definitely a very cool and unique city!  I&#8217;m extremely glad we were able to find Jess a last minute flight, and that the hotel didn&#8217;t mind her staying in my room (which was booked as a single).  We had lots of fun exploring Amsterdam, taking in as much of its culture as we could (and were willing to).  Amsterdam is definitely a place where whatever you want, is pretty much what you get, and we quickly learned that there&#8217;s lots of things Amsterdam has to offer that we weren&#8217;t that interested in <img src='http://timburrell.net/smilies/yahoo_smiley.gif' alt='&#58;&#41;' class='wp-smiley' width='18' height='18' title='&#58;&#41;' />.  </p>
<p>That being said, those elements are part of what makes Amsterdam such a cool place, and I for one applaud them for their forward thinking on many subjects.  I&#8217;ve personally never felt so safe amongst so many people,  at all times of the day / night.</p>
<p>We checked out nearly every major area of the city, and although the hotel was right next to the insane touristy areas we quickly gravitated toward the quieter more local areas of Amsterdam.  We tried to find as many local places to eat as we could, and mostly just soak in the atmosphere.  It was neat to see some of the [in]famous parts of the city like all the coffee shops, and the red-light district, but I found once we left those areas I got a much greater sense for the city, and I began to understand why people would live there.</p>
<p>I didn&#8217;t take many photos, since Jess was along, and hopefully she&#8217;ll post some of hers soon, but for now you can check out some of the photos I snapped with my phone if you&#8217;d like:</p>

<div class="ngg-galleryoverview" id="ngg-gallery-1-681">


	
	<!-- Thumbnails -->
		
	<div id="ngg-image-22" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://timburrell.net/wp-content/gallery/amsterdam-2009/IMG_0244.JPG" title="If the Switzerland airport is any indication the Swiss seem to have a propensity toward large escalators." class="thickbox" rel="amsterdam-2009" >
				<img title="Switzerland Airport Escalators" alt="Switzerland Airport Escalators" src="http://timburrell.net/wp-content/gallery/amsterdam-2009/thumbs/thumbs_IMG_0244.JPG" width="150" height="125" />
			</a>
		</div>
	</div>
	 		
	<div id="ngg-image-23" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://timburrell.net/wp-content/gallery/amsterdam-2009/IMG_0245.JPG" title="Everything about Switzerland oozed style.  Instead the of obnoxious loud speaker announcements every 30 seconds we get in North America, the Switzerland airport had a live jazz pianist and comfortable leather seats to relax in." class="thickbox" rel="amsterdam-2009" >
				<img title="Switzerland Airport Lounge" alt="Switzerland Airport Lounge" src="http://timburrell.net/wp-content/gallery/amsterdam-2009/thumbs/thumbs_IMG_0245.JPG" width="150" height="125" />
			</a>
		</div>
	</div>
	 		
	<div id="ngg-image-24" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://timburrell.net/wp-content/gallery/amsterdam-2009/IMG_0246.JPG" title="Glass walls everywhere made for a nice view, but after an all night red-eye flight I was wishing for a dark corner." class="thickbox" rel="amsterdam-2009" >
				<img title="Switzerland Airport" alt="Switzerland Airport" src="http://timburrell.net/wp-content/gallery/amsterdam-2009/thumbs/thumbs_IMG_0246.JPG" width="150" height="125" />
			</a>
		</div>
	</div>
	 		
	<div id="ngg-image-25" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://timburrell.net/wp-content/gallery/amsterdam-2009/IMG_0247.JPG" title="A marvel of convenience." class="thickbox" rel="amsterdam-2009" >
				<img title="Swiss Vending Machine" alt="Swiss Vending Machine" src="http://timburrell.net/wp-content/gallery/amsterdam-2009/thumbs/thumbs_IMG_0247.JPG" width="150" height="125" />
			</a>
		</div>
	</div>
	 		
	<div id="ngg-image-26" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://timburrell.net/wp-content/gallery/amsterdam-2009/IMG_0252.JPG" title="I couldn't see the Alps but the countryside still looked really nice from the air." class="thickbox" rel="amsterdam-2009" >
				<img title="Zurich from the Air" alt="Zurich from the Air" src="http://timburrell.net/wp-content/gallery/amsterdam-2009/thumbs/thumbs_IMG_0252.JPG" width="150" height="125" />
			</a>
		</div>
	</div>
	 		
	<div id="ngg-image-28" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://timburrell.net/wp-content/gallery/amsterdam-2009/IMG_0260.JPG" title="A short lunch break at a local cafe for some tosti's and a sourcy.  Mmm... tosti." class="thickbox" rel="amsterdam-2009" >
				<img title="Amsterdam Cafe" alt="Amsterdam Cafe" src="http://timburrell.net/wp-content/gallery/amsterdam-2009/thumbs/thumbs_IMG_0260.JPG" width="150" height="125" />
			</a>
		</div>
	</div>
	 		
	<div id="ngg-image-29" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://timburrell.net/wp-content/gallery/amsterdam-2009/IMG_0261.JPG" title="I still can't figure out exactly what purpose they serve or how they keep all the canals properly maintained, but they sure are cool.  And who doesn't want to live in a house boat?" class="thickbox" rel="amsterdam-2009" >
				<img title="Amsterdam Canal I" alt="Amsterdam Canal I" src="http://timburrell.net/wp-content/gallery/amsterdam-2009/thumbs/thumbs_IMG_0261.JPG" width="150" height="125" />
			</a>
		</div>
	</div>
	 		
	<div id="ngg-image-30" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://timburrell.net/wp-content/gallery/amsterdam-2009/IMG_0262.JPG" title=" " class="thickbox" rel="amsterdam-2009" >
				<img title="Amsterdam Canal II" alt="Amsterdam Canal II" src="http://timburrell.net/wp-content/gallery/amsterdam-2009/thumbs/thumbs_IMG_0262.JPG" width="150" height="125" />
			</a>
		</div>
	</div>
	 		
	<div id="ngg-image-31" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://timburrell.net/wp-content/gallery/amsterdam-2009/IMG_0264.JPG" title=" " class="thickbox" rel="amsterdam-2009" >
				<img title="Jess" alt="Jess" src="http://timburrell.net/wp-content/gallery/amsterdam-2009/thumbs/thumbs_IMG_0264.JPG" width="150" height="125" />
			</a>
		</div>
	</div>
	 		
	<div id="ngg-image-32" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://timburrell.net/wp-content/gallery/amsterdam-2009/IMG_0268.JPG" title=" " class="thickbox" rel="amsterdam-2009" >
				<img title="Amsterdam Canal III" alt="Amsterdam Canal III" src="http://timburrell.net/wp-content/gallery/amsterdam-2009/thumbs/thumbs_IMG_0268.JPG" width="150" height="125" />
			</a>
		</div>
	</div>
	 		
	<div id="ngg-image-33" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://timburrell.net/wp-content/gallery/amsterdam-2009/IMG_0269.JPG" title="A typical street in Amsterdam." class="thickbox" rel="amsterdam-2009" >
				<img title="Amsterdam Street" alt="Amsterdam Street" src="http://timburrell.net/wp-content/gallery/amsterdam-2009/thumbs/thumbs_IMG_0269.JPG" width="150" height="125" />
			</a>
		</div>
	</div>
	 		
	<div id="ngg-image-34" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://timburrell.net/wp-content/gallery/amsterdam-2009/IMG_0271.JPG" title="These bikes are everywhere." class="thickbox" rel="amsterdam-2009" >
				<img title="Amsterdam Bikes" alt="Amsterdam Bikes" src="http://timburrell.net/wp-content/gallery/amsterdam-2009/thumbs/thumbs_IMG_0271.JPG" width="150" height="125" />
			</a>
		</div>
	</div>
	 		
	<div id="ngg-image-35" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://timburrell.net/wp-content/gallery/amsterdam-2009/IMG_0273.JPG" title=" " class="thickbox" rel="amsterdam-2009" >
				<img title="Amsterdam Canal IV" alt="Amsterdam Canal IV" src="http://timburrell.net/wp-content/gallery/amsterdam-2009/thumbs/thumbs_IMG_0273.JPG" width="150" height="125" />
			</a>
		</div>
	</div>
	 		
	<div id="ngg-image-36" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://timburrell.net/wp-content/gallery/amsterdam-2009/IMG_0274.JPG" title="There's lots of small vehicles in Amsterdam... this one made me laugh." class="thickbox" rel="amsterdam-2009" >
				<img title="General Lee" alt="General Lee" src="http://timburrell.net/wp-content/gallery/amsterdam-2009/thumbs/thumbs_IMG_0274.JPG" width="150" height="125" />
			</a>
		</div>
	</div>
	 		
	<div id="ngg-image-37" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://timburrell.net/wp-content/gallery/amsterdam-2009/IMG_0283.JPG" title="The swimming pool was really nice -- even included a super strong jet you could do stationary swimming against." class="thickbox" rel="amsterdam-2009" >
				<img title="Hotel Swimming Pool" alt="Hotel Swimming Pool" src="http://timburrell.net/wp-content/gallery/amsterdam-2009/thumbs/thumbs_IMG_0283.JPG" width="150" height="125" />
			</a>
		</div>
	</div>
	 		
	<div id="ngg-image-38" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://timburrell.net/wp-content/gallery/amsterdam-2009/IMG_0284.JPG" title=" " class="thickbox" rel="amsterdam-2009" >
				<img title="Statue" alt="Statue" src="http://timburrell.net/wp-content/gallery/amsterdam-2009/thumbs/thumbs_IMG_0284.JPG" width="150" height="125" />
			</a>
		</div>
	</div>
	 		
	<div id="ngg-image-39" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://timburrell.net/wp-content/gallery/amsterdam-2009/IMG_0302.JPG" title="Some dumbass feeding the rats." class="thickbox" rel="amsterdam-2009" >
				<img title="Winged Rats" alt="Winged Rats" src="http://timburrell.net/wp-content/gallery/amsterdam-2009/thumbs/thumbs_IMG_0302.JPG" width="150" height="125" />
			</a>
		</div>
	</div>
	 		
	<div id="ngg-image-40" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://timburrell.net/wp-content/gallery/amsterdam-2009/IMG_0312.JPG" title=" " class="thickbox" rel="amsterdam-2009" >
				<img title="Hotel Hot Tub" alt="Hotel Hot Tub" src="http://timburrell.net/wp-content/gallery/amsterdam-2009/thumbs/thumbs_IMG_0312.JPG" width="150" height="125" />
			</a>
		</div>
	</div>
	 		
	<div id="ngg-image-41" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://timburrell.net/wp-content/gallery/amsterdam-2009/IMG_0319.JPG" title=" " class="thickbox" rel="amsterdam-2009" >
				<img title="Hotel Sauna" alt="Hotel Sauna" src="http://timburrell.net/wp-content/gallery/amsterdam-2009/thumbs/thumbs_IMG_0319.JPG" width="150" height="125" />
			</a>
		</div>
	</div>
	 	 	
	<!-- Pagination -->
 	<div class='ngg-clear'></div>
 	
</div>


<p>As for the conference &#8212; I really enjoyed presenting, and got some good questions from people afterward which was great.  My paper is now published in <a href="http://www3.interscience.wiley.com/journal/117946199/grouphome/home.html">Computer Animation and Virtual Worlds Volume 20 Issue 2-3 (June 2009)</a> by Wiley InterScience.  </p>
<p>I enjoyed the research, and the whole process of grad school, but I&#8217;m also glad it&#8217;s all finally over and done with!  The trip and conference was a perfect way to say good-bye to that part of life.</p>
]]></content:encoded>
			<wfw:commentRss>http://timburrell.net/blog/2009-06-21/back-from-amsterdam/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Heading to Amsterdam soon!</title>
		<link>http://timburrell.net/blog/2009-06-15/heading-to-amsterdam-soon/</link>
		<comments>http://timburrell.net/blog/2009-06-15/heading-to-amsterdam-soon/#comments</comments>
		<pubDate>Mon, 15 Jun 2009 17:03:35 +0000</pubDate>
		<dc:creator>Tim.</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[Fluid simulation]]></category>

		<guid isPermaLink="false">http://timburrell.net/?p=673</guid>
		<description><![CDATA[<p>In less than an hour I&#8217;ll be leaving for the airport and will eventually be making my way to Amsterdam, after a half day in Switzerland.  I&#8217;m hugely excited about the trip &#8212; it&#8217;s my first time presenting a paper at a conference, and I think it&#8217;s really cool that my Master&#8217;s research is [...]</p>

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

	<a rel="nofollow" target="_blank" href="mailto:?subject=Heading%20to%20Amsterdam%20soon%21&amp;body=http%3A%2F%2Ftimburrell.net%2Fblog%2F2009-06-15%2Fheading-to-amsterdam-soon%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-06-15%2Fheading-to-amsterdam-soon%2F&amp;title=Heading%20to%20Amsterdam%20soon%21" 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-06-15%2Fheading-to-amsterdam-soon%2F&amp;title=Heading%20to%20Amsterdam%20soon%21" 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-06-15%2Fheading-to-amsterdam-soon%2F&amp;title=Heading%20to%20Amsterdam%20soon%21" 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-06-15%2Fheading-to-amsterdam-soon%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=Heading%20to%20Amsterdam%20soon%21&amp;url=http%3A%2F%2Ftimburrell.net%2Fblog%2F2009-06-15%2Fheading-to-amsterdam-soon%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-06-15%2Fheading-to-amsterdam-soon%2F&amp;title=Heading%20to%20Amsterdam%20soon%21" 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-06-15%2Fheading-to-amsterdam-soon%2F&amp;t=Heading%20to%20Amsterdam%20soon%21" 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-06-15%2Fheading-to-amsterdam-soon%2F&amp;title=Heading%20to%20Amsterdam%20soon%21&amp;source=timburrell.net+All+that+is+Tim+Burrell&amp;summary=In%20less%20than%20an%20hour%20I%27ll%20be%20leaving%20for%20the%20airport%20and%20will%20eventually%20be%20making%20my%20way%20to%20Amsterdam%2C%20after%20a%20half%20day%20in%20Switzerland.%20%20I%27m%20hugely%20excited%20about%20the%20trip%20--%20it%27s%20my%20first%20time%20presenting%20a%20paper%20at%20a%20conference%2C%20and%20I%20think%20it%27s%20rea" 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-06-15%2Fheading-to-amsterdam-soon%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-06-15%2Fheading-to-amsterdam-soon%2F&amp;title=Heading%20to%20Amsterdam%20soon%21" 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-06-15/heading-to-amsterdam-soon/#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>In less than an hour I&#8217;ll be leaving for the airport and will eventually be making my way to Amsterdam, after a half day in Switzerland.  I&#8217;m hugely excited about the trip &#8212; it&#8217;s my first time presenting a paper at a conference, and I think it&#8217;s really cool that my Master&#8217;s research is culminating into a trip to the Netherlands and a conference publication.  Not that I ever feared, or even worried too much about whether or not my research was making a contribution, but it&#8217;s great to know that other people got something out of it as well.</p>
<p>It&#8217;s also a nice bit of closure on the years spent head deep in fluid simulation stuff.  I really enjoyed doing it, and I&#8217;m glad I decided to do a Master&#8217;s at Dalhousie, but I&#8217;m also happy that soon it&#8217;ll be done and over with.  It&#8217;s an awesome way to end that period of research, and although I don&#8217;t know exactly how yet, I&#8217;m sure it&#8217;ll spark the beginning of something new too.</p>
<p>As excited as I am to present my research to others I must admit that I&#8217;m also looking forward to checking out Amsterdam and the Netherlands (and maybe even a surrounding country or two if there&#8217;s time).  I&#8217;ve never been to anywhere in Europe before, so I&#8217;m planning to make the most out of my free time while I&#8217;m there!  I don&#8217;t know how well connected Amsterdam is yet, but hopefully if there&#8217;s WiFi abound I should be able to update on the go!</p>
]]></content:encoded>
			<wfw:commentRss>http://timburrell.net/blog/2009-06-15/heading-to-amsterdam-soon/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Master&#8217;s Thesis</title>
		<link>http://timburrell.net/projects/2009-03-15/masters-thesis/</link>
		<comments>http://timburrell.net/projects/2009-03-15/masters-thesis/#comments</comments>
		<pubDate>Sun, 15 Mar 2009 13:22:31 +0000</pubDate>
		<dc:creator>Tim.</dc:creator>
				<category><![CDATA[Advected River Textures]]></category>
		<category><![CDATA[Blog]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[Fluid simulation]]></category>

		<guid isPermaLink="false">http://timburrell.net/?p=664</guid>
		<description><![CDATA[<p>It&#8217;s been a long wait, but I&#8217;m finally able to discuss my Master&#8217;s thesis: a real-time fluid simulation aimed at rendering large scale rivers for interactive applications like games.  My supervisors and I put together a paper based on the thesis, which has been accepted to CASA 2009, and will be published in the [...]</p>

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

	<a rel="nofollow" target="_blank" href="mailto:?subject=Master%27s%20Thesis&amp;body=http%3A%2F%2Ftimburrell.net%2Fprojects%2F2009-03-15%2Fmasters-thesis%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%2Fprojects%2F2009-03-15%2Fmasters-thesis%2F&amp;title=Master%27s%20Thesis" 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%2Fprojects%2F2009-03-15%2Fmasters-thesis%2F&amp;title=Master%27s%20Thesis" 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%2Fprojects%2F2009-03-15%2Fmasters-thesis%2F&amp;title=Master%27s%20Thesis" 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%2Fprojects%2F2009-03-15%2Fmasters-thesis%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=Master%27s%20Thesis&amp;url=http%3A%2F%2Ftimburrell.net%2Fprojects%2F2009-03-15%2Fmasters-thesis%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%2Fprojects%2F2009-03-15%2Fmasters-thesis%2F&amp;title=Master%27s%20Thesis" 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%2Fprojects%2F2009-03-15%2Fmasters-thesis%2F&amp;t=Master%27s%20Thesis" 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%2Fprojects%2F2009-03-15%2Fmasters-thesis%2F&amp;title=Master%27s%20Thesis&amp;source=timburrell.net+All+that+is+Tim+Burrell&amp;summary=It%27s%20been%20a%20long%20wait%2C%20but%20I%27m%20finally%20able%20to%20discuss%20my%20Master%27s%20thesis%3A%20a%20real-time%20fluid%20simulation%20aimed%20at%20rendering%20large%20scale%20rivers%20for%20interactive%20applications%20like%20games.%20%20My%20supervisors%20and%20I%20put%20together%20a%20paper%20based%20on%20the%20thesis%2C%20whi" 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%2Fprojects%2F2009-03-15%2Fmasters-thesis%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%2Fprojects%2F2009-03-15%2Fmasters-thesis%2F&amp;title=Master%27s%20Thesis" 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/projects/advected-river-textures/">Advected&nbsp;River&nbsp;Textures</a> by Tim. <a href="http://timburrell.net/projects/2009-03-15/masters-thesis/#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>It&#8217;s been a long wait, but I&#8217;m finally able to discuss my <a href="/content/Advected River Textures - Thesis.pdf">Master&#8217;s thesis</a>: a real-time fluid simulation aimed at rendering large scale rivers for interactive applications like games.  My supervisors and I put together a <a href="/content/Advected River Textures - Draft.pdf">paper based on the thesis</a>, which has been accepted to <a href="http://hmi.ewi.utwente.nl/CASA09">CASA 2009</a>, and will be published in the proceedings of the 22nd Annual Conference on Computer Animation and Social Agents.</p>
<p>For more information on my thesis, and a video of the application in action, check out the <a href="/projects/advected-river-textures">project page</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://timburrell.net/projects/2009-03-15/masters-thesis/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fun with Variadic Templates: Part II</title>
		<link>http://timburrell.net/blog/2009-02-22/fun-with-variadic-templates-part-ii/</link>
		<comments>http://timburrell.net/blog/2009-02-22/fun-with-variadic-templates-part-ii/#comments</comments>
		<pubDate>Sun, 22 Feb 2009 13:33:57 +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[Development]]></category>
		<category><![CDATA[Effective C++]]></category>
		<category><![CDATA[Metaprogramming]]></category>

		<guid isPermaLink="false">http://timburrell.net/?p=479</guid>
		<description><![CDATA[<p>As promised in Part I, I think it&#8217;s about time we start to actually have some fun with C++0x&#8217;s variadiac templates.  There&#8217;s lots of basic tutorials out there and people talking about variadics here and there, but I haven&#8217;t seen anyone really delve into yet, so here we go.  First up, the most [...]</p>

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

	<a rel="nofollow" target="_blank" href="mailto:?subject=Fun%20with%20Variadic%20Templates%3A%20Part%20II&amp;body=http%3A%2F%2Ftimburrell.net%2Fblog%2F2009-02-22%2Ffun-with-variadic-templates-part-ii%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-02-22%2Ffun-with-variadic-templates-part-ii%2F&amp;title=Fun%20with%20Variadic%20Templates%3A%20Part%20II" 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-02-22%2Ffun-with-variadic-templates-part-ii%2F&amp;title=Fun%20with%20Variadic%20Templates%3A%20Part%20II" 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-02-22%2Ffun-with-variadic-templates-part-ii%2F&amp;title=Fun%20with%20Variadic%20Templates%3A%20Part%20II" 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-02-22%2Ffun-with-variadic-templates-part-ii%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=Fun%20with%20Variadic%20Templates%3A%20Part%20II&amp;url=http%3A%2F%2Ftimburrell.net%2Fblog%2F2009-02-22%2Ffun-with-variadic-templates-part-ii%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-02-22%2Ffun-with-variadic-templates-part-ii%2F&amp;title=Fun%20with%20Variadic%20Templates%3A%20Part%20II" 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-02-22%2Ffun-with-variadic-templates-part-ii%2F&amp;t=Fun%20with%20Variadic%20Templates%3A%20Part%20II" 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-02-22%2Ffun-with-variadic-templates-part-ii%2F&amp;title=Fun%20with%20Variadic%20Templates%3A%20Part%20II&amp;source=timburrell.net+All+that+is+Tim+Burrell&amp;summary=As%20promised%20in%20Part%20I%2C%20I%20think%20it%27s%20about%20time%20we%20start%20to%20actually%20have%20some%20fun%20with%20C%2B%2B0x%27s%20variadiac%20templates.%20%20There%27s%20lots%20of%20basic%20tutorials%20out%20there%20and%20people%20talking%20about%20variadics%20here%20and%20there%2C%20but%20I%20haven%27t%20seen%20anyone%20really%20delve%20i" 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-02-22%2Ffun-with-variadic-templates-part-ii%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-02-22%2Ffun-with-variadic-templates-part-ii%2F&amp;title=Fun%20with%20Variadic%20Templates%3A%20Part%20II" 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-02-22/fun-with-variadic-templates-part-ii/#comments">Comments (1)</a><br />&copy;2010 <a href="http://timburrell.net">timburrell.net</a>. All Rights Reserved.</em></small>]]></description>
			<content:encoded><![CDATA[<p>As promised in <a href="/blog/2009-02-18/fun-with-variadic-templates-part-i/">Part I</a>, I think it&#8217;s about time we start to actually have some fun with C++0x&#8217;s variadiac templates.  There&#8217;s lots of basic tutorials out there and people talking about variadics here and there, but I haven&#8217;t seen anyone really delve into yet, so here we go.  First up, the most trivial but of metaprogramming we can do &#8212; emulating the C++0x <code>sizeof...</code> operator (which yields the number of parameters in a parameter pack):</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
</pre></td><td class="code" width="100%"><pre class="cpp" style="font-family:monospace;"><span style="color: #0000ff;">template</span> <span style="color: #000080;">&lt;</span><span style="color: #0000ff;">typename</span>... <span style="color: #007788;">Args</span><span style="color: #000080;">&gt;</span> <span style="color: #0000ff;">struct</span> count<span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">template</span> <span style="color: #000080;">&lt;</span><span style="color: #0000ff;">typename</span> T, <span style="color: #0000ff;">typename</span>... <span style="color: #007788;">Args</span><span style="color: #000080;">&gt;</span> <span style="color: #0000ff;">struct</span> count<span style="color: #000080;">&lt;</span>T, Args...<span style="color: #000080;">&gt;</span> <span style="color: #008000;">&#123;</span>
        <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> num <span style="color: #000080;">=</span> count<span style="color: #000080;">&lt;</span>Args...<span style="color: #000080;">&gt;</span><span style="color: #008080;">::</span><span style="color: #007788;">num</span> <span style="color: #000040;">+</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">template</span> <span style="color: #000080;">&lt;&gt;</span> <span style="color: #0000ff;">struct</span> count<span style="color: #000080;">&lt;&gt;</span> <span style="color: #008000;">&#123;</span> <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> num <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> <span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #666666;">// let's use the struct</span>
<span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> numArgs <span style="color: #000080;">=</span> count<span style="color: #000080;">&lt;</span><span style="color: #0000dd;">1</span>, <span style="color: #0000dd;">2</span>, <span style="color: #0000dd;">3</span>, <span style="color: #0000dd;">4</span>, <span style="color: #0000dd;">5</span>, <span style="color: #0000dd;">6</span>, <span style="color: #0000dd;">7</span>, <span style="color: #0000dd;">8</span>, <span style="color: #0000dd;">9</span>, <span style="color: #0000dd;">10</span><span style="color: #000080;">&gt;</span><span style="color: #008080;">;</span> <span style="color: #666666;">// numArgs will be equal to 10 because there are 10 parameters given to the count struct</span></pre></td></tr></table></div>

<p>Line 1, is pretty much the root of all template metaprogramming trickery.  The fundamentals of it all relies on recursive partial specialization, and line 1 just sets up a forward declaration to the <code>count struct</code>, which never actually gets used.  There&#8217;s some complicated rules to how partial specializations are chosen by a C++ compiler, but the basic rule of thumb is that the most specialized version of the template that applies is what&#8217;s chosen.  So although our instantiation at line 10 could match our blank forward declaration, it doesn&#8217;t.  The meat of our tiny template metaprogram gets called instead: the recursive partial specialization at line 3.</p>
<p>And this partial specialization brings us to the key behind using variadic templates in the real-world.  Since it&#8217;s not possible to do random access on the pack elements, the only choice is to &#8220;unroll&#8221; the packs recursively.  The trick is to define the partial specialization such that the first argument is just a single parameter, and the next is a parameter pack:</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;"><span style="color: #0000ff;">template</span> <span style="color: #000080;">&lt;</span><span style="color: #0000ff;">typename</span> FirstArg, <span style="color: #0000ff;">typename</span>... <span style="color: #007788;">RemainingArgs</span><span style="color: #000080;">&gt;</span> <span style="color: #0000ff;">struct</span> count<span style="color: #000080;">&lt;</span>T, Args...<span style="color: #000080;">&gt;</span><span style="color: #008080;">;</span></pre></div></div>

<p>When the above struct is instantiated with a parameter pack, the first element gets pulled out of the pack into <code>FirstArg</code>, and the remaining parameters are placed in <code>RemainingArgs</code>.  So, if the <code>count struct</code> makes an instantiation of itself with <code>RemainingArgs...</code> as the only instantiation parameter, again the first parameter will get pulled out and become <code>FirstArg</code>, and the rest will get placed in <code>RemainingArgs</code>.  Thus, we can now easily unroll any parameter pack!  </p>
<p>Let&#8217;s go back to the first code listing at line 4.  This is where the recursion happens, and we can see exactly what we were talking about above happening.  The <code>count struct</code> calls itself with the remaining arguments, and simply keeps track of the number of times the recursion happens by incrementing a counter along the way.  When the instantiation finishes <code>count::num</code> will be set to the number of parameters in the parameter pack as of the initial instantiation plus 1.  We add one because technically the recursion only counts the number of items in the parameter pack which, due to our partial specialization, is going to be one less than the number of parameters we pass to <code>count</code> (remember the first element gets picked out of the parameter pack).</p>
<p>The next thing we need to do, like in all forms of recursion, is to define the termination condition of the recursion.  There are a number of ways to do this, but in this first example, we employ the &#8220;empty partial specialization&#8221; trick:</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;"><span style="color: #0000ff;">template</span> <span style="color: #000080;">&lt;&gt;</span> <span style="color: #0000ff;">struct</span> count<span style="color: #000080;">&lt;&gt;</span> <span style="color: #008000;">&#123;</span> <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> num <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> <span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span></pre></div></div>

<p>This terminates the recursion not because num is implicitly set to zero, but because this specialization does not call itself.  Therefore when the recursion has completely unrolled the parameter pack we hit this empty specialization and since there is no recursive call, nothing else happens.  We only bother to define num here so that if someone explicitly instantiates a <code>count struct</code> with no arguments, they can still call <code>count::num</code> and get a value of zero rather than a compilation error.</p>
<p>Alright, so that was fun, now let&#8217;s look at something a little more complex, and a lot more useful:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
</pre></td><td class="code" width="100%"><pre class="cpp" style="font-family:monospace;"><span style="color: #0000ff;">template</span> <span style="color: #000080;">&lt;</span><span style="color: #0000ff;">int</span> N, <span style="color: #0000ff;">typename</span>... <span style="color: #007788;">Args</span><span style="color: #000080;">&gt;</span> <span style="color: #0000ff;">struct</span> elementType<span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">template</span> <span style="color: #000080;">&lt;</span><span style="color: #0000ff;">int</span> N, <span style="color: #0000ff;">typename</span> T, <span style="color: #0000ff;">typename</span>... <span style="color: #007788;">Args</span><span style="color: #000080;">&gt;</span>
<span style="color: #0000ff;">struct</span> elementType<span style="color: #000080;">&lt;</span>N, T, Args...<span style="color: #000080;">&gt;</span> <span style="color: #008000;">&#123;</span>
        static_assert<span style="color: #008000;">&#40;</span>N <span style="color: #000080;">&lt;</span> <span style="color: #0000dd;">sizeof</span>...<span style="color: #008000;">&#40;</span>Args<span style="color: #008000;">&#41;</span> <span style="color: #000040;">+</span> <span style="color: #0000dd;">1</span>, <span style="color: #FF0000;">&quot;overflow!&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
        <span style="color: #0000ff;">typedef</span> <span style="color: #0000ff;">typename</span> elementType<span style="color: #000080;">&lt;</span>N <span style="color: #000040;">-</span> <span style="color: #0000dd;">1</span>, Args...<span style="color: #000080;">&gt;</span><span style="color: #008080;">::</span><span style="color: #007788;">type</span> type<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">template</span> <span style="color: #000080;">&lt;</span><span style="color: #0000ff;">typename</span> T, <span style="color: #0000ff;">typename</span>... <span style="color: #007788;">Args</span><span style="color: #000080;">&gt;</span>
<span style="color: #0000ff;">struct</span> elementType<span style="color: #000080;">&lt;</span><span style="color: #0000dd;">0</span>, T, Args...<span style="color: #000080;">&gt;</span> <span style="color: #008000;">&#123;</span>
        <span style="color: #0000ff;">typedef</span> T type<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #666666;">// now let's use our elementType struct</span>
elementType<span style="color: #000080;">&lt;</span><span style="color: #0000dd;">0</span>, <span style="color: #0000ff;">int</span>, <span style="color: #0000ff;">char</span>, std<span style="color: #008080;">::</span><span style="color: #007788;">string</span>, <span style="color: #0000ff;">double</span><span style="color: #000080;">&gt;</span><span style="color: #008080;">::</span><span style="color: #007788;">type</span> var0 <span style="color: #000080;">=</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span> <span style="color: #666666;">// var0 is an int</span>
elementType<span style="color: #000080;">&lt;</span><span style="color: #0000dd;">1</span>, <span style="color: #0000ff;">int</span>, <span style="color: #0000ff;">char</span>, std<span style="color: #008080;">::</span><span style="color: #007788;">string</span>, <span style="color: #0000ff;">double</span><span style="color: #000080;">&gt;</span><span style="color: #008080;">::</span><span style="color: #007788;">type</span> var1 <span style="color: #000080;">=</span> <span style="color: #FF0000;">'2'</span><span style="color: #008080;">;</span> <span style="color: #666666;">// var1 is a char</span>
elementType<span style="color: #000080;">&lt;</span><span style="color: #0000dd;">2</span>, <span style="color: #0000ff;">int</span>, <span style="color: #0000ff;">char</span>, std<span style="color: #008080;">::</span><span style="color: #007788;">string</span>, <span style="color: #0000ff;">double</span><span style="color: #000080;">&gt;</span><span style="color: #008080;">::</span><span style="color: #007788;">type</span> var2 <span style="color: #000080;">=</span> <span style="color: #FF0000;">&quot;;P&quot;</span><span style="color: #008080;">;</span> <span style="color: #666666;">// var2 is a string</span>
elementType<span style="color: #000080;">&lt;</span><span style="color: #0000dd;">3</span>, <span style="color: #0000ff;">int</span>, <span style="color: #0000ff;">char</span>, std<span style="color: #008080;">::</span><span style="color: #007788;">string</span>, <span style="color: #0000ff;">double</span><span style="color: #000080;">&gt;</span><span style="color: #008080;">::</span><span style="color: #007788;">type</span> var3 <span style="color: #000080;">=</span> <span style="color:#800080;">3.14159</span><span style="color: #008080;">;</span> <span style="color: #666666;">// var3 is a double</span></pre></td></tr></table></div>

<p>The basic idea behind the <code>elementType struct</code> is that we give the struct an index and a variable number of types, and we can then use the struct&#8217;s <code>type</code> definition as a custom data type that maps back to whatever parameter the index value is associated with.  The above listing at lines 15 through 18 do exactly that.</p>
<p>What&#8217;s so great about that, and why would such a thing be useful?  While it may not seem like such an awesome thing to do at first, what we&#8217;ve done is found a way to pick elements out of a parameter pack by an index.  Essentially we&#8217;ve given ourselves a way to allow random access to packs.  The technique used is similar to the <code>count struct</code>, but not quite the same.  We&#8217;re still using recursion, but this time we need to stop the recursion at the right element.</p>
<p>Take a look at line 6 in the above listing.  This is where all the magic happens.  The <code>elementType struct</code> calls itself using the same variadic unrolling trick that <code>count</code> used, except we decrement N at each step of the way, until N reaches zero, and we hit the termination condition (the partial specialization for when N is zero at lines 9 through 12).  This means if we give an index of 5, we&#8217;ll get 5 recursions and the typedef that ends up getting defined is the one for the 6th parameter in the pack.</p>
<p>No problem right!  So let&#8217;s put all this together for something actually useful &#8212; a variadic tuple class:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code" width="100%"><pre class="cpp" style="font-family:monospace;"><span style="color: #0000ff;">template</span> <span style="color: #000080;">&lt;</span><span style="color: #0000ff;">typename</span>... <span style="color: #007788;">Args</span><span style="color: #000080;">&gt;</span> 
<span style="color: #0000ff;">struct</span> tuple <span style="color: #008000;">&#123;</span>
        tuple<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> Args<span style="color: #000040;">&amp;</span>... <span style="color: #007788;">args</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span><span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
&nbsp;
tuple<span style="color: #000080;">&lt;</span><span style="color: #0000ff;">int</span>, <span style="color: #0000ff;">char</span><span style="color: #000080;">&gt;</span> t1<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">1</span>, <span style="color: #FF0000;">'2'</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span></pre></td></tr></table></div>

<p>The idea is we want to be able to use our tuple class like line 6 shows.  This is the example from <a href="/blog/2009-02-18/fun-with-variadic-templates-part-i">Part I</a>, and as I previously mentioned, this isn&#8217;t so useful.  Sure it lets us declare a tuple like we want, but it doesn&#8217;t actually store the tuple&#8217;s constructor arguments, nor does it give us any way to retrieve them.  So how are we going to store the elements?</p>
<p>Like all things variadic, we&#8217;re going to use a recursive template definition!  The tuple class will instantiate itself recursively, storing the arguments as it goes.  Basically the tuple class will become a compile-time linked list of sorts.  This means we&#8217;ll also have to use more metaprogramming to get access to the elements, but for now let&#8217;s take a look at the tuple class definition itself:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
</pre></td><td class="code" width="100%"><pre class="cpp" style="font-family:monospace;"><span style="color: #0000ff;">template</span> <span style="color: #000080;">&lt;</span><span style="color: #0000ff;">typename</span>... <span style="color: #007788;">Args</span><span style="color: #000080;">&gt;</span> <span style="color: #0000ff;">struct</span> tuple<span style="color: #008080;">;</span>
&nbsp;
<span style="color: #666666;">// recursion termination condition</span>
<span style="color: #0000ff;">template</span> <span style="color: #000080;">&lt;&gt;</span> <span style="color: #0000ff;">struct</span> tuple<span style="color: #000080;">&lt;&gt;</span> <span style="color: #008000;">&#123;</span><span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #666666;">// recursive tuple template</span>
<span style="color: #0000ff;">template</span> <span style="color: #000080;">&lt;</span><span style="color: #0000ff;">typename</span> Head, <span style="color: #0000ff;">typename</span>... <span style="color: #007788;">TailArgs</span><span style="color: #000080;">&gt;</span>
<span style="color: #0000ff;">struct</span> tuple<span style="color: #000080;">&lt;</span>Head, TailArgs...<span style="color: #000080;">&gt;</span> <span style="color: #008080;">:</span> <span style="color: #0000ff;">private</span> tuple<span style="color: #000080;">&lt;</span>TailArgs...<span style="color: #000080;">&gt;</span> <span style="color: #008000;">&#123;</span>
        <span style="color: #ff0000; font-style: italic;">/**
         * \brief  Recursive constructor
        **/</span>
        tuple<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> Head<span style="color: #000040;">&amp;</span> head, <span style="color: #0000ff;">const</span> TailArgs<span style="color: #000040;">&amp;</span>... <span style="color: #007788;">tailArgs</span><span style="color: #008000;">&#41;</span> <span style="color: #008080;">:</span>
                tuple<span style="color: #000080;">&lt;</span>TailArgs...<span style="color: #000080;">&gt;</span><span style="color: #008000;">&#40;</span>tailArgs...<span style="color: #008000;">&#41;</span>,
                mHead<span style="color: #008000;">&#40;</span>head<span style="color: #008000;">&#41;</span>
        <span style="color: #008000;">&#123;</span>
        <span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">private</span><span style="color: #008080;">:</span>
        Head mHead<span style="color: #008080;">;</span> <span style="color: #666666;">///&lt; Tuple head</span>
<span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span></pre></td></tr></table></div>

<p>Although this might look a bit weird at first, there&#8217;s not actually that much that&#8217;s new here.  We&#8217;re still just recursively defining a template class, and unrolling a parameter pack as we do it, but we&#8217;re doing it via inheritance this time.  The tuple class&#8217; base class is actually itself.  We use the same trick we&#8217;ve used before to extract the first parameter from the parameter pack, but now we pass the template&#8217;s <code>TailArgs</code> to the base class so that the base class&#8217; <code>Head</code> becomes the first element in its super class&#8217; <code>TailArgs</code>.</p>
<p>When the instantiation of this class finishes it will be a tuple class that has an <code>mHead</code> member variable set to the value of the first argument in the parameter pack given to the tuple&#8217;s constructor as the <code>head</code> variable (which you can see being set at line 14).  That tuple class will have a base class that itself has an <code>mHead</code> member variable which is set to be the second parameter in the initial instantiation&#8217;s parameter pack (or the first parameter given to the base class instantiation).  This process repeats until all the parameters in the initial pack are exhausted and the termination condition is hit.</p>
<p>Okay, so that&#8217;s pretty cool, but now what?  Basically we&#8217;ve got this weirdly constructed tuple class with a strange inheritance hierarchy that stores all the elements given to the constructor &#8212; we still need some method for extracting them!  This is where all our previous metaprogramming fun comes into play.  We&#8217;ve already built much of the framework we need to make this happen:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
</pre></td><td class="code" width="100%"><pre class="cpp" style="font-family:monospace;"><span style="color: #0000ff;">template</span> <span style="color: #000080;">&lt;</span><span style="color: #0000ff;">typename</span> Head, <span style="color: #0000ff;">typename</span>... <span style="color: #007788;">TailArgs</span><span style="color: #000080;">&gt;</span>
<span style="color: #0000ff;">struct</span> tuple<span style="color: #000080;">&lt;</span>Head, TailArgs...<span style="color: #000080;">&gt;</span> <span style="color: #008080;">:</span> <span style="color: #0000ff;">private</span> tuple<span style="color: #000080;">&lt;</span>TailArgs...<span style="color: #000080;">&gt;</span> <span style="color: #008000;">&#123;</span>
        <span style="color: #ff0000; font-style: italic;">/**
         * \brief  Recursive constructor
        **/</span>
        tuple<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> Head<span style="color: #000040;">&amp;</span> head, <span style="color: #0000ff;">const</span> TailArgs<span style="color: #000040;">&amp;</span>... <span style="color: #007788;">tailArgs</span><span style="color: #008000;">&#41;</span> <span style="color: #008080;">:</span>
                tuple<span style="color: #000080;">&lt;</span>TailArgs...<span style="color: #000080;">&gt;</span><span style="color: #008000;">&#40;</span>tailArgs...<span style="color: #008000;">&#41;</span>,
                mHead<span style="color: #008000;">&#40;</span>head<span style="color: #008000;">&#41;</span>
        <span style="color: #008000;">&#123;</span>
        <span style="color: #008000;">&#125;</span>
&nbsp;
        <span style="color: #ff0000; font-style: italic;">/**
         * \brief  Get a tuple argument
        **/</span>
        <span style="color: #0000ff;">template</span> <span style="color: #000080;">&lt;</span><span style="color: #0000ff;">int</span> N<span style="color: #000080;">&gt;</span>
        <span style="color: #0000ff;">typename</span> elementType<span style="color: #000080;">&lt;</span>N, Head, TailArgs...<span style="color: #000080;">&gt;</span><span style="color: #008080;">::</span><span style="color: #007788;">type</span>
        get<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #0000ff;">const</span> <span style="color: #008000;">&#123;</span>
                <span style="color: #0000ff;">return</span> getValueFromTuple<span style="color: #000080;">&lt;</span>N<span style="color: #000080;">&gt;</span><span style="color: #008080;">::</span><span style="color: #0000ff;">template</span> getValue<span style="color: #000080;">&lt;</span><span style="color: #0000ff;">typename</span> elementType<span style="color: #000080;">&lt;</span>N, Head, TailArgs...<span style="color: #000080;">&gt;</span><span style="color: #008080;">::</span><span style="color: #007788;">type</span>, Head, TailArgs...<span style="color: #000080;">&gt;</span><span style="color: #008000;">&#40;</span><span style="color: #000040;">*</span><span style="color: #0000dd;">this</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
        <span style="color: #008000;">&#125;</span>
&nbsp;
        <span style="color: #ff0000; font-style: italic;">/**
         * \brief  Get the head value
        **/</span>
        Head                            head<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #0000ff;">const</span> <span style="color: #008000;">&#123;</span> <span style="color: #0000ff;">return</span> mHead<span style="color: #008080;">;</span> <span style="color: #008000;">&#125;</span>
&nbsp;
        <span style="color: #ff0000; font-style: italic;">/**
         * \brief  Get the next argument in the chain
        **/</span>
        <span style="color: #0000ff;">const</span> tuple<span style="color: #000080;">&lt;</span>TailArgs...<span style="color: #000080;">&gt;</span><span style="color: #000040;">&amp;</span>       next<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #0000ff;">const</span> <span style="color: #008000;">&#123;</span> <span style="color: #0000ff;">return</span> <span style="color: #000040;">*</span><span style="color: #0000dd;">this</span><span style="color: #008080;">;</span> <span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">private</span><span style="color: #008080;">:</span>
        Head                            mHead<span style="color: #008080;">;</span>                                  <span style="color: #666666;">///&lt; Tuple head</span>
<span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #666666;">// let's use our new get function!</span>
tuple<span style="color: #000080;">&lt;</span><span style="color: #0000ff;">int</span>, <span style="color: #0000ff;">char</span>, <span style="color: #0000ff;">bool</span>, <span style="color: #0000ff;">double</span><span style="color: #000080;">&gt;</span> t1<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">1</span>, <span style="color: #FF0000;">'2'</span>, <span style="color: #0000ff;">true</span>, <span style="color:#800080;">3.14159</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">char</span> c <span style="color: #000080;">=</span> t1.<span style="color: #007788;">get</span><span style="color: #000080;">&lt;</span><span style="color: #0000dd;">1</span><span style="color: #000080;">&gt;</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> <span style="color: #666666;">// template get function where the index specified returns that parameter of the tuple class</span></pre></td></tr></table></div>

<p>The first function we&#8217;ve added is the tuple&#8217;s <code>get function</code>, which can be seen being used at line 37.  So how the %@*! does that work anyway?  </p>
<p>Our new class member template function works pretty much the same as <a href="http://www.boost.org/doc/libs/1_38_0/libs/tuple/doc/tuple_users_guide.html">Boost&#8217;s tuple library</a> (although much simpler).  All we&#8217;ve done is defined a template function that takes an integer as a template parameter, and we&#8217;ve used our <code>elementType struct</code>, which we&#8217;ve already seen from earlier in the article, to set the return type of the function to whatever type is at that index in the tuple&#8217;s parameter pack!</p>
<p>We are missing some pretty important code though.  The <code>get function</code> then calls the <code>getValue function</code>, which we&#8217;ve yet to define:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
</pre></td><td class="code" width="100%"><pre class="cpp" style="font-family:monospace;"><span style="color: #0000ff;">template</span> <span style="color: #000080;">&lt;</span><span style="color: #0000ff;">int</span> N<span style="color: #000080;">&gt;</span>
<span style="color: #0000ff;">struct</span> getValueFromTuple <span style="color: #008000;">&#123;</span>
        <span style="color: #0000ff;">template</span> <span style="color: #000080;">&lt;</span><span style="color: #0000ff;">typename</span> ReturnType, <span style="color: #0000ff;">typename</span> Head, <span style="color: #0000ff;">typename</span>... <span style="color: #007788;">TailArgs</span><span style="color: #000080;">&gt;</span>
        <span style="color: #0000ff;">static</span> ReturnType getValue<span style="color: #008000;">&#40;</span>tuple<span style="color: #000080;">&lt;</span>Head, TailArgs...<span style="color: #000080;">&gt;</span><span style="color: #000040;">&amp;</span> t<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>                                                                          
                <span style="color: #0000ff;">return</span> getValueFromTuple<span style="color: #000080;">&lt;</span>N <span style="color: #000040;">-</span> <span style="color: #0000dd;">1</span><span style="color: #000080;">&gt;</span><span style="color: #008080;">::</span><span style="color: #0000ff;">template</span> getValue<span style="color: #000080;">&lt;</span>ReturnType, TailArgs...<span style="color: #000080;">&gt;</span><span style="color: #008000;">&#40;</span>t.<span style="color: #007788;">next</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
        <span style="color: #008000;">&#125;</span>                                                                          
&nbsp;
        <span style="color: #0000ff;">template</span> <span style="color: #000080;">&lt;</span><span style="color: #0000ff;">typename</span> ReturnType, <span style="color: #0000ff;">typename</span> Head, <span style="color: #0000ff;">typename</span>... <span style="color: #007788;">TailArgs</span><span style="color: #000080;">&gt;</span>
        <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">const</span> ReturnType getValue<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> tuple<span style="color: #000080;">&lt;</span>Head, TailArgs...<span style="color: #000080;">&gt;</span><span style="color: #000040;">&amp;</span> t<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>                                                                          
                <span style="color: #0000ff;">return</span> getValueFromTuple<span style="color: #000080;">&lt;</span>N <span style="color: #000040;">-</span> <span style="color: #0000dd;">1</span><span style="color: #000080;">&gt;</span><span style="color: #008080;">::</span><span style="color: #0000ff;">template</span> getValue<span style="color: #000080;">&lt;</span>ReturnType, TailArgs...<span style="color: #000080;">&gt;</span><span style="color: #008000;">&#40;</span>t.<span style="color: #007788;">next</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
        <span style="color: #008000;">&#125;</span>                                                                          
<span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>                                                                           
&nbsp;
<span style="color: #666666;">// termination condition for when getValueFromTuple is instantiated with zero</span>
<span style="color: #0000ff;">template</span> <span style="color: #000080;">&lt;&gt;</span>
<span style="color: #0000ff;">struct</span> getValueFromTuple<span style="color: #000080;">&lt;</span><span style="color: #0000dd;">0</span><span style="color: #000080;">&gt;</span> <span style="color: #008000;">&#123;</span>
        <span style="color: #0000ff;">template</span> <span style="color: #000080;">&lt;</span><span style="color: #0000ff;">typename</span> ReturnType, <span style="color: #0000ff;">typename</span>... <span style="color: #007788;">Args</span><span style="color: #000080;">&gt;</span>
        <span style="color: #0000ff;">static</span> ReturnType getValue<span style="color: #008000;">&#40;</span>tuple<span style="color: #000080;">&lt;</span>Args...<span style="color: #000080;">&gt;</span><span style="color: #000040;">&amp;</span> t<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>                                                                         
                <span style="color: #0000ff;">return</span> t.<span style="color: #007788;">head</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
        <span style="color: #008000;">&#125;</span>                                                                         
&nbsp;
        <span style="color: #0000ff;">template</span> <span style="color: #000080;">&lt;</span><span style="color: #0000ff;">typename</span> ReturnType, <span style="color: #0000ff;">typename</span>... <span style="color: #007788;">Args</span><span style="color: #000080;">&gt;</span>
        <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">const</span> ReturnType getValue<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> tuple<span style="color: #000080;">&lt;</span>Args...<span style="color: #000080;">&gt;</span><span style="color: #000040;">&amp;</span> t<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>                                                                         
                <span style="color: #0000ff;">return</span> t.<span style="color: #007788;">head</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
        <span style="color: #008000;">&#125;</span>                                                                         
<span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span></pre></td></tr></table></div>

<p>This might look a bit complicated, but there&#8217;s absolutely nothing here we haven&#8217;t seen before.  We define a template struct called getValueFromTuple that takes an integer as a template parameter.  This is done so that we can partially specialize the struct so we have a termination condition for the function we actually need (<code>getValue</code>).  C++ function templates are a bit more limited than class templates in how we can partially specialize them &#8212; specific specializations by constants are not allowed, so we use this struct wrapping trick to give us what we need.</p>
<p>The <code>getValue function</code> is also nothing new.  It does the exact same recursive unrolling that the <code>elementType struct</code> uses to extract a specific parameter by index.  The function recursively instantiates itself until N reaches zero and the termination condition is called.  The trick here is that <code>getValue</code> calls the tuple class&#8217; <code>next() function</code> during each instantiation, which passes the tuple&#8217;s base class to the next instantiation of the function.  All we&#8217;re doing here is walking the &#8220;list&#8221; of parameters passed to the tuple&#8217;s constructor, we just happen to be doing it by walking the class hierarchy.</p>
<p>Let&#8217;s take a quick look at the tuple&#8217;s <code>next() function</code> to see how this works:</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;"><span style="color: #0000ff;">const</span> tuple<span style="color: #000080;">&lt;</span>TailArgs...<span style="color: #000080;">&gt;</span><span style="color: #000040;">&amp;</span>       next<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #0000ff;">const</span> <span style="color: #008000;">&#123;</span> <span style="color: #0000ff;">return</span> <span style="color: #000040;">*</span><span style="color: #0000dd;">this</span><span style="color: #008080;">;</span> <span style="color: #008000;">&#125;</span></pre></div></div>

<p>This is how we trick the compiler into returning its base class &#8212; which has an <code>mHead</code> that contains the next parameter in the pack.  The return type is the same type that the base class has, so when we return ourselves through the <code>this pointer</code> the compiler does the right thing and casts down to the base class.</p>
<p>So there we go: a fully functioning variadic tuple class that stores its constructor parameters and gives us a way to get at them by their index!  We can now do this:</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;">tuple<span style="color: #000080;">&lt;</span><span style="color: #0000ff;">int</span>, <span style="color: #0000ff;">char</span>, string, <span style="color: #0000ff;">double</span><span style="color: #000080;">&gt;</span> t1<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">1</span>, <span style="color: #FF0000;">'2'</span>, <span style="color: #FF0000;">&quot;variadics rule&quot;</span>, <span style="color:#800080;">3.14159</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">int</span>    var0 <span style="color: #000080;">=</span> t1.<span style="color: #007788;">get</span><span style="color: #000080;">&lt;</span><span style="color: #0000dd;">0</span><span style="color: #000080;">&gt;</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> <span style="color: #666666;">// var0 is now 1</span>
<span style="color: #0000ff;">char</span>   var1 <span style="color: #000080;">=</span> t1.<span style="color: #007788;">get</span><span style="color: #000080;">&lt;</span><span style="color: #0000dd;">1</span><span style="color: #000080;">&gt;</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> <span style="color: #666666;">// var1 is '2'</span>
string var2 <span style="color: #000080;">=</span> t1.<span style="color: #007788;">get</span><span style="color: #000080;">&lt;</span><span style="color: #0000dd;">2</span><span style="color: #000080;">&gt;</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> <span style="color: #666666;">// var2 is now &quot;variadics rule&quot;</span>
<span style="color: #0000ff;">double</span> var3 <span style="color: #000080;">=</span> t1.<span style="color: #007788;">get</span><span style="color: #000080;">&lt;</span><span style="color: #0000dd;">3</span><span style="color: #000080;">&gt;</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> <span style="color: #666666;">// var3 is now 3.14159</span></pre></div></div>

<p>Sweet!  Of course there are many improvements that could be made such as allowing access to elements by reference (for efficiently storing and retrieving large structures), adding iterators, copy constructors, operator overrides, etc, but I&#8217;ll leave that stuff as reader exercises <img src='http://timburrell.net/smilies/yahoo_smiley.gif' alt='&#58;&#41;' class='wp-smiley' width='18' height='18' title='&#58;&#41;' />.</p>
<p>For the next installment the plan is to go even deeper down the the metaprogramming hole, and see what kind of compile-time fun we can have.  Template metaprogramming is a really useful skill to have; the more you can do at compile time, the fewer instructions need to get executed at runtime, plus, as we&#8217;ve just seen in this article, metaprogramming trickery can make other code more readable and, in turn, easier to maintain.  Not only that but playing around with template metaprogramming is a great way to get to know your compiler, and the C++ language!</p>
]]></content:encoded>
			<wfw:commentRss>http://timburrell.net/blog/2009-02-22/fun-with-variadic-templates-part-ii/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Fun with Variadic Templates: Part I</title>
		<link>http://timburrell.net/blog/2009-02-18/fun-with-variadic-templates-part-i/</link>
		<comments>http://timburrell.net/blog/2009-02-18/fun-with-variadic-templates-part-i/#comments</comments>
		<pubDate>Wed, 18 Feb 2009 23:15:35 +0000</pubDate>
		<dc:creator>Tim.</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[C++0x]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Effective C++]]></category>

		<guid isPermaLink="false">http://timburrell.net/?p=371</guid>
		<description><![CDATA[<p>If you&#8217;re a C++ user, you&#8217;ve probably heard that the up and coming language revision, C++0x, is adding support for variadic templates.  And if you&#8217;re anything like me, perhaps your first question was &#8220;Cool, so what good are they?&#8221;  And I would say &#8220;Excellent question!&#8221; to such an inquiry, because C++ has been [...]</p>

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

	<a rel="nofollow" target="_blank" href="mailto:?subject=Fun%20with%20Variadic%20Templates%3A%20Part%20I&amp;body=http%3A%2F%2Ftimburrell.net%2Fblog%2F2009-02-18%2Ffun-with-variadic-templates-part-i%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-02-18%2Ffun-with-variadic-templates-part-i%2F&amp;title=Fun%20with%20Variadic%20Templates%3A%20Part%20I" 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-02-18%2Ffun-with-variadic-templates-part-i%2F&amp;title=Fun%20with%20Variadic%20Templates%3A%20Part%20I" 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-02-18%2Ffun-with-variadic-templates-part-i%2F&amp;title=Fun%20with%20Variadic%20Templates%3A%20Part%20I" 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-02-18%2Ffun-with-variadic-templates-part-i%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=Fun%20with%20Variadic%20Templates%3A%20Part%20I&amp;url=http%3A%2F%2Ftimburrell.net%2Fblog%2F2009-02-18%2Ffun-with-variadic-templates-part-i%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-02-18%2Ffun-with-variadic-templates-part-i%2F&amp;title=Fun%20with%20Variadic%20Templates%3A%20Part%20I" 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-02-18%2Ffun-with-variadic-templates-part-i%2F&amp;t=Fun%20with%20Variadic%20Templates%3A%20Part%20I" 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-02-18%2Ffun-with-variadic-templates-part-i%2F&amp;title=Fun%20with%20Variadic%20Templates%3A%20Part%20I&amp;source=timburrell.net+All+that+is+Tim+Burrell&amp;summary=If%20you%27re%20a%20C%2B%2B%20user%2C%20you%27ve%20probably%20heard%20that%20the%20up%20and%20coming%20language%20revision%2C%20C%2B%2B0x%2C%20is%20adding%20support%20for%20variadic%20templates.%20%20And%20if%20you%27re%20anything%20like%20me%2C%20perhaps%20your%20first%20question%20was%20%22Cool%2C%20so%20what%20good%20are%20they%3F%22%20%20And%20I%20would%20say%20%22E" 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-02-18%2Ffun-with-variadic-templates-part-i%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-02-18%2Ffun-with-variadic-templates-part-i%2F&amp;title=Fun%20with%20Variadic%20Templates%3A%20Part%20I" 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-02-18/fun-with-variadic-templates-part-i/#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>If you&#8217;re a C++ user, you&#8217;ve probably heard that the up and coming language revision, C++0x, is adding support for variadic templates.  And if you&#8217;re anything like me, perhaps your first question was &#8220;Cool, so what good are they?&#8221;  And I would say &#8220;Excellent question!&#8221; to such an inquiry, because C++ has been doing variadic style templates and functions for a while now.  Even C could do variadic functions with its ellipsis operator and vararg API.  Combine that with function overloading and default function arguments and you&#8217;ve got yourself a pretty powerful variadic function system.</p>
<p>The same goes for C++&#8217;s templates.  Have you ever wondered how <a href="http://www.boost.org/doc/libs/1_37_0/libs/tuple/doc/tuple_users_guide.html">Boost&#8217;s Tuple library</a> works?  Well, Boost does a lot of cool complex things, like defining variadic templates using preprocessor and template metaprogramming, but in the end it&#8217;s actually pretty simple:</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;"><span style="color: #0000ff;">struct</span> NullArg <span style="color: #008000;">&#123;</span><span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">template</span><span style="color: #000080;">&lt;</span><span style="color: #0000ff;">typename</span> Type1 <span style="color: #000080;">=</span> NullArg, <span style="color: #0000ff;">typename</span> Type2 <span style="color: #000080;">=</span> NullArg, <span style="color: #0000ff;">typename</span> Type3 <span style="color: #000080;">=</span> NullArg<span style="color: #000080;">&gt;</span> 
<span style="color: #0000ff;">class</span> tuple <span style="color: #008000;">&#123;</span>
        tuple<span style="color: #008000;">&#40;</span>T0 t0<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span><span style="color: #008000;">&#125;</span>
        tuple<span style="color: #008000;">&#40;</span>T0 t0, T1 t1<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span><span style="color: #008000;">&#125;</span>
        tuple<span style="color: #008000;">&#40;</span>T0 t0, T1 t1, T2 t2<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span><span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
&nbsp;
tuple<span style="color: #000080;">&lt;</span><span style="color: #0000ff;">int</span>, <span style="color: #0000ff;">char</span><span style="color: #000080;">&gt;</span> t<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">1</span>, <span style="color: #FF0000;">'2'</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span></pre></div></div>

<p>Of course this tuple class doesn&#8217;t store or let you retrieve arguments, only allows for up to three parameters (adding more arguments, while monotonous without some preprocessor fun, is easy), and there&#8217;s some definite metaprogramming magics that go into tuple&#8217;s get&lt;X&gt;() template function, but it&#8217;s all still possible.</p>
<p>Getting back to the point: alright so we can, in effect, do variadic templates already, even without fancy C++0x.  So why are they good?  Well, all we&#8217;re really able to do is emulate variadic templates.  The compiler always sees those &#8220;variadic&#8221; structs as having the maximum number of parameters, which means extremely long mangled names (increased binary size), slower compilation time, stupidly complex compiler diagnostic output, and did I mention slower compilation time?  Not to mention that it&#8217;s an ugly and hacky way to achieve something that could be much more elegant.  It&#8217;s fine for libraries to define handy structs with variadic emulation, but do you really want your production code nastied up like that?  Likely not. </p>
<p>So, in come&#8217;s C++0x&#8217;s variadic templates.  They&#8217;re easy, fun, and the whole family can use them!  The syntax looks like this:</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;"><span style="color: #0000ff;">template</span><span style="color: #000080;">&lt;</span><span style="color: #0000ff;">typename</span>... <span style="color: #007788;">Args</span><span style="color: #000080;">&gt;</span> 
<span style="color: #0000ff;">class</span> tuple <span style="color: #008000;">&#123;</span><span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
&nbsp;
tuple<span style="color: #000080;">&lt;</span><span style="color: #0000ff;">char</span>, <span style="color: #0000ff;">int</span>, <span style="color: #0000ff;">bool</span><span style="color: #000080;">&gt;</span> t<span style="color: #008080;">;</span></pre></div></div>

<p>Not so useful yet, but as you can see the ellipsis operator is given new purpose, and in this case it&#8217;s meant to denote a template parameter pack.  It can also be used to denote a parameter pack expansion, like this:</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;"><span style="color: #0000ff;">template</span><span style="color: #000080;">&lt;</span><span style="color: #0000ff;">typename</span>... <span style="color: #007788;">Args</span><span style="color: #000080;">&gt;</span> 
<span style="color: #0000ff;">class</span> tuple <span style="color: #008000;">&#123;</span>
        tuple<span style="color: #008000;">&#40;</span>Args...<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span><span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
&nbsp;
tuple<span style="color: #000080;">&lt;</span><span style="color: #0000ff;">char</span>, <span style="color: #0000ff;">int</span>, <span style="color: #0000ff;">bool</span><span style="color: #000080;">&gt;</span> t<span style="color: #008000;">&#40;</span><span style="color: #FF0000;">'1'</span>, <span style="color: #0000dd;">2</span>, <span style="color: #0000ff;">false</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span></pre></div></div>

<p>Here we&#8217;ve created a variadic tuple template and expanded the Args parameter pack in the constructor, thus letting us pass a variable number of arguments to the tuple&#8217;s constructor.</p>
<p>You can use the pack expansion pretty much anywhere it makes sense: base classes, constructor initializers, you name it, but in my opinion the real power of variadics comes once you start using them in conjunction with template functions and we begin to utilize C++&#8217;s powers of argument deduction.  Take a look at this:</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;"><span style="color: #0000ff;">template</span><span style="color: #000080;">&lt;</span><span style="color: #0000ff;">typename</span>... <span style="color: #007788;">Args</span><span style="color: #000080;">&gt;</span>
<span style="color: #0000ff;">struct</span> tuple <span style="color: #008000;">&#123;</span>
        tuple<span style="color: #008000;">&#40;</span>Args...<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span><span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">template</span><span style="color: #000080;">&lt;</span><span style="color: #0000ff;">typename</span>... <span style="color: #007788;">Args</span><span style="color: #000080;">&gt;</span>
tuple<span style="color: #000080;">&lt;</span>Args...<span style="color: #000080;">&gt;</span> make_tuple<span style="color: #008000;">&#40;</span>Args... <span style="color: #007788;">args</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
        <span style="color: #0000ff;">return</span> tuple<span style="color: #000080;">&lt;</span>Args...<span style="color: #000080;">&gt;</span><span style="color: #008000;">&#40;</span>args...<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">int</span> main<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
        <span style="color: #0000ff;">auto</span> t1 <span style="color: #000080;">=</span> make_tuple<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">1</span>, <span style="color: #0000dd;">2</span>, <span style="color: #0000dd;">3</span>, <span style="color: #0000dd;">4</span>, <span style="color: #0000dd;">5</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
        <span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span></pre></div></div>

<p>Nice and clean!  There&#8217;s no need to specify all the template arguments to make_tuple because the compiler deduces them from the function arguments!  Also note the use of the C++0x auto keyword there.  Auto variables are still statically typed, they just get their type set to whatever initializes them.</p>
<p>So there&#8217;s the ultra-basics.  Up next I&#8217;m going to start exploring what you can really do with variadic templates &#8212; like how you can extract an arbitrary element from a pack, pack searching, and other fun compile time trickery.  You&#8217;d think Bjarne might have wanted to allow random access to variadic parameter lists, but that just wouldn&#8217;t be any fun.  Why do things with random access when you can do it all with recursion!</p>
<p>Ready for more?  Head to <a href="/blog/2009-02-18/fun-with-variadic-templates-part-i/">Part II</a>!</p>
]]></content:encoded>
			<wfw:commentRss>http://timburrell.net/blog/2009-02-18/fun-with-variadic-templates-part-i/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Links from the Tubes</title>
		<link>http://timburrell.net/blog/2009-02-10/links-from-the-tubes/</link>
		<comments>http://timburrell.net/blog/2009-02-10/links-from-the-tubes/#comments</comments>
		<pubDate>Tue, 10 Feb 2009 12:11:32 +0000</pubDate>
		<dc:creator>Tim.</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Links]]></category>

		<guid isPermaLink="false">http://timburrell.net/?p=395</guid>
		<description><![CDATA[<p>Random tube weirdness:</p>
<p>Mike the Headless Chicken<br />
Mayonnaise<br />
Cop&#8217;s Eye<br />
Space stations kick ass</p>

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

	<a rel="nofollow" target="_blank" href="mailto:?subject=Links%20from%20the%20Tubes&amp;body=http%3A%2F%2Ftimburrell.net%2Fblog%2F2009-02-10%2Flinks-from-the-tubes%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-02-10%2Flinks-from-the-tubes%2F&amp;title=Links%20from%20the%20Tubes" 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-02-10%2Flinks-from-the-tubes%2F&amp;title=Links%20from%20the%20Tubes" 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-02-10%2Flinks-from-the-tubes%2F&amp;title=Links%20from%20the%20Tubes" 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-02-10%2Flinks-from-the-tubes%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=Links%20from%20the%20Tubes&amp;url=http%3A%2F%2Ftimburrell.net%2Fblog%2F2009-02-10%2Flinks-from-the-tubes%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-02-10%2Flinks-from-the-tubes%2F&amp;title=Links%20from%20the%20Tubes" 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-02-10%2Flinks-from-the-tubes%2F&amp;t=Links%20from%20the%20Tubes" 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-02-10%2Flinks-from-the-tubes%2F&amp;title=Links%20from%20the%20Tubes&amp;source=timburrell.net+All+that+is+Tim+Burrell&amp;summary=Random%20tube%20weirdness%3A%0D%0A%0D%0AMike%20the%20Headless%20Chicken%0D%0AMayonnaise%0D%0ACop%27s%20Eye%0D%0ASpace%20stations%20kick%20ass%0D%0A" 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-02-10%2Flinks-from-the-tubes%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-02-10%2Flinks-from-the-tubes%2F&amp;title=Links%20from%20the%20Tubes" 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-02-10/links-from-the-tubes/#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>Random tube weirdness:</p>
<ul>
<li /><a href="miketheheadlesschicken.org">Mike the Headless Chicken</a>
<li /><a href="http://www.ifoce.com/eaters.php?action=detail&#038;sn=18">Mayonnaise</a>
<li /><a href="http://news.bbc.co.uk/1/hi/england/manchester/7842282.stm">Cop&#8217;s Eye</a>
<li /><a href="http://www.youtube.com/watch?v=JgBgmw-2U8c">Space</a> <a href="http://www.youtube.com/watch?v=F-yIqxoMBVU">stations</a> <a href="http://www.youtube.com/watch?v=srQdr6kGii4">kick</a> <a href="http://www.youtube.com/watch?v=lswCuvcA7YQ">ass</a>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://timburrell.net/blog/2009-02-10/links-from-the-tubes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Clean Bill of Health</title>
		<link>http://timburrell.net/blog/2009-02-05/clean-bill-of-health/</link>
		<comments>http://timburrell.net/blog/2009-02-05/clean-bill-of-health/#comments</comments>
		<pubDate>Fri, 06 Feb 2009 00:49:12 +0000</pubDate>
		<dc:creator>Tim.</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://timburrell.net/?p=445</guid>
		<description><![CDATA[<p>So it&#8217;s official: I don&#8217;t have anything nasty&#8230; that they tested me for.  I&#8217;ve just been sick a lot, and I only fainted that one time.  .<br />
They x-ray&#8217;ed me twice, did three malaria screens on different samples of my blood, ultrasounded my liver, spleen, and for some reason the underside of my freakin&#8217; [...]</p>

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

	<a rel="nofollow" target="_blank" href="mailto:?subject=Clean%20Bill%20of%20Health&amp;body=http%3A%2F%2Ftimburrell.net%2Fblog%2F2009-02-05%2Fclean-bill-of-health%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-02-05%2Fclean-bill-of-health%2F&amp;title=Clean%20Bill%20of%20Health" 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-02-05%2Fclean-bill-of-health%2F&amp;title=Clean%20Bill%20of%20Health" 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-02-05%2Fclean-bill-of-health%2F&amp;title=Clean%20Bill%20of%20Health" 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-02-05%2Fclean-bill-of-health%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=Clean%20Bill%20of%20Health&amp;url=http%3A%2F%2Ftimburrell.net%2Fblog%2F2009-02-05%2Fclean-bill-of-health%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-02-05%2Fclean-bill-of-health%2F&amp;title=Clean%20Bill%20of%20Health" 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-02-05%2Fclean-bill-of-health%2F&amp;t=Clean%20Bill%20of%20Health" 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-02-05%2Fclean-bill-of-health%2F&amp;title=Clean%20Bill%20of%20Health&amp;source=timburrell.net+All+that+is+Tim+Burrell&amp;summary=So%20it%27s%20official%3A%20I%20don%27t%20have%20anything%20nasty...%20that%20they%20tested%20me%20for.%20%20I%27ve%20just%20been%20sick%20a%20lot%2C%20and%20I%20only%20fainted%20that%20one%20time.%20%20%3B%29.%0D%0A%0D%0AThey%20x-ray%27ed%20me%20twice%2C%20did%20three%20malaria%20screens%20on%20different%20samples%20of%20my%20blood%2C%20ultrasounded%20my%20liver%2C" 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-02-05%2Fclean-bill-of-health%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-02-05%2Fclean-bill-of-health%2F&amp;title=Clean%20Bill%20of%20Health" 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-02-05/clean-bill-of-health/#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>So it&#8217;s official: I don&#8217;t have anything nasty&#8230; that they tested me for.  I&#8217;ve just been sick a lot, and I only fainted that one time.  <img src='http://timburrell.net/smilies/yahoo_wink.gif' alt='&#59;&#41;' class='wp-smiley' width='18' height='18' title='&#59;&#41;' />.</p>
<p>They x-ray&#8217;ed me twice, did three malaria screens on different samples of my blood, ultrasounded my liver, spleen, and for some reason the underside of my freakin&#8217; spine.  Seriously, when pregnant women get ultrasounds of their babies done, does it feel like the doctor is trying to forge the ultrasound wand into the sub-atomic particles inside the molecules on the back of your skin?</p>
<p>Anyway&#8230; so yeah, after all that, a bunch more blood tests (at least 10 vials worth), 3 urine samples, plus the fainting episode, and a trip to the hospital in an ambulance, they were able to give me the diagnosis that I am perfectly healthy!</p>
<p>I&#8217;m actually pretty stoked about it.  Plus who knew that your liver and spleen were so cute.  Well at least <em>mine</em> are.  My internal organs are so much cuter than everyone else&#8217;s, and it&#8217;s not just because they&#8217;re mine!  They were way cuter than any of those blotchy fetus ultrasound photos I&#8217;ve seen.  </p>
<p>So my liver and spleen didn&#8217;t have hands or arms or legs, or a head.  Nor did they look remotely different from each other in any way.  They were smooth, and oblong, and completely uniform in colour.  That&#8217;s what I&#8217;m talking about.</p>
<p>Alright I have no idea what I&#8217;m talking about.  </p>
<p>The whole experience was a bit mad, but I&#8217;m thankful it&#8217;s over, and I suppose in a way I&#8217;m glad it all happened the way it did.  Next time I feel weak from 4 nights of fevers though, I&#8217;m staying in bed!</p>
]]></content:encoded>
			<wfw:commentRss>http://timburrell.net/blog/2009-02-05/clean-bill-of-health/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>All is well!</title>
		<link>http://timburrell.net/blog/2009-02-02/all-is-well/</link>
		<comments>http://timburrell.net/blog/2009-02-02/all-is-well/#comments</comments>
		<pubDate>Mon, 02 Feb 2009 23:50:02 +0000</pubDate>
		<dc:creator>Tim.</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://timburrell.net/?p=440</guid>
		<description><![CDATA[<p>They released me from the hospital after nearly killing me with a &#8220;chicken&#8221; &#8220;sandwich&#8221; on &#8220;whole wheat&#8221; &#8220;bread&#8221;. They told me nothing was wrong with me and my first Malaria screen came back negative (yayy!).  I also don&#8217;t have tuberculosis (YAYY!).  Tomorrow there&#8217;s another round of tests though so we&#8217;ll see.<br />
As for the [...]</p>

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

	<a rel="nofollow" target="_blank" href="mailto:?subject=All%20is%20well%21&amp;body=http%3A%2F%2Ftimburrell.net%2Fblog%2F2009-02-02%2Fall-is-well%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-02-02%2Fall-is-well%2F&amp;title=All%20is%20well%21" 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-02-02%2Fall-is-well%2F&amp;title=All%20is%20well%21" 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-02-02%2Fall-is-well%2F&amp;title=All%20is%20well%21" 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-02-02%2Fall-is-well%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=All%20is%20well%21&amp;url=http%3A%2F%2Ftimburrell.net%2Fblog%2F2009-02-02%2Fall-is-well%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-02-02%2Fall-is-well%2F&amp;title=All%20is%20well%21" 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-02-02%2Fall-is-well%2F&amp;t=All%20is%20well%21" 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-02-02%2Fall-is-well%2F&amp;title=All%20is%20well%21&amp;source=timburrell.net+All+that+is+Tim+Burrell&amp;summary=They%20released%20me%20from%20the%20hospital%20after%20nearly%20killing%20me%20with%20a%20%22chicken%22%20%22sandwich%22%20on%20%22whole%20wheat%22%20%22bread%22.%20They%20told%20me%20nothing%20was%20wrong%20with%20me%20and%20my%20first%20Malaria%20screen%20came%20back%20negative%20%28yayy%21%29.%20%20I%20also%20don%27t%20have%20tuberculosis%20%28YAYY%21%29.%20%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-02-02%2Fall-is-well%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-02-02%2Fall-is-well%2F&amp;title=All%20is%20well%21" 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-02-02/all-is-well/#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>They released me from the hospital after nearly killing me with a &#8220;chicken&#8221; &#8220;sandwich&#8221; on &#8220;whole wheat&#8221; &#8220;bread&#8221;. They told me nothing was wrong with me and my first Malaria screen came back negative (yayy!).  I also don&#8217;t have tuberculosis (YAYY!).  Tomorrow there&#8217;s another round of tests though so we&#8217;ll see.</p>
<p>As for the fainting&#8230; maybe I just think about things too much or something but it was not a fun experience.  I felt powerless, like, I knew it was going to happen and there was nothing I could do about it.  Maybe that&#8217;s not true but at the time that&#8217;s how it felt.  </p>
<p>Plus, waking up on the floor, seeing your wife&#8217;s terrified face&#8230; never fun.</p>
<p>Thanks to everyone who wished me a speedy recovery!</p>
<p>I&#8217;ll update again tomorrow after I&#8217;ve had my spleen ultrasounded!    </p>
]]></content:encoded>
			<wfw:commentRss>http://timburrell.net/blog/2009-02-02/all-is-well/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hospitalized!</title>
		<link>http://timburrell.net/blog/2009-02-02/hospitalized/</link>
		<comments>http://timburrell.net/blog/2009-02-02/hospitalized/#comments</comments>
		<pubDate>Mon, 02 Feb 2009 15:41:16 +0000</pubDate>
		<dc:creator>Tim.</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://timburrell.net/?p=437</guid>
		<description><![CDATA[<p>Posting from my phone.  Jess and I have been feeling on and off crappy since getting back from the DR in Dec.  Finally decided to go to the Doctor this morn.  They sent me to a lab for bloodwork and I   fainted while standing in line.  Rode in ambulance. [...]</p>

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

	<a rel="nofollow" target="_blank" href="mailto:?subject=Hospitalized%21&amp;body=http%3A%2F%2Ftimburrell.net%2Fblog%2F2009-02-02%2Fhospitalized%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-02-02%2Fhospitalized%2F&amp;title=Hospitalized%21" 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-02-02%2Fhospitalized%2F&amp;title=Hospitalized%21" 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-02-02%2Fhospitalized%2F&amp;title=Hospitalized%21" 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-02-02%2Fhospitalized%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=Hospitalized%21&amp;url=http%3A%2F%2Ftimburrell.net%2Fblog%2F2009-02-02%2Fhospitalized%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-02-02%2Fhospitalized%2F&amp;title=Hospitalized%21" 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-02-02%2Fhospitalized%2F&amp;t=Hospitalized%21" 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-02-02%2Fhospitalized%2F&amp;title=Hospitalized%21&amp;source=timburrell.net+All+that+is+Tim+Burrell&amp;summary=Posting%20from%20my%20phone.%20%20Jess%20and%20I%20have%20been%20feeling%20on%20and%20off%20crappy%20since%20getting%20back%20from%20the%20DR%20in%20Dec.%20%20Finally%20decided%20to%20go%20to%20the%20Doctor%20this%20morn.%20%20They%20sent%20me%20to%20a%20lab%20for%20bloodwork%20and%20I%20%20%20fainted%20while%20standing%20in%20line.%20%20Rode%20in%20ambula" 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-02-02%2Fhospitalized%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-02-02%2Fhospitalized%2F&amp;title=Hospitalized%21" 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-02-02/hospitalized/#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>Posting from my phone.  Jess and I have been feeling on and off crappy since getting back from the DR in Dec.  Finally decided to go to the Doctor this morn.  They sent me to a lab for bloodwork and I   fainted while standing in line.  Rode in ambulance.  Currently laying in hospital bed waiting for bloodwork to come back.  Will update again as soon as I know more.</p>
]]></content:encoded>
			<wfw:commentRss>http://timburrell.net/blog/2009-02-02/hospitalized/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>
	</channel>
</rss>
