<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" version="2.0">

<channel>
	<title>Scientific Ninja</title>
	
	<link>http://scientificninja.com</link>
	<description />
	<lastBuildDate>Sun, 29 Aug 2010 00:50:41 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/scientificninja" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="scientificninja" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Spur Gastropub in Seattle</title>
		<link>http://scientificninja.com/blog/spur-gastropub-in-seattle</link>
		<comments>http://scientificninja.com/blog/spur-gastropub-in-seattle#comments</comments>
		<pubDate>Sun, 29 Aug 2010 00:50:41 +0000</pubDate>
		<dc:creator>Josh Petrie</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[food]]></category>
		<category><![CDATA[restaurant]]></category>

		<guid isPermaLink="false">http://scientificninja.com/?p=1049</guid>
		<description><![CDATA[Spur is a small-ish gastropub in Belltown run by acclaimed chefs Brian McCracken and Dana Tough. Their focus is &#8220;New American&#8221; cuisine, and their lineup shifts every month or so, according to what is seasonally available. The restaurant&#8217;s blog posts the changes to the menu as they happen; it&#8217;s a bit tricky to find out [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://spurseattle.com">Spur</a> is a small-ish gastropub in Belltown run by <a href="http://www.starchefs.com/chefs/rising_stars/2009/seattle/bio_McCracken_Tough.shtml">acclaimed chefs Brian McCracken and Dana Tough</a>. Their focus is &#8220;New American&#8221; cuisine, and their lineup shifts every month or so, according to what is seasonally available. <a href="http://spurseattle.blogspot.com/">The restaurant&#8217;s blog</a> posts the changes to the menu as they happen; it&#8217;s a bit tricky to find out what currently available, but it&#8217;s probably more fun just to show up and be surprised.</p>
<p>I&#8217;ve been to Spur twice now; the first time was to grab drinks with a friend after a pretty disappointing visit to the <a href="http://www.seattleartmuseum.org/">Seattle Art Museum</a> for one of their &#8220;SAM Remix&#8221; events. We both ordered beer, if I recall correctly, rather than avail ourselves of the cocktail selection (which Spur usually receives high praise for) &#8212; cocktails aren&#8217;t really my thing. That visit, essentially, didn&#8217;t count. I finally returned last Tuesday to actually try the <em>food</em>.</p>
<p>This time around I was accompanied by Katie, my usual partner in (food-related) crime. We ordered and shared three small entrées and two desserts. First out of the kitchen was a pair of pork belly sliders with a nectarine mostarda and a gelée of champagne. These were, hands down, the best entrée of the night &#8212; the sumptuous belly paired wonderfully with the nectarines, and incredibly intense gelée added a really unique accent.</p>
<p><a href="http://www.flickr.com/photos/jpetrie/4925876962/" title="Pork Belly Sliders by jpetrie, on Flickr"><img class="centered" src="http://farm5.static.flickr.com/4115/4925876962_9e37417892.jpg" width="500" height="374" alt="Pork Belly Sliders" /></a></p>
<p>Next we had an oxtail terrine. The tail was braised, formed into a terrine, and fried &#8212; it arrived warm, which is atypical (but not in a bad way at all). The dish was accompanied by sous vide apples and a shallot jam. </p>
<p><a href="http://www.flickr.com/photos/jpetrie/4925877180/" title="Fried Oxtail Terrine by jpetrie, on Flickr"><img class="centered" src="http://farm5.static.flickr.com/4074/4925877180_7db3069cd3.jpg" width="500" height="374" alt="Fried Oxtail Terrine" /></a></p>
<p>Our last course was a pasta &#8212; tagliatelle with oyster mushrooms, a duck egg, and parmesan foam. This was my least favorite course. I loved the egg, and the deep flavor its yolk brought to the pasta when combined with the foam. I found the parmesan shavings &#8212; slates, really &#8212; and interesting presentational piece but not really worth the trouble of trying to eat. There was a acerbic nature to the dish, possibly from the intensity of the foam, that wasn&#8217;t the most pleasing.</p>
<p><a href="http://www.flickr.com/photos/jpetrie/4925292829/" title="Tagliatelle by jpetrie, on Flickr"><img class="centered" src="http://farm5.static.flickr.com/4094/4925292829_e5de5456d9.jpg" width="500" height="374" alt="Tagliatelle" /></a></p>
<p>But dessert made up for it. Katie ordered the chocolate cake after our waitress&#8217;s <em>extremely</em> enthusiastic recommendation. It was very thin and quite dense &#8212; imagine taking a regular chocolate cake and running it through one of those car compactors. In spite of this property, the cake wasn&#8217;t overpoweringly sweet, which prevented it from outshining the accompanying fruit.</p>
<p><a href="http://www.flickr.com/photos/jpetrie/4925293039/" title="Chocolate Cake by jpetrie, on Flickr"><img class="centered" src="http://farm5.static.flickr.com/4140/4925293039_e0f22db3aa.jpg" width="374" height="500" alt="Chocolate Cake" /></a></p>
<p>I ordered the peach sorbet. According to the menu, I would see some &#8220;playful accompaniments.&#8221; This turned out to be a foie gras mousse. While it&#8217;s definitely &#8220;trendy&#8221; to be doing weird things with foie gras right now, it is entirely forgivable because the mousse was amazing. It is the classic sweet/salty juxtaposition brought to a whole different level. Easily the star of the meal.</p>
<p><a href="http://www.flickr.com/photos/jpetrie/4925293231/" title="Peach Sorbet by jpetrie, on Flickr"><img class="centered" src="http://farm5.static.flickr.com/4117/4925293231_f142148c55.jpg" width="374" height="500" alt="Peach Sorbet" /></a></p>
<p>As I said before, I passed entirely on the cocktails, but they did appear to have a really interesting selection. Katie had two of their house-made sodas: a lavender soda, which was too thick and sweet for me (she thought it might have been poorly mixed) and a basil-cucumber soda, which was really interesting. The cucumber was hard to detect, but the basil notes were definitely front-and-center.</p>
<p>The portions at Spur are small &#8212; they were pretty much ideal for me, but I don&#8217;t eat much. Some people will certainly be turned off by the price-to-food ratio. But even splitting the dishes as we did, we were both full at the end of the evening and immensely satisfied. The price notwithstanding, I think I&#8217;m going to try and gather some of my co-workers together to hit the place after PAX next week.</p>
<p>Hopefully they&#8217;ll still have that foie gras mousse.</p>
]]></content:encoded>
			<wfw:commentRss>http://scientificninja.com/blog/spur-gastropub-in-seattle/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Per-Project Code Formatting in Visual Studio</title>
		<link>http://scientificninja.com/blog/per-project-code-formatting-in-visual-studio</link>
		<comments>http://scientificninja.com/blog/per-project-code-formatting-in-visual-studio#comments</comments>
		<pubDate>Fri, 27 Aug 2010 23:16:32 +0000</pubDate>
		<dc:creator>Josh Petrie</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[code-formatting]]></category>
		<category><![CDATA[code-style]]></category>
		<category><![CDATA[tips]]></category>
		<category><![CDATA[tools]]></category>
		<category><![CDATA[visual studio]]></category>

		<guid isPermaLink="false">http://scientificninja.com/?p=1043</guid>
		<description><![CDATA[Consistency is the principle benefit of having a documented coding style. The details of the style itself are usually not terribly relevant. If you are a developer who works on multiple projects, or even one who just dabbles at home after work, you probably have to cope with at least two different coding styles. Visual [...]]]></description>
			<content:encoded><![CDATA[<p>Consistency is the principle benefit of having a documented coding style. The details of the style itself are usually not terribly relevant. If you are a developer who works on multiple projects, or even one who just dabbles at home after work, you probably have to cope with at least two different coding styles.</p>
<p>Visual Studio has pretty powerful code reformatting features, but the configuration of those features are scoped to the user, not the solution file. You can export those settings and import the correct ones as you switch projects, but there&#8217;s a lot of friction along that path.</p>
<p>One solution is to use an external code reformatter, such as <a href="http://astyle.sourceforge.net/">Artistic Style</a> or <a href="http://uncrustify.sourceforge.net/">Uncrustify</a>. The latter is currently my personal favorite (but see below for a warning) due to the huge variety of configuration options it supports. More options certainly means a more tedious initial configuration, but it also means the tool will be adaptable to a broader range of styles. Besides, there are useful tools like the <a href="http://universalindent.sourceforge.net/">Universal Indent GUI</a>, which provide user-friendly ways to configure a variety of popular code formatters.</p>
<p><a href="http://www.flickr.com/photos/jpetrie/4933457826/" title="universal-indent-slimdx-device10 by jpetrie, on Flickr"><img class="centered" src="http://farm5.static.flickr.com/4102/4933457826_59419b48dc.jpg" width="500" height="283" alt="universal-indent-slimdx-device10" /></a></p>
<p>Once you have configured Uncrustify, you can check the config file in to an appropriate spot in your repository (you can check in the Uncrustify binary as well, but it&#8217;s GPLv2 so be aware of the ramifications); that way all developers will have access to it. The best place for it is probably next to the solution files or in another root-like location within your source tree.</p>
<p>You can then configure your IDE(s) so that their default formatting commands instead use Uncrustify. In Visual Studio, for example, one can set up an external tool. Assuming uncrustify.cfg is next to the solution file, then the command line &#8220;-c $(SolutionDir)uncrustify.cfg &#8211;no-backup $(ItemPath)&#8221; will reformat the current source file. You can then assign a keyboard mapping (or reassign the one for Edit.FormatDocument, like me) for quick access.</p>
<p><a href="http://www.flickr.com/photos/jpetrie/4933457844/" title="uncrustify-external-tool by jpetrie, on Flickr"><img class="centered" src="http://farm5.static.flickr.com/4122/4933457844_2ae70c441d.jpg" width="471" height="460" alt="uncrustify-external-tool" /></a></p>
<p>This doesn&#8217;t work flawlessly, unfortunately &#8212; such a simple external command requires you to make assumptions about where the format configuration is stored, and that assumption may not hold across all your projects if you don&#8217;t have the necessary degree of control over them. External commands also require you to tolerate that obnoxious, brief console window pop-up (or redirect the command to the output window, which will steal your keyboard focus). But overall it&#8217;s much better than having your fellow developers come and complain that you screwed up the bracing style in ReallyImportantFile.cs yet again.</p>
<p>Note that as of this writing, however, the released binaries of Uncrustify <a href="http://sourceforge.net/tracker/index.php?func=detail&#038;aid=3007436&#038;group_id=153164&#038;atid=786647">have a bug that prevents them from handling files with BOMs</a>, such as those created by Visual Studio by default. The bug has been fixed, but you will need to build the application from source to get it. This is fortunately relatively painless, but if you don&#8217;t have the capability to run &#8220;configure&#8221; (i.e., you&#8217;re on Windows and don&#8217;t have it) you won&#8217;t have the &#8220;uncrustify_version.h&#8221; file you&#8217;ll need for the VS project to build. You can just rename &#8220;uncrustify_version.h.in&#8221; and change the #define for UNCRUSTIFY_VERSION to something sane, though &#8212; a bit of a crude solution, but it will suffice until the next release.</p>
]]></content:encoded>
			<wfw:commentRss>http://scientificninja.com/blog/per-project-code-formatting-in-visual-studio/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Nystrom’s Programming Patterns</title>
		<link>http://scientificninja.com/blog/nystroms-programming-patterns</link>
		<comments>http://scientificninja.com/blog/nystroms-programming-patterns#comments</comments>
		<pubDate>Thu, 12 Aug 2010 01:28:14 +0000</pubDate>
		<dc:creator>Josh Petrie</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[best-practice]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[game-development]]></category>
		<category><![CDATA[patterns]]></category>

		<guid isPermaLink="false">http://scientificninja.com/?p=1024</guid>
		<description><![CDATA[I came across Robert Nystrom&#8217;s Game Programming Patterns site a little while back; a link to it has been sitting in my Instapaper queue for a while now, accompanied by a note that says I should write something about it. The site is the online counterpart to a book that Nystrom, a lead engineer at [...]]]></description>
			<content:encoded><![CDATA[<p>I came across Robert Nystrom&#8217;s <a href="http://gameprogrammingpatterns.com/">Game Programming Patterns</a> site a little while back; a link to it has been sitting in my <a href="http://instapaper.com">Instapaper</a> queue for a while now, accompanied by a note that says I should write something about it. The site is the online counterpart to a book that Nystrom, a lead engineer at EA Tiburon, is in the process of writing. The book itself sounds like it will shape up to be a modern, game-oriented version of the classic <a href="http://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612/ref=sr_1_1?ie=UTF8&#038;s=books&#038;qid=1281540181&#038;sr=8-1">Gang of Four patterns book</a>, and while the website is still relatively sparsely populated, the content that is available makes for good reading. </p>
<p>Two of the current articles are worth calling out specifically: <a href="http://gameprogrammingpatterns.com/component.html">the component pattern</a> is something that has become increasingly trendy in game development recently, but most available material on the subject covers one particularly approach or another, which tends lead people to wonder which way is &#8220;best.&#8221; Nystrom tries to point out that there are many approaches, each with advantages and disadvantages, and that there is no &#8220;best.&#8221;</p>
<p>The other article I enjoyed reading was the one on the <a href="http://gameprogrammingpatterns.com/singleton.html">singleton pattern</a>. This was really the make-or-break piece for me: I&#8217;ve found that a developer&#8217;s thoughts on (and arguments for) the pros and cons of the singleton can reveal a lot about how they approach software design and development, and in this regard Nystrom did not disappoint. Like me, he is ultimately not in favor of the pattern, but he presents a very balanced view of the issue.</p>
]]></content:encoded>
			<wfw:commentRss>http://scientificninja.com/blog/nystroms-programming-patterns/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fever: A Novel RSS Reader</title>
		<link>http://scientificninja.com/blog/fever-a-novel-rss-reader</link>
		<comments>http://scientificninja.com/blog/fever-a-novel-rss-reader#comments</comments>
		<pubDate>Fri, 06 Aug 2010 05:33:06 +0000</pubDate>
		<dc:creator>Josh Petrie</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[fever]]></category>
		<category><![CDATA[rss]]></category>
		<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://scientificninja.com/?p=1002</guid>
		<description><![CDATA[Fever is a unique RSS reader that tries to alleviate the psychological pressure of unread counts and the grind of paging through essentially-duplicate stories from multiple feeds by performing some sort of analysis on the items in your feeds and bubbling the &#8216;hot&#8217; content to the top. I&#8217;ve been using it for a week or [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://feedafever.com/">Fever</a> is a unique RSS reader that tries to alleviate the psychological pressure of unread counts and the grind of paging through essentially-duplicate stories from multiple feeds by performing some sort of analysis on the items in your feeds and bubbling the &#8216;hot&#8217; content to the top. I&#8217;ve been using it for a week or so now.</p>
<p>There is a definite barrier to entry involved in the fact that Fever is a web application that you need to host yourself. The actual installation is smooth and painless, and all the compatibility tests can be run prior to purchase, so you can be assured that the application will function before you part with your $30. But you are completely out of luck if you don&#8217;t have your own web host, which is probably the case for a lot of potential users. It&#8217;s kind of unfortunate because Fever is a really cool idea by a really cool developer, and well worth supporting.</p>
<p>The general idea behind Fever is to divide your RSS feeds into two categories: important feeds (&#8220;kindling&#8221;) and lesser-value feeds (&#8220;sparks&#8221;). Articles in spark feeds are used to determine which articles from kindling feeds are really important, and those articles are displayed in Fever&#8217;s &#8220;Hot&#8221; group. The more an article is linked to or discussed by entries in spark feeds, the more important Fever will consider that article. Importance is represented to the user as a temperature relative to optimal human body temperature. </p>
<p>I&#8217;ve never really had <em>too</em> much of a problem with RSS management, but this is mainly because I&#8217;ve always been extremely selective about which feeds I subscribe too. I stayed away from major news feeds like those of <a href="http://www.1up.com/">1UP</a> and <a href="http://www.shacknews.com/">Shacknews</a> because they generate a huge volume of articles and I cared about very few of them. Mainly, I subscribed to the blogs or sites of friends or people I respected. Before using Fever I had about 25 RSS feeds, most of them low-traffic. Fever&#8217;s clever tricks don&#8217;t work that well with so paltry a subscription count, however, so I&#8217;ve added subscriptions to the aforementioned sites (and others). </p>
<p>The impression that I&#8217;ve developed over the past week is mostly positive &#8212; I&#8217;ve run into some user interface weirdness (I can&#8217;t drag feeds from the sparks group to the kindling group, but I can drag them the other way, for example), but nothing serious. Overall the UI is quite pleasing, especially compared to <a href="http://google.com/reader">Google Reader</a>. The most jarring UI issue? Sometimes Fever chooses to display a headline that&#8217;s a little odd:</p>
<p><center><br />
<a href="http://www.flickr.com/photos/jpetrie/4865375194/" title="fever-weird-headline by jpetrie, on Flickr"><img src="http://farm5.static.flickr.com/4098/4865375194_0bc4303f69.jpg" width="500" height="92" alt="fever-weird-headline" /></a><br />
</center></p>
<p>Honestly, though, this probably has more to do with the site serving up the feed than Fever itself. I suspect I could reduce the number of occurrences of issues like that if I tended my kindling/sparks with more care, as well. But that brings me to my only real serious gripe with Fever, which is that figuring out where to put a feed is sometimes a bit of a mystery. Since I&#8217;m not sure precisely how the dynamic between kindling and sparks works, I am currently tending to leave everything as kindling and &#8220;demoting&#8221; things after a while, one at a time. Initially, I&#8217;d tried exactly the opposite, but I found I got almost no useful results (this could also be because the corpus of data available to Fever is still quite small, since I still don&#8217;t have that many feeds). </p>
<p>Additionally, because of the way Fever works (and how long it takes to refresh the feed heuristics), it&#8217;s probably not that suitable for people who must know everything that happens as it happens. I&#8217;ve definitely had more success treating it as an occasional thing &#8212; something I log in to at lunch, or after work, rather than something I keep open in a browser tab all the time.</p>
<p>Fever functions as a &#8220;normal&#8221; RSS reader as well, although I don&#8217;t have much to say about it&#8217;s performance in that domain since I wasn&#8217;t a heavy RSS consumer beforehand. I set up a group for the handful of feeds I want to read every post from, set that specific group to show unread counts, and between that and Fever&#8217;s Hot group, everything&#8217;s been great.</p>
]]></content:encoded>
			<wfw:commentRss>http://scientificninja.com/blog/fever-a-novel-rss-reader/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dotfiles and Dropbox</title>
		<link>http://scientificninja.com/blog/dotfiles-and-dropbox</link>
		<comments>http://scientificninja.com/blog/dotfiles-and-dropbox#comments</comments>
		<pubDate>Thu, 15 Jul 2010 04:26:01 +0000</pubDate>
		<dc:creator>Josh Petrie</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[dropbox]]></category>
		<category><![CDATA[subversion]]></category>
		<category><![CDATA[vim]]></category>

		<guid isPermaLink="false">http://scientificninja.com/?p=964</guid>
		<description><![CDATA[I am generally not a fan of extensively customizing my tools or work environment. If the benefit isn&#8217;t significant, I&#8217;m not going to spend my time monkeying around with settings and configuration files and screens of options: they get in the way of actually being productive. vim is one of those tools that&#8217;s so useful [...]]]></description>
			<content:encoded><![CDATA[<p>I am generally not a fan of extensively customizing my tools or work environment. If the benefit isn&#8217;t significant, I&#8217;m not going to spend my time monkeying around with settings and configuration files and screens of options: they get in the way of actually being productive. <a href="http://www.vim.org/">vim</a> is one of those tools that&#8217;s so useful to my workflow that a bespoke configuration is worth the effort &#8212; but only if I can make that configuration as trivially ubiquitous as vim itself.</p>
<p>Up until recently I&#8217;d used <a href="http://subversion.tigris.org/">Subversion</a> to store all my vim (and other) configuration files. This is a <a href="http://technotales.wordpress.com/2007/02/21/dotfiles-best-practice/">reasonably</a> <a href="http://joey.kitenet.net/svnhome/">common</a> <a href="http://stackoverflow.com/questions/169574/keeping-dot-files-synched-across-machines">practice</a>. But I&#8217;ve had two issues with this approach. First, I had a few makefiles (or batch files for Windows) that I used to sync the contents of the repository to to appropriate locations on each type of machine. I did this largely to keep my home directories clean, but having to maintain them &#8212; even in a limited capacity &#8212; was obnoxious. Second, I had to remember to actually commit any changes I made back to the central repository. On a number of occasions I made some tweak at work, went home, and realized I&#8217;d failed to commit. A minor annoyance, but an annoyance nonetheless.</p>
<p>This is why I decided to try storing the configuration using <a href="https://www.dropbox.com/home">Dropbox</a>. Since Dropbox storage is accessible like a local directory, I could easily create symbolic links to the .vimrc file and .vim directories stored in my Dropbox drive on all my machines. This means I don&#8217;t have to manually commit any local changes back to the repository. It also obviates the need for the synchronization makefiles; while they provided a bit of a buffer for changes, which was occasionally nice, they existed largely to keep the temporary cruft created by a Subversion working copy out of my home directories. That&#8217;s not a problem with Dropbox.</p>
<p>So far I&#8217;ve had no trouble using this approach, and the additional streamlining is a huge boon. I was very pleased, in particular, that the symlinks worked out so well. My fallback was to create shim .vimrcs that set $VIMRUNTIME and sourced the Dropbox version of the file, but fortunately I didn&#8217;t need to.</p>
]]></content:encoded>
			<wfw:commentRss>http://scientificninja.com/blog/dotfiles-and-dropbox/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>SlimDX June 2010 Released</title>
		<link>http://scientificninja.com/blog/slimdx-june-2010-released</link>
		<comments>http://scientificninja.com/blog/slimdx-june-2010-released#comments</comments>
		<pubDate>Mon, 05 Jul 2010 16:05:47 +0000</pubDate>
		<dc:creator>Josh Petrie</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[slimdx]]></category>

		<guid isPermaLink="false">http://scientificninja.com/?p=959</guid>
		<description><![CDATA[Actually it was released last week, when it still was actually June, so I&#8217;m a little late to this party. Mike did the official release thread on GDNet this time around in which he calls out the major changes, including .NET 4.0 support, cleaner access to the shader compiler interfaces, and a much more robust [...]]]></description>
			<content:encoded><![CDATA[<p>Actually it was released last week, when it still was actually June, so I&#8217;m a little late to this party. Mike did <a href="http://www.gamedev.net/community/forums/topic.asp?topic_id=575638">the official release thread</a> on GDNet this time around in which he calls out the major changes, including .NET 4.0 support, cleaner access to the shader compiler interfaces, and a much more robust DirectWrite implementation.</p>
<p>Also, in an effort to try and get a better sense of our users and community, we&#8217;ve put together this quick <a href="http://www.surveymonkey.com/s/6LW9QXG">SlimDX developer survey</a> and would appreciate your time in filling it out if you use, have used, or are considering using SlimDX for anything.</p>
<p>Finally, we&#8217;ve received several queries through various channels about contributing to SlimDX, especially the upcoming version 2.0 redesign. If you are at all interested in participating in or simply observing the discussions about the redesign, you should join the <a href="http://groups.google.com/group/slimdx-devel">slimdx-devel</a> mailing list.</p>
]]></content:encoded>
			<wfw:commentRss>http://scientificninja.com/blog/slimdx-june-2010-released/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Canlis</title>
		<link>http://scientificninja.com/blog/canlis</link>
		<comments>http://scientificninja.com/blog/canlis#comments</comments>
		<pubDate>Fri, 07 May 2010 00:45:21 +0000</pubDate>
		<dc:creator>Josh Petrie</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[food]]></category>
		<category><![CDATA[restaurant]]></category>

		<guid isPermaLink="false">http://scientificninja.com/?p=933</guid>
		<description><![CDATA[Canlis is a restaurant in Seattle&#8217;s Queen Anne neighborhood, overlooking Lake Union. The restaurant has been operating since 1950, when it was opened by Peter Canlis, and is run today by Mark and Brian Canlis, Peter&#8217;s grandchildren. Since its inception, Canlis has maintained a reputation of being among the fanciest restaurants in the area, as [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.canlis.com/">Canlis</a> is a restaurant in Seattle&#8217;s Queen Anne neighborhood, overlooking Lake Union. The restaurant has been operating since 1950, when it was opened by Peter Canlis, and is run today by Mark and Brian Canlis, Peter&#8217;s grandchildren. Since its inception, Canlis has maintained a reputation of being among the fanciest restaurants in the area, as well as having exceptional food, presentation and service. Last Thursday I was able to check out this hallmark of the Seattle food scene with my friend and dance partner, Katie Clark. She had rather inflated my expectations of the restaurant by gushing positively about it in the hours leading up to our dinner reservation &#8212; but even then, I was impressed by the experience. </p>
<p>We arrived, all dressed up, shortly before our 8PM reservation. The valet took my car without giving me a ticket &#8212; one of the things the staff is known for is their ability to operate their valet service smoothly without such pedestrian aides as <em>tickets</em> &#8212; and we were promptly shown to our table. We were seated on the opposite side of the dining room from the main windows, and there was another party at a table between us and the view. However, the windows were large enough that we still were able to see out across Lake Union, and we were near the kitchen (which I always enjoy). </p>
<p>We were there for the three-course dinner offered as part of the <a href="http://seattlest.com/2010/04/16/seattle_restaurant_week_starts_sund.php">Seattle Restaurant Week</a> promotion, and since there were two of us and two options for each course we were able to experience everything on the menu. I carelessly left my phone in my car, so credit for all of these wonderful photos must go to the lovely Ms. Clark:<br />
<center><br />
<a href="http://www.flickr.com/photos/jpetrie/4832910340/" title="Canlis Salad by jpetrie, on Flickr"><img src="http://farm5.static.flickr.com/4133/4832910340_b869b10739_m.jpg" width="240" height="180" alt="Canlis Salad" /></a><br />
<a href="http://www.flickr.com/photos/jpetrie/4832910834/" title="Lamb and Tagliatelle by jpetrie, on Flickr"><img src="http://farm5.static.flickr.com/4125/4832910834_e9c3b1193f_m.jpg" width="240" height="180" alt="Lamb and Tagliatelle" /></a><br />
<a href="http://www.flickr.com/photos/jpetrie/4832910100/" title="Soup by jpetrie, on Flickr"><img src="http://farm5.static.flickr.com/4153/4832910100_aa16648c5e_m.jpg" width="180" height="240" alt="Soup" /></a><br />
<a href="http://www.flickr.com/photos/jpetrie/4832910600/" title="Seared Halibut by jpetrie, on Flickr"><img src="http://farm5.static.flickr.com/4109/4832910600_0a7bb9c4a5_m.jpg" width="180" height="240" alt="Seared Halibut" /></a><br />
<a href="http://www.flickr.com/photos/jpetrie/4832302227/" title="Shortcake by jpetrie, on Flickr"><img src="http://farm5.static.flickr.com/4127/4832302227_051f992f93_m.jpg" width="240" height="180" alt="Shortcake" /></a><br />
<a href="http://www.flickr.com/photos/jpetrie/4832911114/" title="Creme brulée by jpetrie, on Flickr"><img src="http://farm5.static.flickr.com/4088/4832911114_56a6352c22_m.jpg" width="240" height="180" alt="Creme brulée" /></a><br />
</center></p>
<p>A wine pairing was offered to accompany each dish; we both ordered it, but since I have a terrible memory for wine I couldn&#8217;t really tell you much about it. All of it was awesome, though, especially the dessert wine &#8212; which isn&#8217;t something I normally enjoy. The service was excellent, and the staff was attentive and responsive, very knowledgeable about the food and preparation. We only had to suffer through one minor delay, just before placing our order, but given how busy the dining room was that evening I was not terribly bothered and our server&#8217;s affable mood more than made up for it.</p>
<p>In addition to the items on the menu, we were served a small cup of gazpacho as an amuse bouche and pair of wonderful petit fours along with the coffee we had after dessert. Once the meal was concluded, our server took us on a quick tour of the restaurant, showing us the various private dining rooms that were not currently in use, and offering a lot of interesting information about the history of the Canlis family and the restaurant itself. At the conclusion of the tour, somebody was waiting with Katie&#8217;s coat and my car was ready outside. Impressive.</p>
<p>Despite the upscale dress code, ironed tablecloths, and general air of &#8220;fancy,&#8221; the atmosphere of the restaurant wasn&#8217;t stuffy &#8212; they take your dining experience seriously, but not so seriously as to make you worry about stepping out of line. You can get an idea of the attitude of the place by taking a look at the light humor on their <a href="http://www.canlis.com/about/qa.aspx">Q&#038;A page</a>.</p>
<p>I will definitely make the time to go again.</p>
]]></content:encoded>
			<wfw:commentRss>http://scientificninja.com/blog/canlis/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>C Strings Are Evil</title>
		<link>http://scientificninja.com/blog/c-strings-are-evil</link>
		<comments>http://scientificninja.com/blog/c-strings-are-evil#comments</comments>
		<pubDate>Wed, 28 Apr 2010 15:08:18 +0000</pubDate>
		<dc:creator>Josh Petrie</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[c++]]></category>
		<category><![CDATA[for-beginners]]></category>

		<guid isPermaLink="false">http://scientificninja.com/?p=924</guid>
		<description><![CDATA[GDNet community manager Washu has written about the perils of C-style strings for beginners (in C++). In his post, he covered a variety of excellent points, but he missed one of my favorites: C-style strings are not a type. A C-style string is just an interpretation of an actual type (a char*) that adds some [...]]]></description>
			<content:encoded><![CDATA[<p>GDNet community manager Washu <a href="http://scapecode.com/2010/04/is-it-really-a-bug-for-a-beginner-to-be-using-c-string-in-c/">has written about the perils of C-style strings for beginners</a> (in C++). In his post, he covered a variety of excellent points, but he missed one of my favorites: <em>C-style strings are not a type</em>.</p>
<p>A C-style string is just an interpretation of an actual type (a char*) that adds some additional semantics. These semantics are not enforced by the language, except implicitly and very poorly via some C library functions. This approach, which presumably grew out of the &#8220;pay for what you use&#8221; mentality, is a huge part of what makes C-style strings cumbersome and error-prone.</p>
]]></content:encoded>
			<wfw:commentRss>http://scientificninja.com/blog/c-strings-are-evil/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Thoughts on SlimDX 2: Object Lifetime</title>
		<link>http://scientificninja.com/blog/thoughts-on-slimdx-2-object-lifetime</link>
		<comments>http://scientificninja.com/blog/thoughts-on-slimdx-2-object-lifetime#comments</comments>
		<pubDate>Wed, 31 Mar 2010 02:14:32 +0000</pubDate>
		<dc:creator>Josh Petrie</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[com]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[refactoring]]></category>
		<category><![CDATA[slimdx]]></category>

		<guid isPermaLink="false">http://scientificninja.com/?p=866</guid>
		<description><![CDATA[This will likely be my last post on the subject of the major changes coming in SlimDX 2 for a little while. My last few posts have focused on issues we&#8217;re fairly certain will be relevant to the new API (as will this post) &#8212; but we don&#8217;t have everything planned out yet. We have [...]]]></description>
			<content:encoded><![CDATA[<p>This will likely be my last post on the subject of the major changes coming in SlimDX 2 for a little while. My last <a href="http://scientificninja.com/blog/thoughts-on-slimdx-2-interfaces">few</a> <a href="http://scientificninja.com/blog/thoughts-on-slimdx-2-assembly-design">posts</a> have focused on issues we&#8217;re fairly certain will be relevant to the new API (as will this post) &#8212; but we don&#8217;t have <em>everything</em> planned out yet. We have a few ideas we&#8217;d like to experiment with, but we&#8217;re going to have to take some time to prototype them and mess around before we can commit to any one solution. Indeed, there are even a few unanswered questions about the topic I&#8217;m going to talk about today.</p>
<p>That topic is how we&#8217;re not going to use IDisposable any longer.</p>
<p>More specifically, we&#8217;re not going to use it <em>as much</em>. Almost every SlimDX 1 object implements IDisposable, because IDisposable is all about cleaning up unmanaged resources and SlimDX objects are, for the most part, exactly that. But the sort of resources IDisposable is geared towards are those with very explicit lifetimes: you create it, do your thing, and then Dispose() of it. C# using-blocks allow you to implement this exact pattern for locally-held objects quite efficiently. </p>
<p>Long-time readers will recall that our IDisposable wrappers around COM objects have caused us a lot of trouble in the past, largely because the interface&#8217;s contract does not really jive with COM&#8217;s reference counting. To account for this, we implemented an object table based loosely on the same principles that the <a href="http://msdn.microsoft.com/en-us/library/8bwh56xe.aspx">.NET RCW</a> uses &#8212; specifically, we tried to maintain exactly one COM reference to any object known to SlimDX so that we could do the correct thing when Dispose() was called. This eventually led us to an overly-complicated system burdened with multiple creation code paths and inconsistent ownership semantics.</p>
<p>Our solution is to, essentially, side-step the issue entirely and just expose the reference counting directly. All SlimDX 2 objects that are backed by actual COM interfaces implement IComObject, which provides the familiar-looking methods AddReference() and Release(). For the trivial scenarios where you just want quick, scoped access to a COM object, we&#8217;ll be providing a simple IDisposable utility wrapper you can use in conjunction with a using-block to automatically drop the reference count when appropriate.</p>
<p>While it first might seem like this change is a step <em>backwards</em>, we think that it&#8217;s an improvement in the long run: it obviates the need for the exceedingly complex object ownership rules that existed with SlimDX 1 (which, we suspect, most of our users were getting wrong). Plus, it makes the SlimDX ownership semantics match those of the already-familiar native API.</p>
]]></content:encoded>
			<wfw:commentRss>http://scientificninja.com/blog/thoughts-on-slimdx-2-object-lifetime/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ada Lovelace Day 2010: Tess Ferrandez</title>
		<link>http://scientificninja.com/blog/ada-lovelace-day-2010-tess-ferrandez</link>
		<comments>http://scientificninja.com/blog/ada-lovelace-day-2010-tess-ferrandez#comments</comments>
		<pubDate>Wed, 24 Mar 2010 16:30:21 +0000</pubDate>
		<dc:creator>Josh Petrie</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[industry]]></category>

		<guid isPermaLink="false">http://scientificninja.com/?p=869</guid>
		<description><![CDATA[Today is March 24th: Ada Lovelace Day. I first heard about this event last year, via a co-worker&#8217;s blog, but it was too late at the time for me to come up with a contribution myself. As it stands, I almost missed this year, too! In any event, the purpose of Ada Lovelace Day is [...]]]></description>
			<content:encoded><![CDATA[<p>Today is March 24th: <a href="http://findingada.com/about/">Ada Lovelace Day</a>. I first heard about this event last year, via a <a href="http://www.acidforblood.net/2009/03/ada-lovelace-day-spotlight-on-paulina-bozek.html">co-worker&#8217;s blog</a>, but it was too late at the time for me to come up with a contribution myself. As it stands, I almost missed this year, too!</p>
<p>In any event, the purpose of Ada Lovelace Day is to write a post celebrating the achievements of women (or a particular woman) in the technology industry and thus, I would like to call out <a href="http://blogs.msdn.com/Tess/">Tess Ferrandez</a>, ASP.NET escalation engineer extraordinaire.</p>
<p>But this post isn&#8217;t about Ferrandez&#8217;s achievements in the domain of ASP.NET, specifically. Instead, this is about commending her for her work in educating the development community about debugging in the .NET environment. Ferrandez has been at Microsoft for more than a decade, working with .NET technology since it was in alpha, and offering her knowledge to the community at large through <a href="http://blogs.msdn.com/tess/archive/tags/Debugging/default.aspx">blog posts</a>, <a href="http://www.hanselminutes.com/default.aspx?showID=204">podcasts</a>, <a href="http://channel9.msdn.com/posts/Glucose/Hanselminutes-on-9-Debugging-Crash-Dumps-with-Tess-Ferrandez-and-VS2010/">interviews</a> and by <a href="http://www.msteched.com/europe/Public/FeaturedSpeakers.aspx">speaking at conferences</a>. She often discusses techniques for diagnosing obscure bugs or memory issues, providing great insight into the tools used or the systems affected &#8212; and she&#8217;s always informative, easy to follow, and extremely helpful.</p>
<p>I, personally, can attribute the entirety of my understanding of <a href="http://en.wikipedia.org/wiki/WinDbg">WinDbg</a> and <a href="http://msdn.microsoft.com/en-us/library/bb190764%28VS.80%29.aspx">SOS</a> <em>directly</em> to her, as well as a good portion of my understanding of the .NET internals. I am certainly not the only developer to have benefited from her work. So I want to congratulate you, Tess Ferrandez, on what I feel is the greatest achievement of all: teaching others through your own wisdom and experience.</p>
]]></content:encoded>
			<wfw:commentRss>http://scientificninja.com/blog/ada-lovelace-day-2010-tess-ferrandez/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
